Skip to content

IDRAC : purger la liste des jobs via Ansible

  • by

Dans certaines de nos automations nous avons besoin avant de lancer toutes actions sur nos IDRAC de purger la liste des jobs (jobs en cours et l’historique des jobs), c’est le cas notamment dans le cadre d’un déploiement de serveur baremetal par exemple (afin d’être sûr que les jobs que nous allons lancer ne soient pas mis en attente par exemple) Pour cela nous avons écrit un rôle que nous avons transposé dans le playbook ci-dessous. 

Le fonctionnement est très simple :

  1. Nous vérifions au préalable le contenu de la queue des jobs de l’IDRAC, si cette dernière est égale à 0 alors nous ne faisons aucune action
  2. Si la queue des jobs est supérieure à 0, le playbook  passe au block “Block Empty the job queue” et purge la queue des jobs quel que soit le statut des jobs (jobs en cours y compris)
  3. Nous vérifions le contenu de la queue après la purge, si cette dernière est égale à 0 le playbook se finit sans erreur, si la queue est supérieure à 0 alors on fail le playbook avec un message d’erreur “The iDRAC queue is not empty : {{ jobs_count_after }} please check.
- hosts: localhost

  vars:
    idrac_ip : ''
    idrac_user: ''
    admin_pass: ''

  tasks:


    - name: List job queue on {{ idrac_ip }}
      ansible.builtin.uri:
        url: "https://{{ idrac_ip }}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs"
        method: GET
        user: "{{ idrac_user }}"
        password: "{{ idrac_password }}"
        force_basic_auth: true
        validate_certs: false
        return_content: true
        status_code: 200
      register: jobs_before

    - name: create jobs_count_before vars
      ansible.builtin.set_fact:
        jobs_count_before: "{{ (jobs_before.json.Members | default([])) | length }}"

    - name : Display job count before action on {{ idrac_ip }}
      ansible.builtin.debug:
        msg: "Job(s) count before clear queue: {{  jobs_count_before }}"

    ###############################################
    # Block  Empty the job queue if greater than 0
    ###############################################
    - name: Block Empty the job queue
      block:
        - name: Empty the job queue on {{ idrac_ip }}
          dellemc.openmanage.idrac_lifecycle_controller_jobs:
            idrac_ip: '{{  idrac_ip }}'
            idrac_user: '{{ idrac_user }}'
            idrac_password:  '{{ idrac_password }}'
            validate_certs: no
          register: clear_job
          failed_when: >
            (clear_job is failed)
          until: clear_job is succeeded
          retries: 10
          delay: 30

        - name : Display clear jobs status on {{ idrac_ip }}
          ansible.builtin.debug:
            msg: 
              - "Message : {{ (clear_job.status | default({})).Message | default(clear_job.msg | default('N/A')) }}"
              - "Return  : {{ (clear_job.status | default({})).Return  | default('N/A') }}"
              - "Status  : {{ (clear_job.status | default({})).Status  | default('N/A') }}"
        
        - name: List job queue on {{ idrac_ip }}
          ansible.builtin.uri:
            url: "https://{{ idrac_ip }}/redfish/v1/Managers/iDRAC.Embedded.1/Jobs"
            method: GET
            user: "{{ idrac_user }}"
            password: "{{ idrac_password }}"
            force_basic_auth: true
            validate_certs: false
            return_content: true
            status_code: 200
          register: jobs_after

        - ansible.builtin.set_fact:
            jobs_count_after: "{{ (jobs_after.json.Members | default([])) | length }}"

        - name : Display job count after action on {{  idrac_ip }}
          ansible.builtin.debug:
            msg: 
              - 'Job(s) count after clear queue: {{  jobs_count_after }}'

        - name: Fail if the queue is not empty after clear job {{ idrac_hostname_ip }}
          ansible.builtin.fail:
            msg: "The iDRAC queue is not empty : {{ jobs_count_after }} please check."
          when: jobs_count_after | int != 0

      when: jobs_count_before | int > 0

Ci-dessous l’état de la “Job queue” d’un de nos IDRAC avant le passage du playbook (nous avons 3 jobs completed et 1 job runing).

On Lance le playbook afin de purger le “Job Queue”.

Le playbook a bien supprimé les 4 jobs présents dans le “Job Queue” et nous avons bien à présent une “Job Queue” vide (count à 0)

On retourne sur l’IDRAC pour constater que la “Job Queue” est bien purgée

Même la GUI de l’IDRAC est d’accord avec nous 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

*