Playbook组成部分:
- task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用
- Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量,也可以是外部传参
- Templates模版:用于生成配置文件,模板是包含占位符的文件,占位符由ansible在执行是转换为变量值
- Hander处理器:当需要有变更的时候,可以执行触发器
- Roles:角色。类似于dockercompose。是一种封装和组织playbook的,允许把相关的任务,变量。模版和处理器组织成一个可复用的单元
今天主要介绍1-3
实例模板
检查yml语法是否正确
ansible-playbook test1.yml --syntax-check
查看任务数量
检查生效的目标主机
运行脚本
指定剧本执行
如何声明用户:(比较鸡肋)
怎么指定呢:
免密钥登录一定要关闭
声明用户名和密码
ansible-playbook test1.yml -K(大写)
指定用户执行:用小k
第二个脚本,在ansible当中如何定义变量,引用变量,以及在外面传参
注意:是否收集目标主机信息,这个不能在配置文件当中,否则无法执行copy模块,会有冲突
解释一下格式:
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的方式
查看:
Playbook的条件判断:
When是一个比较常见的应用场景,实现满足条件即执行,不满足条件跳过执行
总之就是When是满足条件即执行。不满足不执行
Debug相当于echo,满足条件打印,不满足丢弃
取反
when条件还可以通过 != ****(不等于条件来进行判断)****不等于的意思
另一种写法
练习:
方法一:
方法二:
报错,不能同时使用debug和name
修正版
迭代:playbook当中的循环
Ansible有多种循环格式,最常用的有with_items 循环遍历
声明多个:
分组打印
遍历循环在主机上创建目录
列表打印list模式
Together循环:
组合输出,列表当中的值一一打印出来
列表组训会,把同一组的值循环
Nested:
列表里面的元素定义了循环的次数,第二层列表,相当于内循环
小结四种循环方式:
With_items 最常用的
With_list 列表分组循环
With_together 列表对应得列,数据结合的方式循环
With_nested 相当于与双循环,第一层定义了循环的次数,第二层表达式第一层的每个元素会循环几次
写一个需求:
习题:
换成列表声明
参考图:
例题:yum一键安装多个软件 tree nginx httpd vsftpd dhcp
参考图: