Я пытаюсь сделать Ansible's Python API
, чтобы написать тестовый API (в Python
), который может программно использовать программное обеспечение и добавлять новые узлы в кластер Hadoop
. Как известно, по крайней мере узел в кластере должен быть Namenode
и JobTracker
(MRv1). Для простоты, скажем, JobTracker
и Namenode
находятся в одном и том же узле (namenode_ip
).Передача значений динамически в Ansible inventory - Python
Таким образом, для того, чтобы использовать 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
Однако Ansible
documentation для Python API
очень плохо написано (не дает никаких подробностей, кроме простого примера). То, что мне было нужно, чтобы иметь подобную вещь, как:
ansible-playbook -i hadoop_config -e "namenode_ip=1.2.3.4"
Вот именно, передать значение namenode_ip
динамически в файл инвентаризации с помощью Python API
. Как я могу это сделать?