ansible playbook详解
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_vars 和 group_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详解的更多相关文章
- Ansible Playbook 详解
一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...
- Ansible之Playbook详解
1.Playbook详解 playbook是一个非常简单的配置管理和多主机部署系统,可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式. 核心元素 Hosts:主机 Tasks:任务,由 ...
- Ansible配置详解
目录 Ansible配置详解 参考 配置优先级 配置参数说明 Ansible配置详解
- ansible自动化运维详细教程及playbook详解
前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...
- Ansible配置文件ansible.cfg详解
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 此时外面小雨淅淅沥沥 ...
- 2、Ansible配置文件详解
0.配置文件 两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下. ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径.模块 ...
- Ansible 配置文件详解
# config file for ansible -- http://ansible.com/ # ============================================== # ...
- Ansible之Playbook详解、案例
什么是playbook playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的 ...
- ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等 ...
随机推荐
- Cobalt Strike配置及简单使用
前言 CS分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网 ...
- PTA 1003 Emergency
问题描述 As an emergency rescue team leader of a city, you are given a special map of your country. The ...
- Java锁机制深入理解
Java锁机制 背景知识 指令流水线 CPU的基本工作是执行存储的指令序列,即程序.程序的执行过程实际上是不断地取出指令.分析指令.执行指令的过程. 几乎所有的冯•诺伊曼型计算机的CPU,其工 ...
- linux C++ 读取mysql结果保存
c++读取mysql数据库结果保存 #include <fstream> #include <iomanip> #include <iostream> #inclu ...
- The sklearn preprocessing
Recently, I was writing module of feature engineering, i found two excellently packages -- tsfresh a ...
- 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践
SequoiaDB 一款自研金融级分布式数据库产品,支持标准SQL和分布式事务功能.支持复杂索引查询,兼容 MySQL.PGSQL.SparkSQL等SQL访问方式.SequoiaDB 在分布式存储功 ...
- 开始自学JAVA了,找到一点有用的资料(不定时更新)
入门代码https://blog.csdn.net/salmonwilliam/article/details/81952387 高精度https://www.cnblogs.com/downrain ...
- 跳表的java实现,转载自网络,仅供自己学习使用
文档结构: 1.代码结构 2.代码实现 1.代码结构 节点类: String key 键值 对跳跃表的操作都是根据键值进行的 Int value 实际值 Node up,down,left,rig ...
- C# SDO_GEOMETRY
OracleParameter endGeometry = cmd.CreateParameter(); endGeometry.OracleDbType = OracleDbType.Object; ...
- Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目,常用的项目如下 BeanUtils 提供了一系列对java bean的操作,读取和设置属性值等 map和bean的互相转换 我们 ...