proyecto
├── inventories
│ ├── dev
│ │ ├── group_vars
│ │ ├── hosts
│ │ └── vars
│ ├── pre
│ │ ├── group_vars
│ │ ├── hosts
│ │ └── vars
│ └── pro
│ ├── group_vars
│ ├── hosts
│ └── vars
├── main.yml
└── roles
└── create_user
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Cada role lo creamos con:
ansible-galaxy init
https://serversforhackers.com/an-ansible-tutorial
Creamos red para los servidores ansible:
# docker network create --subnet=172.20.0.0/16 ansible
Ejecutamos la primera máquina con ansible:
# docker run --name ansible-master --net ansible --ip 172.20.0.101 --hostname ansiblemaster -ti iwanttobefreak/ansible
Levantamos 2 servers con debian
docker run --name ansible-1 --net ansible --ip 172.20.0.101 --hostname ansible1 -ti debian
docker run --name ansible-2 --net ansible --ip 172.20.0.102 --hostname ansible2 -ti debian
En el servidor de ansible creamos los grupos con las máquinas
/etc/ansible/hosts
[web]
172.20.0.101
172.20.0.102
Probamos si conecta:
ansible web -m ping
Fallará por no tener claves intercambiadas. Las intercambiamos y:
ansible web -m ping
172.20.0.101 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.20.0.102 | SUCCESS => {
"changed": false,
"ping": "pong"
}
====== PLAYBOOKS ======
Para ejecutar un playbook creamos el fichero yml y ejecutamos con -s si queremos sudo:
ansible-playbook <-s> playbook.yml
nginx.yml
---
- hosts: prueba
tasks:
- name: Install Nginx
apt: pkg=nginx state=installed update_cache=true
Ejemplo:
root@5b83b804b705:~# ansible-playbook nginx.yml
PLAY [prueba] ******************************************************************
TASK [setup] *******************************************************************
ok: [172.17.0.3]
ok: [172.17.0.4]
TASK [Install Nginx] ***********************************************************
changed: [172.17.0.4]
changed: [172.17.0.3]
PLAY RECAP *********************************************************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
172.17.0.4 : ok=2 changed=1 unreachable=0 failed=0
====== Tarea dependiente ======
Solo ejecuta la segunda tarea cuando ejecuta la primera. En este caso solo arranca nginx si lo instala:
- hosts: prueba
tasks:
- name: Install Nginx
apt: pkg=nginx state=installed update_cache=true
notify:
- Start Nginx
handlers:
- name: Start Nginx
service: name=nginx state=started
====== Login con usuario ======
Deshabilitamos la consulta del fingerprint
# uncomment this to disable SSH key host checking
host_key_checking = False