ansible module os_密钥对从不返回私钥的值

ansible module os_密钥对从不返回私钥的值,ansible,openstack,openstack-nova,openstack-horizon,Ansible,Openstack,Openstack Nova,Openstack Horizon,我想使用ansible模块os\u密钥对生成带有openstack的ssh密钥对。为此,我使用以下代码: - name: create openstack ssh key pair os_keypair: name: my-key auth: my authentication parameters auth_type: password state: present register: key 当从头开始运行代码(即之前没有生成密钥)时,它的工作原理是

我想使用
ansible
模块
os\u密钥对
生成带有
openstack
的ssh密钥对。为此,我使用以下代码:

- name: create openstack ssh key pair
  os_keypair:
    name: my-key
    auth: my authentication parameters
    auth_type: password
    state: present
  register: key
当从头开始运行代码(即之前没有生成密钥)时,它的工作原理是在
openstack
中生成并上载密钥。 但是,我需要私钥,以便通过ansible执行后续操作(例如,
local\u action
将私钥复制到文件)。模块文档说明私钥作为返回值之一可用。检查我的返回值时,我得到以下信息:

"key": {
   "created_at": null, 
   "fingerprint": null, 
   "id": null, 
   "is_deleted": null, 
   "location": null, 
   "name": null, 
   "private_key": null, 
   "public_key": null, 
   "type": "ssh", 
   "user_id": null
}
这让我有点困惑。这是正常的行为还是模块有问题

[更新] 下面是一本完整的剧本,再现了这种行为:

---
- hosts: localhost

  become_user: ansible

  become: True

  tasks:

    - name: create openstack ssh key pair
      os_keypair:
        name: my-key
        auth:
          auth_url: http://cloudsrv1.ill.fr:5000/v3
          username: ansible-test
          password: 1234
          project_name: k8s
          project_domain_name: default
          user_domain_name: default
        auth_type: password
        state: present
      register: key

    - debug:
        var: key
使用python3作为python解释器执行Playbook

输出:

TASK [debug] ********************************************************************************************************************
ok: [localhost] => {
    "key": {
        "changed": true, 
        "failed": false, 
        "id": "my-key", 
        "key": {
            "created_at": null, 
            "fingerprint": null, 
            "id": null, 
            "is_deleted": null, 
            "location": null, 
            "name": null, 
            "private_key": null, 
            "public_key": null, 
            "type": "ssh", 
            "user_id": null
        }
    }
}
但是,从
openstack
快照可以看出,密钥是生成的


通过安装最新的
openstacksdk
软件包(0.36)解决了这个问题。

对我来说似乎很好。你能用一本游戏手册来更新这个问题吗?很感谢你的快速反馈。我刚刚添加了一个更新部分,以更好地显示问题,这与我测试的问题几乎完全相同。我将Ansible 2.8.4与Python 3.7结合使用;您可以在这里看到一个完全成功的运行:@larsks深入查看调试机制(ANSIBLE\u KEEP\u REMOTE\u FILES=1+模块分解模式),我可以看到我的返回值字典在basic.py模块的new\u value=\u remove\u values\u conditions(value,no\u log\u strings,deferred\u removal)行中删除了所有参数。然而,这仍然不能给我任何理由说明为什么这种情况发生在我身上而不是你身上。@larsk你能告诉我你使用的是哪个版本的openstack软件包吗?进一步挖掘,问题来自
openstack.compute.v2.keypair.keypair
类,该类基于一个
dict
,特殊方法
items()
对所有值返回
None
。要获取实际的密钥(例如私钥、公钥)。。。必须使用方法
toDict
。在
ansible.module\u utils.common.text.converters.py
模块的generic
container\u to\u text
方法中没有考虑这种特殊的行为,这会触发错误的输出。很高兴您找到了答案!