第三阶段基础
时 间:2023年7月14日
参加人:全班人员
内 容:
playbook配置文件
目录
playbook配置文件
一、playbook配置文件概念
修改hosts文件
建立playbook配置文件
yml脚本写法注释:
二、Playbook的核心元素
三、Playbook的用法
四、实验案例:
(一)工作流程
1、语法检查
2.预测试 (最重要)
3.列出主机
4.列出任务
5.列出标签
6.进行测试 (预测试成功之后就可以进行测试了)
7.测试查看
(二)触发器
handlers触发器的实验实例如下:
脚本注释:
实 验:
1、预测试:
2、执行测试:
3、结果验证
Playbook配置文件使用YAML语法,具有简洁明了,结构清晰等特点。
Playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表;
前面介绍的ansible命令虽然可以完成各种任务,但是当配置一系列任务时,逐条输入命令就显得效率非常低下,更有效的方式在playbook配置中配置所有的任务代码;
利用ansible-playbook命令执行该文件,可以实现自动化运维;
YAML文件的扩展名通常为.yaml或.yml。
YAML语法和其他高级语言类似,其结构通过缩进来展示,通过“-“来表达选项,通过冒号“:”来分隔键和值。整个文件以“---”开始并以“…”结束,如下所示:
例:
修改配置如下:
vim /etc/ansible/hosts
配置如下:
vim /etc/ansible/test1.yml
配置如下:
vim /etc/ansible/test1.yml #创建test,yml文件
--- #开头格式(可忽略)
- hosts: hu1 #表示对test01(192.168.59.138)的操作
remote_user: root #远端执行用户身份root
tasks: #任务列表
- name: adduser #任务名称
user: name=user2 state=present #执行user模块创建用户
tags: #创建tag标签
- testa #tag标签为testa
- name: addgroup #任务名称
group: name=tests system=yes #执行group模块创建一个组账号
tags: #创建tag标签
- testb #tag标签为testb
- hosts: hu2 #表示对test02(192.168.59.140)的操作
remote_user: root #远端执行用户身份root
tasks: #任务列表
- name: copy file #任务名称
copy: src=/etc/passwd dest=/home #执行copy模块复制文件
tags: #创建tag标签
- testc #tag标签为testsc
... #结尾格式(可忽略)
所有的“-”和“:”后面均有空格,而且要注意缩进和对齐
包含:
hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息;
remote_user:远程主机上,运行此任务的默认为root运行;
tasks:任务,即定义的具体任务,由模块定义的操作列表;
handlers:触发器,类似tasks,只是在特定的条件下才会触发任务。某任务的状态在运行后changed时,可通过“notify”通知给相应的handlers进行触发执行;
roles:角色,将hosts剥离出去,由tasks,handlers等所组成的一种特定的结构集合。
Playbook 文件定义的任务需要通过ansible-playbook命令进行调用并执行,ansible-playbook命令用法如下:
用法:ansible-playbook [option] /PATH/PLAYBOOK.yml
其中[option]部分的功能包括:
1.--syntax-check:检测yaml文件的语法;
2.-C(--check):测试,不会改变主机的任何配置;
3.--list-hosts:列出yaml文件影响的主机列表;
4.--list-tasks:列出yaml文件的任务列表;
5.--list-tags:列出yaml文件中的标签;
6.-t TAGS(--tags=TAGS):表示只执行指定标签的任务;
7.--skip-tags=SKIP_TAGSS:表示除了指定标签任务,执行其他任务;
8.--start-at-task=START_AT:从指定任务开始往下运行。
ansible-playbook --syntax-check
/etc/ansible/test1.yml
ansible-playbook -C /etc/ansible/test1.yml
错误情况:
正确情况:
ansible-playbook --list-hosts /etc/ansible/test1.yml
ansible-playbook --list-tasks /etc/ansible/test1.yml
ansible-playbook --list-tags /etc/ansible/test1.yml
ansible-playbook /etc/ansible/test1.yml
【huyang2】tail -5 /etc/passwd tail -5 /etc/group
【huyang3】ls /home/
通常情况下会先执行ansible-playbook -C/PATH/PLAYBOOK.yml命令进行测试,测试没问题后再执行ansible-playbook /PATH/TO/PLAYBOOK.yml命令。
需要触发才能执行的任务,当之前定义在tasks中的任务执行完成后,若希望在基础上触发其他的任务,这时就需要定义handlers。
例如,当通过ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以便配置文件生效,handlers触发器具有以下优点:
handlers是Ansible提供的条件机制之一,handlers和task很类似,但是他在被task通知的时候才会触发执行;
handlers只会在所有任务执行完成后执行,而且即使被通知了很多次,它也只会执行一次,handlers按照定义的顺序依次执行。
vim /etc/ansible/httpd.yml
配置如下:
--- #固定开头格式
- hosts: hu1 #指定运行主机为Rich组
remote_user: root #指定对端运行用户的身份
tasks: #任务列表
- name: reset httpd #定义任务名称
command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf #模块为command:使用sed命令替换监听端口为8080
notify: #完成任务后调用restart httpd server触发器
- reset httpd
handlers: #配置触发器
- name: reset httpd #指定触发器名字
service: name=httpd state=restarted #指定触发条件为重启httpd服务
... #结尾句
ansible-playbook -C /etc/ansible/httpd.yml
ansible-playbook /etc/ansible/httpd.yml