Como posso inicializar usando o Ansible em um servidor Dell iDRAC9 a partir de uma iso localizada em um servidor remoto?

Como posso inicializar usando o Ansible em um servidor Dell iDRAC9 a partir de uma iso localizada em um servidor remoto?

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

informação relacionada