Translate

terça-feira, 26 de novembro de 2024

Ansible : Quando um Programador Descobre que Automatizar 500 Servidores Manualmente é um Problema de Lógica — e Também de Sanidade

 

Bellacosa Mainframe apresenta o ansible

☕ Um Café no Bellacosa Mainframe

Ansible sem Mistérios para Programadores COBOL

Quando um Programador Descobre que Automatizar 500 Servidores Manualmente é um Problema de Lógica — e Também de Sanidade

No começo, havia o operador.

Depois veio o administrador de sistemas.

Em seguida, surgiu o programador COBOL, carregando um JCL debaixo do braço, uma caneca de café na mão e a saudável desconfiança de quem já viu um simples espaço em branco causar um desastre em produção.

Então alguém apresentou o Ansible.

— Com isso você pode administrar centenas de máquinas ao mesmo tempo.

O programador COBOL olhou para a tela, viu um arquivo YAML cheio de espaços e perguntou:

— E onde está a coluna 7?

Foi assim que começou esta viagem.

Este artigo é um guia para programadores COBOL iniciantes que desejam entender Ansible sem precisar abandonar tudo o que já aprenderam sobre lógica, processamento em lote, organização de programas, controle operacional e sobrevivência corporativa.

O Ansible pode parecer uma tecnologia completamente diferente do mainframe. Entretanto, quando observamos com cuidado, encontramos conceitos familiares:

  • inventários lembram catálogos de recursos;

  • Playbooks lembram JCLs ou procedimentos operacionais;

  • Roles lembram PROCs reutilizáveis;

  • módulos lembram programas utilitários;

  • variáveis lembram símbolos de JCL;

  • Handlers lembram rotinas executadas somente quando uma condição ocorre;

  • pipelines lembram cadeias de JOBs;

  • idempotência lembra uma operação projetada para não destruir o ambiente ao ser executada novamente.

A principal diferença é que o Ansible foi criado para administrar ambientes distribuídos: Linux, Windows, redes, Cloud, contêineres, APIs e até IBM Z.

Pegue sua toalha, sua caneca e, principalmente, não entre em pânico.


1. O que é Ansible?

Ansible é uma plataforma de automação de tecnologia da informação.

Ele pode ser usado para:

  • configurar servidores;

  • instalar softwares;

  • criar usuários;

  • publicar aplicações;

  • alterar arquivos;

  • administrar serviços;

  • executar comandos;

  • provisionar infraestrutura;

  • automatizar redes;

  • integrar ambientes de Cloud;

  • organizar pipelines;

  • executar operações em z/OS.

Em termos simples, o Ansible permite descrever aquilo que você deseja que aconteça em um ambiente.

Por exemplo:

Quero que o Nginx esteja instalado, iniciado e configurado para subir automaticamente.

Em vez de acessar manualmente cada servidor, o Ansible executa a operação em todas as máquinas definidas.

Considere uma empresa com 300 servidores Linux.

Sem automação, alguém poderia tentar:

Conectar no servidor 1
Instalar o pacote
Copiar o arquivo
Reiniciar o serviço

Conectar no servidor 2
Instalar o pacote
Copiar o arquivo
Reiniciar o serviço

Conectar no servidor 3...

No servidor 137, provavelmente surgiria uma interrupção, uma reunião, uma emergência ou um café particularmente interessante. A partir desse ponto, ninguém teria certeza de quais servidores foram atualizados.

Com Ansible, descrevemos a operação uma vez:

---
- name: Configurar servidores web
  hosts: webservers
  become: true

  tasks:
    - name: Garantir que o Nginx esteja instalado
      ansible.builtin.package:
        name: nginx
        state: present

    - name: Garantir que o Nginx esteja iniciado
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

O Ansible se conecta aos servidores, verifica a situação atual e executa apenas as mudanças necessárias.

Essa última parte é fundamental.


2. A ideia de estado desejado

Um script tradicional costuma dizer:

Execute este comando.

O Ansible normalmente diz:

Garanta que o recurso esteja neste estado.

Compare os dois exemplos.

Script imperativo

apt install nginx -y
systemctl start nginx
systemctl enable nginx

O script ordena ações.

Playbook declarativo

- name: Garantir que o Nginx esteja instalado
  ansible.builtin.apt:
    name: nginx
    state: present

- name: Garantir que o Nginx esteja iniciado e habilitado
  ansible.builtin.service:
    name: nginx
    state: started
    enabled: true

O Playbook descreve o resultado desejado.

Essa é uma das bases da chamada Infrastructure as Code, ou infraestrutura como código.

A configuração do ambiente deixa de existir apenas na memória do administrador e passa a ser representada por arquivos versionados, revisáveis e executáveis.

Em outras palavras, a documentação começa a trabalhar.

Uma raridade tão impressionante quanto encontrar uma impressora corporativa que funcione na primeira tentativa.


3. Agentless: o Ansible não exige um agente permanente

Uma das principais características do Ansible é sua arquitetura normalmente classificada como agentless.

Isso significa que, na maioria dos casos, não é necessário instalar um agente dedicado em cada máquina administrada.

O Ansible utiliza mecanismos já existentes.

Em Linux e Unix, geralmente:

SSH

Em Windows:

WinRM
PowerShell

Em equipamentos de rede:

SSH
APIs
NETCONF
HTTPAPI
CLI

Em z/OS, dependendo da Collection e da operação:

SSH
ZOAU
APIs
z/OSMF

O computador de onde o Ansible é executado recebe o nome de Control Node.

As máquinas administradas são chamadas de:

Managed Nodes

A arquitetura básica é:

              CONTROL NODE
                 Ansible
                    |
          -----------------------
          |          |          |
         SSH        SSH        SSH
          |          |          |
       Servidor1  Servidor2  Servidor3

O Control Node contém:

  • Ansible;

  • inventários;

  • Playbooks;

  • variáveis;

  • Roles;

  • Collections;

  • credenciais;

  • arquivos de configuração.

Os Managed Nodes recebem as tarefas.

Curiosidade importante

“Agentless” não significa que absolutamente nada seja necessário na máquina remota.

Muitos módulos para Linux dependem da presença de Python. Outros dispositivos utilizam APIs ou bibliotecas específicas. No z/OS, determinadas automações podem depender do Z Open Automation Utilities.

A ideia correta é:

Não existe normalmente um agente Ansible permanente funcionando em cada host.


4. Inventory: o mapa da galáxia

Antes de viajar, precisamos saber para onde estamos indo.

O Inventory é a lista dos sistemas que serão administrados pelo Ansible.

Um inventário simples no formato INI pode ser:

[webservers]
web01
web02
web03

[databases]
db01
db02

Também podemos usar YAML:

---
all:
  children:
    webservers:
      hosts:
        web01:
        web02:
        web03:

    databases:
      hosts:
        db01:
        db02:

Os grupos permitem executar tarefas em conjuntos específicos.

Exemplo:

ansible webservers -m ping

Somente os servidores do grupo webservers serão testados.

Variáveis no inventário

Podemos informar endereços e usuários:

---
all:
  children:
    webservers:
      hosts:
        web01:
          ansible_host: 192.168.10.11

        web02:
          ansible_host: 192.168.10.12

      vars:
        ansible_user: automation
        ansible_port: 22

O nome web01 funciona como uma identidade lógica.

O endereço real está em:

ansible_host: 192.168.10.11

Isso é semelhante à diferença entre um nome simbólico e o recurso físico correspondente.


5. Inventário estático e inventário dinâmico

Um inventário estático é escrito manualmente.

Ele funciona bem quando os servidores mudam pouco.

Entretanto, ambientes modernos podem crescer e diminuir automaticamente.

Em uma Cloud, hoje podemos ter 40 máquinas. Amanhã, 120. Depois de amanhã, 17, porque algum gerente finalmente percebeu a conta.

Para esses ambientes existe o Dynamic Inventory.

O Ansible consulta uma fonte externa, como:

  • AWS;

  • Azure;

  • Google Cloud;

  • VMware;

  • OpenStack;

  • IBM Cloud;

  • CMDB;

  • ServiceNow;

  • scripts;

  • APIs internas.

O inventário é gerado em tempo de execução.

Assim, não precisamos editar manualmente o arquivo sempre que uma máquina nasce, muda ou desaparece no grande buraco negro do autoscaling.


6. Comandos Ad-Hoc

Os comandos Ad-Hoc são úteis para operações rápidas.

Por exemplo, testar conectividade:

ansible all -m ping

É importante observar que o módulo ping do Ansible não é o mesmo comando ICMP tradicional.

Ele verifica se o Ansible consegue:

  • conectar;

  • autenticar;

  • executar um módulo;

  • receber uma resposta.

Podemos consultar o uptime:

ansible all -m command -a "uptime"

Consultar espaço em disco:

ansible all -m shell -a "df -h"

Copiar um arquivo:

ansible all \
  -m copy \
  -a "src=aviso.txt dest=/tmp/aviso.txt"

Reiniciar um serviço:

ansible webservers \
  -m service \
  -a "name=nginx state=restarted" \
  --become

Os comandos Ad-Hoc são excelentes para diagnóstico e intervenções pontuais.

Porém, se uma operação precisa ser:

  • repetida;

  • auditada;

  • versionada;

  • revisada;

  • executada novamente no futuro;

ela provavelmente deve virar um Playbook.


7. Playbooks: o JCL da automação distribuída

Um Playbook é um arquivo YAML que descreve uma ou mais automações.

Para um programador COBOL, podemos fazer uma analogia aproximada:

JCL define uma execução em mainframe.
Playbook define uma automação em um conjunto de hosts.

Um Playbook básico:

---
- name: Configurar servidores de aplicação
  hosts: appservers
  become: true

  tasks:
    - name: Instalar Java
      ansible.builtin.package:
        name: java-17-openjdk
        state: present

    - name: Criar diretório da aplicação
      ansible.builtin.file:
        path: /opt/minha-app
        state: directory
        owner: app
        group: app
        mode: "0750"

Os principais elementos são:

name:
hosts:
become:
vars:
tasks:
handlers:
roles:

name

É a descrição do Play ou da tarefa.

name: Instalar Java

Escolha nomes claros. Quando algo falhar às três da manhã, “Executar coisa” não será uma descrição reconfortante.

hosts

Define os alvos:

hosts: appservers

become

Solicita elevação de privilégio:

become: true

É semelhante ao uso de sudo.

tasks

Contém as tarefas a executar.


8. YAML: o universo onde os espaços têm poder

YAML é uma linguagem de serialização de dados muito utilizada em automação.

Ela é legível, mas possui uma característica inquietante:

A indentação faz parte da estrutura.

Exemplo correto:

tasks:
  - name: Instalar Nginx
    ansible.builtin.package:
      name: nginx
      state: present

Exemplo incorreto:

tasks:
  - name: Instalar Nginx
      ansible.builtin.package:
    name: nginx

Para quem conhece COBOL, isso não deveria causar tanto choque. Afinal, fomos treinados por décadas a respeitar colunas, níveis, pontos e estruturas.

Regras práticas

Use espaços, não TAB.

Mantenha uma indentação consistente, normalmente dois espaços.

Inicie arquivos com:

---

Use aspas quando um valor puder ser interpretado incorretamente:

mode: "0644"

Valide a sintaxe:

ansible-playbook playbook.yml --syntax-check

Use análise de qualidade:

ansible-lint playbook.yml

Easter egg para veteranos

YAML significa originalmente “Yet Another Markup Language”.

Posteriormente, o significado passou a ser “YAML Ain’t Markup Language”, uma sigla recursiva.

Ou seja, a própria linguagem entrou em uma discussão existencial sobre o que ela é. Algo perfeitamente normal no universo da tecnologia.


9. Módulos: os utilitários do Ansible

Os módulos são unidades de trabalho.

Exemplos:

package
apt
dnf
copy
template
file
user
group
service
systemd
uri
command
shell
debug
assert
fail

Um módulo realiza uma operação específica.

Exemplo:

- name: Criar usuário
  ansible.builtin.user:
    name: vagner
    state: present
    shell: /bin/bash

A forma totalmente qualificada:

ansible.builtin.user

é chamada de FQCN, ou Fully Qualified Collection Name.

Ela mostra exatamente de onde vem o módulo.

Isso evita ambiguidades entre módulos com nomes semelhantes.

command ou shell?

command executa diretamente um programa:

- name: Consultar uptime
  ansible.builtin.command:
    cmd: uptime

shell executa por meio de um shell:

- name: Procurar processo
  ansible.builtin.shell:
    cmd: "ps -ef | grep nginx"

Use shell apenas quando precisar de:

  • pipes;

  • redirecionamento;

  • curingas;

  • expansão de variáveis;

  • operadores como &&.

Sempre que existir um módulo específico, prefira o módulo.

Ruim:

- name: Criar usuário
  ansible.builtin.shell:
    cmd: useradd vagner

Melhor:

- name: Garantir que o usuário exista
  ansible.builtin.user:
    name: vagner
    state: present

10. Idempotência: executar novamente sem destruir o universo

Idempotência é uma das palavras centrais no Ansible.

Uma operação idempotente produz o mesmo estado final mesmo quando executada várias vezes.

Considere:

- name: Garantir que o diretório exista
  ansible.builtin.file:
    path: /opt/app
    state: directory

Na primeira execução:

Diretório não existe.
Ansible cria.
Resultado: changed

Na segunda:

Diretório já existe.
Nenhuma alteração.
Resultado: ok

Na terceira:

Continua existindo.
Resultado: ok

Esse comportamento é vital em automação.

Um Playbook não deve depender da esperança de que alguém se lembre se ele já foi executado.

Analogia com COBOL

Imagine um programa batch que recebe um arquivo e insere registros sem verificar duplicidade.

Executá-lo duas vezes pode produzir registros duplicados.

Um processamento idempotente verifica se o dado já existe ou utiliza uma chave que impede duplicação.

No Ansible, os módulos são projetados para verificar o estado antes de agir.


11. Variáveis

Variáveis tornam os Playbooks flexíveis.

vars:
  package_name: nginx
  service_name: nginx
  http_port: 80

Uso:

- name: Instalar pacote
  ansible.builtin.package:
    name: "{{ package_name }}"
    state: present

As chaves duplas:

{{ package_name }}

indicam uma expressão Jinja2.

Variáveis podem vir de diversos lugares:

  • Playbook;

  • Inventory;

  • group_vars;

  • host_vars;

  • Role;

  • linha de comando;

  • arquivos externos;

  • facts;

  • Vault.

group_vars e host_vars

Variáveis para um grupo:

group_vars/webservers.yml
---
http_port: 8080
package_name: nginx

Variáveis para um host:

host_vars/web01.yml
---
http_port: 9090

O host web01 poderá usar um valor específico.


12. Facts: o Ansible investigando o sistema

Facts são informações coletadas dos hosts.

Exemplos:

  • hostname;

  • sistema operacional;

  • versão;

  • kernel;

  • CPU;

  • memória;

  • interfaces;

  • endereços IP;

  • discos;

  • arquitetura.

Podemos visualizar facts:

ansible all -m setup

No Playbook:

- name: Mostrar distribuição
  ansible.builtin.debug:
    msg: "Sistema: {{ ansible_facts['distribution'] }}"

Podemos tomar decisões:

- name: Instalar Apache em sistemas Red Hat
  ansible.builtin.dnf:
    name: httpd
    state: present
  when: ansible_facts['os_family'] == 'RedHat'

Outro exemplo:

- name: Instalar Apache em Debian
  ansible.builtin.apt:
    name: apache2
    state: present
  when: ansible_facts['os_family'] == 'Debian'

Facts permitem escrever Playbooks adaptáveis.

Entretanto, coletar facts possui custo.

Quando não forem necessários:

gather_facts: false

Em milhares de máquinas, evitar uma coleta desnecessária pode economizar bastante tempo.


13. Condicionais

A cláusula when decide se uma tarefa será executada.

- name: Reiniciar serviço somente em produção
  ansible.builtin.service:
    name: app
    state: restarted
  when: environment == "production"

Verificar se uma variável existe:

when: app_port is defined

Verificar se não existe:

when: app_port is not defined

Comparação numérica:

when: free_space_mb | int < 1000

Para quem vem do COBOL:

IF condição
    EXECUTE tarefa
END-IF

No Ansible:

when: condição

O princípio é o mesmo. Apenas trocaram o END-IF por uma indentação que observa você em silêncio.


14. Loops

Loops repetem tarefas.

- name: Instalar pacotes
  ansible.builtin.package:
    name: "{{ item }}"
    state: present
  loop:
    - nginx
    - git
    - curl

Para um programador COBOL, isso lembra:

PERFORM VARYING WS-I FROM 1 BY 1
    UNTIL WS-I > 3

Podemos trabalhar com estruturas:

- name: Criar usuários
  ansible.builtin.user:
    name: "{{ item.name }}"
    groups: "{{ item.groups }}"
    state: present

  loop:
    - name: ana
      groups: developers

    - name: bruno
      groups: operations

    - name: carla
      groups: auditors

Cada item possui propriedades.


15. Register: guardando o resultado

A palavra register armazena o resultado de uma tarefa.

- name: Consultar espaço em disco
  ansible.builtin.command:
    cmd: df -P /opt
  register: disk_result
  changed_when: false

Depois:

- name: Mostrar saída
  ansible.builtin.debug:
    var: disk_result.stdout

Um resultado pode conter:

stdout
stderr
rc
changed
failed
results

Podemos reagir ao código de retorno:

- name: Falhar quando o comando retornar erro
  ansible.builtin.fail:
    msg: "A verificação falhou."
  when: disk_result.rc != 0

Essa lógica é familiar para qualquer pessoa que já analisou RETURN-CODE, MAXCC, SQLCODE ou um ABEND que decidiu surgir cinco minutos antes do fim do expediente.


16. Handlers: agir apenas quando algo mudou

Handlers são tarefas executadas quando notificadas por outra tarefa.

Exemplo:

tasks:
  - name: Publicar configuração do Nginx
    ansible.builtin.template:
      src: nginx.conf.j2
      dest: /etc/nginx/nginx.conf
    notify: Reiniciar Nginx

handlers:
  - name: Reiniciar Nginx
    ansible.builtin.service:
      name: nginx
      state: restarted

O Handler somente será acionado quando o arquivo for alterado.

Se não houver mudança:

Nenhum restart.

Se dez tarefas notificarem o mesmo Handler:

O Handler normalmente executa uma vez ao final do Play.

Isso evita reinicializações desnecessárias.

Analogia

Imagine dez etapas atualizando parâmetros de uma aplicação.

Sem Handler:

Altera parâmetro.
Reinicia.

Altera outro parâmetro.
Reinicia.

Altera certificado.
Reinicia.

Com Handler:

Executa todas as alterações.
Reinicia uma vez.

Menos indisponibilidade, menos risco e menos oportunidades para o servidor desenvolver personalidade própria.


17. Tags

Tags permitem executar partes específicas do Playbook.

- name: Instalar aplicação
  ansible.builtin.package:
    name: minha-app
    state: present
  tags:
    - install
    - application

Execução:

ansible-playbook site.yml --tags install

Pular tarefas:

ansible-playbook site.yml --skip-tags debug

Tags são úteis para:

  • manutenção;

  • instalação;

  • configuração;

  • validação;

  • depuração;

  • operações seletivas.

Porém, use com cuidado.

Executar apenas uma etapa pode ignorar dependências anteriores.

Um Playbook deve continuar coerente mesmo quando dividido por tags.


18. Roles: organizando a automação

Quando um Playbook cresce, ele pode virar uma criatura de milhares de linhas que ninguém deseja encontrar em um corredor escuro.

Roles resolvem esse problema.

Uma Role organiza arquivos por finalidade:

roles/
└── webserver/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── defaults/
    │   └── main.yml
    ├── vars/
    │   └── main.yml
    ├── templates/
    ├── files/
    ├── meta/
    │   └── main.yml
    └── README.md

Diretórios principais

tasks contém as tarefas.

handlers contém os Handlers.

defaults contém variáveis padrão de baixa precedência.

vars contém variáveis da Role.

templates contém arquivos Jinja2.

files contém arquivos estáticos.

meta pode declarar dependências.

Uso:

---
- name: Configurar servidores web
  hosts: webservers
  become: true

  roles:
    - common
    - security
    - webserver

Analogia com mainframe

Uma Role pode ser comparada a uma PROC ou componente reutilizável.

Em vez de repetir passos em todos os Playbooks, centralizamos a lógica.


19. Templates e Jinja2

Templates permitem gerar arquivos diferentes para cada máquina.

Exemplo:

server {
    listen {{ http_port }};
    server_name {{ inventory_hostname }};

    location / {
        proxy_pass http://127.0.0.1:{{ app_port }};
    }
}

O arquivo pode ser chamado:

nginx.conf.j2

A tarefa:

- name: Gerar configuração
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: /etc/nginx/conf.d/app.conf
    owner: root
    group: root
    mode: "0644"
  notify: Recarregar Nginx

O mesmo template produz configurações diferentes com base nas variáveis de cada host.

Condicionais no template

{% if environment == "production" %}
log_level error;
{% else %}
log_level debug;
{% endif %}

Loops no template

{% for server in backend_servers %}
server {{ server }};
{% endfor %}

Filtros

{{ app_name | upper }}
{{ user_name | lower }}
{{ value | default('desconhecido') }}

Jinja2 transforma dados em arquivos de configuração.

É como uma combinação de STRING, edição de relatórios, geração de parâmetros e um toque de magia burocrática.


20. Ansible Vault

Nunca grave senhas diretamente no Playbook.

Não faça isto:

db_password: admin123

Também não faça isto seguido da frase:

Depois eu removo.

Essa frase é uma das principais causas de segredos permanentes em repositórios.

O Ansible Vault criptografa arquivos ou variáveis.

Criar arquivo:

ansible-vault create secrets.yml

Criptografar arquivo existente:

ansible-vault encrypt secrets.yml

Editar:

ansible-vault edit secrets.yml

Visualizar:

ansible-vault view secrets.yml

Executar Playbook:

ansible-playbook site.yml --ask-vault-pass

Também podemos usar um arquivo de senha controlado:

ansible-playbook site.yml \
  --vault-password-file /caminho/protegido/vault.pass

Segurança adicional

Em tarefas que manipulam segredos:

- name: Configurar credencial
  ansible.builtin.debug:
    msg: "{{ db_password }}"
  no_log: true

O no_log impede a exibição do conteúdo sensível.

Entretanto, ele também reduz informações de diagnóstico. Use somente onde necessário.

Vault não resolve tudo

Ainda é necessário controlar:

  • quem possui a senha;

  • rotação de credenciais;

  • segregação entre ambientes;

  • auditoria;

  • armazenamento seguro;

  • acesso da pipeline.

Em ambientes maiores, podem ser usados:

  • HashiCorp Vault;

  • CyberArk;

  • AWS Secrets Manager;

  • Azure Key Vault;

  • IBM Cloud Secrets Manager;

  • credenciais protegidas do Jenkins;

  • Ansible Automation Platform Credentials.


21. Tratamento de erros com Block, Rescue e Always

Ansible possui uma estrutura semelhante ao tratamento de exceções.

- name: Atualizar aplicação
  block:
    - name: Publicar nova versão
      ansible.builtin.copy:
        src: app.jar
        dest: /opt/app/app.jar

    - name: Reiniciar aplicação
      ansible.builtin.service:
        name: app
        state: restarted

  rescue:
    - name: Restaurar versão anterior
      ansible.builtin.copy:
        src: app.jar.backup
        dest: /opt/app/app.jar

    - name: Informar falha
      ansible.builtin.debug:
        msg: "Falha detectada. Rollback executado."

  always:
    - name: Registrar encerramento
      ansible.builtin.debug:
        msg: "Processo de atualização encerrado."

block contém a operação principal.

rescue executa quando uma tarefa do bloco falha.

always executa independentemente do resultado.

Outros controles

Ignorar erro:

ignore_errors: true

Use com extrema cautela.

Definir falha personalizada:

failed_when: disk_result.rc != 0

Definir mudança personalizada:

changed_when: false

Retry:

- name: Aguardar aplicação responder
  ansible.builtin.uri:
    url: http://localhost:8080/health
    status_code: 200
  register: health
  retries: 10
  delay: 5
  until: health.status == 200

Isso tenta até dez vezes, aguardando cinco segundos entre as tentativas.


22. Ansible Galaxy e Collections

Ansible Galaxy é um catálogo de conteúdo reutilizável.

Podemos encontrar:

  • Roles;

  • Collections;

  • módulos;

  • plugins;

  • exemplos;

  • documentação.

Instalar uma Role:

ansible-galaxy role install geerlingguy.nginx

Instalar uma Collection:

ansible-galaxy collection install community.general

Uma Collection agrupa diferentes tipos de conteúdo.

Exemplos:

community.general
ansible.posix
amazon.aws
azure.azcollection
community.vmware
ibm.ibm_zos_core

Role versus Collection

Role:

Automação organizada para uma finalidade.

Collection:

Pacote maior contendo módulos, plugins, Roles, documentação e outros recursos.

requirements.yml

Dependências devem ser declaradas:

---
collections:
  - name: community.general
    version: 10.4.0

  - name: ansible.posix
    version: 1.6.2

roles:
  - name: geerlingguy.nginx
    version: 3.2.0

Instalação:

ansible-galaxy install -r requirements.yml

Fixar versões aumenta a previsibilidade.

Sem isso, uma atualização externa pode transformar uma pipeline estável em uma aventura filosófica sobre compatibilidade.

Cuidado com conteúdo externo

Antes de usar uma Role ou Collection, avalie:

  • autor;

  • reputação;

  • documentação;

  • atualização;

  • testes;

  • código;

  • licenciamento;

  • versões suportadas;

  • dependências;

  • permissões exigidas.

Não execute conteúdo desconhecido com privilégios administrativos apenas porque ele possui um ícone simpático.


23. Estrutura profissional de projeto

Um projeto organizado pode ter:

ansible-project/
├── ansible.cfg
├── requirements.yml
├── README.md
├── inventories/
│   ├── dev/
│   │   ├── hosts.yml
│   │   └── group_vars/
│   ├── test/
│   │   ├── hosts.yml
│   │   └── group_vars/
│   └── prod/
│       ├── hosts.yml
│       └── group_vars/
├── playbooks/
│   ├── site.yml
│   ├── deploy.yml
│   └── rollback.yml
├── roles/
│   ├── common/
│   ├── security/
│   ├── webserver/
│   └── application/
├── templates/
└── files/

Essa estrutura separa:

  • ambientes;

  • código;

  • configurações;

  • dados;

  • dependências;

  • documentação.

Dica

Nunca misture produção e desenvolvimento no mesmo inventário sem uma razão extremamente boa, três aprovações e talvez a presença de um adulto responsável.


24. Boas práticas

Use módulos idempotentes

Prefira:

ansible.builtin.user
ansible.builtin.package
ansible.builtin.service
ansible.builtin.copy

em vez de comandos arbitrários.

Utilize FQCN

Prefira:

ansible.builtin.copy

em vez de:

copy

Escreva nomes claros

Ruim:

- name: Fazer ajuste

Melhor:

- name: Publicar configuração TLS do portal corporativo

Valide arquivos antes de substituir

- name: Publicar configuração do Nginx
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    validate: "nginx -t -c %s"

O Ansible valida o arquivo antes de colocá-lo em produção.

Use privilégio mínimo

Evite aplicar:

become: true

em tudo quando apenas algumas tarefas precisam de privilégios.

Documente

Mantenha um README.md com:

  • finalidade;

  • requisitos;

  • variáveis;

  • exemplos;

  • dependências;

  • procedimento de execução;

  • rollback;

  • responsáveis.

Teste antes da produção

Use:

ansible-playbook site.yml --syntax-check

Depois:

ansible-playbook site.yml --check --diff

Por fim, execute em um ambiente de teste.

O modo Check ajuda, mas não é perfeito. Nem todos os módulos simulam integralmente as mudanças.


25. Desempenho

Facts

Desative quando não forem necessários:

gather_facts: false

Forks

Em ansible.cfg:

[defaults]
forks = 30

Isso controla quantos hosts podem ser processados paralelamente.

Aumentar o número pode acelerar a execução, mas também pode:

  • sobrecarregar o Control Node;

  • saturar a rede;

  • sobrecarregar APIs;

  • atingir limites dos servidores;

  • aumentar o impacto de uma falha.

SSH Multiplexing

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
pipelining = True

Isso permite reutilizar conexões SSH.

Serial

Atualize grupos menores:

- name: Atualização gradual
  hosts: webservers
  serial: 5

O Ansible processa cinco servidores por vez.

Essa estratégia é importante em produção.


26. Git, Jenkins e Ansible

Um fluxo DevOps comum é:

Desenvolvedor altera código
        ↓
Git recebe a mudança
        ↓
Pull Request é revisado
        ↓
Jenkins inicia a pipeline
        ↓
Sintaxe é validada
        ↓
Lint é executado
        ↓
Playbook é testado
        ↓
Ansible executa o deploy
        ↓
Resultado é registrado

Git armazena e versiona.

Jenkins coordena.

Ansible executa.

Podemos resumir assim:

Git       = fonte oficial
Jenkins   = maestro
Ansible   = executor
Inventory = mapa
Playbook  = plano operacional

Exemplo de pipeline

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git url: 'https://git.example/ansible.git'
            }
        }

        stage('Syntax Check') {
            steps {
                sh '''
                  ansible-playbook \
                    playbooks/deploy.yml \
                    --syntax-check
                '''
            }
        }

        stage('Lint') {
            steps {
                sh 'ansible-lint playbooks/deploy.yml'
            }
        }

        stage('Dry Run') {
            steps {
                sh '''
                  ansible-playbook \
                    -i inventories/test/hosts.yml \
                    playbooks/deploy.yml \
                    --check --diff
                '''
            }
        }

        stage('Deploy') {
            steps {
                sh '''
                  ansible-playbook \
                    -i inventories/prod/hosts.yml \
                    playbooks/deploy.yml \
                    --serial 2
                '''
            }
        }
    }
}

27. Rolling Update

Em produção, raramente devemos atualizar todos os servidores de uma vez.

Um fluxo seguro pode ser:

  1. retirar servidor do balanceador;

  2. parar aplicação;

  3. instalar versão;

  4. iniciar aplicação;

  5. testar saúde;

  6. recolocar servidor;

  7. avançar para o próximo.

Exemplo:

---
- name: Atualização gradual
  hosts: webservers
  serial: 1
  become: true

  pre_tasks:
    - name: Retirar host do balanceador
      ansible.builtin.uri:
        url: "https://lb.example/api/remove/{{ inventory_hostname }}"
        method: POST
      delegate_to: localhost

  tasks:
    - name: Publicar aplicação
      ansible.builtin.copy:
        src: app.jar
        dest: /opt/app/app.jar
      notify: Reiniciar aplicação

  handlers:
    - name: Reiniciar aplicação
      ansible.builtin.service:
        name: app
        state: restarted

  post_tasks:
    - name: Aguardar aplicação responder
      ansible.builtin.uri:
        url: "http://{{ inventory_hostname }}:8080/health"
        status_code: 200
      register: health
      retries: 10
      delay: 5
      until: health.status == 200

    - name: Recolocar host no balanceador
      ansible.builtin.uri:
        url: "https://lb.example/api/add/{{ inventory_hostname }}"
        method: POST
      delegate_to: localhost

Isso é uma implantação controlada, não uma aposta coletiva.


28. Troubleshooting: quando a nave não responde

Erro de YAML

Valide:

ansible-playbook site.yml --syntax-check

Use:

ansible-lint site.yml

Problemas de inventário

Mostrar estrutura:

ansible-inventory \
  -i inventories/prod/hosts.yml \
  --graph

Mostrar host:

ansible-inventory \
  -i inventories/prod/hosts.yml \
  --host web01

Listar hosts:

ansible webservers \
  -i inventories/prod/hosts.yml \
  --list-hosts

Problemas de SSH

ansible all -m ping -vvv

Verifique:

  • endereço;

  • DNS;

  • porta;

  • usuário;

  • chave;

  • senha;

  • firewall;

  • Python remoto;

  • sudo;

  • jump host;

  • host key.

Erros de permissão

Use become quando necessário:

become: true

Mas também investigue:

  • dono;

  • grupo;

  • modo;

  • ACL;

  • SELinux;

  • AppArmor;

  • filesystem somente leitura;

  • espaço em disco.

Nem todo Permission denied é resolvido adicionando mais privilégio. Às vezes isso apenas transforma um pequeno erro em um erro com autoridade.

Debug

- name: Mostrar variável
  ansible.builtin.debug:
    var: minha_variavel

Limitar execução

ansible-playbook site.yml --limit web01

Verbosidade

ansible-playbook site.yml -v
ansible-playbook site.yml -vv
ansible-playbook site.yml -vvv
ansible-playbook site.yml -vvvv

Quanto mais letras v, mais detalhes.

Eventualmente você descobrirá informações que não sabia que existiam e algumas que preferiria continuar não sabendo.


29. Precedência de variáveis

Ansible pode receber a mesma variável de diversos lugares.

Por exemplo:

defaults da Role
Inventory
group_vars
host_vars
facts
Playbook
task
set_fact
extra-vars

Quando vários lugares definem o mesmo nome, uma regra de precedência decide qual valor vence.

Linha de comando:

ansible-playbook site.yml -e "http_port=9090"

extra-vars possui precedência elevada.

Isso é útil, mas pode causar resultados inesperados.

Para descobrir o valor:

- name: Exibir porta
  ansible.builtin.debug:
    var: http_port

Para inspecionar variáveis de um host:

ansible-inventory \
  -i inventory.yml \
  --host web01

Dica

Evite reutilizar o mesmo nome de variável em muitos níveis.

Um nome claro reduz conflitos:

webserver_http_port
database_connection_port
application_health_port

30. Ansible no IBM Z

Ansible também pode automatizar z/OS.

Uma Collection importante é:

ibm.ibm_zos_core

Ela permite trabalhar, dependendo do ambiente e da configuração, com operações como:

  • datasets;

  • membros de PDS e PDSE;

  • USS;

  • JCL;

  • JOBs;

  • comandos;

  • cópia de arquivos;

  • encode e decode;

  • módulos específicos de z/OS.

Exemplo: submeter JCL

---
- name: Executar JOB no z/OS
  hosts: zos
  gather_facts: false

  tasks:
    - name: Submeter JCL de compilação
      ibm.ibm_zos_core.zos_job_submit:
        src: USER.JCL(COMPILE)
        location: data_set
        wait_time_s: 60
        return_output: true
      register: job_result

    - name: Mostrar resultado
      ansible.builtin.debug:
        var: job_result

Validar retorno

- name: Interromper se o retorno for maior que 4
  ansible.builtin.fail:
    msg: "Compilação COBOL falhou."
  when:
    - job_result.jobs is defined
    - job_result.jobs | length > 0
    - job_result.jobs[0].ret_code.code | int > 4

Possível pipeline COBOL

Código COBOL alterado
        ↓
Commit no Git
        ↓
Jenkins inicia pipeline
        ↓
Ansible envia fontes
        ↓
Ansible submete JCL
        ↓
Compilação é monitorada
        ↓
Return Code é validado
        ↓
Testes são executados
        ↓
LOADLIB é promovida
        ↓
CICS é atualizado

O Ansible não substitui COBOL, JCL, Db2, CICS ou z/OS.

Ele coordena e automatiza tarefas ao redor deles.


31. Ansible, COBOL e a arte de pensar em processos

O programador COBOL possui uma vantagem inesperada ao aprender Ansible.

COBOL ensina:

  • organização;

  • clareza;

  • processamento determinístico;

  • controle de retorno;

  • separação de responsabilidades;

  • atenção ao formato;

  • preocupação com reinício;

  • auditabilidade;

  • tratamento de erros;

  • previsibilidade operacional.

Essas qualidades são essenciais em automação.

Um bom Playbook precisa ser:

Legível
Repetível
Idempotente
Testável
Versionado
Auditável
Seguro
Recuperável

Em outras palavras, Ansible moderno precisa exatamente da disciplina que os ambientes mainframe cultivam há décadas.

A indústria às vezes apresenta infraestrutura como código como uma descoberta revolucionária.

O programador mainframe olha para JCLs, PROCs, parâmetros, bibliotecas controladas e processamento automatizado e pensa:

Interessante. Agora colocaram YAML.


32. Perguntas comuns de entrevistas

O que é Ansible?

Ansible é uma plataforma de automação usada para configuração, implantação, provisionamento e orquestração. Normalmente utiliza SSH ou mecanismos remotos semelhantes e descreve automações em Playbooks YAML.

Por que é agentless?

Porque normalmente não exige um agente Ansible permanente nos hosts administrados. Utiliza SSH, WinRM, APIs ou conexões específicas.

Inventory e Playbook são iguais?

Não.

Inventory informa onde executar.

Playbook informa o que executar.

Módulo e Role são iguais?

Não.

Módulo executa uma operação específica.

Role organiza uma automação completa e reutilizável.

command e shell são iguais?

Não.

command executa diretamente um programa.

shell passa o comando por um shell, permitindo pipes e redirecionamentos.

Variáveis e facts são iguais?

Variáveis são valores definidos ou recebidos.

Facts são informações coletadas dos hosts.

O que é Vault?

É o recurso de criptografia de dados sensíveis do Ansible.

O que são Handlers?

São tarefas executadas quando notificadas, normalmente em resposta a uma mudança.

O que é idempotência?

É a propriedade de atingir o mesmo estado final mesmo quando a automação é executada repetidamente.


33. Laboratório inicial passo a passo

Passo 1 — Instalar Ansible

Em distribuições baseadas em Debian ou Ubuntu:

sudo apt update
sudo apt install ansible -y

Validar:

ansible --version

Passo 2 — Criar diretório

mkdir -p ~/ansible-lab
cd ~/ansible-lab

Passo 3 — Criar inventário

# inventory.ini

[local]
localhost ansible_connection=local

Passo 4 — Testar

ansible all -i inventory.ini -m ping

Resultado esperado:

localhost | SUCCESS

Passo 5 — Criar Playbook

# primeiro-playbook.yml
---
- name: Primeiro laboratório Ansible
  hosts: local
  gather_facts: true

  tasks:
    - name: Mostrar sistema operacional
      ansible.builtin.debug:
        msg: >
          Estou executando em
          {{ ansible_facts['distribution'] }}
          {{ ansible_facts['distribution_version'] }}

    - name: Criar diretório de laboratório
      ansible.builtin.file:
        path: /tmp/ansible-lab
        state: directory
        mode: "0755"

    - name: Criar arquivo
      ansible.builtin.copy:
        dest: /tmp/ansible-lab/mensagem.txt
        content: |
          Não entre em pânico.
          O Ansible chegou até aqui.
        mode: "0644"

Passo 6 — Verificar sintaxe

ansible-playbook \
  -i inventory.ini \
  primeiro-playbook.yml \
  --syntax-check

Passo 7 — Simular

ansible-playbook \
  -i inventory.ini \
  primeiro-playbook.yml \
  --check --diff

Passo 8 — Executar

ansible-playbook \
  -i inventory.ini \
  primeiro-playbook.yml

Passo 9 — Executar novamente

ansible-playbook \
  -i inventory.ini \
  primeiro-playbook.yml

Na primeira execução, algumas tarefas terão:

changed

Na segunda, deverão retornar:

ok

Você acabou de observar idempotência funcionando.


34. Curiosidades e Easter Eggs

O nome Ansible

O termo “ansible” ficou conhecido na ficção científica como um dispositivo de comunicação instantânea entre grandes distâncias.

O nome combina bem com uma ferramenta que envia instruções para sistemas remotos.

A maioria dos problemas não está no YAML

Quando um Playbook falha, o instinto inicial é culpar a indentação.

Muitas vezes o verdadeiro problema é:

  • DNS;

  • SSH;

  • permissão;

  • variável;

  • pacote inexistente;

  • caminho incorreto;

  • serviço com outro nome;

  • Python ausente;

  • firewall;

  • sistema operacional diferente.

Ou, como diria um operador veterano:

O erro está exatamente onde o sistema disse que está, exceto quando não está.

changed não significa necessariamente sucesso funcional

Uma tarefa pode alterar um arquivo corretamente e ainda assim produzir uma configuração inválida para a aplicação.

Por isso, use:

  • validate;

  • testes;

  • health checks;

  • asserts;

  • rollback;

  • ambiente de homologação.

Automação ruim automatiza erros

Se um procedimento manual ruim for transformado em código sem revisão, teremos apenas um erro mais rápido, mais consistente e capaz de atingir centenas de máquinas simultaneamente.

A automação amplifica competência.

Infelizmente, também amplifica incompetência.

A resposta para tudo não é 42

Em Ansible, frequentemente é:

--check --diff -vvv

Não resolve tudo, mas oferece boas pistas.


35. O verdadeiro salto mental

O aprendiz pergunta:

Qual comando devo usar?

O profissional pergunta:

Qual estado desejo garantir?

O aprendiz escreve:

shell: systemctl restart nginx

O profissional pergunta:

Por que reiniciar? Houve mudança? Posso validar antes? Posso recarregar em vez de reiniciar?

O aprendiz cria um Playbook para funcionar uma vez.

O profissional cria uma automação para:

  • executar repetidamente;

  • falhar com clareza;

  • registrar evidências;

  • preservar segurança;

  • limitar impacto;

  • permitir rollback;

  • ser compreendida por outra pessoa.

Esse é o ponto em que Ansible deixa de ser uma coleção de arquivos YAML e se torna engenharia.


Conclusão — Não entre em pânico, versione o Playbook

Ansible não é apenas uma ferramenta para executar comandos em vários servidores.

Ele representa uma forma estruturada de administrar sistemas.

Com ele, podemos transformar operações manuais em processos:

  • repetíveis;

  • previsíveis;

  • auditáveis;

  • seguros;

  • versionados;

  • testáveis;

  • reutilizáveis.

Para um programador COBOL, muitos conceitos são menos alienígenas do que parecem.

O Inventory define os destinos.

O Playbook organiza a execução.

As Tasks representam passos.

Os módulos realizam operações.

As variáveis parametrizam.

Os Facts descrevem o ambiente.

Os Handlers reagem às mudanças.

As Roles organizam componentes.

As Collections distribuem funcionalidades.

O Vault protege segredos.

Git registra a história.

Jenkins coordena o fluxo.

Ansible executa.

E o z/OS, apesar de observar toda essa modernidade com a serenidade de quem já sobreviveu a inúmeras previsões de extinção, também pode participar dessa automação.

O melhor caminho para aprender é começar pequeno.

Crie um inventário.

Execute um ping.

Escreva um Playbook.

Crie um arquivo.

Instale um pacote.

Use uma variável.

Adicione uma condição.

Implemente um Handler.

Transforme o código em uma Role.

Coloque no Git.

Adicione testes.

Integre a uma pipeline.

Automatize um processo real.

Depois, execute tudo novamente.

Se o resultado continuar previsível, você estará no caminho correto.

Se o ambiente desaparecer, verifique se usou:

state: absent

em algum lugar particularmente inconveniente.

No universo da automação, como no mainframe, toda grande jornada começa com uma pequena instrução.

No COBOL:

PROCEDURE DIVISION.

No Ansible:

---

E em qualquer viagem técnica realmente perigosa:

Não entre em pânico. Faça backup, valide a sintaxe e nunca teste pela primeira vez em produção.

segunda-feira, 25 de novembro de 2024

Core Keeper : Quando um Programador COBOL Descobre que os Maiores Tesouros Não Estão em um Banco de Dados.

 

Bellacosa Mainframe apresenta core keeper

☕ Um Café no Bellacosa Mainframe

Core Keeper sem Mistérios

Quando um Programador COBOL Descobre que os Maiores Tesouros Não Estão em um Banco de Dados... Estão Enterrados Debaixo de Milhões de Blocos Esperando Alguém Corajoso o Bastante para Dar o Primeiro Golpe de Picareta

Existe uma velha frase entre administradores de sistemas.

"Os problemas mais difíceis nunca aparecem na superfície."

Curiosamente...

Core Keeper parece ter sido construído em torno dessa mesma ideia.

Enquanto muitos jogos convidam você a explorar montanhas, oceanos ou grandes cidades, Core Keeper faz exatamente o contrário.

Ele pergunta:

"E se toda a aventura estivesse escondida embaixo dos seus pés?"

Você não começa em um castelo.

Nem em uma vila.

Nem em um porto.

Você desperta em uma gigantesca caverna subterrânea.

No centro existe um enorme núcleo misterioso.

Silencioso.

Antigo.

Quase vivo.

E é ele quem dará sentido a toda sua jornada.

Para um programador COBOL isso lembra imediatamente um enorme ambiente legado.

Na superfície tudo parece simples.

Mas basta abrir a primeira biblioteca...

Encontrar o primeiro módulo...

Descobrir o primeiro COPYBOOK...

E perceber que existe um universo inteiro escondido abaixo da camada visível.

Pegue sua caneca de café.

Hoje vamos explorar um dos melhores jogos independentes da atualidade.


A origem

Core Keeper foi desenvolvido pelo estúdio sueco Pugstorm, conhecido por combinar ideias criativas com sistemas profundos de exploração e construção. O jogo foi publicado pela Fireshine Games e entrou em Acesso Antecipado (Early Access) para PC em 8 de março de 2022. Após um período de desenvolvimento colaborativo com a comunidade, recebeu seu lançamento completo (versão 1.0) em 27 de agosto de 2024, chegando também aos consoles. (store.steampowered.com, )

Desde o início, o objetivo do estúdio era criar uma experiência que misturasse mineração, sobrevivência, RPG, agricultura e construção em um único universo subterrâneo.


O estúdio

A Pugstorm é um estúdio relativamente pequeno.

Mas extremamente ambicioso.

Ao invés de tentar competir em gráficos realistas...

Preferiu investir em:

  • sistemas profundos;

  • exploração;

  • criatividade;

  • liberdade.

Resultado?

Criou um dos maiores sucessos independentes dos últimos anos.


A história

Você é um explorador.

Durante uma expedição encontra uma gigantesca relíquia subterrânea conhecida como Core.

Ao tocá-la...

Algo acontece.

Você desperta em um enorme mundo subterrâneo.

Sem saída.

Sem explicações.

Sem mapa.

Sem saber onde está.

O gigantesco núcleo pede ajuda.

A partir daí...

Toda a aventura começa.


O verdadeiro protagonista

Curiosamente...

Também não é você.

É o próprio Core.

Conforme você derrota chefes.

Descobre biomas.

Ativa cristais.

O gigantesco núcleo volta lentamente à vida.

É praticamente um grande servidor sendo religado módulo por módulo.


O objetivo

Não existe apenas um.

Você pode passar centenas de horas:

  • minerando;

  • cultivando;

  • construindo;

  • pescando;

  • explorando;

  • derrotando chefes;

  • automatizando fazendas.

Cada jogador cria sua própria aventura.


A jogabilidade

O ciclo lembra um processamento batch extremamente eficiente.

Explorar

↓

Minerar

↓

Construir Base

↓

Produzir Equipamentos

↓

Derrotar Chefes

↓

Desbloquear Novos Biomas

↓

Melhorar Ferramentas

↓

Explorar Ainda Mais

É um loop extremamente viciante.


Mineração

Aqui está a essência.

Você quebra praticamente tudo.

Pedra.

Argila.

Areia.

Cristais.

Minérios.

Cada novo material desbloqueia outra etapa tecnológica.


Biomas

Cada região muda completamente.

Você encontra:

  • cavernas de argila;

  • florestas subterrâneas;

  • oceanos;

  • desertos;

  • áreas vulcânicas;

  • regiões congeladas;

  • ruínas antigas.

Cada bioma possui:

  • criaturas próprias;

  • plantas exclusivas;

  • peixes;

  • minérios;

  • chefes.


Construção

Sua base pode crescer infinitamente.

Você constrói:

  • casas;

  • fazendas;

  • cozinhas;

  • depósitos;

  • oficinas;

  • laboratórios.

Tudo pode ser reorganizado.


Agricultura

Assim como Stardew Valley...

Existe agricultura.

Você planta:

  • vegetais;

  • frutas;

  • ervas.

Depois cozinha dezenas de receitas.

A alimentação melhora atributos temporariamente.


Pesca

Poucos jogos independentes fizeram um sistema tão agradável.

Cada lago possui espécies diferentes.

Existem peixes raros.

Peixes lendários.

Materiais exclusivos.


O combate

O combate mistura:

  • Diablo;

  • Terraria;

  • Zelda.

Você utiliza:

  • espada;

  • arco;

  • magia;

  • explosivos;

  • armaduras.

Cada inimigo possui comportamento diferente.


Chefes

São enormes.

Cada chefe muda completamente a dinâmica.

Você precisa:

  • preparar equipamentos;

  • fabricar comida;

  • produzir poções;

  • aprender padrões.

É extremamente divertido.


Craft

Existe uma quantidade enorme de fabricação.

Você produz:

  • armas;

  • armaduras;

  • ferramentas;

  • móveis;

  • comida;

  • estações;

  • máquinas.

Sempre existe algo novo para desbloquear.


Progressão

O jogo utiliza progressão baseada em habilidades.

Quanto mais você faz determinada atividade...

Melhor fica nela.

Exemplo:

Minera muito?

Melhora mineração.

Pesca muito?

Melhora pesca.

Corre bastante?

Fica mais resistente.

É extremamente natural.


Multiplayer

Aqui mora uma das maiores diversões.

Até oito jogadores podem explorar o mesmo mundo simultaneamente.

Cada um pode assumir um papel diferente.

Um agricultor.

Outro minerador.

Outro guerreiro.

Outro construtor.

Funciona muito bem.


Curiosidades

  • O mapa é gerado proceduralmente, garantindo que cada mundo tenha uma configuração única.

  • O lançamento da versão 1.0 ampliou significativamente o conteúdo, adicionando novos biomas, chefes e mecânicas.

  • A comunidade costuma comparar o jogo a uma mistura entre Terraria, Minecraft, Stardew Valley e Don't Starve, embora ele tenha identidade própria.


Easter Eggs

A exploração revela:

  • salas secretas;

  • estátuas misteriosas;

  • equipamentos escondidos;

  • itens extremamente raros;

  • pequenos detalhes espalhados pelos biomas.

Grande parte desses segredos depende apenas da curiosidade do jogador.


Os riscos

O maior perigo...

É pensar:

"Vou só abrir mais um túnel."

Duas horas depois...

Você construiu uma ferrovia inteira.

Outro risco.

Entrar em um novo bioma sem comida.

Ou sem tochas.

Ou sem reparar ferramentas.

Você aprende rapidamente a importância do planejamento.


As vantagens

Core Keeper oferece praticamente tudo.

✔ mineração

✔ exploração

✔ agricultura

✔ combate

✔ crafting

✔ pesca

✔ construção

✔ multiplayer

Sem:

❌ gacha

❌ energia

❌ microtransações invasivas

❌ pay-to-win

Você compra.

Instala.

Joga.

Simples assim.


A diversão

Poucos jogos conseguem manter tantas horas interessantes.

Sempre existe:

Um minério novo.

Uma criatura.

Um chefe.

Uma planta.

Uma tecnologia.

Uma nova sala.

Uma nova ideia para sua base.

É praticamente impossível ficar sem objetivo.


O Caminho do Padawan

Se você está começando...

Faça assim.

✔ construa uma pequena base;

✔ organize baús;

✔ plante alimentos;

✔ cozinhe sempre;

✔ faça tochas;

✔ melhore a picareta primeiro;

✔ explore lentamente;

✔ não enfrente chefes cedo demais.

No Bellacosa Mainframe existe uma regra semelhante.

"Nunca reorganize toda a biblioteca LOADLIB antes de fazer backup."


Requisitos para PC

Mínimos:

  • Windows 10 (64 bits)

  • Intel Core i5-2300 ou equivalente

  • 8 GB de RAM

  • NVIDIA GeForce GTX 460 ou equivalente

  • Aproximadamente 1 GB de espaço livre

Recomendados:

  • Intel Core i5 de gerações mais recentes ou AMD Ryzen equivalente

  • 8 GB ou mais de RAM

  • GPU compatível com DirectX 11

Mesmo em computadores modestos, Core Keeper costuma apresentar excelente desempenho graças ao seu estilo gráfico em pixel art moderno. (store.steampowered.com)


Tipo de instalação

É um jogo premium.

Compra única.

Instalação digital.

Disponível para:

  • Windows

  • Steam

  • Xbox

  • PlayStation

  • Nintendo Switch

No PC, a instalação é feita diretamente pela Steam.


Custo

O preço oficial da versão para PC gira em torno de US$ 19,99, podendo variar conforme promoções e a região da loja. É comum encontrá-lo com descontos durante grandes eventos da Steam.


Classificação

  • Gênero: RPG, sobrevivência, mineração, sandbox, construção, aventura e crafting.

  • Modo: Um jogador e multiplayer cooperativo (até oito jogadores).

  • Classificação indicativa: normalmente E10+ / 10 anos ou equivalente, por conter violência leve e fantasia.


Site oficial

Para acompanhar atualizações e novidades:


Curiosidade para Programadores COBOL

Se Stardew Valley lembra um sistema administrativo elegante...

Se Outward parece um ambiente de produção onde planejamento é tudo...

Então Core Keeper é praticamente um utilitário de análise profunda do legado.

Cada bloco quebrado revela outra camada.

Cada bioma lembra uma nova biblioteca.

Cada chefe parece um grande módulo crítico protegido por décadas de regras de negócio.

E o gigantesco Core no centro do mapa lembra aquele servidor IBM Z que continua sustentando toda a empresa enquanto ninguém percebe sua importância.


Conclusão

Core Keeper mostra que uma grande aventura não precisa acontecer sob um céu estrelado. Às vezes, ela floresce no subsolo, onde cada túnel escavado revela novas possibilidades.

Sob o olhar do Bellacosa Mainframe, o jogo se parece com a exploração de um enorme sistema legado: quanto mais fundo você vai, mais percebe que cada componente está ligado a outro, formando uma arquitetura surpreendentemente elegante.

Sua maior lição é simples.

Os maiores tesouros raramente estão na superfície.

Seja em uma caverna pixelada.

Seja em um programa COBOL escrito há quarenta anos.

Ou em um conhecimento que permaneceu escondido esperando alguém curioso o bastante para fazer a primeira escavação.

domingo, 24 de novembro de 2024

Lovable — O Dia em que Patrick Jane Investigou o Aplicativo Criado por Inteligência Artificial

Bellacosa Mainframe apresenta o lovable

☕ Um Café no Bellacosa Mainframe

Lovable — O Dia em que Patrick Jane Investigou o Aplicativo Criado por Inteligência Artificial

Quando o prompt entrou no CPD, examinou o código e pediu acesso à produção

O relógio digital do CPD marcava 23h47.

As luzes verdes dos terminais piscavam em silêncio, os discos continuavam girando e uma cafeteira antiga mantinha aquecido o último lote de café da noite. Diante de um terminal 3270, um jovem Padawan COBOL observava uma tela completamente diferente de tudo o que havia aprendido.

Não havia JCL.

Não havia IDENTIFICATION DIVISION.

Não havia compilação.

Também não havia uma longa sequência de comandos para instalar bibliotecas, configurar servidores, criar tabelas ou montar uma interface.

Havia apenas uma caixa de texto.

Patrick Jane aproximou-se tranquilamente, segurando uma xícara de chá, examinou a tela e perguntou:

— O que você escreveu?

O Padawan respondeu:

— “Crie um sistema para controlar alunos de um curso de COBOL, com login, cadastro, dashboard, certificados e acompanhamento de progresso.”

Jane sorriu.

— Então você não escreveu apenas uma frase. Você entregou uma especificação funcional.

Teresa Lisbon, parada ao lado da porta, cruzou os braços.

— E você acredita que essa ferramenta realmente construiu o sistema?

— Eu não acredito — respondeu Jane. — Eu observo.

Na tela estava aberto o Lovable, uma plataforma de desenvolvimento baseada em inteligência artificial que transforma descrições em linguagem natural em aplicações web funcionais. O usuário explica o que deseja construir, e a plataforma gera telas, componentes, navegação, lógica e integrações necessárias para colocar a ideia em funcionamento. A própria documentação define o Lovable como uma plataforma de desenvolvimento full stack com IA. (Lovable Documentation)

Mas, como Patrick Jane ensinaria a qualquer investigador — e como todo veterano do mainframe ensinaria a um iniciante — a primeira impressão nunca é suficiente.

Era hora de investigar.



1. Afinal, o que é o Lovable?

O Lovable é uma plataforma online que permite criar sites, sistemas e aplicações por meio de uma conversa com inteligência artificial.

Em vez de começar abrindo um editor vazio e escrevendo manualmente toda a estrutura do projeto, você descreve:

  • o objetivo do sistema;

  • quem utilizará a aplicação;

  • quais telas deverão existir;

  • quais dados serão armazenados;

  • quais regras deverão ser respeitadas;

  • como a interface deverá se comportar.

A IA interpreta essas instruções e gera uma primeira versão do produto.

Você pode escrever, por exemplo:

Crie um portal de treinamento para programadores COBOL iniciantes. O portal deve possuir cadastro de alunos, trilhas de aprendizagem, exercícios, pontuação, certificados fictícios e um painel administrativo.

A plataforma então começa a montar a aplicação.

Isso inclui, conforme a necessidade do projeto:

  • página inicial;

  • formulários;

  • menus;

  • tabelas;

  • dashboards;

  • componentes visuais;

  • autenticação;

  • persistência de dados;

  • funções de backend;

  • integração com serviços externos;

  • publicação na web.

O Lovable não é apenas um gerador de imagens de telas. Sua proposta é produzir uma aplicação funcional e código que possa ser sincronizado, revisado e continuado fora da própria plataforma. Os projetos podem ser conectados ao GitHub, clonados e implantados em outra infraestrutura. A documentação também afirma que o usuário mantém a propriedade de seu código e pode exportar ou migrar seus dados. (Lovable Documentation)

Na linguagem do mainframe, não estamos falando apenas de um gerador de BMS MAP.

Estamos falando de algo que tenta montar o mapa, a transação, o armazenamento e parte da infraestrutura operacional.


2. A origem do suspeito: quando surgiu o Lovable?

O Lovable foi lançado publicamente em novembro de 2024. Uma publicação oficial posterior da própria empresa confirma essa data ao apresentar uma linha do tempo de sua operação. (Lovable)

Sua origem está associada ao movimento de ferramentas capazes de gerar software com inteligência artificial e à experiência acumulada com o projeto GPT Engineer.

A ideia central era ambiciosa:

Permitir que uma pessoa descrevesse um produto digital e recebesse uma aplicação utilizável, sem precisar dominar previamente todo o ecossistema de desenvolvimento web.

Em poucos meses, a plataforma ganhou destaque no movimento conhecido como vibe coding, expressão usada para descrever uma forma de programar na qual o desenvolvedor orienta uma IA por linguagem natural, revisando e ajustando o código produzido.

Em julho de 2025, a empresa anunciou uma rodada de investimento de US$ 200 milhões, com avaliação de US$ 1,8 bilhão, oito meses depois do lançamento. Esse crescimento ajuda a explicar por que o Lovable passou rapidamente de curiosidade experimental para ferramenta observada por startups, desenvolvedores, equipes de produto e empresas. (Lovable)

Patrick Jane olharia para esses números e diria:

— Crescimento rápido chama atenção. Mas não prova que o produto resolve todos os casos.

E ele estaria correto.

O Lovable é poderoso, mas não é magia. É uma ferramenta de aceleração.


3. Para que serve?

O Lovable pode ser usado para criar diversos tipos de aplicações web, como:

  • landing pages;

  • portfólios;

  • blogs;

  • catálogos;

  • sistemas de cadastro;

  • painéis administrativos;

  • agendas;

  • sistemas de cursos;

  • protótipos de SaaS;

  • ferramentas internas;

  • sistemas de atendimento;

  • controles financeiros;

  • aplicações com login;

  • dashboards;

  • front-ends para APIs;

  • provas de conceito.


Para um programador COBOL, isso abre uma possibilidade especialmente interessante: criar interfaces modernas para processos que antes existiam apenas em terminais, relatórios ou rotinas batch.

Imagine um programa COBOL que consulta dados de clientes em Db2.

Tradicionalmente, o fluxo poderia ser:

Usuário
   ↓
Terminal 3270
   ↓
Transação CICS
   ↓
Programa COBOL
   ↓
Db2

Com uma arquitetura modernizada, você poderia ter:

Usuário no navegador
   ↓
Interface criada no Lovable
   ↓
API REST
   ↓
z/OS Connect ou camada de integração
   ↓
CICS ou serviço
   ↓
Programa COBOL
   ↓
Db2

O Lovable não substitui automaticamente o CICS, o COBOL, o Db2 ou a segurança do ambiente corporativo.

Ele pode ajudar a construir a camada que o usuário vê.

Esse detalhe é essencial.

O mainframe continua processando as regras críticas. O Lovable pode ajudar a criar a experiência moderna ao redor delas.


4. O Lovable precisa ser instalado?

Aqui está uma boa notícia para o Padawan:

Para começar, não é necessário instalar o Lovable localmente.

A plataforma funciona pelo navegador. O processo inicial indicado pela documentação é:

  1. acessar o Lovable;

  2. criar uma conta;

  3. iniciar um projeto;

  4. escrever o primeiro prompt;

  5. acompanhar a geração da aplicação. (Lovable Documentation)

Isso significa que você não precisa começar instalando:

  • servidor web;

  • banco de dados local;

  • framework de front-end;

  • gerenciador de pacotes;

  • compilador;

  • ambiente Docker.

Entretanto, caso deseje trabalhar profissionalmente com o código, vale instalar ferramentas complementares em seu computador:

  • Git;

  • Visual Studio Code;

  • Node.js, conforme a necessidade do projeto;

  • cliente GitHub;

  • Docker, caso você queira executar ou hospedar determinados componentes localmente.

A instalação local não é obrigatória para experimentar, mas torna-se útil quando você deseja sair do modo puramente visual e assumir o controle técnico.



5. Passo a passo: a primeira investigação do Padawan

Passo 1 — Defina o caso antes de interrogar a IA

O erro mais comum é entrar na plataforma e escrever:

Faça um sistema de cursos.

Isso é equivalente a entregar para um programador COBOL uma especificação dizendo:

Faça um programa de clientes.

Quais clientes?

Qual arquivo?

Qual layout?

Quais campos?

Qual regra?

Qual saída?

Patrick Jane provavelmente observaria o autor da especificação por alguns segundos e concluiria:

— Você não sabe ainda o que deseja.

Antes de abrir o Lovable, responda:

  • O que o sistema fará?

  • Quem utilizará?

  • Qual é o problema resolvido?

  • Quais são as telas mínimas?

  • Quais dados serão cadastrados?

  • Qual será a primeira versão?

A documentação do Lovable recomenda definir antecipadamente o produto, o público e o conjunto mínimo de funcionalidades. Para iniciantes, também recomenda começar pelo front-end com dados fictícios antes de conectar um banco real. (Lovable Documentation)

Passo 2 — Escreva o primeiro prompt

Um bom prompt inicial para um projeto COBOL poderia ser:

Crie uma aplicação web chamada Academia COBOL Padawan. Ela deve ajudar iniciantes a acompanhar uma trilha de estudos. Crie uma página inicial, uma lista de módulos, uma página de exercícios, um painel de progresso e uma área de certificados. Use inicialmente dados fictícios. O visual deve misturar terminal mainframe, ficção científica e uma cafeteria noturna. A aplicação deve funcionar bem em computadores e celulares.

Observe a estrutura:

  • nome;

  • objetivo;

  • usuários;

  • páginas;

  • dados;

  • estilo;

  • comportamento responsivo.

O prompt funciona como uma combinação de:

  • especificação funcional;

  • briefing visual;

  • requisito técnico;

  • ordem de serviço.

Passo 3 — Analise a primeira versão

Não aceite tudo imediatamente.

Verifique:

  • os menus funcionam?

  • os botões levam ao lugar correto?

  • o texto faz sentido?

  • o layout fica legível no celular?

  • os campos necessários estão presentes?

  • existe alguma funcionalidade inventada?

  • há inconsistências entre as telas?

No mainframe, você não promove um módulo apenas porque compilou com MAXCC=0000.

No Lovable, você não publica uma aplicação apenas porque ela ficou bonita.

Passo 4 — Peça mudanças pequenas

Evite escrever:

Corrija tudo e deixe profissional.

Prefira:

Na página de trilhas, adicione um indicador de progresso em porcentagem.

Depois:

Na página de exercícios, inclua os níveis Iniciante, Intermediário e Avançado.

Depois:

No painel, crie um gráfico com módulos concluídos por mês.

Solicitações pequenas tornam mais fácil verificar o impacto de cada mudança.

Passo 5 — Use o modo de planejamento

Para alterações maiores, peça primeiro um plano.

Exemplo:

Antes de alterar o sistema, explique como você implementaria autenticação, perfis de aluno e administrador, proteção de rotas e recuperação de senha. Não modifique o código ainda.

Essa abordagem separa o raciocínio da execução.

É a diferença entre:

Planejar → revisar → executar

e:

Executar → descobrir o erro → tentar reparar

A própria documentação recomenda o uso de planejamento, conhecimento persistente, edições visuais e controle de versões como práticas para reduzir erros. (Lovable Documentation)


6. Conectando um banco de dados

Uma aplicação com apenas dados fictícios é um protótipo.

Para cadastrar alunos de verdade, registrar progresso ou armazenar certificados, é necessário um backend.

Uma das integrações documentadas pelo Lovable é com o Supabase, plataforma que oferece banco PostgreSQL, autenticação, armazenamento e funções executadas no servidor.

O fluxo básico é:

  1. criar uma conta no Supabase;

  2. criar um projeto;

  3. abrir as integrações do projeto no Lovable;

  4. selecionar a integração com Supabase;

  5. autorizar a conexão;

  6. escolher o projeto;

  7. solicitar a criação das tabelas e funcionalidades.

Depois da conexão, o Lovable pode utilizar o backend para armazenar dados, cadastrar usuários, controlar autenticação e executar funções. (Lovable Documentation)

Um prompt prático seria:

Conecte o sistema ao Supabase. Crie tabelas para usuários, cursos, módulos, exercícios, conclusões e certificados. Cada aluno deve visualizar apenas seu próprio progresso. Administradores podem visualizar todos os alunos.

Aqui surge uma palavra importante:

RLS — Row-Level Security.

Ela controla quais linhas de uma tabela cada usuário pode acessar.

Sem regras adequadas, um aluno poderia, em determinadas situações, consultar dados de outro aluno.

No mundo mainframe, seria como deixar um usuário acessar registros para os quais não possui autorização RACF.

A tecnologia muda.

O princípio permanece.


7. GitHub: o cofre de evidências

Todo investigador preserva as evidências.

Todo desenvolvedor deveria preservar as versões.

Conectar o projeto ao GitHub permite:

  • armazenar o código;

  • acompanhar alterações;

  • criar histórico;

  • trabalhar em equipe;

  • clonar o projeto;

  • editar fora do Lovable;

  • executar testes adicionais;

  • implantar em outra infraestrutura.

O Lovable não exige GitHub para funcionar, mas sua documentação oferece sincronização com repositórios e a possibilidade de continuar o desenvolvimento externamente. (Lovable Documentation)

Para um programador COBOL, pense no Git como uma combinação moderna de:

  • biblioteca de fontes;

  • controle de versões;

  • histórico de mudanças;

  • base para pipeline;

  • ponto de integração com revisão técnica.

Não espere a aplicação crescer para pensar em versionamento.

Conecte o repositório cedo.


8. Aplicação prática: portal moderno para um programa COBOL

Vamos imaginar um caso real.

Uma empresa possui um programa COBOL chamado CLIENTE1, responsável por consultar dados cadastrais.

A regra de negócio principal já funciona:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CLIENTE1.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-CLIENTE.
          05 WS-ID             PIC 9(09).
          05 WS-NOME           PIC X(40).
          05 WS-STATUS         PIC X(10).

       PROCEDURE DIVISION.
           PERFORM CONSULTAR-CLIENTE
           GOBACK.

O objetivo não é reescrever tudo em JavaScript.

O objetivo é disponibilizar uma tela moderna.

Arquitetura possível

Lovable
   ↓
Tela de consulta
   ↓
Chamada HTTPS
   ↓
API corporativa
   ↓
z/OS Connect
   ↓
CICS
   ↓
CLIENTE1
   ↓
Db2

No Lovable, você poderia solicitar:

Crie uma tela de consulta de clientes com campos para número do cliente e CPF. Ao pesquisar, consuma uma API REST e mostre nome, status, limite e última atualização. Inclua tratamento para cliente não encontrado, indisponibilidade do serviço e falta de autorização.

A plataforma pode criar o front-end e preparar a chamada à API.

Mas existem responsabilidades que continuam com a equipe:

  • definir o contrato da API;

  • proteger as credenciais;

  • configurar autenticação;

  • validar autorização;

  • tratar indisponibilidade;

  • impedir exposição indevida;

  • registrar logs;

  • testar carga;

  • respeitar políticas corporativas.

Esse é o ponto no qual o Padawan deixa de ser apenas operador da IA e começa a agir como engenheiro.


9. Uso cotidiano para um desenvolvedor COBOL

O Lovable pode ser útil mesmo que você nunca publique uma aplicação comercial completa.

Protótipos para reuniões

Antes de alterar um sistema antigo, crie um protótipo visual para validar a ideia com usuários.

Em vez de explicar:

Teremos um menu lateral com pesquisa e acompanhamento de solicitações.

Mostre o protótipo funcionando.

Simuladores de telas

Crie interfaces fictícias para demonstrar como uma transação CICS poderia ser modernizada.

Ferramentas de apoio

Você pode criar:

  • calculadora de PIC;

  • conversor EBCDIC e ASCII;

  • gerador de exemplos de JCL;

  • catálogo de abends;

  • glossário de comandos;

  • painel de execução batch;

  • simulador de SDSF;

  • organizador de copybooks;

  • sistema de exercícios COBOL.

Portfólio profissional

Um desenvolvedor COBOL pode montar um portal demonstrando:

  • conhecimento legado;

  • integração com APIs;

  • capacidade de modernização;

  • noções de UX;

  • domínio de Git;

  • entendimento de arquitetura híbrida.

Documentação interativa

Em vez de entregar apenas um documento estático, crie uma aplicação pesquisável com diagramas, filtros e exemplos.



10. Pontos fortes

Rapidez na prototipação

Uma ideia pode ganhar uma interface inicial em pouco tempo.

Baixa barreira de entrada

O iniciante não precisa dominar todo o ecossistema web antes de experimentar.

Desenvolvimento conversacional

A pessoa descreve alterações em linguagem natural.

Código reutilizável

O projeto pode ser sincronizado com GitHub e continuado por desenvolvimento tradicional.

Integrações

É possível conectar banco, autenticação, APIs e outros serviços.

Boa utilidade para validação

Equipes conseguem testar um fluxo antes de investir na implementação definitiva.

Ponte entre legado e moderno

Para o programador COBOL, esse talvez seja o maior valor: criar rapidamente a camada moderna ao redor de serviços corporativos existentes.


11. Limitações e riscos

Patrick Jane caminhou até o quadro branco e escreveu:

“Uma interface bonita pode esconder uma arquitetura ruim.”

Esse é o principal alerta.

A IA pode interpretar errado

Um prompt ambíguo gera uma solução ambígua.

O código precisa de revisão

A aplicação pode funcionar e ainda conter:

  • duplicação;

  • dependências desnecessárias;

  • tratamento incompleto;

  • regras frágeis;

  • problemas de manutenção.

Segurança não é automática

A documentação do Lovable recomenda revisar autenticação, controle de acesso, chaves de API, funções de backend, políticas de banco e dependências. A plataforma oferece verificações de segurança, mas isso não elimina a responsabilidade humana. (Lovable Documentation)

Custos podem crescer

O uso da plataforma, da nuvem, do banco, de APIs externas e de recursos de IA pode gerar custos conforme o projeto cresce. O Lovable utiliza créditos para construção e para determinados recursos de nuvem e IA. (Lovable)

Sistemas críticos exigem engenharia tradicional

Aplicações financeiras, médicas, industriais ou corporativas não devem ser colocadas em produção apenas com testes superficiais.


12. Dicas do Mestre Bellacosa

1. Trate o prompt como uma especificação

Escreva objetivo, contexto, telas, campos, regras e exceções.

2. Comece com o mínimo

Construa primeiro o fluxo principal.

3. Use dados fictícios

Valide a experiência antes de conectar dados reais.

4. Uma mudança por vez

Isso facilita identificar o que causou um erro.

5. Peça explicações

Pergunte:

Quais arquivos serão alterados e por quê?

6. Proteja segredos

Nunca coloque senhas ou chaves diretamente no front-end.

7. Revise permissões

Cada usuário deve acessar somente o necessário.

8. Sincronize com GitHub

Preserve versões desde o início.

9. Teste cenários negativos

Verifique:

  • entrada vazia;

  • usuário sem permissão;

  • API indisponível;

  • dado inexistente;

  • operação duplicada;

  • sessão expirada.

10. Não abandone seus fundamentos

Lógica, modelagem, dados, testes, segurança e arquitetura continuam valendo.



13. Curiosidades do arquivo confidencial

O nome Lovable

Em inglês, “lovable” significa algo como “adorável” ou “fácil de gostar”.

O nome combina com a proposta de reduzir a frustração inicial de criar software.

O prompt virou artefato de engenharia

Em projetos modernos, o histórico de conversas pode revelar decisões, requisitos e mudanças de escopo.

Existe uma API do próprio Lovable

A documentação inclui uma API para criação programática de aplicações, permitindo iniciar projetos por prompts e integrações automatizadas. (Lovable Documentation)

Existe integração via MCP

O Lovable documenta um servidor baseado no Model Context Protocol, permitindo que clientes compatíveis gerenciem projetos por linguagem natural. (Lovable Documentation)

O backend não precisa ficar preso

A documentação descreve opções de implantação fora da nuvem da plataforma, inclusive com infraestrutura própria e componentes baseados em Supabase. (Lovable Documentation)


14. Easter eggs encontrados no CPD

Easter egg número 1 — O novo SYSIN

No JCL, o SYSIN entrega instruções para a execução.

No Lovable, o prompt faz algo parecido:

//SYSIN DD *
CRIE UM PORTAL COBOL
COM LOGIN
DASHBOARD
TRILHAS
CERTIFICADOS
/*

A diferença é que o compilador agora responde em linguagem natural.

Easter egg número 2 — Patrick Jane e o prompt vazio

Lisbon perguntou:

— Por que o projeto saiu errado?

Jane respondeu:

— Porque o sistema fez exatamente o que pediram, não o que imaginaram.

Easter egg número 3 — MAXCC=0000

O Lovable mostrou:

BUILD SUCCESSFUL

O veterano do mainframe sorriu e perguntou:

— E os testes?

O Padawan ficou em silêncio.

Easter egg número 4 — O fantasma da produção

Toda aplicação criada às pressas possui um fantasma.

Ele aparece quando alguém diz:

“Funcionou no preview.”

Easter egg número 5 — A caneca

No canto inferior da aplicação Academia COBOL Padawan, o desenvolvedor escondeu um botão em formato de xícara.

Ao clicar cinco vezes, surgia a mensagem:

CAFÉ ACEITO
WORKING-STORAGE RECARREGADA
PROGRAMADOR PRONTO


Conclusão — O mentalista não adivinha; ele observa

Patrick Jane não possuía poderes sobrenaturais.

Ele observava padrões, contradições, detalhes ignorados e comportamentos previsíveis.

O Lovable também não é magia.

Ele combina modelos de inteligência artificial, geração de código, componentes modernos e integrações para transformar descrições em aplicações.

Para um programador COBOL iniciante, a ferramenta representa uma oportunidade extraordinária.

Ela permite enxergar o outro lado da arquitetura.

O Padawan que antes conhecia apenas:

Entrada
↓
Programa
↓
Arquivo
↓
Relatório

passa a compreender:

Usuário
↓
Interface
↓
API
↓
Autenticação
↓
Regra de negócio
↓
Banco
↓
Infraestrutura

O conhecimento COBOL não se torna obsoleto.

Ele ganha uma nova porta de entrada.

Você pode continuar trabalhando com programas críticos, CICS, Db2, arquivos VSAM e rotinas batch, enquanto utiliza o Lovable para construir protótipos, portais, dashboards e experiências modernas.

A vantagem não estará apenas com quem sabe escrever prompts.

Estará com quem sabe distinguir:

  • requisito de sugestão;

  • protótipo de produto;

  • demonstração de produção;

  • código gerado de código confiável;

  • interface bonita de sistema seguro.

O Padawan olhou novamente para o aplicativo.

— Então a IA não vai substituir o programador?

Patrick Jane tomou o último gole de chá.

— Ela pode substituir algumas tarefas. Também pode ampliar muitos profissionais. O resultado depende de quem faz as perguntas, de quem revisa as respostas e de quem percebe o detalhe que todos os outros ignoraram.

Lisbon abriu a porta do CPD.

— O caso está encerrado?

Jane sorriu.

— Não. O protótipo está pronto. Agora começa a investigação de verdade.

Na tela, uma mensagem piscava:

LOVABLE BUILD COMPLETED
CODE REVIEW PENDING
SECURITY REVIEW PENDING
COFFEE REQUIRED

E, naquela noite, o Padawan aprendeu a lição mais importante:

A inteligência artificial pode construir rapidamente uma aplicação. Mas transformar essa aplicação em um sistema confiável ainda exige lógica, disciplina, testes, segurança e a experiência de quem sabe que produção nunca perdoa excesso de confiança.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...