我对ansible很陌生,想测试一些东西。我有几个 Amazon EC2 实例,想在它们上安装不同的软件组件。我不想在 ansible 脚本或配置文件中拥有技术用户的(明文)凭据。我知道可以加密这些文件,但我想尝试使用 keepass 作为中央密码管理工具。所以我的安装脚本应该在开始实际安装之前从 .kdbx (Keepass 2) 数据库文件中读取凭据。
到目前为止,我编写了一个基本的 python 脚本来读取 .kdbx 文件。该脚本通过以下方式输出一个 json 对象:
print json.dumps(inventory, sort_keys=False)
输出如下所示:
{"cdc":
{"cdc_test_server":
{"cdc_test_user":
{"username": "cdc_test_user",
"password": "password"}
}
}
}
现在我想实现,python脚本由ansible执行,输出的键值对被包含/注册为ansible变量。到目前为止,我的剧本如下所示:
- hosts: 127.0.0.1
connection: local
tasks:
- name: "Test Playboook Functionality"
command: python /usr/local/test.py
register: pass
- debug: var=pass.stdout
- name: "Include json user output"
set_fact: passwords="{{pass.stdout | from_json}}"
- debug: " {{passwords.cdc.cdc_test_server.cdc_test_user.password}} "
第一次调试生成正确的 json 输出,但我无法将变量包含在 ansible 中,因此我可以通过 jinja2 表示法使用它们。set_fact 不会抛出异常,但最后一次调试只返回“Hello world” - 消息?所以我的问题是:如何通过任务正确地将 json 键值对包含为 ansible 变量?