使用 json 文件或可执行文件生成动态清单文件,不带 --list



我正在尝试生成动态库存文件。我也写了一个生成json的程序。我希望能够在没有 --list 选项或其他选项的情况下调用我的程序(--list 可以在某处覆盖吗?如果无法做到这一点,是否可以仅使用 JSON 文件生成清单文件(没有带有 --list 选项的可执行文件)?这就是想法

ansible-playbook playbook.yml -i test.json 

其中,JSON 文件是行动手册的清单。现在,当我尝试此方法时,我收到以下错误:

ERROR! ERROR! host range must be begin:end or begin:end:step

这是我正在使用的 json

{  
   "myname":{  
      "hosts":[  
         "host1.company.biz",
         "host2.company.biz",
         "host3.company.biz",
         "host4.company.biz"
      ],
      "vars":{  
         "ansible_ssh_private_key_file":"/home/keys/.ssh/id_dev",
         "ansible_ssh_private_key_file":"/home/keys/.ssh/id_staging",
         "ansible_ssh_private_key_file":"/home/keys/.ssh/id_staging_uk"
      }
   }
}

我不确定如何直接加载 json,但我知道使用 python 的解决方法。如果您有此预生成的 json 文件。你可以编写一个简单的python脚本,你可以用ansible-playbook调用它。让我们调用python文件 test.py 和json test.json。

这是我的示例剧本。

---
- name: run command on on host4
  hosts: 'host4.company.biz'
  vars:
     foo: "{{ lookup('file', 'tmp.txt')  }}"
  tasks:
     - debug: var=foo

这是示例 python 动态清单脚本...(确保在python脚本上chmod +x)

#!/usr/bin/env python
from json import dumps, loads
test_file = loads(open('test.json', 'r').read())
print dumps(test_file, indent=4)
ansible-playbook -i test.py -u host4.company.biz -vvvv test.yml --connection=local.

示例输出..

ok: [host4.company.biz]
TASK [debug]
*******************************************************************
task path: /home/linuxdynasty/test.yml:7
File lookup using /home/linuxdynasty/tmp.txt as file
ok: [host4.company.biz] => {
"foo": [
    "1",
    "2",
    "3",
    "4"
]

}

我使用 ansible 2.0.1 对此进行了测试

最新更新