ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键
冒号 以冒号结尾的除外,其他所有冒号后面必须有空格
短横线 表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表

1)编写一个简单的playbook 实例, 命名事例为play01.yml

---
#play
- hosts: lab
tasks:
- name: Installed Httpd Service
yum:
name: httpd
state: present
- name: Start Httpd Service
systemd:
name: httpd
state: started
enabled: yes

2)检查语法

ansible-playbook --syntax-check play01.yml

3)模拟执行(不是真的执行)

ansible-playbook -C play01.yml

4)真正执行

ansible-playbook play01.yml

playbook变量 

有如下优先级

命令行定义变量 ---> play中的vars_files ---> play中的vars变量 ---> host_vars中定义的变量

---> group_vars/组 ---> group_vars/all ---> inventory定义的变量

 a)playbook中定义变量vars,变量用 "{{变量}}" 表示

---
#play
- hosts: webservers
vars:
- web_package: httpd
- db_package: mariadb-server
- ftp_package: vsftpd
tasks:
- name: Installed Httpd Service
yum:
name:
- "{{ web_package }}"
- "{{ db_package }}"
- "{{ ftp_package }}"
state: present

b) playbook的变量可以定义在一个专门存放变量的文件中,

vi vars01.yml

web_package: httpd
db_package: mariadb-server
ftp_package: vsftpd

引用了变量文件vars01.yml 的写法

---
#play
- hosts: webservers
vars_files: ./vars01.yml
tasks:
- name: Installed Httpd Service
yum:
name:
- "{{ web_package }}"
- "{{ db_package }}"
- "{{ ftp_package }}"
state: present

c)

更好的方式是在ansible的项目目录中创建额外的两个变量目录,分别是host_varsgroup_vars
group_vars 目录下必须存放的是和inventory清单文件中定义的组名一致,如下
cat /etc/ansible/hosts
[webservers]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8

cat group_vars/webservers
web_package: httpd
ftp_package: vsftpd

注意:系统提供了特殊的组,"all",也就是说在group_vars目录下创建一个all文件,定义变量对所有的主机都生效

host_vars 目录下存放的是某个host所需要定义的变量,这个变量优先级会高于group_vars 中定义的变量

d)

通过命令行覆盖变量,inventory的变量会被playbook文件中覆盖,这两种方式的变量都会被

命令行直接指定的变量覆盖,使用参数--extra-vars或-e 设定变量
ansible-playbook test.yml -e "web_package=nginx" -e "ftp_package=vsftpd"

e)  absible 变量层级定义

例如如下文件var01.yml中定义了变量

如下配置playbook, 中变量引用用类似rainbow.web.web_package的方式定义变量

f) Ansible Register 变量注册,

把shell的执行结果保存在register 的变量net_port

g) Ansible facts 变量基本用法,ansible会帮忙采集被控端的信息

ansible node -m setup

ansible node -m setup -a filter="ansible_memtotal_mb"

通过gather_facts=false来关闭,关闭采集

h) 通过Ansible facts 采集的被控端变量,来定制不同的配置文件,

要使用template模块,该模块会先查找source文件中是否有playbook中定义的变量,如果有,会把变量替换为值

playbook中没有,但是被facts采集的变量也会被替换,

例如下图,

如下变量,"zabbix_server"是在playbook中定义的,ansible_hostname是通过facts采集的

i)变量可以加减乘除运算,以下示例,通过facts采集的变量可以除以2,生成新的值

j) ansible playbook 条件判断语句,when

用法如下图

下图when语句,查看是否包含关键字,支持or 和 and

when: (ansible_hostname is match ("web*")) or (ansible_hostname is match ("nfs*"))

k) ansible playbook 循环用法

l) ansible playbook  使用字典循环,批量创建用户和拷贝文件

拷贝文件

m) ansible playbook 使用notify 和 handlers处理配置文件修改后触发任务,

如下示例,当发现配置文件修改后,通过 handlers重启httpd

n) ansible playbook任务标签(tag)

可以列出所有的tags, 可以根据tags的内容,指定运行哪些定义的tags任务,可以跳过某个tags

关于tag 的配置文件

o) ansible playbook include 文件复用

把单个文件放到文件中,之后通过include_task单独调用

具体文件内容

p) 调用多个playbook文件,import_playbook

q) ansible playbook ignore 忽略错误

直接在某个task 中添加ignore_error = yes

r) ansible playbook

在task出现错误后,继续调用handlers

通常情况下,当task失败后,play将会终止,任何在前面已经被tasks notify的handlers都不会被执行,
如果你在play中设置了force_handlers: yes参数,被通知的handlers就会被强制执行。(有些特殊场景可能会使用到)

s)

shell任务不应该每次都报告changed状态,因为它没有在被管理主机执行后发生变化,添加一行changed_when: false
来抑制这个改变,

t) ansible playbook检查shell是否执行成功,并且在执行成功的时候是绿色,执行失败的时候报错出错误

 

- hosts: all
gather_facts: no
tasks:
- name: check nginx syntax
shell: /usr/local/nginx/sbin/nginx -t >&
register: check_nginx
changed_when: false
changed_when: check_nginx.stdout.find('success') != -
notify: Reload nginx - name: show_result
debug: msg={{ check_nginx.stdout_lines }} handlers:
- name: Reload nginx
systemd:
name: nginx
state: reloaded

u)  playbook tasks 总结

ansible playbook详解的更多相关文章

  1. Ansible Playbook 详解

    一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...

  2. Ansible之Playbook详解

    1.Playbook详解 playbook是一个非常简单的配置管理和多主机部署系统,可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式. 核心元素 Hosts:主机 Tasks:任务,由 ...

  3. Ansible配置详解

    目录 Ansible配置详解 参考 配置优先级 配置参数说明 Ansible配置详解

  4. ansible自动化运维详细教程及playbook详解

    前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...

  5. Ansible配置文件ansible.cfg详解

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 此时外面小雨淅淅沥沥 ...

  6. 2、Ansible配置文件详解

    0.配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下. ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径.模块 ...

  7. Ansible 配置文件详解

    # config file for ansible -- http://ansible.com/ # ============================================== #  ...

  8. Ansible之Playbook详解、案例

    什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...

  9. ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...

随机推荐

  1. ContextFlyout 在10586或10240的使用

    虽然ContextFlyout只能在红石以上版本使用,但可以采用附加属性的方法手动写一个 public static class ContextFlyoutSetter { public static ...

  2. CentOS中的常用命令

    1. 网络 1.1 查看所有端口 netstat -ntlp 1.2 查看被打开的端口 netstat -anp 1.3 查看端口占用情况 lsof -i: 或 lsof -i tcp: 2. 硬盘 ...

  3. [Codeforces Round #431]简要题解

    来自FallDream的博客,未经允许, 请勿转载,谢谢. 好久没写cf题解了zzz 代码比较丑不贴了,cf上都可以看 Div2A. 给你一个长度为n(n<=100)的序列 判断是否可以分成奇数 ...

  4. Day10 空时编码理论之无线信道、分集和复用

    在有限的频谱资源上,如何高效地加以利用,增加信道容量,并保证信息可靠地传输. 在单天线链路系统中,采用先进的编码(例如turbo码和LDPC码)可以接近香农容量极限. 通过增加发射端和接收端的天线数量 ...

  5. 洛谷P1792 [国家集训队]种树(链表 贪心)

    题意 题目链接 Sol 最直观的做法是wqs二分+dp.然而还有一种神仙贪心做法. 不难想到我们可以按权值从大到小依次贪心,把左右两边的打上标记,但这显然是错的比如\(1\ 231\ 233\ 232 ...

  6. What is the NETStandard.Library metapackage?

    In my last post, I took a quick look at the Microsoft.AspNetCore meta package. One of the libraries ...

  7. 字符串和数组----vector

    vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector. 使用vector需要包含头文件vector. 1.初始化vector对象的方法 1)vecto ...

  8. HDUOJ---1133(卡特兰数扩展)Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. poj 3680(最小费用最大流)

    题目链接:http://poj.org/problem?id=3680 思路:因为N<=200,而区间范围为[1,100000],因此需要离散化,去重,然后就是建图了相连两点连边,容量为k,费用 ...

  10. POJ 2253 Frogger【最短路变形——路径上最小的最大权】

    链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...