dell / dellemc-openmanage-ansible-modules

Dell OpenManage Ansible Modules
GNU General Public License v3.0
338 stars 163 forks source link

[BUG]: Authorization request header is present in the request #612

Open b4ldr opened 9 months ago

b4ldr commented 9 months ago

Bug Description

When using dellemc.openmanage.idrac_virtual_media i get the following error

@Message.ExtendedInfo": [
                {
                    "Message": "Unable to complete the operation because the Authorization request header is present in the request.",
                    "MessageArgs": [],
                    "MessageArgs@odata.count": 0,
                    "MessageId": "IDRAC.2.9.SYS468",
                    "RelatedProperties": [],
                    "RelatedProperties@odata.count": 0,
                    "Resolution": "Make sure that the Authorization request header is not included and retry the operation. For information about the necessary headers, see the Redfish specification and Redfish User's Guide available on the support site.",
                    "Severity": "Informational"
                }
            ],
            "code": "Base.1.8.GeneralError",
            "message": "A general error has occurred. See ExtendedInfo for more information."
        }

Component or Module Name

idrac_virtual_media

Ansible Version

2.16.2

Python Version

3.12

iDRAC/OME/OME-M version

iDRAC: 7.00.60.00

Operating System

Mac sonoma 14.1.1

Playbook Used

- name: mount
  vars_prompt:
    - name: fqdn
      private: false
      prompt: "Enter the fqdn to re-image"
  vars:
    download_location: "https://download.dns.icann.org/{{fqdn}}.iso"
    drac_fqdn: "drac.{{fqdn}}"
    drac_ip: "{{lookup('community.general.dig', 'drac.{{fqdn}}')}}"
    drac_user: "root"
  hosts: ["{{fqdn}}"]
  gather_facts: no
  roles:
    - role: isobuilder
      tags: isobuilder
  tasks:
    - name: print the drac ip address
      ansible.builtin.debug:
        msg: "{{fqdn}} drac ip is: {{drac_ip}}"
    - name: Remote mount the iso file
      dellemc.openmanage.idrac_virtual_media:
        idrac_ip: "{{drac_fqdn}}"
        idrac_user: "{{drac_user}}"
        idrac_password: "{{drac_password}}"
        force: true
        validate_certs: false
        virtual_media:
          - insert: true
            image: "{{download_location}}"
      delegate_to: localhost

    - name: Configure the boot source override mode.
      delegate_to: localhost
      dellemc.openmanage.idrac_boot:
        idrac_ip: "{{drac_fqdn}}"
        idrac_user: "{{idrac_user}}"
        idrac_password: "{{drac_password}}"
        validate_certs: false
        boot_source_override_target: cd
        boot_source_override_enabled: once
        reset_type: force_restart
      register: idrac_os_deployment_idrac_boot

Logs

ansible-playbook -vvvvv drac_mount_vcd.yaml        22s 17:10:47
ansible-playbook [core 2.16.2]
  config file = /Users/john.bond/git/ansible/ansible.cfg
  configured module search path = ['/Users/john.bond/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/9.1.0/libexec/lib/python3.12/site-packages/ansible
  ansible collection location = /Users/john.bond/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.12.1 (main, Dec  7 2023, 20:45:44) [Clang 15.0.0 (clang-1500.1.0.2.5)] (/usr/local/Cellar/ansible/9.1.0/libexec/bin/python)
  jinja version = 3.1.3
  libyaml = True
Using /Users/john.bond/git/ansible/ansible.cfg as config file
Reading vault password file: /Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS
setting up inventory plugins
Loading collection ansible.builtin from
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
setting up inventory plugins
host_list declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /usr/local/ansible/hosts as it did not pass its verify_file() method
[WARNING]: Unable to parse /usr/local/ansible/hosts as an inventory source
setting up inventory plugins
host_list declined parsing /Users/john.bond/git/ansible/hosts as it did not pass its verify_file() method
script declined parsing /Users/john.bond/git/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /Users/john.bond/git/ansible/hosts as it did not pass its verify_file() method
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target)
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see
details
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target)
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target)
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target-iad)
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target-iad)
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target-lax)
Not replacing invalid character(s) "{'-'}" in group name (benchmark-target-lax)
Not replacing invalid character(s) "{'-'}" in group name (puppet-master)
Not replacing invalid character(s) "{'-'}" in group name (puppet-master)
Not replacing invalid character(s) "{'-'}" in group name (targets-zonereport)
Not replacing invalid character(s) "{'-'}" in group name (targets-zonereport)
Not replacing invalid character(s) "{'-'}" in group name (gsi-signer)
Not replacing invalid character(s) "{'-'}" in group name (gsi-signer)
Not replacing invalid character(s) "{'-'}" in group name (gsi-distribution)
Not replacing invalid character(s) "{'-'}" in group name (gsi-distribution)
Not replacing invalid character(s) "{'-'}" in group name (lax-vm-template)
Not replacing invalid character(s) "{'-'}" in group name (lax-vm-template)
Not replacing invalid character(s) "{'-'}" in group name (iad-vm-template)
Not replacing invalid character(s) "{'-'}" in group name (iad-vm-template)
Not replacing invalid character(s) "{'-'}" in group name (mgmt-system)
Not replacing invalid character(s) "{'-'}" in group name (mgmt-system)
Not replacing invalid character(s) "{'-'}" in group name (imrs-sin-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-sin-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-prg-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-prg-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-nbo-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-nbo-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-lax-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-lax-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-rtv-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-rtv-cluster)
Not replacing invalid character(s) "{'-'}" in group name (imrs-clusters)
Not replacing invalid character(s) "{'-'}" in group name (imrs-clusters)
Not replacing invalid character(s) "{'-'}" in group name (wombat-lax)
Not replacing invalid character(s) "{'-'}" in group name (wombat-lax)
Not replacing invalid character(s) "{'-'}" in group name (wombat-iad)
Not replacing invalid character(s) "{'-'}" in group name (wombat-iad)
Parsed /Users/john.bond/git/ansible/hosts inventory source with ini plugin
Loading collection dellemc.openmanage from /Users/john.bond/git/ansible/collections/ansible_collections/dellemc/openmanage
Loading callback plugin default of type stdout, v2.0 from /usr/local/Cellar/ansible/9.1.0/libexec/lib/python3.12/site-packages/ansible/plugins/callback/default.py
Attempting to use 'default' callback.
Skipping callback 'default', as we already have a stdout callback.
Attempting to use 'junit' callback.
Attempting to use 'minimal' callback.
Skipping callback 'minimal', as we already have a stdout callback.
Attempting to use 'oneline' callback.
Skipping callback 'oneline', as we already have a stdout callback.
Attempting to use 'tree' callback.

PLAYBOOK: drac_mount_vcd.yaml **************************************************************
Positional arguments: drac_mount_vcd.yaml
verbosity: 5
connection: ssh
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/hosts', '/usr/local/ansible/hosts', '/Users/john.bond/git/ansible/hosts')
forks: 30
1 plays in drac_mount_vcd.yaml
Enter the fqdn to re-image: ae01.xz-stp.l.dns.icann.org

PLAY [isobuilder] **************************************************************************
Found a vault_id (default) in the vaulttext
We have a secret associated with vault id (default), will try to use to decrypt /Users/john.bond/git/ansible/group_vars/all/secret.yml
Trying to use vault secret=(FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS')) id=default to decrypt /Users/john.bond/git/ansible/group_vars/all/secret.yml
Trying secret FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS') for vault_id=default
Decrypt of "b'/Users/john.bond/git/ansible/group_vars/all/secret.yml'" successful with secret=FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS') and vault_id=default
Found a vault_id (default) in the vaulttext
We have a secret associated with vault id (default), will try to use to decrypt /Users/john.bond/git/ansible/group_vars/all/vault.yml
Trying to use vault secret=(FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS')) id=default to decrypt /Users/john.bond/git/ansible/group_vars/all/vault.yml
Trying secret FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS') for vault_id=default
Decrypt of "b'/Users/john.bond/git/ansible/group_vars/all/vault.yml'" successful with secret=FileVaultSecret(filename='/Users/john.bond/git/ansible/.ANSIBLE_VAULT_PASS') and vault_id=default

TASK [print the drac ip address] ***********************************************************
task path: /Users/john.bond/git/ansible/drac_mount_vcd.yaml:15
Loading collection community.general from /usr/local/Cellar/ansible/9.1.0/libexec/lib/python3.12/site-packages/ansible_collections/community/general
ok: [ae01.xz-stp.l.dns.icann.org] => {
    "msg": "ae01.xz-stp.l.dns.icann.org drac ip is: 199.43.132.142"
}

TASK [Remote mount the iso file] ***********************************************************
task path: /Users/john.bond/git/ansible/drac_mount_vcd.yaml:18
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: john.bond
<localhost> EXEC /bin/sh -c 'echo ~john.bond && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/john.bond/.ansible/tmp `"&& mkdir "` echo /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621 `" && echo ansible-tmp-1706631061.073499-25448-6884987116621="` echo /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621 `" ) && sleep 0'
Including module_utils file ansible/__init__.py
Including module_utils file ansible/module_utils/__init__.py
Including module_utils file ansible/module_utils/basic.py
Including module_utils file ansible/module_utils/_text.py
Including module_utils file ansible/module_utils/common/_json_compat.py
Including module_utils file ansible/module_utils/common/__init__.py
Including module_utils file ansible/module_utils/common/_utils.py
Including module_utils file ansible/module_utils/common/arg_spec.py
Including module_utils file ansible/module_utils/common/file.py
Including module_utils file ansible/module_utils/common/locale.py
Including module_utils file ansible/module_utils/common/parameters.py
Including module_utils file ansible/module_utils/common/collections.py
Including module_utils file ansible/module_utils/common/process.py
Including module_utils file ansible/module_utils/common/sys_info.py
Including module_utils file ansible/module_utils/common/text/converters.py
Including module_utils file ansible/module_utils/common/text/__init__.py
Including module_utils file ansible/module_utils/common/text/formatters.py
Including module_utils file ansible/module_utils/common/validation.py
Including module_utils file ansible/module_utils/common/warnings.py
Including module_utils file ansible/module_utils/compat/selectors.py
Including module_utils file ansible/module_utils/compat/__init__.py
Including module_utils file ansible/module_utils/compat/_selectors2.py
Including module_utils file ansible/module_utils/compat/selinux.py
Including module_utils file ansible/module_utils/distro/__init__.py
Including module_utils file ansible/module_utils/distro/_distro.py
Including module_utils file ansible/module_utils/errors.py
Including module_utils file ansible/module_utils/parsing/convert_bool.py
Including module_utils file ansible/module_utils/parsing/__init__.py
Including module_utils file ansible/module_utils/pycompat24.py
Including module_utils file ansible/module_utils/six/__init__.py
Including module_utils file ansible/module_utils/urls.py
Including module_utils file ansible/module_utils/compat/typing.py
Including module_utils file ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py
Including module_utils file ansible_collections/__init__.py
Including module_utils file ansible_collections/dellemc/__init__.py
Including module_utils file ansible_collections/dellemc/openmanage/__init__.py
Including module_utils file ansible_collections/dellemc/openmanage/plugins/__init__.py
Including module_utils file ansible_collections/dellemc/openmanage/plugins/module_utils/__init__.py
Including module_utils file ansible_collections/dellemc/openmanage/plugins/module_utils/utils.py
Using module file /Users/john.bond/git/ansible/collections/ansible_collections/dellemc/openmanage/plugins/modules/idrac_virtual_media.py
<localhost> PUT /Users/john.bond/.ansible/tmp/ansible-local-254437eyh98a_/tmpee4aosig TO /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621/AnsiballZ_idrac_virtual_media.py
<localhost> EXEC /bin/sh -c 'chmod u+x /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621/ /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621/AnsiballZ_idrac_virtual_media.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/local/Cellar/ansible/9.1.0/libexec/bin/python /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621/AnsiballZ_idrac_virtual_media.py && sleep 0'
<localhost> EXEC /bin/sh -c 'rm -f -r /Users/john.bond/.ansible/tmp/ansible-tmp-1706631061.073499-25448-6884987116621/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible_collections/dellemc/openmanage/plugins/modules/idrac_virtual_media.py", line 447, in main
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py", line 187, in __enter__
    resp = self.invoke_request(path, 'POST', data=payload)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py", line 178, in invoke_request
    raise err
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible_collections/dellemc/openmanage/plugins/module_utils/idrac_redfish.py", line 175, in invoke_request
    resp = open_url(url, data=data, **url_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible/module_utils/urls.py", line 1686, in open_url
    return Request().open(method, url, data=data, headers=headers, use_proxy=use_proxy,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/folders/79/fxxf5_zd599gycd7_6zk5yxcx5vqnr/T/ansible_dellemc.openmanage.idrac_virtual_media_payload__pxprf4x/ansible_dellemc.openmanage.idrac_virtual_media_payload.zip/ansible/module_utils/urls.py", line 1578, in open
    r = urllib_request.urlopen(request, None, timeout)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 215, in urlopen
    return opener.open(url, data, timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 521, in open
    response = meth(req, response)
               ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 630, in http_response
    response = self.parent.error(
               ^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 559, in error
    return self._call_chain(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 492, in _call_chain
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/local/Cellar/python@3.12/3.12.1_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 639, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
fatal: [ae01.xz-stp.l.dns.icann.org -> localhost]: FAILED! => {
    "changed": false,
    "error_info": {
        "error": {
            "@Message.ExtendedInfo": [
                {
                    "Message": "Unable to complete the operation because the Authorization request header is present in the request.",
                    "MessageArgs": [],
                    "MessageArgs@odata.count": 0,
                    "MessageId": "IDRAC.2.9.SYS468",
                    "RelatedProperties": [],
                    "RelatedProperties@odata.count": 0,
                    "Resolution": "Make sure that the Authorization request header is not included and retry the operation. For information about the necessary headers, see the Redfish specification and Redfish User's Guide available on the support site.",
                    "Severity": "Informational"
                }
            ],
            "code": "Base.1.8.GeneralError",
            "message": "A general error has occurred. See ExtendedInfo for more information."
        }
    },
    "invocation": {
        "module_args": {
            "ca_path": null,
            "force": true,
            "idrac_ip": "drac.ae01.xz-stp.l.dns.icann.org",
            "idrac_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "idrac_port": 443,
            "idrac_user": "dns0ps",
            "resource_id": null,
            "timeout": 30,
            "validate_certs": false,
            "virtual_media": [
                {
                    "domain": null,
                    "image": "https://download.dns.icann.org/ae01.xz-stp.l.dns.icann.org.iso",
                    "index": null,
                    "insert": true,
                    "media_type": null,
                    "password": null,
                    "username": null
                }
            ]
        }
    },
    "msg": "HTTP Error 400: Bad Request"
}

PLAY RECAP *********************************************************************************
ae01.xz-stp.l.dns.icann.org : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Steps to Reproduce

Run the cookbook

Expected Behavior

Would expect the remote iso to be mounted

Actual Behavior

Get a 400 error with the following message

"Message": "Unable to complete the operation because the Authorization request header is present in the request.",
"MessageArgs": [],
"MessageArgs@odata.count": 0,
"MessageId": "IDRAC.2.9.SYS468",
"RelatedProperties": [],
"RelatedProperties@odata.count": 0,
"Resolution": "Make sure that the Authorization request header is not included and retry the operation. For information about the necessary headers, see the Redfish specification and Redfish User's Guide available on the support site.",
"Severity": "Informational"

Screenshots

No response

Additional Information

No response

sachin-apa commented 6 months ago

@b4ldr Thanks for reporting this issue. Can you try with IPv4 address instead of fqdn and let us know if the issue reproducible. Also, Please let us know how did you configure the fqdn for the idrac.

b4ldr commented 6 months ago

@sachin-apa if i use the IP address, i get a 401 username and password error. however testing with python and the same password works well

In [26]: s = Session()

In [27]: s.auth = ('dns0ps', password)

In [28]: s.headers.update({"Accept": "application/json"})

In [29]: s.verify = False

In [30]: r = s.get('https://199.43.132.142/redfish/v1/Managers')
/Users/john.bond/Library/Python/3.9/lib/python/site-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host '199.43.132.142'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
  warnings.warn(

In [31]: r.ok
Out[31]: True

In [32]: r.json()
Out[32]:
{'@odata.context': '/redfish/v1/$metadata#ManagerCollection.ManagerCollection',
 '@odata.id': '/redfish/v1/Managers',
 '@odata.type': '#ManagerCollection.ManagerCollection',
 'Description': 'BMC',
 'Members': [{'@odata.id': '/redfish/v1/Managers/iDRAC.Embedded.1'}],
 'Members@odata.count': 1,
 'Name': 'Manager'}

ansible output

fatal: [ae01.xz-stp.l.dns.icann.org -> localhost]: FAILED! => {
    "changed": false,
    "error_info": {
        "error": {
            "@Message.ExtendedInfo": [
                {
                    "Message": "Unable to complete the operation because an invalid username and/or password is entered, and therefore authentication failed.",
                    "MessageArgs": [],
                    "MessageArgs@odata.count": 0,
                    "MessageId": "IDRAC.2.9.SYS415",
                    "RelatedProperties": [],
                    "RelatedProperties@odata.count": 0,
                    "Resolution": "Enter valid user name and password and retry the operation.",
                    "Severity": "Warning"
                }
            ],
            "code": "Base.1.12.GeneralError",
            "message": "A general error has occurred. See ExtendedInfo for more information"
        }
    },
    "invocation": {
        "module_args": {
            "ca_path": null,
            "force": true,
            "idrac_ip": "199.43.132.142",
            "idrac_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "idrac_port": 443,
            "idrac_user": "root",
            "resource_id": null,
            "timeout": 30,
            "validate_certs": false,
            "virtual_media": [
                {
                    "domain": null,
                    "image": "https://download.dns.icann.org/dban-2.2.8_i586.iso",
                    "index": null,
                    "insert": true,
                    "media_type": null,
                    "password": null,
                    "username": null
                }
            ]
        }
    },
    "msg": "HTTP Error 401: Unauthorized"
}

thanks john

sachin-apa commented 5 months ago

@b4ldr i tried to reproduce this in our lab, but i'm not able to reproduce this. I see http error is coming from the iDRAC not from ansible/module/url lib.. We might need a session to debug this further.

Request you to please go to Dell Support, enter your Servicetag and then raise a technical support request. You must have an existing and valid warranty on your server before you can raise a SR.

@anupamaloke

btravouillon commented 3 months ago

I had the same behaviour while configuring a batch of new R760xa servers with the task below:

    - name: Configure iDRAC Rac name
      dellemc.openmanage.idrac_attributes:
        idrac_ip: "{{ ipmi_host }}"
        idrac_user: "{{ ipmi_user }}"
        idrac_password: "{{ ipmi_password }}"
        ca_path: "{{ idrac_ca_path | default(omit) }}"
        validate_certs: "{{ idrac_validate_certs | default(omit) }}"
        idrac_attributes:
          NIC.1.DNSRacName: "{{ inventory_hostname }}-ipmi"
          NIC.1.DNSDomainName: "{{ idrac_dns_domain_name }}"
      delegate_to: localhost

My inventory defines ipmi_host: "{{ inventory_hostname }}-ipmi" but the hostname of the iDRAC is still the default one (idrac-SERVICE_TAG). A wokaround is to use idrac_ip: "{{ lookup('community.general.dig', ipmi_host) }}" instead.

Is it related to idrac_ip being a different hostname than the one configured in the iDRAC?

This task used to work last year when I configured another batch of nodes (XE8545).

rajshekarp87 commented 3 months ago

@b4ldr,

Could you please let us know if this issue is resolved?