Python 2.7 通过python脚本实现Ansible Keepass集成

Python 2.7 通过python脚本实现Ansible Keepass集成,python-2.7,ansible,ansible-playbook,keepass,Python 2.7,Ansible,Ansible Playbook,Keepass,我是ansible的新手,想测试一些东西。 我有几个AmazonEC2实例,希望在它们上安装不同的软件组件。我不想在ansible脚本或配置文件中包含技术用户的(纯文本)凭据。我知道可以加密这些文件,但我想尝试使用keepass作为中央密码管理工具。因此,在开始实际安装之前,我的安装脚本应该从.kdbx(keepass2)数据库文件中读取凭据 到目前为止,我编写了一个用于读取.kdbx文件的基本python脚本。脚本通过以下方式输出json对象: print json.dumps(invento

我是ansible的新手,想测试一些东西。 我有几个AmazonEC2实例,希望在它们上安装不同的软件组件。我不想在ansible脚本或配置文件中包含技术用户的(纯文本)凭据。我知道可以加密这些文件,但我想尝试使用keepass作为中央密码管理工具。因此,在开始实际安装之前,我的安装脚本应该从.kdbx(keepass2)数据库文件中读取凭据

到目前为止,我编写了一个用于读取.kdbx文件的基本python脚本。脚本通过以下方式输出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”消息?因此,我的问题是:如何通过task将json键值对正确地包含为可解析变量?

您可能希望使用python脚本,并将其作为事实提供给用户。

或者编写一个简单的操作插件,返回json对象,以消除stdout->from_json转换中的需要。

晚到派对,但您的用例似乎主要包含在。而且它不需要任何剧本“魔法”。免责声明:我为这个非营利组织捐款

export KDB_PATH=example.kdbx
export KDB_PASS=example

ansible all --list-hosts -i keepass-inventory.py


msg:
添加到上一个调试语句中:
-debug:msg=“{{pass….}}”
噢,谢谢。你知道我的方法是注册变量的首选方法,还是有更好的解决方案?
ansible_user       : "{{ lookup('keepass', 'path/to/entry', 'username') }}"
ansible_become_pass: "{{ lookup('keepass', 'path/to/entry', 'password') }}"