Cela faisait un moment que l’on souhaitait intégrer un reset CIMC dans nos workflows de type souscription/décommissionnement de host CISCO (afin de rendre la CIMC le plus “propre” au début du workflow). C’est désormais chose faite via l’ajout du playbook ci-dessous.
- hosts: localhost
vars:
imc_hostname: "your_IMC"
imc_username: "IMC_username"
imc_password: "IMC_password"
tasks:
- name: Reset CIMC
ignore_errors: yes
community.general.imc_rest:
hostname: '{{ imc_hostname }}'
username: '{{ imc_username }}'
password: '{{ imc_password }}'
validate_certs: no
timeout: 30
content: |
<configConfMo>
<inConfig>
<computeRackUnit adminPower="bmc-reset-immediate" dn="sys/rack-unit-1">
</computeRackUnit>
</inConfig>
</configConfMo>
register: result
- debug:
var: result
- name: Pause for 5 minutes to wait cimc reset
ansible.builtin.pause:
minutes: 5
- name: Check uri CIMC
uri:
url: "{{ imc_hostname }}"
validate_certs: no
status_code: 200
register: result_cimcuri
retries: 5
delay: 10
until: result_cimcuri is not failed
- name: Stop play if result is not 200
ansible.builtin.fail:
msg: "!!! Please check uri {{ imc_hostname }} !!!"
when: result_cimcuri.status != 200
- debug:
msg: "{{ result_cimcuri }}"
Une fois la task lancée, après le time-out (quelle que soit la durée du time-out) vous obtiendrez l’erreur ci-dessous (c’est pour cela que l’on a ajouté le “ignore_errors: yes” ).
msg”: “Task failed with error -1: Connection failure: The read operation timed out”
L’erreur n’empêche pas le reset CIMC et avec le “ignore_errors: yes” nous pouvons passer à la task suivante (nous avons ajouté une pause de 5 mn afin de laisser le temps à la CIMC de “remonter”), afin de vérifier que la CIMC est bien remontée on check l’uri de la CIMC via la task “Check uri CIMC”, si la CIMC ne répond (code retour http 200) alors la task “Stop play if result is not 200” arrête le play avec le message d’erreur “!!! Please check uri {{ imc_hostname }} !!!”
Généralement nous recherchons les call API de CIMC via l’url “http://CIMC/visore.html“, mais pour le reset de CIMC impossible de trouver le call API en question (au pire on pouvait passer en SSH sur la CIMC, mais ce n’était pas le but). C’est en googlelant que nous sommes tombés sur sur le call API permettant le reset CIMC : reset CIMC with call API