使用json文件或可执行文件生成动态库存文件而不使用--list

时间:2016-03-18 19:17:08

标签: ansible ansible-playbook

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

ansible-playbook playbook.yml -i test.json 

其中json文件是playbook的库存。现在,当我尝试这种方法时,我收到以下错误:

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"
      }
   }
}

1 个答案:

答案 0 :(得分:1)

我不确定如何直接加载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测试了这个