10、ansible-YAML-非标记语言-剧本的编写-.yaml -剧本执行ansible-playbook-handlers触发
============================================================剧本的编写==================================================
通过YAML编写一个剧本,完成web的部署,配置,启动的全过程
1、先将目标主机的网站服务卸载
ansible all -m yum -a 'name=httpd state=removed' -o
·all 表示所有的主机
2、在本机安装httpd
yum install -y httpd
3、配置本机的httpd配置文件、自己准备一个配置文件
·新建一个文件夹放配置文件,方便给其它目标主机统一发过去
··mkdir apache //这里我在/home目录下新建
··将httpd的配置文件拷进去 cp /etc/httpd/conf/httpd.conf /home/apache
··修改配置文件里的 监听端口 改成8080
4、编写剧本 就是以.yaml为后缀的文本
· 剧本后缀要以yaml结尾
·vim apache.yaml
- hosts: webserver //针对的目标主机 这里webserver是一个组 组下有四台主机
tasks: //task 是下边要执行的任务
- name: intall apache packages //任务1的名字:描述任务的信息(描述的信息自己随意编辑,但是name是固定的)
yum: name=httpd state=present // yum: 意思是执行yum模块 的任务
- name: copy apache conf
copy: src=/home/apache/httpd.conf dest=/etc/httpd/conf/httpd.conf //执行copy模块 的任务
- name: ensure apache is running
service: name=httpd state=started enabled=yes //执行serivce 模块的任务
#注意:每一个空格都很重要
5、测试剧本 playbook
·可以先看一眼文本 cat apache.yaml
·使用playbook检查剧本语法
ansible playbook apache.yaml --syntax-check
·playbook 只是检查语法,不保证参数有没有错误
·--syntax-check 检查语法
·列出剧本任务的名字
ansible-playbook apache.yaml --list-task
·--list-task 列出剧本任务的名字
·列出剧本的目标主机
ansible-playbook apache.yaml --list-hosts
以上三步都没问题后、下边执行剧本
6、执行剧本
ansible-playbook apache.yaml
7、查看其他主机的配置文件是否是更改过的
8、访问网页
·ip:8080
=======================================================handlers 触发、通知、操作模块=================================================
"handlers" 是 Ansible 中的一个关键字,它用于定义在任务执行过程中需要执行的操作。在 Ansible 中,handlers 通常用于在任务执行完成后,执行一些额外的操作,比如重启服务、重新加载配置等。
handlers 的定义方式与 tasks 类似,但是它们不会在 playbook 执行过程中立即执行。相反,handlers 只有在它们所依赖的任务执行完成后才会执行。
- hosts: webserver
tasks:
- name: intall apache packages
yum: name=httpd state=present
- name: copy apache conf
copy: src=/home/apache/httpd.conf dest=/etc/httpd/conf/httpd.conf
natify: restart apache service for me //notify 通知 ,就是当上一个模块发生改变时,才会执行notify notify就会去通知 后面绿色的语句 就会寻找到下面的handlers下的name
- name: ensure apache is running
service: name=httpd state=started enabled=yes
handlers: //当触发时才要执行 、就是当上面的notify被触发时才会执行相对应的 name:
- name: restart apache service for me
service: name=httpd state=restarted
这里测试将httpd.conf 的端口改为9090
·在剧本文件 apache.yaml 不加hanlers 的时候改配置文件的端口 执行yaml文件
··ansible-playbook apache.yaml 发现目标主机的httpd端口没改过来
·在剧本文件里加上handlers后,在执行剧本文件
·· ansible-playbook apache.yaml 此时由于触发了handlers ,使yaml文件执行了重启httpd服务的指令,目标主机的端口也改过来了