ansible - playbook(剧组)
ansible - playbook(剧组)
playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
语法:
- 同层缩进必须保持对齐
- 后面要有空格
- : 后面必须要与空格
- 不允许tab
- =不能空格
主要元素:
Tasks: 任务,由模板定义的操作列表
Variables: 变量
Templates: 模板,即使用模板语法的文件
Handlers: 处理器, 当某条件满足时, 触发执行的操作
Roles: 角色
hosts和users介绍:
在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
---
- hosts: abc #指定主机组,可以是一个或多个组。
remote_user: root #指定远程主机执行的用户名
指定远程主机sudo切换用
# vim ping.yml
---
- hosts: abc
remote_user: root
become: yes #2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_user: mysql #指定sudo用户为mysql
执行playbook
# ansible-playbook ping.yml -K
Tasks list和action介绍
1:Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。
在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。
Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。2:每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。
3:定义一个task,常见的格式:”module: options” 例如:yum: name=httpd
4:ansible的自带模块中,command模块和shell模块无需使用key=value格式
常用命令
ansible-playbook [yaml文件名,也可以结尾]
例如: ansible-playbook a.yml
参数:
-k(–ask-pass) 用来交互输入ssh密码
-K(-ask-become-pass) 用来交互输入sudo密码
-u 指定用户
.
# ansible-playbook a.yml --syntax-check #检查yaml文件的语法是否正确
# ansible-playbook a.yml --list-task #检查tasks任务
# ansible-playbook a.yml --list-hosts #检查生效的主机
# ansible-playbook a.yml --start-at-task='Copy Nginx.conf' #指定从某个task开始运行
示例:
# vim a.yml
---
- hosts: 192.168.200.129 //指定主机
remote_user: root //指定在被管理的主机上执行任务的用户
tasks: //任务列表↓
- name: disable selinux //任务名关闭防火墙
command: '/sbin/setenforce 0' //调用command模块 执行关闭防火墙命令
- name: start httpd //任务名 开启httpd
service: name=httpd state=started //调用service模块 开启httpd 服务
# ansible-playbook a.yml --syntax-check #检查yaml文件的语法是否正确
# ansible-playbook a.yml
五种传参方式
第一种:
- hosts: web
tasks:
- name: creste{{user}}
user: name{{user}}
ansible-playbook -e user=hui pp.yml
第二种:
在 /etc/ansible/hosts 中定义参数:
10.0.0.[132:133] user=alex14
10.0.0.135 user=alex12
ansible-playbook pp.yml
第三种:
在 /etc/ansible/hosts 中:
[web(组名):vars]
user=KongHui
ansible-playbook pp.yml
第四种:
- hosts: web
vars:
- user: KongHui
user: name={{user}}
ansible-playbook pp.yml
第五种传参方式:
- hosts: web
tasks:
- name: yunbc
yum: name=bc
- name: sum
shell: echo 8+9|bc
register: user
- name: echo
shell: echo{{user.stdout}} >/tem/sum.txt
- name: createuser{{user.stdout}}
user: name=alex{{user.stdout}}
优先级
-e > playbook的vars > hosts文件
常用元素详解
tags
在一个playbook中, 我们一般会定义很多个task, 如果我们只想执行其中的某一个taskh=或多个task时就可以使用tags标签功能了
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
copy: dest=/etc/redis.conf src=/etc/redis.conf
tags: copyfile
- name: sredistart
service: name=redis state=started
ansible-playbook -t copyfile p7.yml
handlers
andlers也是一些task的列表,和一般的task并没有什么区别。
是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行
不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次

template
Jinja是基于Python的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。
可以获取setup获取的变量
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
.
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=redis.conf
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
需要在本地的目录下创建一个templates目录,就可以用相对路径
when
加条件
- hosts: web
tasks:
- name: file
copy: content="大弦嘈嘈如急雨" dest=/opt/file
when: ansible_distribution_major_version=="7"
- name: file
copy: content="小弦切切如私语" dest=/opt/file
when: ansible_distribution_major_version=="6"
.
- hosts: web
tasks:
- name: file
copy: content="大弦嘈嘈如急雨\n" dest=/opt/file
when: sum=="7"
- name: file
copy: content="小弦切切如私语\n" dest=/opt/file
when: sum=="6"
ansible-playbook -e sum=7 p11.yml
循环
- hosts: web
tasks:
- name: file
user: name={{item}}
with_items:
- alex20
- alex21
.
- hosts: web
tasks:
- name: creategroup
group: name={{item}}
with_items:
- wusir20
- wusir21
- name: file
user: name={{item}}
with_items:
- alex22
- alex23
嵌套循环
- hosts: web
tasks:
- name: creategroup
group: name={{item}}
with_items:
- wusir22
- wusir23
- name: file
user: name={{item.name}} group={{item.group}}
with_items:
- {"name":alex24,"group":wusir22}
- {"name":alex25,"group":wusir23}
ansible - playbook(剧组)的更多相关文章
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
- ansible playbook实践(四)-如何调试写好的playbook文件
有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...
- ansible playbook批量改ssh配置文件,远程用户Permission denied
最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...
- ansible笔记(11):初识ansible playbook(二)
ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...
- ansible笔记(10):初识ansible playbook
ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- 写Ansible playbook添加zabbix被监控的对象
本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible playbook基本操作
一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...
随机推荐
- Codeforces Round #327 (Div. 2) B. Rebranding 模拟
B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. ...
- 【Codevs1322】单词矩阵
Position: http://codevs.cn/problem/1322/ List Codevs1322 单词矩阵 List Description Input Output Sample I ...
- CNN 文本分类模型优化经验——关键点:加卷积层和FC可以提高精度,在FC前加BN可以加快收敛,有时候可以提高精度,FC后加dropout,conv_1d的input维度加大可以提高精度,但是到256会出现OOM。
network = tflearn.input_data(shape=[None, max_len], name='input') network = tflearn.embedding(networ ...
- go语言笔记——还是大爱的我的python,开发效果高,tornado的性能也很不错
Go 自带的工具集主要使用脚本和 Go 语言自身编写的,目前版本的 Go 实现了以下三个工具: go install 是安装 Go 包的工具,类似 Ruby 中的 rubygems.主要用于安装非标准 ...
- yum -y --downloadonly --downloaddir=/root/ruiy update
依赖关系解决 ============================================================================================= ...
- astgo-完整功能介绍
核心功能: Astgo最核心和强大的功能是呼叫中心模块.接入方式:中继卡.模拟卡接入,中继网关.O口网关接入.网络IP接入等.单机200个坐席,通话实时录音.灵活队列分组.开放式IVR设计,修改业务逻 ...
- jquery中对于为一组标签赋予点击事件
可以用each,但是each不能对动态的元素进行事件的绑定, 不过,其实也很简单,只需要获取所有的标签集,然后用动态绑定的方法,比如live进行绑定就可以了. 有时候,其实不难,只是自己想的太过复杂. ...
- [App Store Connect帮助]二、 添加、编辑和删除用户(4)更改用户的 App 访问权限
您可以限制具有“App 管理”.“客户支持”.“开发者”.“营销”或“销售”职能的用户(均不具有“访问报告”职能)拥有哪些 App 的访问权限.如果您不更改他们的用户 App 访问权限,他们将默认拥有 ...
- Elasticsearch如何做到亿级数据查询毫秒级返回?
阅读本文大概需要 6 分钟. 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有 ...
- BZOJ 4310 二分+SA+RMQ
思路: 首先求出后缀数组和height数组,这样能得到本质不同的子串数目 这里利用:本质不同的子串=∑(Len−SA[i]−height[i])=∑(Len−SA[i]−height[i])利用SA[ ...