《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完成一些任务,就是管理用户 ...
随机推荐
- 【MSP是什么】MSP认证之成功的项目群管理
同项目管理相比,项目群管理是为了实现项目群的战略目标与利益,而对一组项目进行的统一协调管理. 项目群管理 项目群管理是以项目管理为核心.单个项目上进行日常性的项目管理,项目群管理是对多个项目进行的总体 ...
- webpack入门之简单例子跑起来
webpack介绍 Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将很多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载的模块进行代码分割,等到实际需要的时 ...
- 计算照片的面积(WPF篇)
昨天,老周突发其想地给大伙伴们说了一下UWP应用中计算照片面积的玩法,而且老周也表示会提供WPF版本的示例.所以,今天就给大伙们补上吧. WPF是集成在.net框架中,属于.net的一部分,千万不要跟 ...
- c 进程和系统调用
这一篇博客讲解进程和系统调用相关的知识 有这样一个场景,我需要输入一串文字,然后把我输入的文字加上一个本地的时间戳 保存在一个文件中,可以初步理解为一个备忘录也行 #include <stdio ...
- 妥协与取舍,解构C#中的小数运算
题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激! ...
- 2.JAVA之GUI编程布局
布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...
- Angular 基础入门
简介 什么是AngularJS 一个功能非常完备的前端框架,通过增强HTML的方式提供一种便捷开发Web应用程序的方式 其核心特点就是几乎无任何DOM操作,让开发人员的精力和时间全部集中于业务 MVC ...
- 抽象类 VS 接口
引言 接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同.接下来,我们来了解二者的概念并比较它们的异同. 什么是抽象 ...
- unity3d 免费好用的数据库处理框架 数据库直连框架
一.概述 前不久有一个哥们做PC游戏开发的.使用到Unity3d, 正好找到我. 我给他提供了Unity3d如何Moon.Orm来智能化编程的方式. 我们先看看怎么更加便捷sqlite. http:/ ...
- struts2类型转换
1. Struts2中的类型转换 我们知道通过HTTP提交到后台的数据,都是字符串的形式,而我们需要的数据类型当然不只字符串类型一种.所以,我们需要类型转换! 在Struts2中,类型转换的概念除了用 ...