2016-02-12 24 views
6

Próbuję napisać skrypt Pythona, który będzie wywoływał istniejące playbook Ansible, jak to działa (ponieważ chcę pętli nad listą odtwarzania, podczas gdy pętli nad listą zmiennych).Jak używać Ansible 2.0 Python API do uruchamiania Playbooka?

Ten post wyjaśnia to bardzo dobrze, bo ansibl pre-2.0: Running ansible-playbook using Python API

Ten dokument wyjaśnia to bardzo dobrze, jeśli piszesz nowy playbook w skrypcie: http://docs.ansible.com/ansible/developing_api.html

ale nie zobacz, jak połączyć istniejący podręcznik za pomocą Python API 2.0, a ansible.runner już nie działa.

Pomóż mi, Stackoverflow-Wan Kenobi. Jesteś moją jedyną nadzieją.

Odpowiedz

13

Dokumentacja jest zaskakująco brakuje i trzeba będzie zacząć here

Powiedział, że jest tutaj to szybkie skrypt I hacked razem że udaje się uruchomić 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

Dzięki Phani! Spróbuję tego później wieczorem. – ddro

+0

@Phani - utknąłem tutaj - "Limit czasu (3s) oczekujący na potwierdzenie eskalacji uprawnień:" – mannoj