Playbooks Avançados
Deploy de Aplicação Node.js
Copy
Ask AI
---
- name: Deploy Node.js Application
hosts: appservers
become: yes
vars:
app_dir: /opt/myapp
app_user: deploy
node_version: "20"
tasks:
- name: Instalar dependências do sistema
apt:
pkg:
- curl
- git
- build-essential
state: present
- name: Instalar Node.js
snap:
name: node
classic: yes
channel: "{{ node_version }}/stable"
- name: Criar usuário da aplicação
user:
name: "{{ app_user }}"
shell: /bin/bash
home: "{{ app_dir }}"
create_home: yes
- name: Criar diretório da aplicação
file:
path: "{{ app_dir }}"
state: directory
owner: "{{ app_user }}"
group: "{{ app_user }}"
- name: Clonar repositório
git:
repo: "{{ git_repo }}"
dest: "{{ app_dir }}"
version: "{{ git_branch | default('main') }}"
force: yes
become_user: "{{ app_user }}"
- name: Instalar dependências npm
npm:
path: "{{ app_dir }}"
production: yes
become_user: "{{ app_user }}"
- name: Copiar variáveis de ambiente
template:
src: .env.j2
dest: "{{ app_dir }}/.env"
owner: "{{ app_user }}"
mode: '0600'
- name: Iniciar serviço
systemd:
name: myapp
state: restarted
enabled: yes
daemon_reload: yes
Configuração de Banco PostgreSQL
Copy
Ask AI
---
- name: Configurar PostgreSQL
hosts: dbservers
become: yes
vars:
pg_version: 15
pg_port: 5432
pg_max_connections: 200
tasks:
- name: Instalar PostgreSQL
apt:
name:
- postgresql
- postgresql-contrib
- python3-psycopg2
state: present
- name: Configurar postgresql.conf
lineinfile:
path: /etc/postgresql/{{ pg_version }}/main/postgresql.conf
regexp: '^#?max_connections'
line: "max_connections = {{ pg_max_connections }}"
state: present
notify: Restart PostgreSQL
- name: Criar banco de dados
postgresql_db:
name: myapp
encoding: UTF8
lc_collate: en_US.UTF-8
lc_ctype: en_US.UTF-8
state: present
become_user: postgres
- name: Criar usuário
postgresql_user:
name: myapp_user
password: "{{ db_password }}"
db: myapp
priv: ALL
state: present
become_user: postgres
handlers:
- name: Restart PostgreSQL
service:
name: postgresql
state: restarted
Setup Kubernetes com Kubespray
Copy
Ask AI
---
- name: Setup Kubernetes Cluster
hosts: kube[0:2]
become: yes
roles:
- kubespray-defaults
- kubernetes/preinstall
- docker
- kubernetes/node
Loops e Condicionais
Loop com items
Copy
Ask AI
- name: Criar múltiplos usuários
user:
name: "{{ item.name }}"
shell: "{{ item.shell | default('/bin/bash') }}"
groups: "{{ item.groups | default([]) }}"
loop:
- { name: alice, groups: ['sudo', 'docker'] }
- { name: bob, groups: ['developers'] }
- { name: carol, shell: '/bin/zsh' }
When conditionals
Copy
Ask AI
- name: Instalar Nginx no Ubuntu
apt:
name: nginx
state: present
when: ansible_facts['os_family'] == "Debian"
- name: Instalar httpd no RHEL
yum:
name: httpd
state: present
when: ansible_facts['os_family'] == "RedHat"
Block e Rescue
Copy
Ask AI
- block:
- name: Deploy aplicação
include_tasks: deploy.yml
rescue:
- name: Rollback
include_tasks: rollback.yml
- name: Notificar falha
slack:
token: "{{ slack_token }}"
msg: "Deploy falhou!"
Tags
Copy
Ask AI
- name: Deploy
hosts: all
tags: [deploy, web]
tasks:
- name: Atualizar código
git:
repo: "{{ repo }}"
dest: /opt/app
tags: [code]
- name: Migrar banco
include_tasks: migrate.yml
tags: [migrate, db]
Copy
Ask AI
ansible-playbook site.yml --tags "deploy,migrate"
ansible-playbook site.yml --skip-tags "db"