import yaml
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.playbook.play import Play
Options = namedtuple('Options', [
'connection',
'module_path',
'forks',
'become',
'become_method',
'become_user',
'check',
'diff'])
loader = DataLoader()
play = Play()
options = Options(
connection='smart',
module_path=["/usr/local/bin/ansible"],
forks=10,
become=None,
become_method=None,
become_user=None,
check=False,
diff=False)
inventory = InventoryManager(loader=loader)
variable_manager = VariableManager(loader=loader, inventory=inventory)
inventory.add_host("192.168.1.1")
host = inventory.get_host("192.168.1.1")
variable_manager.set_host_variable(host, "ansible_ssh_pass", "1")
with open("vars.yml") as f:
for k, v in yaml.load(f).items():
variable_manager.set_host_variable(host, k, v)
_play = dict(hosts="192.168.1.1", gather_facts='no', tasks=[
dict(action=dict(module="shell", args="ls /home")),
yaml.load(open("tasks.yml")),
])
tqm = None
try:
tqm = TaskQueueManager(
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords={},
)
tqm.run(play.load(_play, variable_manager=variable_manager, loader=loader))
finally:
if tqm is not None:
tqm.cleanup()
provenance
smart
"Default connection plugin to use, the 'smart' option will toggle between 'ssh' and 'paramiko' depending on controller OS and ssh versions"