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
模块的genericcontainer\u to\u text
方法中没有考虑这种特殊的行为,这会触发错误的输出。很高兴您找到了答案!