1.如何使用Ansible 2.0 Python API
Adhocadhoc 其实就是执行 Ansible 模块, 通过 adhoc 我们可以方便快捷的完成一些临时的运维操作.2.0 之前的调用import ansible.runnerimport jsonrunner = ansible.runner.Runner(module_name='ping', # 模块名module_args='', # 模块参数pattern='all', # 目标机器的patternforks=10)datastructure = runner.run()data = json.dumps(datastructure,indent=4)当然这里会去加载默认的 inventory如果不想使用 inventory 文件或者想使用动态的 inventory, 则可以使用 host_list 参数代替import ansible.runnerimport jsonrunner = ansible.runner.Runner(host_list=["10.10.0.1"], # 这里如果明确指定主机需要传递一个列表, 或者指定动态inventory脚本module_name='ping', # 模块名module_args='', # 模块参数extra_vars={"ansible_ssh_user":"root","ansible_ssh_pass":"xx"},forks=10)datastructure = runner.run()data = json.dumps(datastructure,indent=4)。
2.如何使用Ansible 2.0 Python API
Adhoc adhoc 其实就是执行 Ansible 模块, 通过 adhoc 我们可以方便快捷的完成一些临时的运维操作.2.0 之前的调用 import ansible.runner import json runner = ansible.runner.Runner( module_name='ping', # 模块名 module_args='', # 模块参数 pattern='all', # 目标机器的pattern forks=10 ) datastructure = runner.run() data = json.dumps(datastructure,indent=4) 当然这里会去加载默认的 inventory 如果不想使用 inventory 文件或者想使用动态的 inventory, 则可以使用 host_list 参数代替 import ansible.runner import json runner = ansible.runner.Runner( host_list=["10.10.0.1"], # 这里如果明确指定主机需要传递一个列表, 或者指定动态inventory脚本 module_name='ping', # 模块名 module_args='', # 模块参数 extra_vars={"ansible_ssh_user":"root","ansible_ssh_pass":"xx"}, forks=10 ) datastructure = runner.run() data = json.dumps(datastructure,indent=4)2.0 之后的调用 import json 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 from ansible.executor.playbook_executor import PlaybookExecutor loader = DataLoader() # 用来加载解析yaml文件或JSON内容,并且支持vault的解密 variable_manager = VariableManager() # 管理变量的类,包括主机,组,扩展等变量,之前版本是在 inventory 中的 inventory = Inventory(loader=loader, variable_manager=variable_manager) variable_manager.set_inventory(inventory) # 根据 inventory 加载对应变量 class Options(object): ''' 这是一个公共的类,因为ad-hoc和playbook都需要一个options参数 并且所需要拥有不同的属性,但是大部分属性都可以返回None或False 因此用这样的一个类来省去初始化大一堆的空值的属性 ''' def __init__(self): self.connection = "local" self.forks = 1 self.check = False def __getattr__(self, name): return None options = Options() def run_adhoc(): variable_manager.extra_vars={"ansible_ssh_user":"root" , "ansible_ssh_pass":"xxx"} # 增加外部变量 # 构建pb, 这里很有意思, 新版本运行ad-hoc或playbook都需要构建这样的pb, 只是最后调用play的类不一样 # :param name: 任务名,类似playbook中tasks中的name # :param hosts: playbook中的hosts # :param tasks: playbook中的tasks, 其实这就是playbook的语法, 因为tasks的值是个列表,因此可以写入多个task play_source = {"name":"Ansible Ad-Hoc","hosts":"10.10.0.1","gather_facts":"no","tasks":[{"action":{"module":"shell","args":"w"}}]} play = Play().load(play_source, variable_manager=variable_manager, loader=loader) tqm = None try: tqm = TaskQueueManager( inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=None, stdout_callback='minimal', run_tree=False, ) result = tqm.run(play) print result finally: if tqm is not None: tqm.cleanup() if __name__ == '__main__': run_adhoc() Playbook playbook 则类似于 SaltStack 中的 state2.0 之前的调用 from ansible import callbacks from ansible import utils from ansible.playbook import PlayBook stats = callbacks.AggregateStats() callback = callbacks.PlaybookCallbacks() runner_callbacks = callbacks.(stats) pb = ansible.playbook.PlayBook( playbook="tasks.yml", stats=stats, callbacks=playbook_cb, runner_callbacks=runner_cb, check=True) pb.run()2.0 之后的调用 import json 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 from ansible.executor.playbook_executor import PlaybookExecutor loader = DataLoader() # 用来加载解析yaml文件或JSON内容,并且支持vault的解密 variable_manager = VariableManager() # 管理变量的类,包括主机,组,扩展等变量,之前版本是在 inventory 中的 inventory = Inventory(loader=loader, variable_manager=variable_manager) variable_manager.set_inventory(inventory) # 根据 inventory 加载对应变量 class Options(object): ''' 这是一个公共的类,因为ad-hoc和playbook都需要一个options参数 并且所需要拥有不同的属性,但是大部分属性都可以返回None或False 因此用这样的一个类来省去初始化大一堆的空值的属性 ''' def __init__(self): self.connection = "local" self.forks = 1 self.check = False def __getattr__(self, name): return None options = Options() def run_playbook(): playbooks=['task.yaml'] # 这里是一个列表, 因此可以运行多个playbook variable_manager.extra_vars={"ansible_ssh_。
3.如何使用Ansible自动化部署Docker镜像
如何使用Ansible自动化部署Docker镜像,具体场景如下所示:1)假如有10个等等已build好的docker镜像(其中有一个镜像是某服务的server,其余都是某服务的agent),统一存放在A机器的镜像仓库里;2)现在的需求是,需要使用Ansible来自动化的部署某服务为server的docker镜像到B机器上;而服务为agent的docker镜像分别(是分别哦)部署到C、D、E、F、G等机器上;3)最后,部署好这些docker镜像之后,需要自动run起来;谢谢,各位大大们。
你们有什么好的办法么,如果有示例就更好了。PS:docker和ansible都刚接触不久,但业务需要这样做。
转载请注明出处windows之家 » win10如何使用ansible