Skip to content

Commit

Permalink
feat: fill bmc_fw_update role
Browse files Browse the repository at this point in the history
Signed-off-by: Boris Glimcher <[email protected]>
  • Loading branch information
glimchb committed Feb 20, 2024
1 parent 1c68e74 commit 13bc728
Show file tree
Hide file tree
Showing 9 changed files with 181 additions and 1 deletion.
8 changes: 8 additions & 0 deletions playbooks/firmware.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

- name: Update DPU Firmware
hosts: all
gather_facts: false
roles:
- bmc_fw_update
6 changes: 6 additions & 0 deletions roles/bmc_fw_update/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

---
# defaults file for bmc_fw_update

reboot: true

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.16)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.16)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)

Check failure on line 7 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: reboot)
job_wait: true

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.16)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.16)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.15)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)

Check failure on line 8 in roles/bmc_fw_update/defaults/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.14)

var-naming[no-role-prefix]

Variables names from within roles should use bmc_fw_update_ as a prefix. (vars: job_wait)
32 changes: 32 additions & 0 deletions roles/bmc_fw_update/meta/argument_specs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.
---
argument_specs:
main:
version_added: "1.0.0"
short_description: Firmware update of DPU BMC
description:
- Update the Firmware of the DPU BMC from URL or local file.
options:
dpu_bmc_hostname:
required: true
type: str
description: DPU BMC IP Address or hostname.
dpu_bmc_username:
type: str
description: DPU BMC username with admin privileges.
dpu_bmc_password:
type: str
description: DPU BMC user password.
reboot:
description:
- Provides the option to apply the update packages immediately or in the next reboot.
- If I(reboot) is set to C(true), then the packages are applied immediately.
- If I(reboot) is set to C(false), then the packages are staged and applied in the next reboot.
- Packages that do not require a reboot are applied immediately irrespective of I (reboot).
type: bool
default: false
job_wait:
description: Whether to wait for job completion or not.
type: bool
default: true

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.16)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.14)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.16)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.15)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.15)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.15)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.14)

yaml[new-line-at-end-of-file]

No new line character at the end of file

Check failure on line 32 in roles/bmc_fw_update/meta/argument_specs.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.14)

yaml[new-line-at-end-of-file]

No new line character at the end of file
3 changes: 2 additions & 1 deletion roles/bmc_fw_update/meta/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ galaxy_info:
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.

dependencies: []
dependencies:
- role: bmc_reboot
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.
82 changes: 82 additions & 0 deletions roles/bmc_fw_update/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,84 @@
# 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
ansible.builtin.include_role:
name: get_bmc_facts
register: get_bmc_facts_before

- name: Print BMC Version
ansible.builtin.debug:
msg: "{{ get_bmc_facts_before.redfish_facts.firmware.entries[0].Version }}"

- name: Download firmware image {{ bmc_fw_update_image.bmc }}
ansible.builtin.get_url:
url: "{{ bmc_fw_update_image.url }}/{{ bmc_fw_update_image.bmc }}"
dest: /tmp/{{ bmc_fw_update_image.bmc }}
mode: '0440'
delegate_to: localhost

- 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/{{ bmc_fw_update_image.bmc }}"
register: result_update_task
delegate_to: localhost

- name: Extract task id from update task
ansible.builtin.set_fact:
bmc_firmware_update_taskid: "{{ result_update_task.return_values.update_status.handle }}"

- 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
delegate_to: localhost

- name: Validate task was completed
ansible.builtin.assert: { that: "update_progress.redfish_facts.update_status.status == 'Completed'" }

- name: Reboot BMC to apply new firmware of DPU
ansible.builtin.include_role:
name: bmc_reboot
when:
- reboot is true

- name: Pause for 60 seconds for BMC to Reboot
ansible.builtin.pause:
seconds: 60

- name: Get Firmware Inventory
ansible.builtin.include_role:
name: get_bmc_facts
register: get_bmc_facts_after

- name: Print BMC Version
ansible.builtin.debug:
msg: "{{ get_bmc_facts_after.redfish_facts.firmware.entries[0].Version }}"

- name: Validate fw image changed from before
ansible.builtin.assert: { that: "get_bmc_facts_before.redfish_facts.firmware.entries[0].Version != get_bmc_facts_after.redfish_facts.firmware.entries[0].Version" }

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.16)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.14)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.16)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.15)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.15)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.10, stable-2.15)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.11, stable-2.14)

yaml[line-length]

Line too long (165 > 160 characters)

Check failure on line 84 in roles/bmc_fw_update/tasks/main.yml

View workflow job for this annotation

GitHub Actions / Ansible lint (3.9, stable-2.14)

yaml[line-length]

Line too long (165 > 160 characters)
8 changes: 8 additions & 0 deletions roles/bmc_fw_update/vars/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

---
# vars file for bmc_fw_update

bmc_fw_update_image:
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
12 changes: 12 additions & 0 deletions roles/bmc_reboot/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,14 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

---
# tasks file for bmc_reboot

- 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 }}"
delegate_to: localhost
17 changes: 17 additions & 0 deletions roles/get_bmc_facts/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

---
# tasks file for get_bmc_facts

- name: Get Firmware Inventory
community.general.redfish_info:
category: Update
command: GetFirmwareInventory
baseuri: "{{ inventory_hostname }}"
username: "{{ dpu_bmc_username }}"
password: "{{ dpu_bmc_password }}"
register: result
delegate_to: localhost

- name: Extract BMC firmware version from inventory
ansible.builtin.set_fact:
bmc_firmware_version: "{{ result.redfish_facts.firmware.entries[0].Version }}"
14 changes: 14 additions & 0 deletions roles/update_bmc_password/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022-2024 Dell Inc, or its subsidiaries.

---
# tasks file for update_bmc_password

- name: Update user password
community.general.redfish_command:
category: Accounts
command: UpdateUserPassword
baseuri: "{{ inventory_hostname }}"
username: "{{ dpu_bmc_username }}"
password: "{{ dpu_bmc_password }}"
account_username: "{{ loginname }}"
account_password: "{{ new_pass }}"
delegate_to: localhost

0 comments on commit 13bc728

Please sign in to comment.