ansible是脚本----playbook剧本
playbook组成部分:
1,tasks 任务:包含要在目标主机上执行的操作,使用模块定义这些操作。每个任务都是一个模块的调用。
2,variables 变量:存储和传递数据。变量可以自定义,可以在playbook当中定义为全局变量,也可以外部传参。
3,templates 模板:用于生成配置文件。模板是包含占位符的文件。占位符由ansible在执行是转换为变量值
4,handlers 处理器:当需要有变更的时候,据执行触发器。和notify一起用
5,roles 角色:是一种组织和封装playbook的。允许把相关的任务,变量,模板和处理器组织成一个可复用的单元。
实例模板:
- name: first play
#一个name就是一个任务名,名字可以不写。
gather_facts: false
#是否收集目标主机的系统信息,false就是不收集
hosts: 192.168.176.50
#执行的目标主机.
remote_user: root
#在目标主机执行的用户
检查yml文件的语法是否正确
ansible-playbook test1.yml --syntax-check
检查有几个任务:
ansible-playbook test1.yml --list-task
检查生效的主机
ansible-playbook test1.yml --list-hosts
启动:
ansible-playbook test1.yml
可以从指定的任务开始:
ansible-playbook test1.yml --start-at-task='start httpd'
前面的不执行
切换用户:(主要用于,没有root权限,但想用)
ansible-playbook test1.yml -K
vim /etc/ansible/ansible.cfg
打开密钥对:
71 行
vim /etc/ansible/hosts
声明用户名和密码
在命令行指定
ansible-playbook test1.yml -u root -k
引用变量
vim test2.yaml
vars:
groupname: guoqi
username: wangdefu
字典方式:key-value
content: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
包含所有主机变量的字典
inventory_hostname:目标的主机名
ansible_default_ ipv4:获取目标主机名
通过外部传参(里外名称要一致)
删除
ansible-playbook test2.yaml -e 'username=yst groupname=ymr'vim
playbook的条件判断:
when 是一个比较常见的应用场景,实现满足条件即执行,不满足条件即跳过的任务。
vim test3.yaml
debug相当于echo msg:输出的内容
debug用于脚本的调试
可以把when后面的
把71 行改成true
练习:
在一个任务中不能同时用debug和yum
迭代:playbook当中的循环:
ansible有多种循环格式,with_items 循环遍历
vim test5.yml
把item换成list
遍历循环在主机上创建目录:
在一个目录下创建两种不同的文件:
items
list
二,列表对应的列,数据结合的方式循环
将列表同一列的组合输出
空格会打印null值,一样会输出
在工作中可以用于组合搭配
三,组循环,列表当中的值一-一 对应,打印出
根据列表数据循环匹配
4*4 16次
四,列表里面的元素定义了循环的次数,第二层列表,相当与内循环。
with_ items 最常用的
with_ list 列别分组循环
with_together 列表对应的列,数据结合的方式循环
with_ nested 相当与双重循环,第一层定义了循环的次数,第二层表式第一 层的每个元素会循环几次
练习:基于循环,创建文件,目录,和用户组
文件:
不加- 当成了一个整体
创建用户和用户组