
我有一本劇本,我想做的是使用 Ansible 和 Redfish 安裝 CentOS,我不想使用任何模組,我將在多台 Dell iDRAC9 伺服器上安裝 CentOS,但我遇到一個問題:
2)安裝ISO後,伺服器沒有自動進入ISO啟動選單,我試著透過「將ISO設定為主要啟動設備」任務來實現這一點。
有人可以幫我糾正這個問題嗎?
這是代碼:
- hosts: Linux_OS_machine
connection: local
name: ULP image install
gather_facts: false
vars:
ansible_python_interpreter: /usr/bin/env python
datatype: SetBiosAttributes
image: "{{ iso_version }}-{{ inventory_hostname }}.iso"
tasks:
- name: Check system power state
uri:
url: https://{{ idrac }}/redfish/v1/Systems/System.Embedded.1
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
method: GET
validate_certs: false
force_basic_auth: yes
return_content: yes
register: system_status
- name: Power on system if off
when: system_status.json.PowerState == "Off"
uri:
url: https://{{ idrac }}/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset/
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
method: POST
body:
ResetType: PushPowerButton # Set ResetType to PushPowerButton for system poweron
validate_certs: false
force_basic_auth: yes
status_code: 204
body_format: json
register: poweron_status
- name: Check if virtual media is mounted
uri:
url: https://{{ idrac }}/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
method: GET
validate_certs: false
force_basic_auth: yes
return_content: yes
register: vm_status
- name: Unmount virtual media if mounted
uri:
url: https://{{ idrac }}/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia
method: POST
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
validate_certs: false
force_basic_auth: yes
status_code: 204
body_format: json
vars:
image: "{{ iso_version }}-{{ inventory_hostname }}.iso"
when:
- vm_status.json.ConnectedVia == "VirtualMedia"
- vm_status.json.Status != "NotConnected"
- vm_status.json.Image != image
- name: Mount virtual media if not already mounted
uri:
url: https://{{ idrac }}/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia
method: POST
headers:
Authorization: Basic {{ (idrac_user + ':' + idrac_pass) | b64encode }}
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
validate_certs: false
force_basic_auth: yes
status_code: [200, 204]
body_format: json
body:
Image: ""
vars:
image: "{{ iso_version }}-{{ inventory_hostname }}.iso"
register: mount_media
when:
- vm_status.json.ConnectedVia == "NotConnected"
- name: Set ISO as primary boot device
uri:
url: https://{{ idrac }}/redfish/v1/Systems/System.Embedded.1
method: PATCH
headers:
Authorization: Basic {{ (idrac_user + ':' + idrac_pass) | b64encode }}
Content-Type: application/json
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
validate_certs: false
force_basic_auth: yes
status_code: [200, 204]
body_format: json
body:
Boot:
BootSourceOverrideTarget: Cd
BootSourceOverrideEnabled: Once
BootSourceOverrideSupported: ["None", "Cd", "Floppy", "Hdd", "Usb", "Pxe", "BiosSetup", "Utilities", "Diags", "SDCard", "UefiShell"]
BootSourceOverrideMode: Legacy
[email protected]: "#ComputerSystem.BootSource"
- name: Reboot the system
uri:
url: https://{{ idrac }}/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset/
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
method: POST
body:
ResetType: ForceRestart
validate_certs: false
force_basic_auth: yes
status_code: 204
body_format: json
- name: Display message during ULP image installation
debug:
msg: "ULP image installation in progress. Please wait."
- name: Wait for system to boot up
wait_for:
port: 22
host: "{{ inventory_hostname }}"
delay: 30
timeout: 14400
- name: Unmount ISO from server
uri:
url: https://{{ idrac }}/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia
method: POST
user: "{{ idrac_user }}"
password: "{{ idrac_pass }}"
validate_certs: false
force_basic_auth: yes
status_code: 204
body_format: json
when: inventory_hostname in groups['Linux_OS_machine'] and "linux" in ansible_facts['os_family']
答案1
我已經能夠使用 dellemc.openmanage 集合完成到 iDRAC9 的作業系統部署。透過 ansible Galaxy 指令新增集合,然後從劇本中匯入角色 dellemc.openmanage.idrac_os_deployment。 https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/playbooks/idrac/idrac_os_deployment.yml
如果您還沒有弄清楚,我可以將我的專案放入 Gitlab,以便您了解該怎麼做。讓我知道