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 :
- 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
- 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)
- 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”.

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