为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Python 脚本中的字典列表导入 Ansible playbook?

如何将 Python 脚本中的字典列表导入 Ansible playbook?

胡子哥哥 2021-11-09 20:17:26
我有一个在单独的 python 脚本中定义的 python 变量,格式如下 -site_list = [   {'name': "MyTestSite",                 'alias': 'site1',                 'website_url':  ['website1.test.com' ,'website1.othertest.com'],                 'projectname':'Testsite',                 'id':'12345678'},                {'name': '"OtherTestSite"',                 'alias': 'foobar',                 'website_url':  ['foobar.test.com' ,'foobar2.test.com'],                 'projectname':'foobar',                 'id':'98765432'},                 ... (lots of other entries)我想尝试将变量放入 Ansible 并在那里使用它,但是似乎我必须将变量重写为 .yml 格式(基于https://docs.ansible.com/ansible/latest /modules/include_vars_module.html ),而不是仅仅导入 python 脚本并从那里使用它。是否可以按原样导入 python 变量,而不是使用 yml 重写它并将其放入 Ansible 目录中的 group_vars 中?我可以看到检索该变量的唯一另一种方法是将其打印在 Python 脚本中,从 Ansible 调用 Python 脚本,然后将输出存储为变量(但该解决方案对我来说似乎有点笨拙)。谢谢。
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我建议使用查找插件管道和将变量转储到 json 的 python 文件:


Python 文件 vars.py:



import json


initial = [{'name': "MyTestSite",

                 'alias': 'site1',

                 'website_url':  ['website1.test.com' ,'website1.othertest.com'],

                 'projectname':'Testsite',

                 'id':'12345678'},


                {'name': '"OtherTestSite"',

                 'alias': 'foobar',

                 'website_url':  ['foobar.test.com' ,'foobar2.test.com'],

                 'projectname':'foobar',

                 'id':'98765432'}]



print(json.dumps(initial))

和剧本代码:


---

- name: Test command

  hosts: localhost

  tasks:

  - name: Load variable to fact

    set_fact:

      the_var: "{{ lookup('pipe', 'python vars.py') | from_json }}"

  - name: Test command

    debug:

      msg: "{{ item }}"

    with_list: "{{ the_var }}"

在使用之前不要忘记将文件上传到节点。


使用 ansible 2.7.6 进行测试


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信