Как выполнить загрузку с помощью Ansible на сервере Dell iDRAC9 с ISO-образа, расположенного на удаленном сервере?

Как выполнить загрузку с помощью Ansible на сервере Dell iDRAC9 с ISO-образа, расположенного на удаленном сервере?

У меня есть руководство по установке CentOS с помощью Ansible и Redfish. Я не хочу использовать никакие модули. Я установлю CentOS на несколько серверов Dell iDRAC9, и у меня возникла одна проблема:

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

Мне удалось выполнить развертывание ОС на iDRAC9 с помощью коллекции dellemc.openmanage. Добавьте коллекцию с помощью команд ansible galaxy, затем из playbook импортируйте роль dellemc.openmanage.idrac_os_deployment. https://github.com/dell/dellemc-openmanage-ansible-modules/blob/collections/playbooks/idrac/idrac_os_deployment.yml

Если вы еще не поняли, я могу поработать над размещением своего проекта в Gitlab, чтобы дать вам представление о том, что делать. Дайте мне знать

Связанный контент