ansible playbook error was: ModuleNotFoundError: No module named 'azure.mgmt.monitor.version' although the module is installed

ansible playbook error was: ModuleNotFoundError: No module named 'azure.mgmt.monitor.version' although the module is installed

将 ansible 升级到版本 2.10.5 和 python3.8.10 后,我的 playbook.yml 失败并出现此错误。

ModuleNotFoundError: No module named 'azure.mgmt.monitor.version'
fatal: [localhost]: FAILED! => {"attempts": 1, "changed": false, "msg": "Failed to import the required Python library (ansible[azure] (azure >= 2.0.0)) on certrenewplay's Python /usr/bin/python3`

如果我 运行 python3 -c "import azure.mgmt.monitor" 并且如果我 运行 pip3 list 我看到它安装为 azure-mgmt-monitor==2.0.0

剧本代码中出错的确切部分是:

 - name: Create _acme-challenge record for zone "{{ env_name_dot }}"
   azure_rm_dnsrecordset:
    subscription_id: "{{ mgmt_subscription }}"
    client_id: "{{ mgmt_vault_azure_client_id }}"
    tenant: "{{ mgmt_vault_azure_tenant_id }}"
    secret: "{{ mgmt_vault_azure_client_secret }}"
    resource_group: "{{ mgmt_rg }}"
    relative_name: "_acme-challenge.{{ env_name }}"
    zone_name: "{{ dns_zone_name }}.{{ dns_zone_domain }}"
    record_type: TXT
    state: present
    records:
      - entry: "{{ cn_challenge_data }}"
    time_to_live: 60
  when: dns_zone_name != 'activedrop'
  register: add_record
  retries: 1
  delay: 10

  until: add_record is succeeded

我不确定自己做错了什么 - 谁能给我建议或帮助我解决这个问题? 谢谢

我认为您没有按照有关从 https://github.com/ansible-collections/azure

安装 azure 集合的说明进行操作

安装集合本身不会安装 python 依赖项,这些依赖项是使用 python pip 安装的,您需要确保将它们安装在同一个 python (v)env 中安装 ansible 的地方,否则 ansible 会给你你在尝试加载模块时看到的错误。

不幸的是,azure-mgmt-monitor 包存在错误,即使在 3.0.0 上也无法正确创建版本子模块。无法准确追踪它在代码中被破坏的位置,但它确实存在,并且在 Ansible Galaxy 模块中直接导入该子模块导致它失败。不幸的是,此时您应该使用 Azure CLI 而忘记使用 azure_rm

同样的问题发生在我身上,因为 Ansible 现在附带了它自己的 Azure 集合版本,并且它与我使用“ansible-galaxy 集合”命令在我自己的剧本中手动安装的版本冲突。

我建议你只使用 Ansible 附带的版本,然后像这样安装它的要求:

pip install -r /usr/lib/python3/dist-packages/ansible_collections/azure/azcollection/requirements-azure.txt

在新安装的系统(例如 Docker 中)正确设置比修复损坏的系统更容易。