我有这个剧本,我想做的是使用 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 中,让你了解该怎么做。告诉我