dell / redfish-ansible-module

Ansible modules for Out-Of-Band Controllers using Redfish APIs
GNU General Public License v3.0
197 stars 80 forks source link

Job history of iDRAC using Redfish-Ansible module #105

Closed ashokbeh closed 2 years ago

ashokbeh commented 2 years ago

Hi, I am in need of a Redfish API that can validate if a particular job is run most recently in iDRAC 9.

For example: Remote diagnostic. Scheduled tart time: Scheduled end time.

Can we use the redfish URL ? URL /redfish/v1/Managers//Jobs/<Job-Id But we cannot use the job-id because that will vary unlike job name "Remote Diagnostics". As part of the script we need to collect the such job and its id

Would appreciate your support.

Regards Ashok Behera

anupamaloke commented 2 years ago

@ashokbeh, I am guessing following is the workflow that you are looking to automate using ansible:

  tasks:
  - name: Get the job queue
    ansible.builtin.uri:
      url: "https://{{ inventory_hostname }}/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/Jobs?$expand=*"
      user: "root"
      password: "Dell_123"
      validate_certs: False
      force_basic_auth: yes
      method: GET
      headers:
        Accept: "application/json"
        OData-Version: "4.0"
      status_code: 200
    register: job_queue_response

  - name: check if a diagnostics job is still running
    ansible.builtin.set_fact:
      diag_jobs: "{{ job_queue_response.json.Members | selectattr('Name', 'eq', 'Remote Diagnostics') }}"
    when:
      - job_queue_response.json["Members@odata.count"] > 0

  - ansible.builtin.debug:
      var: diag_jobs

  - block:
      - name: get the diag job ID if still running
        ansible.builtin.set_fact:
          diag_job_id: "{{ item.Id }}"
          diag_job_running: True
        when:
          - item.JobState == "Running"
        loop: "{{ diag_jobs }}"
    when:
      - diag_jobs is defined and diag_jobs|length > 0

  - ansible.builtin.debug:
      msg: "{{ diag_job_id }} {{ diag_job_running }}"
    when:
      - diag_job_id is defined and diag_job_running is defined

  - block:
      - name: run diagnostics
        ansible.builtin.uri:
          url: "https://{{ inventory_hostname }}/redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/DellLCService/Actions/DellLCService.RunePSADiagnostics"
          user: "root"
          password: "Dell_123"
          validate_certs: False
          force_basic_auth: yes
          method: POST
          headers:
            Accept: "application/json"
            Content-Type: "application/json"
            OData-Version: "4.0"
          body:
            RebootJobType: "GracefulRebootWithoutForcedShutdown"
            RunMode: "Express"
          body_format: json
          status_code: [200, 202]
        register: diag_response

      - name: get the job ID
        ansible.builtin.set_fact:
          diag_job_id: "{{ diag_response.location.split('/')[-1] }}"

    when:
      - (diag_job_running is not defined) or (not diag_job_running)

  - name: track job till completion
    dellemc.openmanage.idrac_lifecycle_controller_job_status_info:
      idrac_ip: "{{ inventory_hostname }}"
      idrac_user: "{{ user }}"
      idrac_password: "{{ password }}"
      job_id: "{{ diag_job_id }}"
    register: result
    until: result.job_info.JobStatus == "Completed" or result.job_info.JobStatus == "Failed"
    failed_when: result.job_info.JobStatus == "Failed"
    retries: 6
    delay: 300
    when:
      - diag_job_id
ashokbeh commented 2 years ago

Hi Anupamaloke,

Thank you for sharing the sample Ansible playbook. I will test and confirm.

Also, to know the most recent "Remote Diagnostic" before we run the next diagnostic test on iDRAC, can we use URL /redfish/v1/Dell/Managers//DellLCService/Actions/ ?

The export output contains all the components end time stamp.Thinking if it will be right to consider the end time of test of the last component.

Example: Ended: 09/21/2021 16:31:05, Elapsed time: 00:00:00

System Management - Functional Test

Started: 09/21/2021 16:31:05

IPMI Sep 21 2021 13:15:03 Warning. POST Pkg Repair: Memory sensor, redundancy degraded A4 was asserted.

3 records since last scan (Pass=2, Warning=1, Fail=0 Critical=0, Other=0)

Ended: 09/21/2021 16:31:05, Elapsed time: 00:00:00

Test Results : Warning

Msg : Event log - The log contains failing records **

Regards Ashok Behera

anupamaloke commented 2 years ago

@ashokbeh, you can use the /redfish/v1/Managers/iDRAC.Embedded.1/Oem/Dell/DellLCService/Actions/DellLCService.ExportePSADiagnosticsResult URI to export the diagnostics logs.

anupamaloke commented 2 years ago

Closing this issue as there has been no update since long.

ashokbeh commented 2 years ago

Thank you for you support Anup.