
Eu tenho este manual que estou tentando instalar o CentOS usando Ansible e Redfish, não quero usar nenhum módulo, vou instalar o CentOS em vários servidores Dell iDRAC9 e estou tendo um problema:
2) Após a montagem do ISO, o servidor não entrou automaticamente no menu de inicialização ISO, e estou tentando fazer isso com a tarefa Definir ISO como dispositivo de inicialização principal.
Alguém por favor pode me ajudar a corrigir isso?
Aqui está o código:
- 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']
Responder1
Consegui realizar uma implantação de sistema operacional no iDRAC9 usando a coleção dellemc.openmanage. Adicione a coleção por meio de comandos ansible galaxy e, a partir de um playbook, importe a função dellemc.openmanage.idrac_os_deployment. https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/playbooks/idrac/idrac_os_deployment.yml
Se você ainda não descobriu, posso trabalhar colocando meu projeto no Gitlab para lhe dar uma ideia do que fazer. Avise