Playbook组成部分:

  1. task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用
  2. Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量,也可以是外部传参
  3. Templates模版:用于生成配置文件,模板是包含占位符的文件,占位符由ansible在执行是转换为变量值
  4. Hander处理器:当需要有变更的时候,可以执行触发器
  5. Roles:角色。类似于dockercompose。是一种封装和组织playbook的,允许把相关的任务,变量。模版和处理器组织成一个可复用的单元

今天主要介绍1-3

实例模板

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible

检查yml语法是否正确

ansible-playbook test1.yml --syntax-check

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_02

查看任务数量

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_03

检查生效的目标主机

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_04

运行脚本

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_05

指定剧本执行

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_06

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_07

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_08

如何声明用户:(比较鸡肋)

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_09

怎么指定呢:

免密钥登录一定要关闭

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_10

声明用户名和密码

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_11

ansible-playbook test1.yml -K(大写)

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_12

指定用户执行:用小k

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_13

第二个脚本,在ansible当中如何定义变量,引用变量,以及在外面传参

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_14

注意:是否收集目标主机信息,这个不能在配置文件当中,否则无法执行copy模块,会有冲突

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_15

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_16

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_17

解释一下格式:

vars:

    groupname: guoqi

    username: wangdefu

字典方式:key-value

vars:

-

-

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

这是一个包含所有主机的变量的字典,简而言之就是复制主机的IP地址,然后复制到目标文件

inventory_hostname:目标主机名

ansible_default_ipv4:获取目标主机名

['ansible_default_ipv4']['address']:索引

传参数 -e的方式

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_18

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_19

查看:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_20

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_21

Playbook的条件判断:

When是一个比较常见的应用场景,实现满足条件即执行,不满足条件跳过执行

总之就是When是满足条件即执行。不满足不执行

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_22

Debug相当于echo,满足条件打印,不满足丢弃

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_23

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_24

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_25

取反

 when条件还可以通过 !=(不等于条件来进行判断)不等于的意思

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_26

另一种写法

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_27

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_28

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_29

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_30

练习:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_31

方法一:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_32

方法二:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_33

报错,不能同时使用debug和name

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_34

修正版

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_35

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_36

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_37

迭代:playbook当中的循环

Ansible有多种循环格式,最常用的有 with_items 循环遍历

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_38

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_39

声明多个:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_40

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_41

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_42

分组打印

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_43

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_44

遍历循环在主机上创建目录

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_45

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_46

列表打印list模式

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_47

Together循环:

组合输出,列表当中的值一一打印出来

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_48

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_49

列表组训会,把同一组的值循环

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_50

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_51

Nested:

列表里面的元素定义了循环的次数,第二层列表,相当于内循环

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_52

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_53

小结四种循环方式:

With_items 最常用的

With_list 列表分组循环

With_together 列表对应得列,数据结合的方式循环

With_nested 相当于与双循环,第一层定义了循环的次数,第二层表达式第一层的每个元素会循环几次

写一个需求:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_54

习题:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_ansible_55

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_56

换成列表声明

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_57

参考图:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_58

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_59

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

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_60

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_主机名_61

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_配置文件_62

参考图:

ansible playbook指定主机列表执行 ansible playbook执行shell脚本_模版_63