ansible的playbook

1、playbook的组成部分

(1)task任务:在目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用

(2)variables变量:存储和传递数据(变量可以自定义,①在playbook中定义为全局变量②可以外部传参)

(3)templates模板:用于生成配置文件,模板是包含占位符的文件。占位符由ansible在执行时转化为变量值

(4)handlers处理器:有变更时,可以执行触发器

(5)rolse角色:组织和封装playbook,允许把相关的任务、变量、模板以及处理器组织成一个可复用的单元

2、实例模板

ansible的playbook_第1张图片

ansible-playbook test1.yaml --syntax-check

检查yml文件的语法

ansible-playbook test1.yaml --list-task

查看任务

ansible的playbook_第2张图片

ansible-playbook test1.yaml --list-hosts

查看在哪台主机生效

ansible的playbook_第3张图片

ansible-playbook test1.yaml

运行ynl文件

ansible的playbook_第4张图片

ansible-playbook test1.yaml --start-at-task='install httpd'

指定剧本演出

ansible的playbook_第5张图片

测试

(1)在远程主机切换用户(很少用,基本上都会给root权限)

①用户yst执行此脚本,但yst权限不够,使用root用户权限

ansible的playbook_第6张图片

②取消密钥对认证

ansible的playbook_第7张图片

③声明密码和用户(即便取消密钥对认证也要声明密码和用户)

ansible的playbook_第8张图片

④运行playbook剧本ansible-playbook test1.yaml -K

(已在脚本中设置用有权限的用户时用大K)

ansible的playbook_第9张图片

(2)指定用户但用户没权限执行此剧本(很少用,基本上都会给root权限)

运行要指定有权限的用户并用小k

ansible-playbook test1.yaml -u root -k

ansible的playbook_第10张图片

ansible的playbook_第11张图片

3、声明和引用变量以及外部传参变量

(1)内部传参

ansible的playbook_第12张图片

vars:

    groupname: yst

username: yyy

字典方式:key-values

-开头

表示列表

name: "{{ username }}"

引用变量username

"{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"

包含所有主机变量的字典

#获取目标主机的IP地址

hostvars

打印

inventory_hostname

目标主机的主机名

ansible_default_ipv4

获取目标主机名

['ansible_default_ipv4']['address']

相当于filter过滤出ansible_default_ipv4中的IP地址

检验yml文件语法

运行yml文件

ansible的playbook_第13张图片

测试

(2)外部传参

ansible的playbook_第14张图片

ansible-playbook test2.yml -e 'username=rrr groupname=ymr'

ansible的playbook_第15张图片

测试

ansible的playbook_第16张图片

ansible的playbook_第17张图片

ansible的playbook_第18张图片

4、条件判断

when:一个比较常见的应用场景,实现满足条件即执行,不满足条件即跳过任务(满足条件即执行,不满足条件不执行)

ansible的playbook_第19张图片

debug:

       msg: '位置判断'

相当于echo,用于脚本的调试,在正式脚本中去除

ansible的playbook_第20张图片

ansible的playbook_第21张图片

ansible的playbook_第22张图片

ansible的playbook_第23张图片

ansible的playbook_第24张图片

实题:hosts:all,满足条件IP=20,安装nginx;满足条件IP=30,安装httpd

ansible的playbook_第25张图片

ansible的playbook_第26张图片

测试

ansible的playbook_第27张图片

ansible的playbook_第28张图片

5、循环

ansible有多种循环格式

(1)with_items循环遍历(最常用)

①声明一个列表

ansible的playbook_第29张图片

ansible的playbook_第30张图片

②声明多个列表(把所有列表当成一个整体的列表来遍历)

ansible的playbook_第31张图片

ansible的playbook_第32张图片

③在一个目录下创建两个不同的文件

ansible的playbook_第33张图片

ansible的playbook_第34张图片

ansible的playbook_第35张图片

2with_list列表分组循环

①分组打印

ansible的playbook_第36张图片

ansible的playbook_第37张图片

②在一个目录下创建两个不同的文件

ansible的playbook_第38张图片

ansible的playbook_第39张图片

3with_together列表组循环(列表对应的列、数据结合的方式循环)

ansible的playbook_第40张图片

ansible的playbook_第41张图片

ansible的playbook_第42张图片

ansible的playbook_第43张图片

4with_nested列表中元素定义了循环的次数,第一层定义了循环的次数,第二层列表相当于内循环,表示第一层中的每个元素会循环几次

ansible的playbook_第44张图片

ansible的playbook_第45张图片

ansible的playbook_第46张图片

实题1:基于循环创建文件、目录、用户组

ansible的playbook_第47张图片

ansible的playbook_第48张图片

实题2:用户名test1 test2 组名分别是dn1 dn2

ansible的playbook_第49张图片

ansible的playbook_第50张图片

实题3:yum一键安装tree sl nginx httpd vsftpd dhcp多个软件

ansible的playbook_第51张图片

ansible的playbook_第52张图片

测试

ansible的playbook_第53张图片

ansible的playbook_第54张图片

ansible的playbook_第55张图片

你可能感兴趣的:(ansible)