Avviso di disdetta: questo post non funziona da ansibile 2. L'API è stata modificata.
Questo è incluso in Ansible documentation in "API Python".
Ad esempio, ansible -i hosts dbservers -m setup
è attuato attraverso:
import ansible.runner
runner = ansible.runner.Runner(
module_name='setup',
module_args='',
pattern='dbservers',
)
dbservers_get_facts = runner.run()
Ci sono una serie di parametri non documentato nel metodo __init__
di Runner (da ansible.runner
). C'è lo too many to list inline, ma ho incluso alcuni dei parametri in questo post come supposizione di ciò che stai cercando in particolare.
class Runner(object):
''' core API interface to ansible '''
# see bin/ansible for how this is used...
def __init__(self,
host_list=C.DEFAULT_HOST_LIST, # ex: /etc/ansible/hosts, legacy usage
module_path=None, # ex: /usr/share/ansible
module_name=C.DEFAULT_MODULE_NAME, # ex: copy
module_args=C.DEFAULT_MODULE_ARGS, # ex: "src=/tmp/a dest=/tmp/b"
...
pattern=C.DEFAULT_PATTERN, # which hosts? ex: 'all', 'acme.example.org'
remote_user=C.DEFAULT_REMOTE_USER, # ex: 'username'
remote_pass=C.DEFAULT_REMOTE_PASS, # ex: 'password123' or None if using key
remote_port=None, # if SSH on different ports
private_key_file=C.DEFAULT_PRIVATE_KEY_FILE, # if not using keys/passwords
sudo_pass=C.DEFAULT_SUDO_PASS, # ex: 'password123' or None
...
sudo=False, # whether to run sudo or not
sudo_user=C.DEFAULT_SUDO_USER, # ex: 'root'
module_vars=None, # a playbooks internals thing
play_vars=None, #
play_file_vars=None, #
role_vars=None, #
role_params=None, #
default_vars=None, #
extra_vars=None, # extra vars specified with he playbook(s)
is_playbook=False, # running from playbook or not?
inventory=None, # reference to Inventory object
...
su=False, # Are we running our command via su?
su_user=None, # User to su to when running command, ex: 'root'
su_pass=C.DEFAULT_SU_PASS,
vault_pass=None,
...
):
Ad esempio, il comando precedente che specifica un utente sudo e passo sarebbe:
runner = ansible.runner.Runner(
module_name='setup',
module_args='',
pattern='dbservers',
remote_user='some_user'
remote_pass='some_pass_or_python_expression_that_returns_a_string'
)
Per playbooks, esaminare playbook.PlayBook, che richiede una serie simile di initializers:
class PlayBook(object):
'''
runs an ansible playbook, given as a datastructure or YAML filename.
...
'''
# *****************************************************
def __init__(self,
playbook = None,
host_list = C.DEFAULT_HOST_LIST,
module_path = None,
....
e può essere eseguito con il metodo .run()
. es .:
from ansible.playbook import PlayBook
pb = PlayBook(playbook='/path/to/book.yml, --other initializers--)
pb.run()
utilizzo più robusta può essere trovato nel ansible-playbook
file.
Per quanto ne so, traducendo Playbooks ai moduli Python è un po 'più complesso, ma la documentazione di cui sopra dovrebbe ottenere coperto e si può riutilizzare il parser YAML integrato in Ansible per convertire playbooks alle variabili.
Questo non sembra rispondere a come eseguire un playbook, ma piuttosto un singolo compito. Esiste anche una classe 'ansible.playbook.Playbook' con un metodo' run' che penso che l'OP si stia chiedendo - So che è quello che sto cercando di trovare: D – fideloper
ansible.playbook.Playbook chiama a runner per esecuzione (vedi 'is_playbook' in ansible.runner), ma buon punto. aggiornamento della risposta ora. –
Grazie mille! Ho anche trovato un buon esempio in (dove altro ?!) il repository GitHub con il loro [comando ansible-playbook] (https://github.com/ansible/ansible/blob/devel/bin/ansible-playbook#L186) - - (modifica: whoops, l'hai già indicato: D) – fideloper