Red de conocimiento informático - Material del sitio web - Cómo utilizar la API de Python de Ansible 2.0

Cómo utilizar la API de Python de Ansible 2.0

Llamadas anteriores a 2.0 desde ansible import devoluciones de llamadas desde ansible import utils desde ansible.playbook import PlayBook stats = callbacks.AggregateStats() callback = callbacks.PlaybookCallbacks() runner_callbacks = callbacks.PlaybookRunnerCallbacks(stats) pb = ansible.playbook="tasks. .pb.run() Llamadas después de 2.0 import json desde ansible .parsing.dataloader import DataLoader desde ansible.vars import VariableManager desde ansible.inventory import Inventory desde ansible.playbook.executor.task_queue_manager import TaskQueueManager desde ansible.executor.playbook_executor import PlaybookExecutor loader = DataLoader() # Se utiliza para cargar y analizar archivos yaml o contenido JSON, y admite descifrado de bóveda variable_manager = VariableManager() # Clase utilizada para administrar variables, incluidos hosts, grupos, extensiones, etc. inventario = Inventario(cargador=cargador). , variable_manager=variable_manager) variable_manager.set_inventory(inventory) # Cargue la clase de variable correspondiente de acuerdo con la lista Options(object):'''Esta es una clase pública ***, porque tanto ad-hoc como playbook requieren un parámetro de opción, y Hay diferentes propiedades, pero la mayoría de las propiedades pueden devolver Ninguno o Falso, por lo que usar una clase de este tipo le ahorra la molestia de inicializar un montón de valores nulos.

Inicializa un montón de atributos vacíos''' def __init__(self): self.connection = "local" self.forks = 1 self.check = False def __getattr__(self, nombre): return Ninguno opciones = Opciones() def run_playbook( ) : playbooks=['task.yaml'] # Esta es una lista para que se puedan ejecutar varios playbooks variable_manager.extra_vars={"ansible_ssh_user":"root", "ansible_ssh_user":"root loader=loader, options=options, contraseñas =Ninguno) resultado = pb.run() imprimir resultado si __name__ == '__main__': run_playbook()

Si no desea utilizar un archivo de manifiesto o desea utilizar una lista dinámica, puede usar el parámetro host_list en su lugar

p>

importar ansible.runner import json runner = ansible.runner Si el host se especifica explícitamente, debe pasar la lista de hosts aquí o especificar un script de inventario dinámico module_name. ='ping', #Nombre del módulo module_args='', # Parámetros del módulo extra_vars={"ansible_ssh_user": "root", "ansible_ssh_pass": "xxpass": "xx"}, forks=10) estructura de datos = runner.run( ) data = json.dumps(datastructure, indent=4) 2.0 Llamadas posteriores import json de ansible.parsing.dataloader import DataLoader de ansible.vars import VariableManager de ansible.inventory import Inventory de ansible.playbook.import Reproduce desde ansible.executor. task_queue_manager import TaskQueueManager desde ansible.executor.playbook_executor import PlaybookExecutor loader = DataLoader() # Se utiliza para cargar y analizar archivos yaml o contenido JSON, y admite el descifrado de bóveda variable_manager = VariableManager() # Clase para administrar variables, incluidos host, grupo, extensión y otras variables, la versión anterior estaba en inventario = Inventory(loader= loader, variable_manager=variable_manager) variable_manager.set_inventory(inventory) # Cargar variables según inventario:'''Esta es una clase *** pública, porque ambas son ad-hoc y el libro de jugadas requieren una opción

parámetros y deben tener propiedades diferentes, pero la mayoría de las propiedades pueden devolver Ninguno o Falso, por lo que usar una clase de este tipo le ahorra la molestia de inicializar un montón de propiedades vacías. def __init__(self): self.connection = "local" self.forks = 1 self.check = False def __getattr__(self, nombre): return Ninguno opciones = Opciones() def run_ adhoc(): variable_manager.extra_vars={" ansible_ssh_user": "root", "ansible_ssh_pass": "xxx"}# Agregar variables externas # Construir pb, aquí viene la parte interesante, las versiones más nuevas de ad-hoc o playbook necesitan compilar pb. Las versiones más nuevas de ad-hoc o playbook necesitan compilar pb de esta manera, excepto que la clase que llama a play al final será diferente#:param name: nombre de la tarea, similar al nombre de las tareas en el playbook#:param hosts: el host en el libro de jugadas# :param tareas: tareas en el libro de jugadas, esta es en realidad la sintaxis del libro de jugadas: "Ansible Ad-Hoc", "hosts": "10.10.0.1", "gather_facts": "no", " tareas": [{" acción ": {"módulo": "shell", "args": "w"}}]} play = Play().try: tqm = TaskQueueManager( inventario=inventario, variable_manager=variable_manager, cargador =cargador, opciones=opciones, contraseñas=Ninguna, stdout_ callback='minimal', run_tree=False, ) resultado = tqm.run(play) imprime el resultado finalmente: si tqm no es Ninguno: tqm.cleanup() if __name__ == '__main__': run_ adhoc() playbook

el playbook es similar al estado en SaltStack.