Ansible CISCO CIMC : Reset CIMC

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

Post to Twitter