一 调用ansible playbook api执行playbook

1 准备好hosts文件

  1. root@ansible:~/ansible/playbooks# cat hosts
  2. [all:vars]
  3. ansible_ssh_pass=root1234
  4.  
  5. [webserver01]
  6. testserver01 ansible_ssh_host=172.20.6.121
  7.  
  8. [webserver02]
  9.  
  10. testserver04 ansible_ssh_host=172.20.6.125
  11. testserver03 ansible_ssh_host=172.20.6.124

  

2 准备好playbook剧本

这里准备2个把,当然可以准备多个

  1. root@ansible:~/ansible/playbooks# cat mysql.yml
  2. ---
  3.  
  4. - name: install and config mariadb for remote host
  5. hosts: webserver01
  6. tasks:
  7. - name: install mariadb for remote host
  8. yum:
  9. args:
  10. name: mariadb,mariadb-server
  11. state: present
  12.  
  13. - name: start mariadb for remote host
  14. service:
  15. args:
  16. name: mariadb
  17. state: started
  18.  
  19. - name: create database for remote mariadb
  20. mysql_db: name=ansible_test state=present

  

  1. root@ansible:~/ansible/playbooks# cat test_result.yml
  2. ---
  3.  
  4. - name: test when
  5. hosts: webserver02
  6. tasks:
  7. - command: /bin/true
  8. register: result
  9. ignore_errors: True
  10.  
  11. - command: ls
  12. when: result| failed
  13.  
  14. - command: df -h
  15. when: result| success
  16.  
  17. - command: pwd
  18. when: result| skipped

  

3 开始调用api吧

  1. root@ansible:~/ansible# cat test-task.py
  2. #!/usr/bin/env python
  3. # coding:utf-8
  4.  
  5. import json
  6. from collections import namedtuple
  7. from ansible.parsing.dataloader import DataLoader
  8. from ansible.vars import VariableManager
  9. from ansible.inventory import Inventory
  10. from ansible.playbook.play import Play
  11. from ansible.executor.task_queue_manager import TaskQueueManager
  12. from ansible.executor.task_result import TaskResult
  13. from ansible.plugins.callback import CallbackBase
  14. from ansible.executor.playbook_executor import PlaybookExecutor
  15. import os,sys
  16.  
  17. # 在指定文件时,不能使用列表指定多个。
  18. host_path = '/root/ansible/playbooks/hosts'
  19. if not os.path.exists(host_path):
  20. print '[INFO] The [%s] inventory does not exist' % host_path
  21. sys.exit()
  22.  
  23. # 管理变量的类,包括主机,组,扩展等变量,之前版本是在 inventory中的
  24. variable_manager = VariableManager()
  25.  
  26. # 用来加载解析yaml文件或JSON内容,并且支持vault的解密
  27. loader = DataLoader()
  28.  
  29. # 初始化需要的对象
  30. Options = namedtuple('Options',
  31. ['connection',
  32. 'remote_user',
  33. 'ask_sudo_pass',
  34. 'verbosity',
  35. 'ack_pass',
  36. 'module_path',
  37. 'forks',
  38. 'become',
  39. 'become_method',
  40. 'become_user',
  41. 'check',
  42. 'listhosts',
  43. 'listtasks',
  44. 'listtags',
  45. 'syntax',
  46. 'sudo_user',
  47. 'sudo',
  48. 'private_key_file',
  49. 'ssh_common_args',
  50. 'sftp_extra_args',
  51. 'scp_extra_args',
  52. 'ssh_extra_args'])
  53.  
  54. # 定义连接远端的额方式为smart
  55. options = Options(connection='smart',
  56. remote_user='root',
  57. ack_pass=None,
  58. sudo_user='root',
  59. forks=5,
  60. sudo='yes',
  61. ask_sudo_pass=False,
  62. verbosity=5,
  63. module_path=None,
  64. become=True,
  65. become_method='sudo',
  66. become_user='root',
  67. check=None,
  68. listhosts=None,
  69. listtasks=None,
  70. listtags=None,
  71. syntax=None,
  72. private_key_file=None,
  73. ssh_common_args=None,
  74. sftp_extra_args=None,
  75. scp_extra_args=None,
  76. ssh_extra_args=None)
  77.  
  78. # 定义默认的密码连接,主机未定义密码的时候才生效,conn_pass指连接远端的密码,become_pass指提升权限的密码
  79. passwords = dict(conn_pass = 'root1234',become_pass = 'root1234')
  80.  
  81. # create inventory and pass to var manager
  82. # 创建inventory、并带进去参数
  83. inventory = Inventory(loader=loader,
  84. variable_manager=variable_manager,
  85. host_list='/root/ansible/playbooks/hosts')
  86.  
  87. # 把inventory传递给variable_manager管理
  88. variable_manager.set_inventory(inventory)
  89.  
  90. # 多个yaml文件则以列表形式
  91. playbook_path = ['/root/ansible/playbooks/mysql.yml',
  92. '/root/ansible/playbooks/test_result.yml']
  93. for playbook in playbook_path:
  94. if not os.path.exists(playbook):
  95. print '[INFO] The [%s] playbook does not exist' % playbook
  96. sys.exit()
  97.  
  98. playbook = PlaybookExecutor(playbooks=playbook_path,
  99. inventory=inventory,
  100. variable_manager=variable_manager,
  101. loader=loader,
  102. options=options,
  103. passwords=passwords)
  104. # 执行playbook
  105. result = playbook.run()
  106.  
  107. print '执行结果: %s' %(result)

  

4 开始执行吧

  1. root@ansible:~/ansible# python test-task.py
  2.  
  3. PLAY [install and config mariadb for remote host] ******************************
  4.  
  5. TASK [install mariadb for remote host] *****************************************
  6. ok: [testserver01]
  7.  
  8. TASK [start mariadb for remote host] *******************************************
  9. ok: [testserver01]
  10.  
  11. TASK [create database for remote mariadb] **************************************
  12. ok: [testserver01]
  13.  
  14. PLAY RECAP *********************************************************************
  15. testserver01 : ok=3 changed=0 unreachable=0 failed=0
  16.  
  17. PLAY [test when] ***************************************************************
  18.  
  19. TASK [command] *****************************************************************
  20. changed: [testserver04]
  21. changed: [testserver03]
  22.  
  23. TASK [command] *****************************************************************
  24. skipping: [testserver03]
  25. skipping: [testserver04]
  26.  
  27. TASK [command] *****************************************************************
  28. changed: [testserver03]
  29. changed: [testserver04]
  30.  
  31. TASK [command] *****************************************************************
  32. skipping: [testserver04]
  33. skipping: [testserver03]
  34.  
  35. PLAY RECAP *********************************************************************
  36. testserver01 : ok=3 changed=0 unreachable=0 failed=0
  37. testserver03 : ok=2 changed=2 unreachable=0 failed=0
  38. testserver04 : ok=2 changed=2 unreachable=0 failed=0
  39.  
  40. 执行结果: 0

 

ansible 调用playbook api执行(一)的更多相关文章

  1. [置顶] Xamarin android 调用Web Api(ListView使用远程数据)

    xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  2. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

    xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  3. Ansible playbook API 开发 调用测试

    Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...

  4. python调用ansible接口API执行命令

    python版本:Python 2.6.6 ansible版本:ansible 2.3.1.0      下载地址:https://releases.ansible.com/ansible/ 调用脚本 ...

  5. 通过C#代码调用Dynamics 365 Web API执行批量操作

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. Ansible之playbook的使用总结 - 运维笔记

    之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...

  7. Ansible进阶--playbook的使用

    一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...

  8. Ansible之Playbook详解、案例

    什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...

  9. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

随机推荐

  1. centos7 vim显示行号

    CentOS7下可能有n个账户,让vim显示行号有两种方法:仅让当前用户显示行号和让所有用户显示行号   一.仅让当前用户显示行号 输入命令:vim ~/.vimrc 写入:set nu 保存:wq ...

  2. javascript使用百度地图api和html5特性获取浏览器位置

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>&l ...

  3. playbook实现nginx安装

    1. 先在一台机器上编译安装好nginx,然后打包 tar -zcvf nginx.tar.gz /usr/local/nginx --exclude=conf/nginx.conf --exclud ...

  4. [2010-12-28 20:39]ActionScript3.0中用要的公式

    一.质点的运动(1)——直线运动 1)匀变速直线运动 1.平均速度V平=s/t(定义式) 2.有用推论Vt2-Vo2=2as 3.中间时刻速度Vt/2=V平=(Vt+Vo)/2 4.末速度Vt=Vo+ ...

  5. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  6. [.net基础]访问修饰符

    标题:[.net基础]访问修饰符 一.前言 基础掌握不牢固啊,所以记录下来. 二.方法访问修饰符Internal (1).创建工程ParentAndSon (2).添加类ModelA namespac ...

  7. CSS 图像拼合技术

    CSS 图像拼合技术 一.图像拼合 图像拼合就是单个图像的集合. 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求. 使用图像拼合会降低服务器的请求数量,并节省带宽. 二.图像拼合 - ...

  8. Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别

    Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别 一.Web.xml中自动扫描Spring的配置文件(applicationCont ...

  9. .NET Framework 系统要求

    .NET Framework 3.5对操作系统的要求 .NET Framework 4 对操作系统的要求 .NET Framework 4.5对操作系统的要求

  10. sql 取前一年、月

    SQL SERVER 提供了一些时间函数:取当前时间:SELECT GETDATE() 取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SE ...