Premier Training & Business Partner Red Hat

Red Hat Satellite incontra l’automation con Ansible

Valentino Uberti
RHCA, RHCX, RHCI - Red Hat Certified Instructor
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?
Ansible-Satellite

Satellite, prodotto di punta di Red Hat per i systems-management, dalla versione 6.4 si arricchisce delle funzionalità dell’ automation tool per eccellenza: Red Hat Ansible.

In questo blog vedremo come utilizzare Ansible da Satellite per lanciare playbooks e roles sugli hosts gestiti. La versione di Satellite utilizzata è la 6.6.0 perchè è quella utilizzata anche nel corso RH403 “Red Hat Satellite 6 Administration”

Il laboratorio creato per la dimostrazione è molto semplice:



Il provisioning dei due hosts è stato effettuato tramite PXE, previa configurazione del dominio, della subnet, host group e host. L’intero laboratorio è stato creato utilizzando oVirt.

Vedremo ora come poter utilizzare Ansible da Satellite per:

  • Eseguire dei comandi (Remote Execution)
  • Eseguire dei playbook
  • Eseguire roles
  • Eseguire system-roles

Per utilizzare la Remote Execution Ansible richiede accesso agli hosts tramite ssh senza utilizzo di password. Satellite distribuisce la chiave SSH di default a tuti gli hosts provisionati. Se invece abbiamo necessità di distribuire la chiave SSH manualmente dobbiamo copiare la chiave pubblica di ‘foreman-proxy’ sugli hosts selezionati:

ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub <nome_host>

Ansible Remote Execution

Eseguire una Remote Execution tramite Ansible è veramente molto semplice:

Andiamo in Hosts->All Host e selezioniamo il nome dell’host

Selezioniamo “Schedule Remote Job” in alto a destra

Ci ritroveremo nella seguente pagina:

Come ‘Job category’ selezioniamo ‘Ansible Commands’ e come ‘Job template’ ‘Run Command – Ansible Default’

Notiamo che nella ‘Search Query’ è stato selezionato correttamente il nostro host. Se volessimo eseguire lo stesso comando su più hosts, li dovremo aggiungere nella Search Query.

Il comando Linux scelto da eseguire è ‘uptime’. Premiamo Submit e ci ritroveremo nella pagina seguente. Da notare che è stato selezionato ‘Execute now’ per fare eseguire immediatamente il nostro comando tramite Ansible.

Il Job è in fase di running. Troveremo qui il feedback di esecuzione. Se il job è andato a buon fine il risultato sarà simile a questo:

Selezionando il nome host in basso a sinistra, abbiamo accesso ai log di esecuzione. Notiamo che l’exit status è uguale a zero.

Eseguire un playbook

Per eseguire un playbook dobbiamo prima creare un nuovo ‘Job Template’

Spostiamoci in Hosts -> Job Templates -> New Job Template e inseriamo il nome desiderato.

Nella parte in nero possiamo inserire il nostro playbook. Il playbook può anche essere facilmente importato selezionando ‘Import’

Questo è il playbook di esempio:

---
- hosts: all
  tasks:
    - name: Debug message
      debug:
        msg: "The message is: {{ my_message }}"

Come si nota, il playbook necessita della variabile ‘my_message’. Inoltre dobbiamo assicurarci di inserire ‘hosts: all’ perchè sarà Satellite a gestire gli host target.

Sotto il tab ‘Job’ assicuriamoci che per ‘Job category’ sia selezionato ‘Ansible Playbook’ e come ‘Provider Type’ sia selezionato ‘Ansible’

Il playbook richiede una variabile ‘my_message’. Queste variabili possono essere configurate per host:

Selezioniamo ‘Edit’ della riga corrispondente al nostro host (in questo caso selezioniamo solo uno dei due host)

Selezioniamo infine il tab ‘Parameters’ per poter inserire il nome della variabile e il suo contenuto

In questo caso, la variabile ‘my_message’ verrà valorizzata con ‘test message’

Possiamo eseguire il nostro playbook anche da questo menù:

Monitor -> Jobs ->Job invocation -> Run Job

Come ‘Job category’ selezioniamo ‘Ansible Playbook’ e come ‘Job template’ il template creato in precedenza.

In search query in questo caso vengono selezioniati tutti gli host appartenenti al dominio satclients.com.

Lanciando il job sui due hosts, ci ritroveremo in questa situazione:

Un job è fallito, andando a vedere i log di escuzione (selezionando il secondo host) capiremo il perchè:

La variabile ‘my_message’ non è definita per il secondo host. Definiamola come spiegato sopra, e rilanciamo il Job:

L’esecuzione andrà a buon fine per entrambi gli hosts.

Eseguire dei roles

Per poter eseguire degli Ansible roles dobbiamo prima importarli in Satellite. Satellite importerà i ruoli presenti nella directory /etc/ansible/roles nel Satellite Server o nelle Capsule.

I ruoli importati devono seguire l’alberatura corretta altrimenti l’importazione non andrà a buon fine.

Per il nostro esempio utilizzeremo il classico ruolo ‘motd’, che andrà a cambiare il message of the day sui nostri hosts.

Spostiamoci sul server Satellite e creiamo le directory necessarie sotto /etc/ansible/roles

Creiamo il contenuto per il nostro unico task in /etc/ansible/roles/motd/tasks/main.yaml:

- name: motd task
  template:
    src: motd-template.j2
    dest: /etc/motd
    mode: 644
    owner: root
    group: root

Ora creiamo il template in /etc/ansible/roles/motd/templates/motd-template.j2

{% for item in motd_variable %}
{{ item }}
{% endfor %}

la variabile ‘motd_variable’ verrà personalizzata in Satellite, ma il ruolo deve fornire un contenuto di default.

Creiamo quindi il file /etc/ansible/roles/motd/defaults/main.yaml per definire il default di ‘motd_variable’

motd_variable:
  - 'Extraordy default MOTD'

Come si nota la viariabile è definita come un array per poter dare più scelta in fase di personalizzazione.

Una volta creato correttamente il ruolo passiamo torniamo alla GUI.

Selezionando Configure -> Roles ci ritroveremo in questa situazione:

Selezionando ‘Import from satellite.mylab.com’ troveremo il ruolo appena creato visualizzato.

Selezioniamo il nostro ruolo per importarlo.

Una volta importato andremo a creare la variabile

Questa è la schermata che indica l’assenza di variabili definite per questo ruolo

Cliccando su ‘Import from satellite.mylab.com’ verranno automaticamente importate le variabili utilizzate nel ruolo

Selezionamo la variabile e poi ‘Update’

Qui inseriamo il valore della variabile. Da notare che è selezionato ‘Override’ e, siccome il tipo variabile è array, il default value deve essere espresso come tale. Esempio : [“valore1″,”valore2”]

Confermiamo e eseguiamo il ruolo sui nostri hosts.

Per eseguire il ruolo sui più hosts contemporaneamente dobbiamo configurare l’ Host Groups.

Configure -> Host Groups e selezioniamo il nostro host group.

Sotto il tab ‘Ansible Roles’ ritroveremo il nostro ruolo

Premendo il ‘+’ lo assegneremo al nostro host group. Ci ritroveremo nella schermata degli host group, ma sotto ‘Actions’ potremo selezionare la voce ‘Play Roles’ per eseguire il ruolo su tutti gli hosts.

Esattamente come visto con i playbook ci ritroveremo in questa situazione:

Terminata l’esecuzione:

Verifichiamo il cambio del MOTD su entrami gli hosts:

Eseguire system-roles

Per poter eseguire gli Ansible systems-roles, dobbiamo prima installarli sul nostro Satellite Server e sulle eventuali Capsule:

# subscription-manager repos --enable=rhel-7-server-extras-rpms
# satellite-maintain packages install rhel-system-roles

Una volta installati il procedimento da seguire per l’utilizzo è quello descritto sopra.

Come abbiamo visto sfruttare le potenzialità di Ansible da Satellite è piuttosto semplice ma allo stesso momento molto potente.

Devi risolvere un problema analogo? Chiedi aiuto a noi di EXTRAORDY – la formazione ufficiale Red Hat con il corso RH403 Red Hat Satellite 6 Administration.

Contattaci

Info about author

Valentino Uberti

RHCA, RHCI, RHCX and consultant