| name | devops-ansible-playbook-creator |
| description | Gera playbooks Ansible a partir de requisitos em linguagem natural, ajuda a escrever/expandir trechos, fornece snippets/templates, e explica playbooks existentes. Ative quando o usuário mencionar "ansible", "playbook", "ansible-playbook", "yaml de automação", "configuração de servidor", "infraestrutura como código". |
| license | MIT |
| compatibility | Requires Python >=3.10, Node >=18, and OpenCode >=0.9.0 |
Overview
Assistência completa para criação e manutenção de playbooks Ansible.
Capacidades
- Gerar playbooks a partir de descrições em linguagem natural
- Ajudar a escrever/expandir trechos específicos
- Fornecer snippets/templates prontos para tarefas comuns
- Explicar playbooks existentes
Como Usar
Para Criar Playbooks
Quando o usuário pedir para criar um playbook:
- Analise os requisitos detalhadamente
- Consulte a referência em
reference/ para módulos e sintaxe
- Forneça YAML válido com explicações
- Sugira melhorias e boas práticas
Exemplo de prompt:
Crie um playbook para instalar nginx, configurar virtual hosts e iniciar o serviço
Resposta esperada:
- name: Configuração completa do Nginx
hosts: webservers
become: yes
tasks:
- name: Instalar Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Criar diretório de virtual hosts
file:
path: /etc/nginx/sites-available
state: directory
mode: '0755'
Para Ajudar a Escrever Trechos
Quando o usuário precisar de ajuda com partes específicas:
- Forneça o trecho solicitado com placeholders
- Explique cada parte
- Ofereça alternativas quando aplicável
Exemplo:
Como faço para copiar vários arquivos usando loop?
Resposta:
- name: Copiar múltiplos arquivos
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: root
group: root
mode: '0644'
loop:
- { src: 'files/config.conf', dest: '/etc/app/config.conf' }
- { src: 'files/service.service', dest: '/etc/systemd/system/app.service' }
Para Explicar Playbooks
Quando o usuário precisar entender um playbook existente:
- Analise a estrutura e fluxo
- Explique cada seção e tarefa
- Identifique padrões e possíveis melhorias
Referência
Estrutura da Pasta
reference/
├── README.md # Índice organizado
├── modules/ # Documentação de 73 módulos
│ ├── file.md
│ ├── copy.md
│ └── ...
├── docs/ # Documentação principal convertida
│ ├── yaml_syntax.md
│ ├── playbook_intro.md
│ └── ...
├── topics/ # Guias combinados por tópico
│ ├── variables.md
│ ├── conditionals_loops.md
│ └── ...
└── ansible_builtin/ # Arquivos fonte Python (referência técnica)
Como Consultar a Referência
- Para módulos específicos: Use
reference/modules/<nome_modulo>.md
- Para conceitos gerais: Consulte
reference/topics/
- Para detalhes completos: Use
reference/docs/
Templates e Exemplos
Templates Disponíveis
templates/basic_playbook.yml.j2 - Playbook básico
templates/role_structure.yml.j2 - Estrutura de role
Exemplos Prontos
examples/ - Playbooks de exemplo para diferentes cenários
Módulos Mais Comuns
Gestão de Arquivos
file - Gerenciamento de arquivos e diretórios
copy - Cópia de arquivos
template - Templates Jinja2
assemble - Montagem de arquivos
Gestão de Serviços
service - Serviços SysVinit
systemd_service - Serviços systemd
Gestão de Pacotes
apt - Pacotes Debian/Ubuntu
yum - Pacotes RHEL/CentOS
dnf - Pacotes modernos RHEL
package - Gerenciador genérico
Comandos
command - Comandos secos
shell - Comandos com shell
script - Execução de scripts
Gestão de Usuários
user - Usuários do sistema
group - Grupos do sistema
Sintaxe Básica
Estrutura de um Playbook
---
- name: Nome do play
hosts: grupo_de_hosts
become: yes
vars:
variavel: valor
tasks:
- name: Nome da tarefa
modulo:
parametro: valor
notify: handler_name
handlers:
- name: handler_name
modulo:
parametro: valor
Patterns de Inventário
webservers # Grupo específico
webservers[0] # Primeiro host do grupo
webservers:!database # Grupo webservers exceto database
webservers:&staging # Interseção de grupos
*.example.com # Wildcard
192.168.1.* # Range de IPs
Variáveis Importantes
inventory_hostname - Nome do host atual
group_names - Grupos que o host pertence
ansible_facts - Facts do sistema
hostvars - Variáveis de outros hosts
Casos de Uso Comuns
1. Provisionamento de Servidor
- name: Provisionar servidor web
hosts: webservers
roles:
- common
- nginx
- php
- monitoring
2. Deploy de Aplicação
- name: Deploy da aplicação
hosts: app_servers
tasks:
- name: Parar serviço
service:
name: myapp
state: stopped
- name: Atualizar código
git:
repo: https://github.com/meuapp/repo.git
dest: /opt/myapp
version: main
- name: Instalar dependências
pip:
requirements: /opt/myapp/requirements.txt
- name: Iniciar serviço
service:
name: myapp
state: started
3. Configuração de Banco de Dados
- name: Configurar PostgreSQL
hosts: databases
become: yes
vars:
pg_version: 14
pg_databases:
- app_production
- app_staging
tasks:
- name: Instalar PostgreSQL
apt:
name: postgresql-{{ pg_version }}
state: present
- name: Criar bancos de dados
postgresql_db:
name: "{{ item }}"
state: present
loop: "{{ pg_databases }}"
Boas Práticas
- Use nomes descritivos para tasks e plays
- Seja idempotente - playbooks devem poder ser executados múltiplas vezes
- Use roles para organizar código reutilizável
- Valide variáveis com
assert ou fail
- Use handlers para serviços que precisam reiniciar
- Implemente tratamento de erros com
block/rescue/always
- Use tags para execução seletiva
- Documente com comentários e nomes claros
Comandos Úteis
ansible-playbook playbook.yml
ansible-playbook -i inventory/hosts playbook.yml
ansible-playbook --tags "config,deploy" playbook.yml
ansible-playbook --check playbook.yml
ansible-playbook --list-hosts playbook.yml
ansible-playbook --limit "webservers" playbook.yml
Solução de Problemas Comuns
Erros de Conexão
- Verifique SSH e credenciais
- Teste com
ansible all -m ping
- Verifique
ansible.cfg e inventário
Erros de Sintaxe YAML
- Use
ansible-playbook --syntax-check playbook.yml
- Verifique indentação (2 espaços)
- Evite tabs
Tarefas Não Idempotentes
- Use módulos apropriados
- Verifique
changed_when e creates
- Use
check_mode para teste
Esta skill fornece assistência completa para trabalhar com Ansible. Use a referência em reference/ para informações detalhadas.