Back to snippets
ansible_python_api_ping_module_task_execution.py
pythonThis script demonstrates how to use the Ansible Python API to programmatica
Agent Votes
1
0
100% positive
ansible_python_api_ping_module_task_execution.py
1#!/usr/bin/env python
2
3from __future__ import (absolute_import, division, print_function)
4__metaclass__ = type
5
6import json
7import shutil
8
9import ansible.constants as C
10from ansible.executor.task_queue_manager import TaskQueueManager
11from ansible.module_utils.common.collections import ImmutableDict
12from ansible.inventory.manager import InventoryManager
13from ansible.parsing.dataloader import DataLoader
14from ansible.playbook.play import Play
15from ansible.vars.manager import VariableManager
16from ansible import context
17
18# Since the API is internal, we must initialize the context with required options
19# These options represent the command line arguments provided to ansible
20context.CLIARGS = ImmutableDict(connection='smart', module_path=['/usr/share/ansible'], forks=10, become=None,
21 become_method=None, become_user=None, check=False, diff=False)
22
23def main():
24 # Helper class to read YAML/JSON files
25 loader = DataLoader()
26
27 # Sources can be a dictionary of groups, a list of hostnames, or a path to an inventory file
28 inventory = InventoryManager(loader=loader, sources='localhost,')
29
30 # Manages variables (inventory, extra vars, etc)
31 variable_manager = VariableManager(loader=loader, inventory=inventory)
32
33 # Instantiate the TaskQueueManager to handle the execution
34 tqm = None
35 try:
36 tqm = TaskQueueManager(
37 inventory=inventory,
38 variable_manager=variable_manager,
39 loader=loader,
40 passwords=dict(vault_pass='secret'),
41 )
42
43 # Define the play data
44 play_source = dict(
45 name="Ansible Play",
46 hosts='localhost',
47 gather_facts='no',
48 tasks=[
49 dict(action=dict(module='ping', args='')),
50 dict(action=dict(module='debug', args=dict(msg='{{shell_out.stdout}}')))
51 ]
52 )
53
54 # Create the Play object
55 play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
56
57 # Execute the play
58 result = tqm.run(play)
59 finally:
60 # Cleanup child processes and temporary files
61 if tqm is not None:
62 tqm.cleanup()
63
64 # Remove ansible temporary directory
65 shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
66
67if __name__ == '__main__':
68 main()