
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에 OS 배포를 수행할 수 있었습니다. ansible galaxy 명령을 통해 컬렉션을 추가한 다음 플레이북에서 dellemc.openmanage.idrac_os_deployment 역할을 가져옵니다. https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/playbooks/idrac/idrac_os_deployment.yml
아직 이해하지 못하셨다면 제 프로젝트를 Gitlab에 올려서 무엇을 해야 할지 알려드릴 수 있습니다. 알려줘요