ansible 调用playbook api执行(一)
一 调用ansible playbook api执行playbook
1 准备好hosts文件
root@ansible:~/ansible/playbooks# cat hosts
[all:vars]
ansible_ssh_pass=root1234 [webserver01]
testserver01 ansible_ssh_host=172.20.6.121 [webserver02] testserver04 ansible_ssh_host=172.20.6.125
testserver03 ansible_ssh_host=172.20.6.124
2 准备好playbook剧本
这里准备2个把,当然可以准备多个
root@ansible:~/ansible/playbooks# cat mysql.yml
--- - name: install and config mariadb for remote host
hosts: webserver01
tasks:
- name: install mariadb for remote host
yum:
args:
name: mariadb,mariadb-server
state: present - name: start mariadb for remote host
service:
args:
name: mariadb
state: started - name: create database for remote mariadb
mysql_db: name=ansible_test state=present
root@ansible:~/ansible/playbooks# cat test_result.yml
--- - name: test when
hosts: webserver02
tasks:
- command: /bin/true
register: result
ignore_errors: True - command: ls
when: result| failed - command: df -h
when: result| success - command: pwd
when: result| skipped
3 开始调用api吧
root@ansible:~/ansible# cat test-task.py
#!/usr/bin/env python
# coding:utf-8 import json
from collections import namedtuple
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.task_result import TaskResult
from ansible.plugins.callback import CallbackBase
from ansible.executor.playbook_executor import PlaybookExecutor
import os,sys # 在指定文件时,不能使用列表指定多个。
host_path = '/root/ansible/playbooks/hosts'
if not os.path.exists(host_path):
print '[INFO] The [%s] inventory does not exist' % host_path
sys.exit() # 管理变量的类,包括主机,组,扩展等变量,之前版本是在 inventory中的
variable_manager = VariableManager() # 用来加载解析yaml文件或JSON内容,并且支持vault的解密
loader = DataLoader() # 初始化需要的对象
Options = namedtuple('Options',
['connection',
'remote_user',
'ask_sudo_pass',
'verbosity',
'ack_pass',
'module_path',
'forks',
'become',
'become_method',
'become_user',
'check',
'listhosts',
'listtasks',
'listtags',
'syntax',
'sudo_user',
'sudo',
'private_key_file',
'ssh_common_args',
'sftp_extra_args',
'scp_extra_args',
'ssh_extra_args']) # 定义连接远端的额方式为smart
options = Options(connection='smart',
remote_user='root',
ack_pass=None,
sudo_user='root',
forks=5,
sudo='yes',
ask_sudo_pass=False,
verbosity=5,
module_path=None,
become=True,
become_method='sudo',
become_user='root',
check=None,
listhosts=None,
listtasks=None,
listtags=None,
syntax=None,
private_key_file=None,
ssh_common_args=None,
sftp_extra_args=None,
scp_extra_args=None,
ssh_extra_args=None) # 定义默认的密码连接,主机未定义密码的时候才生效,conn_pass指连接远端的密码,become_pass指提升权限的密码
passwords = dict(conn_pass = 'root1234',become_pass = 'root1234') # create inventory and pass to var manager
# 创建inventory、并带进去参数
inventory = Inventory(loader=loader,
variable_manager=variable_manager,
host_list='/root/ansible/playbooks/hosts') # 把inventory传递给variable_manager管理
variable_manager.set_inventory(inventory) # 多个yaml文件则以列表形式
playbook_path = ['/root/ansible/playbooks/mysql.yml',
'/root/ansible/playbooks/test_result.yml']
for playbook in playbook_path:
if not os.path.exists(playbook):
print '[INFO] The [%s] playbook does not exist' % playbook
sys.exit() playbook = PlaybookExecutor(playbooks=playbook_path,
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords=passwords)
# 执行playbook
result = playbook.run() print '执行结果: %s' %(result)
4 开始执行吧
root@ansible:~/ansible# python test-task.py PLAY [install and config mariadb for remote host] ****************************** TASK [install mariadb for remote host] *****************************************
ok: [testserver01] TASK [start mariadb for remote host] *******************************************
ok: [testserver01] TASK [create database for remote mariadb] **************************************
ok: [testserver01] PLAY RECAP *********************************************************************
testserver01 : ok=3 changed=0 unreachable=0 failed=0 PLAY [test when] *************************************************************** TASK [command] *****************************************************************
changed: [testserver04]
changed: [testserver03] TASK [command] *****************************************************************
skipping: [testserver03]
skipping: [testserver04] TASK [command] *****************************************************************
changed: [testserver03]
changed: [testserver04] TASK [command] *****************************************************************
skipping: [testserver04]
skipping: [testserver03] PLAY RECAP *********************************************************************
testserver01 : ok=3 changed=0 unreachable=0 failed=0
testserver03 : ok=2 changed=2 unreachable=0 failed=0
testserver04 : ok=2 changed=2 unreachable=0 failed=0 执行结果: 0
ansible 调用playbook api执行(一)的更多相关文章
- [置顶]
Xamarin android 调用Web Api(ListView使用远程数据)
xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...
- Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)
xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
- python调用ansible接口API执行命令
python版本:Python 2.6.6 ansible版本:ansible 2.3.1.0 下载地址:https://releases.ansible.com/ansible/ 调用脚本 ...
- 通过C#代码调用Dynamics 365 Web API执行批量操作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Ansible之playbook的使用总结 - 运维笔记
之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- Ansible之Playbook详解、案例
什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
随机推荐
- TWebBrowser: Determine when a page with Frames is completed
TWebBrowser: Determine when a page with Frames is completed 6 comments. Current rating: (3 votes). L ...
- openURL的使用
1)私有方法跳转 /** 私有方法,不建议使用 利用ASCII值进行拼装组合方法.这样可绕过审核. 上面是进入蓝牙界面的方法.也可以有其他的页面可以跳转.设置页面是@"@"Pref ...
- 2017 Multi-University Training Contest - Team 3 hdu6060 RXD and dividing
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6060 题目: RXD and dividing Time Limit: 6000/3000 M ...
- [转]loadrunner:系统的平均并发用户数和并发数峰值如何估算
一.经典公式1: 一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据 1)平均并发用户数为 C = nL/T 2)并发用户数峰值 C‘ = C + 3*根号C C是平均并发用户数,n是l ...
- Python+Appium API
1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...
- Spring-1-F Dice(HDU 5012)解题报告及测试数据
Dice Time Limit:1000MS Memory Limit:65536KB Description There are 2 special dices on the table. ...
- Python日期字符串比较
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些 ...
- 前端学习笔记之Z-index详解
CSS当中的z-index属性看起来足够简单,但是如果你真的想了解它是如何工作的话,在这简单的表面之下,又有许多值得探究的内容. 在这篇教程中,通过探究层叠上下文和一系列实际的例子,我们将会阐明z-i ...
- jquery获取select选中项的文本
使用jquery获取选中的值很简单 $("#select").val(); 但是获取选中的文本就没有这么直接了 $("#select").find(" ...
- 20145328 《Java程序设计》第1周学习总结
20145328 <Java程序设计>第1周学习总结 教材学习内容总结 了解Java基础知识 1995年5月23日,Java诞生,JDK 1.0a2发布 Java约以两年为周期推出重大版本 ...