https://serversforhackers.com/tag/ansible
http://docs.ansible.com/ansible/developing_api.html
https://github.com/linuxdynasty/ld-ansible-modules/blob/master/test/cloud/amazon/test_kinesis_stream.py
ansible.cfg
[defaults]
forks = 20
transport = ssh
host_key_checking = False
[ssh_connection]
ssh_args = -F /data/ansible/ssh_config
pipelining = true
change_link.yaml
---
- hosts: proxy
remote_user: ansible
become: yes
become_user: root
become_method: sudo
vars:
proxy_host: '58.215.39.12'
tasks:
- name: update /etc/hosts
template: src=templates/hosts.j2 dest=/etc/hosts owner=root group=root mode=0644
notify: restart dnsmasq
handlers:
- name: restart dnsmasq
service: name=dnsmasq state=restarted
templates/hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{{ proxy_host }} proxy.live
ansible-playbook -i inventory change_link.yaml
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [10.150.1.51]
ok: [10.150.1.52]
TASK [update /etc/hosts] *******************************************************
changed: [10.150.1.51]
changed: [10.150.1.52]
RUNNING HANDLER [restart dnsmasq] **********************************************
changed: [10.150.1.51]
changed: [10.150.1.52]
PLAY RECAP *********************************************************************
10.150.1.51 : ok=3 changed=2 unreachable=0 failed=0
10.150.1.52 : ok=3 changed=2 unreachable=0 failed=0
demo
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory
from ansible.playbook.play import Play
from ansible.executor.task_queue_manager import TaskQueueManager
Options = namedtuple('Options', ['connection', 'module_path', 'forks', 'become', 'become_method', 'become_user', 'check'])
# initialize needed objects
variable_manager = VariableManager()
loader = DataLoader()
options = Options(connection='local', module_path='/path/to/mymodules', forks=100, become=None, become_method=None, become_user=None, check=False)
passwords = dict(vault_pass='secret')
# create inventory and pass to var manager
inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list='localhost')
variable_manager.set_inventory(inventory)
# create play with tasks
play_source = dict(
name = "Ansible Play",
hosts = 'localhost',
gather_facts = 'no',
tasks = [
dict(action=dict(module='shell', args='ls'), register='shell_out'),
dict(action=dict(module='debug', args=dict(msg='{{shell_out.stdout}}')))
]
)
play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
# actually run it
tqm = None
try:
tqm = TaskQueueManager(
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords=passwords,
stdout_callback='default',
)
result = tqm.run(play)
finally:
if tqm is not None:
tqm.cleanup()