1、playbook的组成部分

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

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

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

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

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

2、实例模板

python ansible模块详解 ansible playbook常用模块_占位符

python ansible模块详解 ansible playbook常用模块_配置文件_02

ansible-playbook test1.yaml --syntax-check

检查yml文件的语法

python ansible模块详解 ansible playbook常用模块_ansible_03

ansible-playbook test1.yaml --list-task

查看任务

python ansible模块详解 ansible playbook常用模块_IP_04

ansible-playbook test1.yaml --list-hosts

查看在哪台主机生效

python ansible模块详解 ansible playbook常用模块_ansible_05

ansible-playbook test1.yaml

运行ynl文件

python ansible模块详解 ansible playbook常用模块_IP_06

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

指定剧本演出

python ansible模块详解 ansible playbook常用模块_IP_07

测试

python ansible模块详解 ansible playbook常用模块_ansible_08

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

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

python ansible模块详解 ansible playbook常用模块_配置文件_09

②取消密钥对认证

python ansible模块详解 ansible playbook常用模块_占位符_10

python ansible模块详解 ansible playbook常用模块_ansible_11

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

python ansible模块详解 ansible playbook常用模块_占位符_12

python ansible模块详解 ansible playbook常用模块_ansible_13

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

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

python ansible模块详解 ansible playbook常用模块_配置文件_14

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

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

ansible-playbook test1.yaml -u root -k

python ansible模块详解 ansible playbook常用模块_配置文件_15

python ansible模块详解 ansible playbook常用模块_IP_16

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

(1)内部传参

python ansible模块详解 ansible playbook常用模块_IP_17

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文件语法

python ansible模块详解 ansible playbook常用模块_IP_18

运行yml文件

python ansible模块详解 ansible playbook常用模块_IP_19

测试

python ansible模块详解 ansible playbook常用模块_ansible_20

(2)外部传参

python ansible模块详解 ansible playbook常用模块_IP_21

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

python ansible模块详解 ansible playbook常用模块_IP_22

测试

python ansible模块详解 ansible playbook常用模块_配置文件_23

python ansible模块详解 ansible playbook常用模块_IP_24

python ansible模块详解 ansible playbook常用模块_ansible_25

python ansible模块详解 ansible playbook常用模块_配置文件_26

4、条件判断

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

python ansible模块详解 ansible playbook常用模块_配置文件_27

debug:

       msg: '位置判断'

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

python ansible模块详解 ansible playbook常用模块_ansible_28

python ansible模块详解 ansible playbook常用模块_ansible_29

python ansible模块详解 ansible playbook常用模块_ansible_30

python ansible模块详解 ansible playbook常用模块_占位符_31

python ansible模块详解 ansible playbook常用模块_配置文件_32

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

python ansible模块详解 ansible playbook常用模块_占位符_33

python ansible模块详解 ansible playbook常用模块_IP_34

测试

python ansible模块详解 ansible playbook常用模块_IP_35

python ansible模块详解 ansible playbook常用模块_IP_36

python ansible模块详解 ansible playbook常用模块_ansible_37

5、循环

ansible有多种循环格式

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

①声明一个列表

python ansible模块详解 ansible playbook常用模块_配置文件_38

python ansible模块详解 ansible playbook常用模块_ansible_39

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

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_40

python ansible模块详解 ansible playbook常用模块_ansible_41

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

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_42

python ansible模块详解 ansible playbook常用模块_占位符_43

python ansible模块详解 ansible playbook常用模块_配置文件_44

2with_list列表分组循环

①分组打印

python ansible模块详解 ansible playbook常用模块_ansible_45

python ansible模块详解 ansible playbook常用模块_IP_46

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

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_47

python ansible模块详解 ansible playbook常用模块_ansible_48

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

python ansible模块详解 ansible playbook常用模块_ansible_49

python ansible模块详解 ansible playbook常用模块_占位符_50

python ansible模块详解 ansible playbook常用模块_ansible_51

python ansible模块详解 ansible playbook常用模块_ansible_52

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

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_53

python ansible模块详解 ansible playbook常用模块_占位符_54

python ansible模块详解 ansible playbook常用模块_IP_55

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

python ansible模块详解 ansible playbook常用模块_IP_56

python ansible模块详解 ansible playbook常用模块_ansible_57

python ansible模块详解 ansible playbook常用模块_ansible_58

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

python ansible模块详解 ansible playbook常用模块_IP_59

python ansible模块详解 ansible playbook常用模块_配置文件_60

python ansible模块详解 ansible playbook常用模块_IP_61

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

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_62

python ansible模块详解 ansible playbook常用模块_配置文件_63

测试

python ansible模块详解 ansible playbook常用模块_ansible_64

python ansible模块详解 ansible playbook常用模块_占位符_65

python ansible模块详解 ansible playbook常用模块_配置文件_66

python ansible模块详解 ansible playbook常用模块_IP_67

实题4:在本机上创建123 456 789文件,分别复制到目标主机的test1 test2 test3目录中

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_68

python ansible模块详解 ansible playbook常用模块_配置文件_69

测试

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_70

6、templates模块(传参模块)

定义:jinja模板架构,通过模板可以实现向模板文件传参(python转义),把占位符参数传到配置文件中

jinja模板架构:生成一个目标文本文件,传递变量到需要的配置文件中(用于web开发)

实题1:定义占位符传送httpd配置文件到目标主机

①修改ansible的配置文件定义占位符

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_71

python ansible模块详解 ansible playbook常用模块_ansible_72

②复制配置文件(必须以.j2结尾,j2表示占位符)

python ansible模块详解 ansible playbook常用模块_配置文件_73

python ansible模块详解 ansible playbook常用模块_ansible_74

python ansible模块详解 ansible playbook常用模块_占位符_75

python ansible模块详解 ansible playbook常用模块_IP_76

③修改以.j2结尾的httpd配置文件

vim /opt/httpd.conf.j2

python ansible模块详解 ansible playbook常用模块_占位符_77

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_78

python ansible模块详解 ansible playbook常用模块_占位符_79

④创建剧本vim http.yml

python ansible模块详解 ansible playbook常用模块_配置文件_80

⑤运行剧本

python ansible模块详解 ansible playbook常用模块_IP_81

⑥验证配置文件是否传送目标主机

python ansible模块详解 ansible playbook常用模块_占位符_82

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_83

python ansible模块详解 ansible playbook常用模块_占位符_84

python ansible模块详解 ansible playbook常用模块_配置文件_85

在httpd.conf.j2中

配置占位符(声明的变量)

在/etc/ansible/hosts中

配置主机的占位符名称和j2文件中的占位符一致(定义参数:声明占位符的参数)

在剧本playbook中

用template模块把参数传给目标主机的配置文件

实题2:定义占位符传送nginx配置文件到目标主机

①在ansible配置文件中定义占位符

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_86

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_87

②复制nginx的配置文件(以.j2结尾,j2表示占位符)

python ansible模块详解 ansible playbook常用模块_IP_88

python ansible模块详解 ansible playbook常用模块_配置文件_89

python ansible模块详解 ansible playbook常用模块_ansible_90

③修改以.j2结尾的nginx配置文件

python ansible模块详解 ansible playbook常用模块_ansible_91

python ansible模块详解 ansible playbook常用模块_占位符_92

④创建nginx剧本

python ansible模块详解 ansible playbook常用模块_IP_93

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_94

⑤运行剧本

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_95

⑥验证配置文件是否传送到目标主机

python ansible模块详解 ansible playbook常用模块_占位符_96

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_97

结论:配置文件传送成功

⑦测试

python ansible模块详解 ansible playbook常用模块_IP_98

7、tags模块(标签模块)

(1)定义:可以在playbook中为任务设定标签(tags),在运行playbook时可以通过指定任务标签,实现只运行设定的标签任务

(2)任务标签的种类

always

无论是否运行了指定标签,任务都会执行

never

即使运行了指定标签,任务也不会执行(很少用)

debug

调试任务

setup

收集主机信息

自定义标签

per_tasks

运行指定标签之前的任务

post_tasks

运行指定标签之后的任务(很少用)

(3)格式

tags:

  - 标签种类

(4)运行剧本标签格式

ansible-playbook test.yml --tags=”debug”

(5)实例

python ansible模块详解 ansible playbook常用模块_ansible_99

python ansible模块详解 ansible playbook常用模块_配置文件_100

python ansible模块详解 ansible playbook常用模块_占位符_101

python ansible模块详解 ansible playbook常用模块_占位符_102

python ansible模块详解 ansible playbook常用模块_配置文件_103

实题:在目标主机创建文件touch /opt/guoqi.txt,标签always

在目标主机复制文件/opt/wdf.txt,标签never

第一次运行剧本,不指定标签,查看文件生成情况

第二次运行剧本,指定标签为never,查看文件生成情况

python ansible模块详解 ansible playbook常用模块_ansible_104

python ansible模块详解 ansible playbook常用模块_占位符_105

python ansible模块详解 ansible playbook常用模块_ansible_106

python ansible模块详解 ansible playbook常用模块_IP_107

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_108

python ansible模块详解 ansible playbook常用模块_ansible_109

python ansible模块详解 ansible playbook常用模块_配置文件_110

自定义标签

python ansible模块详解 ansible playbook常用模块_配置文件_111

python ansible模块详解 ansible playbook常用模块_ansible_112

python ansible模块详解 ansible playbook常用模块_ansible_113

注:always是默认模块,无论是否定义always标签都会执行

8、roles模块(角色模块)

(1)定义:ansible中的roles模块是一个层次化、结构化的组织。可以根据层次结构自动装载变量文件、tasks、handlers

2作用:分别把变量、文件、任务、模块以及处理器放在单独的目录中,使用roles模块一键调用这些文件

(3)结构

目录

作用

创建固定的文件名才能使用

webs

总目录。存放角色

site.yml用来调用所有的配置文件

files

存放copy和scripts模块调用的文件

/

templates

存放j2的模板文件

/

tasks

包含任务的目录。角色运行的任务

main.yml(固定)

handlers

包含处理器的目录

main.yml(固定)

vars

存放变量的目录

main.yml(固定)

defaults

包含默认变量的目录

main.yml(固定)

meta

包含元信息的目录

main.yml(固定)

创建roles远程安装httpd、mysql、php服务实验

1、创建roles目录

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_114

python ansible模块详解 ansible playbook常用模块_配置文件_115

python ansible模块详解 ansible playbook常用模块_配置文件_116

2、创建httpd角色

python ansible模块详解 ansible playbook常用模块_ansible_117

python ansible模块详解 ansible playbook常用模块_占位符_118

python ansible模块详解 ansible playbook常用模块_ansible_119

python ansible模块详解 ansible playbook常用模块_ansible_120

3、创建mysql角色

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_121

python ansible模块详解 ansible playbook常用模块_IP_122

python ansible模块详解 ansible playbook常用模块_占位符_123

python ansible模块详解 ansible playbook常用模块_IP_124

4、创建php角色

python ansible模块详解 ansible playbook常用模块_ansible_125

python ansible模块详解 ansible playbook常用模块_IP_126

python ansible模块详解 ansible playbook常用模块_ansible_127

python ansible模块详解 ansible playbook常用模块_IP_128

5、编写site.yml(在总目录下)【site.yml是总指挥,调用这些角色】

python ansible模块详解 ansible playbook常用模块_ansible_129

python ansible模块详解 ansible playbook常用模块_ansible_130

6、运行roles

python ansible模块详解 ansible playbook常用模块_占位符_131

7、验证在目标主机上远程安装是否成功

python ansible模块详解 ansible playbook常用模块_ansible_132

python ansible模块详解 ansible playbook常用模块_python ansible模块详解_133

python ansible模块详解 ansible playbook常用模块_占位符_134

结论:远程安装http、mysql、php成功