Playbooks de Ansible

En construcciónEsta lección está en elaboración

Esta lección es una recopilación de playbooks para realizar diferentes tareas de administración.

Cambio de contraseña

Para la administración de cuentas de usuario, Ansible dispone del módulo user.

Este playbook cambia la contraseña de un usuario:

---
- hosts: 'clients'
  vars:
    user_name: 'barto'
    new_password: 'barto'

  tasks:
  - name: 'Change user password'
    become: true
    user:
      name: '{{ user_name }}'
      password: '{{ new_password | password_hash("sha512") }}'
      update_password: 'always'

Notas:

Cambio de nombre del ordenador

El nombre del ordenador se encuentra en dos ficheros, /etc/hostname y /etc/hosts [Documentación de Debian]

Para la administración del nombre del ordenador en /etc/hostname, Ansible dispone del módulo hostname.

Para la administración del nombre del ordenador en /etc/hosts, Ansible no dispone actualmente (mayo de 2018) de un módulo específico, pero podemos recurrir al módulo replace para cambiar el nombre.

Este playbook cambia el nombre del ordenador:

---
- hosts: 'clients'
  vars:
    new_computer_name: 'hal'

  tasks:
  - name: 'Change computer name (1)'
    become: true
    replace:
      path: '/etc/hosts'
      regexp: '{{ ansible_hostname }}'
      replace: '{{ new_computer_name }}'
      backup: 'yes'
  - name: 'Change computer name (2)'
    become: true
    hostname:
      name: '{{ new_computer_name }}'

Notas:

Cambio de opciones regionales

Las opciones regionales se especifican mediante varias variables de entorno [Documentación de Ubuntu - Documentación de Debian

Para generar el fichero con las variables de entornos de localización, Ansible dispone del módulo locale_gen.

Para esperar hasta que el nodo cliente esté en marcha, Ansible dispone del módulo wait_for_connection.

Para enviar comandos individuales, Ansible dispone de los módulos command y shell.

Este playbook cambia los códigos regionales

---
- hosts: 'clients'
  vars:
    new_locale: 'es_ES.UTF-8'
    new_lc_messages: 'es_ES.UTF-8'

  tasks:
  - name: 'Generate locale'
    become: true
    locale_gen:
      name: '{{ new_locale }}'
      state: 'present'
  - name: 'Reboot'
    become: true
    shell: 'sleep 5 && /sbin/shutdown -r now'
    async: true
    poll: false
  - name: 'Wait for reboot'
    wait_for_connection:
  - name: 'Change locale'
    become: true
    command: 'update-locale LANG={{ new_locale }} LC_MESSAGES={{ new_lc_messages }}'