2016-02-12 36 views
6

Sto provando a scrivere uno script python che chiamerà i playbook Ansible esistenti mentre va (perché voglio fare un ciclo su un elenco di ascolti mentre faccio il loop su un elenco di variabili).Come utilizzare l'API Python di Ansible 2.0 per eseguire un Playbook?

Questo post lo spiega molto bene, per ansible pre-2.0: Running ansible-playbook using Python API

Questo documento spiega molto bene se si sta scrivendo un nuovo playbook nello script: http://docs.ansible.com/ansible/developing_api.html

ma non lo faccio vedi come chiamare un playbook esistente usando Python API 2.0 e ansible.runner non funziona più.

Aiutami, Stackoverflow-Wan Kenobi. Sei la mia unica speranza.

risposta

13

La documentazione è sorprendentemente carente e si dovrà iniziare here

Detto questo, ecco un breve script ho messo insieme che riesce a eseguire un playbook.

#!/usr/bin/env python 

import os 
import sys 
from collections import namedtuple 

from ansible.parsing.dataloader import DataLoader 
from ansible.vars import VariableManager 
from ansible.inventory import Inventory 
from ansible.executor.playbook_executor import PlaybookExecutor 

variable_manager = VariableManager() 
loader = DataLoader() 

inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list='/home/slotlocker/hosts2') 
playbook_path = '/home/slotlocker/ls.yml' 

if not os.path.exists(playbook_path): 
    print '[INFO] The playbook does not exist' 
    sys.exit() 

Options = namedtuple('Options', ['listtags', 'listtasks', 'listhosts', 'syntax', 'connection','module_path', 'forks', 'remote_user', 'private_key_file', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args', 'scp_extra_args', 'become', 'become_method', 'become_user', 'verbosity', 'check']) 
options = Options(listtags=False, listtasks=False, listhosts=False, syntax=False, connection='ssh', module_path=None, forks=100, remote_user='slotlocker', private_key_file=None, ssh_common_args=None, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None, become=True, become_method=None, become_user='root', verbosity=None, check=False) 

variable_manager.extra_vars = {'hosts': 'mywebserver'} # This can accomodate various other command line arguments.` 

passwords = {} 

pbex = PlaybookExecutor(playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=passwords) 

results = pbex.run() 
+0

Grazie Phani! Ci proverò più tardi stasera. – ddro

+0

@Phani - Sono bloccato qui - "Timeout (3s) in attesa del prompt di escalation dei privilegi:" – mannoj