
Ich habe dieses Playbook, mit dem ich versuche, CentOS mit Ansible und Redfish zu installieren. Ich möchte keine Module verwenden. Ich werde CentOS auf mehreren Dell iDRAC9-Servern installieren und habe ein Problem:
2)Nachdem das ISO gemountet wurde, ist der Server nicht automatisch in das ISO-Startmenü gelangt, und ich versuche, dies mit der Aufgabe „ISO als primäres Startgerät festlegen“ zu erreichen.
Kann mir bitte jemand helfen, das zu korrigieren?
Hier ist der Code:
- 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']
Antwort1
Ich konnte mithilfe der Sammlung dellemc.openmanage eine Betriebssystembereitstellung für iDRAC9 durchführen. Fügen Sie die Sammlung über Ansible Galaxy-Befehle hinzu und importieren Sie dann aus einem Playbook die Rolle dellemc.openmanage.idrac_os_deployment. https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/playbooks/idrac/idrac_os_deployment.yml
Wenn Sie es noch nicht herausgefunden haben, kann ich daran arbeiten, mein Projekt in Gitlab zu integrieren, um Ihnen eine Vorstellung davon zu geben, was zu tun ist. Lassen Sie es mich wissen