1.Playbook剧本小结
1.什么是playbook,playbook翻译过来就是“剧本”,那playbook组成如下
play: 定义的是主机的角色task: 定义的是具体执行的任务playbook: 由一个或多个play组成,一个play可以包含多个task任务
简单理解为: 使用不同的模块完成一件事情
2.playbook的优势
1.功能比ad-hoc更全2.能很好的控制先后执行顺序, 以及依赖关系3.语法展现更加的直观4.ad-hoc无法持久使用,playbook可以持久使用
3.playbook的配置语法是由yaml语法描述的,扩展名是yaml
- 缩进
- YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tabs
- 冒号
- 以冒号结尾的除外,其他所有冒号后面所有必须有空格。
- 短横线
- 表示列表项,使用一个短横杠加一个空格。
- 多个项使用同样的缩进级别作为同一列表。
#playbook示例
[root@manager ~]# cat f1.yml
---
- hosts: all
remote_user: root
vars:
file_name: xuliangwei
tasks:
- name: Create New File
file: name=/tmp/{{ file_name }} state=touch
#检查
ansible-playbook --syntax-check httpd.yml
#playbook执行方式
[root@manager ~]# ansible-playbook f1.yml
PLAY [all] ********************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************
ok: [10.0.0.30]
TASK [使用变量] *******************************************************************************************************************************
changed: [10.0.0.30]
PLAY RECAP ********************************************************************************************************************************
10.0.0.30 : ok=2 changed=1 unreachable=0 failed=0
Playbook执行结果返回颜色状态
红色: 表示有task执行失败或者提醒的信息
黄色:表示执行了且改变了远程主机状态
绿色:表示执行成功
2.Playbook变量使用
Playbook定义变量有三种方式
1) playbook的yaml文件中定义变量赋值
2) --extra-vars执行参数赋给变量
3) 在文件中定义变量
1、playbook的yaml文件中定义变量赋值
#playbook中定义
[root@manager ~]# cat f2.yml
- hosts: all
vars: #定义变量
file_name: bgx_yaml_vars
tasks:
- name: # {{ file_name }}引用上面定义的变量
file: path=/tmp/{{ file_name }} state=touch
#playbook执行,在/tmp目录创建bgx_yaml_vars文件
[root@manager ~]# ansible-playbook f1.yml
2、--extra-vars执行参数赋给变量
#playbook中引用变量
[root@manager ~]# cat f3.yml
- hosts: all
tasks:
- name: Create New File
file: path=/tmp/{{ file_name }} state=touch
#playbook执行时传入file_name变量的参数,在/tmp目录创建bgx_extra-vars文件
[root@manager ~]# ansible-playbook f2.yml --extra-vars "file_name=bgx_extra-vars"
3) 在文件中定义变量: 可以在/etc/ansible/hosts主机组中定义,然后使用palybook进行调度该变量
#在文件中定义变量
[root@manager ~]# cat /etc/ansible/hosts
[nfs]
10.0.0.20
[nfs:vars]
file_name=bgx_filename
#Playbook中调用该变量
[root@manager ~]# cat f4.yml
---
- hosts: all
tasks:
- name: Create New File
file: path=/tmp/{{ file_name }} state=touch
#playbook执行,在/tmp目录创建bgx_filename文件
如果定义的变量出现重复,且造成冲突,优先级如下:
1.extra-vars外置传参的优先级最高 [所有执行的主机都生效]
2.定义在yml文件中的优先级其次 [所有执行的主机都生效]
3.hosts文件中定义的变量优先级最低 [当前主机组定义会生效]
3.Playbook变量注册
1) 注册变量: register关键字可以存储指定命令的输出结果到一个自定义的变量中
[root@manager ~]# cat f5.yml
---
- hosts: all
tasks:
- name:
shell: netstat -lntp
register: System_Status
- name: Get System Status
debug: msg={{System_Status.stdout_lines}}
#playbook执行结果
[root@manager ~]# ansible-playbook f5.yml
PLAY [all] ********************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************