Wie kann ich mit Ansible auf einem Dell iDRAC9-Server von einem ISO booten, das sich auf einem Remote-Server befindet?

Wie kann ich mit Ansible auf einem Dell iDRAC9-Server von einem ISO booten, das sich auf einem Remote-Server befindet?

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

verwandte Informationen