《Ansible权威指南》笔记(4)——Playbook
七、Playbook
1、语法特性如下:
(1)"---"首行顶格开始
(2)#号注释
(3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用
(4)区别大小写,键值对k/v的值也大小写敏感
(5)k/v的值同行使用":"分开,换行写需以"-"分隔
2、格式
---
- name: test
hosts: test
gather_facts: no
vars:
http: 8080
https: 1443
vars_files:
- vars/server_vars.yml
remote_user: root
sudo: yes
tasks:
- name: test1
copy: src=/opt/apps/web/* dest=/opt/apps/web/
notify:
- restart apache
- name: test2
yum: name={{ item }} state=present
with_items:
- httpd
- httpd-devel
- name: test3
shell: "echo $TEST"
environment:
- TEST: abc
handlers:
- name: restart apache
service: name=httpd state=restarted
说明:
hosts:test #表示test组的节点主机
gather_facts: no #跳过收集facts信息,默认是yes
vars: #定义变量,引用变量{{vars}}
vars_files: #使用文件定义变量,文件中也是用k/v形式定义变量
remote_user: root #远程使用root用户
sudo:yes #使用sudo
tasks: #指定一系列将要运行的任务
name: test1 #test1任务,copy模块
notify: #与下面handlers对应,上一步copy之后文件发生改变,则通过name匹配handlers中的任务,这里匹配restart appche的service任务
name: test2 #test2任务,yum模块
with_items: #定义列表变量,直接用{{item}}引用。该关键字也可以用来定义数组。
with_dict: #定义字典
3、正式运行Playbook之前,可以--check或-C来检测,输出的结果和实际执行一模一样,但不会有实际影响。
4、ansible-playbook
-i 指定inventory文件
-v 详细输出,-vvv更详细,-vvvv更更详细
-f 并发数
-e 定义Playbook中使用的变量,格式"key=value,key=value"
--remote-user #远程用户
--ask-pass #远程用户密码
--sudo #使用sudo
--sudo-user #sudo的用户,默认root
--ask-sudo-pass #sudo密码
扩展:
(1)handlers:见test1
(2)environment:为某个play设置单独的环境变量,例子见P94-95
(3)delegate_to:任务委派
例:- name: 123
shell: "echo $PATH>/test/1"
delegate_to: 192.168.2.30
把shell命令委派给192.168.2.30节点执行,其他hosts中指定的节点不执行。
(4)register:注册变量
将操作结果,包括stdout和stderr,保存到变量中,再根据变量的内容决定下一步,这个保存操作结果的变量就是注册变量。
例:- shell: ***
register: result
使用result.stdout和result.stderr读取执行结果的标准输出和标准错误。
(5)vars_prompt: 交互式提示
例:
---
- hosts: all
vars_prompt:
- name: share_user
prompt: "username?"
- name: share_pass
prompt: "password"
private: yes
常用选项:
private: yes #用户输入不可见
default #设置默认值
confirm: yes #要求输入两次
5、流程控制
(1)when条件判断 P109
例1:第一步执行的返回值中有'ready'时,再执行下一步操作。
- command: my-app --status
register: myapp_result
- command: do-something
when: "'ready' in myapp_result"
例2:stat模块查看文件信息,如果文件没创建,则执行command
- stat: path=/etc/sysctl.conf
register: stat_result
- command: touch /etc/sysctl.conf
when: stat_result.stat.exists == false
(2)changed_when和failed_when P110-111
(3)wait_for模块,任务暂停 P112
6、循环
原文:http://xdays.me/ansible状态管理.html
(1)标准遍历
用with_items可以遍历一个列表,注意这里只会遍历一层。示例如下:
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
(2)嵌套遍历
用with_nested可以遍历一个列表,注意这里会遍历多层,直到最内层。示例如下:
- name: give users access to multiple databases
mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
with_nested:
- [ 'alice', 'bob', 'eve' ]
- [ 'clientdb', 'employeedb', 'providerdb' ]
(3)遍历字典
用with_dict可以遍历一个字典,用key和value来表示。示例如下:
#变量文件
---
users:
alice:
name: Alice Appleworth
telephone: 123-456-7890
bob:
name: Bob Bananarama
telephone: 987-654-3210
#playbook文件
tasks:
- name: Print phone records
debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: users
(4)文件通配符循环
用with_fileglob可以获取本地文件列表。示例如下:
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
(5)对齐的列表
用with_together可以达到类似Python里的zip函数的功能。示例如下:
#变量文件:
---
alpha: [ 'a', 'b', 'c', 'd' ]
numbers: [ 1, 2, 3, 4 ]
#playbook文件
tasks:
- debug: msg="{{ item.0 }} and {{ item.1 }}"
with_together:
- alpha
- numbers
(6)循环一个task的输出
with_lines指令后跟一个命令,ansible会遍历命令的输出。示例如下:
- name: Example of looping over a command result
shell: /usr/bin/frobnicate {{ item }}
with_lines: /usr/bin/frobnications_per_host --param {{ inventory_hostname }}
7、Tags标签 #P113-114
标签功能可以给Roles、文件、单独的任务甚至整个Playbook打上标签,然后利用这些标签来指定要运行或不运行Playbook中的个别任务。
例:
vim test.yml
---
- hosts: test
tags: deploy #给整个Playbook打一个标签
tasks:
- name: test_tags
shell: ***
tags: #为任务打标签
- test1
- test2
- include: foo.yml
tags: foo
ansible-playbook test.yml --tags "test1" #只执行test_tags任务
ansible-playbook test.yml --skip-tags "test2" #跳过test_tags任务
写法格式:
tags: ['one','two']
tags:
- one
- two
8、Block块 P115-116
9、Include
《Ansible权威指南》笔记(4)——Playbook的更多相关文章
- 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令
2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...
- 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块
五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options] -v,--verbose ...
- Struts2权威指南笔记
Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...
- 《Ansible权威指南》笔记(2)——Inventory配置
四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...
- Ansible权威指南-读书笔记
2 Ansible基础元素介绍 2.1 ansible 目录结构介绍 2.2 ansible 配置文件解析 配置文件解析顺序:当前命令执行目录-->用户家目录下的.ansible.cfg--&g ...
- javascript权威指南笔记
最近每天工作之余看下js的细节部分,时间不是很多,所以看的进度也不会太快,写个博客监督自己每天都看下. 以前不知道的细节或者以前知道但是没注意过的地方都会记录下来,所以适合有一定基础的,不适合零基础新 ...
- HTTP权威指南笔记-1.概述
1.1 通讯 Web内容是存储在服务器上的,Web服务所使用的是HTTP协议,所以经常称为HTTP服务器.通讯过程为客户端(正常我们所使用的)发出请求,服务端根据客户端的HTTP请求响应相应数据,这就 ...
- css 权威指南笔记(一)
零零散散接触css将近5年,俨然已经成为一个熟练工.如果不是换份工作,我不知道自己差的那么远:在qunar的转正review中我这种“知其然而不知其所以然” 的状况被标明,我才意识到我已停步不前近两年 ...
- Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系
Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...
随机推荐
- Underscore.js
概述 Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程.MVC框架Backbone.js就将这个库 ...
- iOS App引导页功能实现
一.写作原因 以前都没有想着来写点东西,今天遇到件事情让我决定每次还是要做记录.因为以前自己可以轻松的完成pod spec的配置,但是今天在做的时候还是忘了遇到了很多坑.pod spec配置遇到的坑不 ...
- 1. SVM简介
从这一部分开始,将陆续介绍SVM的相关知识,主要是整理以前学习的一些笔记内容,梳理思路,形成一套SVM的学习体系. 支持向量机(Support Vector Machine)是Cortes和Vapni ...
- 使用MATLAB对图像处理的几种方法(上)
实验一图像的滤波处理 一.实验目的 使用MATLAB处理图像,掌握均值滤波器和加权均值滤波器的使用,对比两种滤波器对图像处理结果及系统自带函数和自定义函数性能的比较,体会不同大小的掩模对图像细节的影响 ...
- Federated Identity Pattern 联合身份模式
Delegate authentication to an external identity provider. This pattern can simplify development, min ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构 ...
- bzoj1036--树链剖分
模板题... #include<iostream> #include<cstdio> #include<cstring> using namespace std; ...
- python 数据类型---布尔型& 字符串
python数据类型-----布尔型 真或假=>1或0 >>> 1==True True >>> 0==False True python 数据类型----- ...
- thinkphp怎么修改配置进入默认首页
thinkphp文件夹下config 里面有个convention.php文件 里面有三个配置 'DEFAULT_MODULE' => 'Home', // 默认模块 'DEFAULT_CONT ...
- 【Effective Java】9、使用EnumMap代替序数索引
package cn.xf.cp.ch02.item33; import java.util.EnumMap; import java.util.HashSet; import java.util.M ...