将值动态传递给Ansible清单-Python
我正在尝试将值动态传递给Ansible清单-Python,python,ansible,Python,Ansible,我正在尝试Ansible的pythonapi,以便编写一个测试API(在Python中),它可以通过编程方式利用剧本,并向Hadoop集群添加新节点。我们知道,集群中至少有一个节点必须是Namenode和JobTracker(MRv1)。为简单起见,假设JobTracker和Namenode位于同一个节点(Namenode\u ip) 因此,为了使用Ansible创建一个新节点,并使其在Namenode中自注册,我创建了以下Python实用程序: from ansible.playbook im
Ansible的pythonapi
,以便编写一个测试API(在Python
中),它可以通过编程方式利用剧本,并向Hadoop
集群添加新节点。我们知道,集群中至少有一个节点必须是Namenode
和JobTracker
(MRv1)。为简单起见,假设JobTracker
和Namenode
位于同一个节点(Namenode\u ip
)
因此,为了使用Ansible
创建一个新节点,并使其在Namenode
中自注册,我创建了以下Python
实用程序:
from ansible.playbook import PlayBook
from ansible.inventory import Inventory
from ansible.inventory import Group
from ansible.inventory import Host
from ansible import constants as C
from ansible import callbacks
from ansible import utils
import os
import logging
import config
def run_playbook(ipaddress, namenode_ip, playbook, keyfile):
utils.VERBOSITY = 0
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
stats = callbacks.AggregateStats()
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
host = Host(name=ipaddress)
group = Group(name="new-nodes")
group.add_host(host)
inventory = Inventory(host_list=[], vault_password="Hello123")
inventory.add_group(group)
key_file = keyfile
playbook_path = os.path.join(config.ANSIBLE_PLAYBOOKS, playbook)
pb = PlayBook(
playbook=playbook_path,
inventory = inventory,
remote_user='deploy',
callbacks=playbook_cb,
runner_callbacks=runner_cb,
stats=stats,
private_key_file=key_file
)
results = pb.run()
print results
然而,pythonapi
的Ansible
编写得非常糟糕(除了一个简单的示例外,没有给出任何细节)。我需要的是有一个类似的东西:
ansible-playbook -i hadoop_config -e "namenode_ip=1.2.3.4"
就是这样,使用
pythonapi
动态地将namenode\u ip
的值传递给清单文件。我该怎么做 这应该很简单,只要在实例化组对象之后,在运行playbook之前,在脚本中添加一行或多行:
group.set_variable("foo", "BAR")