From 74e79951c64e78dbcba7484e5abd98c439118e95 Mon Sep 17 00:00:00 2001 From: Boris Glimcher Date: Tue, 6 Feb 2024 17:38:22 +0200 Subject: [PATCH] feat: fill bmc_fw_update role Signed-off-by: Boris Glimcher --- playbooks/firmware.yml | 6 +++ roles/bmc_fw_update/tasks/main.yml | 83 ++++++++++++++++++++++++++++++ roles/bmc_fw_update/vars/main.yml | 5 ++ 3 files changed, 94 insertions(+) create mode 100644 playbooks/firmware.yml diff --git a/playbooks/firmware.yml b/playbooks/firmware.yml new file mode 100644 index 0000000..474911c --- /dev/null +++ b/playbooks/firmware.yml @@ -0,0 +1,6 @@ +- name: Update DPU Firmware + hosts: all + connection: local + gather_facts: false + roles: + - bmc_fw_update diff --git a/roles/bmc_fw_update/tasks/main.yml b/roles/bmc_fw_update/tasks/main.yml index 2be7d44..471b35d 100644 --- a/roles/bmc_fw_update/tasks/main.yml +++ b/roles/bmc_fw_update/tasks/main.yml @@ -1,2 +1,85 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries. + --- # tasks file for bmc_fw_update + +- name: Get Firmware Inventory + community.general.redfish_info: + category: Update + command: GetFirmwareInventory + baseuri: "{{ inventory_hostname }}" + username: "{{ dpu_bmc_username }}" + password: "{{ dpu_bmc_password }}" + register: fw_inventory_before + +- name: Print BMC Version + ansible.builtin.debug: + msg: "{{ fw_inventory_before.redfish_facts.firmware.entries[0].Version }}" + +- name: Download firmware {{ firmware.bmc }} image + ansible.builtin.get_url: + url: "{{ firmware.url }}/{{ firmware.bmc }}" + dest: /tmp/{{ firmware.bmc }} + mode: '0440' + +- name: Update BMC firmware of DPU + community.general.redfish_command: + category: Update + command: MultipartHTTPPushUpdate + baseuri: "{{ inventory_hostname }}" + username: "{{ dpu_bmc_username }}" + password: "{{ dpu_bmc_password }}" + timeout: 600 + update_image_file: "/tmp/{{ firmware.bmc }}" + register: result_update_task + +- name: Print TASK id for tracking + ansible.builtin.debug: + msg: "{{ result_update_task.return_values.update_status.handle }}" + +- name: Pause for 10 seconds for BMC to start task + ansible.builtin.pause: + seconds: 10 + +- name: Get the status of an update operation in a loop + community.general.redfish_info: + category: Update + command: GetUpdateStatus + baseuri: "{{ inventory_hostname }}" + username: "{{ dpu_bmc_username }}" + password: "{{ dpu_bmc_password }}" + update_handle: "{{ result_update_task.return_values.update_status.handle }}" + register: update_progress + until: update_progress.redfish_facts.update_status.status != 'Running' + retries: 60 + delay: 30 + +- ansible.builtin.assert: { that: "update_progress.redfish_facts.update_status.status == 'Completed'" } + +- name: Reboot BMC to apply new firmware of DPU + community.general.redfish_command: + category: Manager + command: GracefulRestart + baseuri: "{{ inventory_hostname }}" + username: "{{ dpu_bmc_username }}" + password: "{{ dpu_bmc_password }}" + +- name: Pause for 60 seconds for BMC to Reboot + ansible.builtin.pause: + seconds: 60 + +- name: Get Firmware Inventory + community.general.redfish_info: + category: Update + command: GetFirmwareInventory + baseuri: "{{ inventory_hostname }}" + username: "{{ dpu_bmc_username }}" + password: "{{ dpu_bmc_password }}" + register: fw_inventory_after + +- name: Print BMC Version + ansible.builtin.debug: + msg: "{{ fw_inventory_after.redfish_facts.firmware.entries[0].Version }}" + +- ansible.builtin.assert: { that: "fw_inventory_before.redfish_facts.firmware.entries[0].Version != fw_inventory_after.redfish_facts.firmware.entries[0].Version" } diff --git a/roles/bmc_fw_update/vars/main.yml b/roles/bmc_fw_update/vars/main.yml index 4abc8d8..9911bed 100644 --- a/roles/bmc_fw_update/vars/main.yml +++ b/roles/bmc_fw_update/vars/main.yml @@ -1,2 +1,7 @@ --- # vars file for bmc_fw_update + +firmware: + url: https://content.mellanox.com/BlueField/BMC/23.10-1-oct-2023 + bmc: bf3-bmc-23.10-5_opn.fwpkg + cec: cec1736-ecfw-00.02.0152.0000-n02-rel-prod.fwpkg