User Tools

Site Tools


informatica:linux:ansible

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
informatica:linux:ansible [2019/09/10 14:19]
jose
informatica:linux:ansible [2020/01/21 09:00] (current)
javi [Precedencia varaibles]
Line 68: Line 68:
       variable_comun:​ valor2       variable_comun:​ valor2
 </​code>​ </​code>​
 +
 +====== Precedencia varaibles ======
 +
 +Este es el orden, de mayor precedencia a menor precedencia,​ de las variables:
 +
 +1. extra vars
 +
 +<​code>​
 +--extra-vars "​myvar=extra-vars"​
 +</​code>​
 +
 +2. playbook
 +
 +  install-mysql.yml
 +
 +3. role
 +
 +  role/​mysql/​vars/​main.yml
 +
 +4. groups
 +
 +  group_vars/​database.yml
 +
 +5. role defaults
 +
 +  role/​mysql/​defaults/​main.yml
 +
 +**TODO**: poner un ejemplo complejo para que se vean las buenas prácticas de hacer roles reusables
 +
 +====== Almacenar información sensible (vaults) ======
 +
 +===== Crear archivo con y sin cifrar =====
 +
 +1. Crear un archivo con las variables, y llamarlo "​vars.yml"​ con el siguiente contenido:
 +
 +  var1 = "​pepe"​
 +  ​
 +2. Copiar el archivo y llamarlo "​vault.yml":​
 +
 +  cp vars.yml vault.yml
 +  ​
 +3. Editar "​vault.yml"​ y añadir (es pura convención) "​vault_"​ delante de cada variable:
 +
 +  vault_var1 = "​pepe"​
 +
 +4. Cifrar "​vault.yml",​ le añadiremos la etiqueta (es pura convención) "​prod":​
 +
 +  ansible-vault encrypt vault.yml --vault-id prod@prompt
 +
 +5. Teclear dos veces la contraseña (y anotarla en algún lugar)
 +
 +6. Editar "​vars.yml"​ para que cada variable apunte a su correspondiente "​vault_":​
 +
 +  vim vault.yml
 +  ​
 +Y dejarlo tal que así:
 +
 +  var1 = "{{ vault_var1 }}"
 +  ​
 +7. Incluir los archivos "​vars.yml"​ y "​vault.yml"​. En este ejemplo lo hacemos en las tasks:
 +
 +<​code>​
 +- name: Include vars.yml
 +  include_vars:​ vars.yml
 +
 +- name: Include vault.yml
 +  include_vars:​ vault.yml
 +</​code>​
 +
 +===== Cifrar un archivo =====
 +
 +En este ejemplo:
 +
 +* Ciframos un archivo entero
 +* El módulo de ansible se encarga de descrifrarlo,​ descomprimirlo y dejarlo en destino
 +
 +Tenemos el siguiente diseño de archivos:
 +
 +<​code>​
 +.
 +├── hosts
 +├── roles
 +│   ├── example
 +│   │   ├── files
 +│   │   │   └── files.tar.bz2
 +│   │   ├── tasks
 +│   │   │   ├── main.yml
 +</​code>​
 +
 +1. Cifrar el archivo, en este caso "​files.tar.bz2"​
 +
 +    ansible-vault encrypt roles/​example/​files/​files.tar.bz2 --vault-id prod@prompt
 +
 +2. Escribir la contraseña
 +
 +3. Añadir una tarea:
 +
 +<​code>​
 +- name: Uncompress the wordrepss files in docker host volume
 +  unarchive:
 +    src: files.tar.bz2
 +    dest: /tmp
 +  become: true
 +</​code>​
 +
 +Nótese que dado que usamos roles no hay que especificar el path absoluto de "​files.tar.bz2"​.
 +
 +4. Ejecutar el playbook.
 +
 +El resultado esperado es que descifrará "​files.tar.bz2"​ y lo dejará en "/​tmp"​ en el servidor remoto
 +===== Comandos útiles =====
 +
 +* Editar archivo encriptado
 +
 +  ansible-vault edit vault.yml --ask-vault-pass
 +
 +* Editar y proporcionar archivo (con la contraseña en plano) para no tener que teclearla cada vez
 +
 +  ansible-vault edit vault.yml --vault-id prod@examples/​password
 +  ​
 +* Editar y proporcionar archivo (con la contraseña en plano) para no tener que teclearla cada vez
 +
 +  ansible-vault view vault.yml --vault-id prod@examples/​password
 +  ​
 +
 +  ​
 +  ​
 +
 +
 +
informatica/linux/ansible.1568117996.txt.gz · Last modified: 2019/09/10 14:19 by jose