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是一个可读性高,用来表达数据序 ...
随机推荐
- C语言赋初始值
- 404 Not Found 探秘Nginx转发处理流程
一.问题描述 访问一个链接地址后报404 Not Found nginx/1.10.2 1 112.95.211.154 - - [08/Mar/2018:15:22:21 +0800] " ...
- Java 对比Hashtable、Hashmap、Treemap有什么不同?
①基本理解 Hashtable.Hashmap.Treemap都是最常见的一些Map实现,是以键值对的形式存储和操作数据的容器类型. Hashtable是Java类库提供的一个哈希实现,本身是同步的, ...
- C#数组的Map、Filter、Reduce操作
在Javascript.Python等语言里,Map.Filter和Reduce是数组的常用方法,可以让你在实现一些数组操作时告别循环,具有很高的实用价值.它们三个的意义大家应该都清楚,有一个十分形象 ...
- ServletConfig获取Servlet的公共参数方法
web.xml配置: <servlet> <servlet-name>AServlet</servlet-name> <servlet-class>AS ...
- Python面试题之functools模块
文档 地址 functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结 ...
- GoEasyWeb实时推送
GoEasyWeb实时推送,轻松实现实时消息推送. Web页面订阅(约5行代码),服务器端推送(2行代码)就可以轻松实现,而且在高并发时消息推送稳定. 自己完全可以只花五分钟写出属于自己的第一个实时推 ...
- [转载]Javassist 使用指南(三)
======================= 本文转载自简书,感谢原作者!. 原链接如下:https://www.jianshu.com/p/7803ffcc81c8 =============== ...
- ubuntu18.04编译openwrt前的准备
1.获取openwrt源码 git clone https://github.com/openwrt/openwrt.git 2.安装一些库及必备程序: sudo apt-get install li ...
- JSON 中JsonConfig的使用(转)
我们通常对一个Json串和Java对象进行互转时,经常会有选择性的过滤掉一些属性值,而json-lib包中的JsonConfig为我们提供了这种 功能,具体实现方法有以下几种.(1)建立JsonCon ...