通过playbook安装nginx
1.### 可以看到这是一种基于“项目”的方式管理。
2.因为要安装nginx,所以命名一个install_nginx.yml 的文件编写playbook
3.### hosts:指定执行任务的对象<这个对象应该时主机配置文件中已存在的组或者host> 、remote_user:登录指定的对象时使用的账号、gather——facts:拒绝收集系统数据<能够提高执行效率>
4.###调动tasks组件创建任务,通过 - name:为要执行的任务将名称先创建出来、之后再对每个列出的任务进行完善。
5.### 安装install_nginx.service 任务下;因为是redhat系统因此调用yum模块进行 nginx 的安装。
6.### config_file 任务:虽然调用yum模块会生成nginx.conf,但是为了更符合要求,可以将 ansible 主控端已经提前修改好的nginx.conf文件通过copy模块拷贝到远程主机上。
<打开该文件实施定制>
<例如:将默认的80端口改成88端口>
<通过copy模块将ansible主控端已经修改并存放好的nginx.conf拷贝到远程主机的指定目录下>
7.###调用service模块将nginx服务开启并设置为开机自启。
8.### 使用预执行命令检查playbook是否出错。<注意预执行命令不会真正在playbook在远程主机上执行,千万不要傻愣愣的去远程主机上找答案>
ansible-playbook -C install_nginx.yml
9.###但生产中会频繁的修改编写playbook,这就会造成命令重复的情况<绿色表playbook中将要运行的任务已经存在不会运行,黄色表运行playbook任务已经修改>,这样就会造成一个问题,一些任务需要重新执行服务才能生效但是却因为已经存在而不执行<例如:该实验中nginx服务,因nginx.sercice已开启,再执行playbook任务将nginx.sercice开启就会执行无效>
10.###针对以上情况可采用notify与handlers、由handlers制定任务,notify调用handlers制定的任务<根据任务名称来调动>来监控某一个资源<这个资源为tasks中的某一个任务>的变动,倘若该资源发生变动则会触发notify调动的任务。<handlers与tasks作用和等级相同>
<如果执行失败:请检查远程主机上的服务是否与ansible主控端的nginx.conf文件设置监听端口产生冲突>
<结果:远程主机上的端口皆已打开>
11###问题延伸:倘若只执行一个资源如何实现?解决办法:给该资源打上tags,这样playbook执行时就会只执行打上了tags的资源。<PS:资源表tasks的任务,这里为config_file 打上tags>
<使用 -t +标签名 ,可以指定playbook只执行打上标签的任务>,虽然只执行打了标签的资源,但是仍然被notify监控到,因此这点值得注意。
ansible-playbook -t config_file install_nginx.yml
总结:1)playbook有个大问题就是会判断本次执行的任务是否与上次执行的相同如果相同则不做修改,因此有时候需要用到notify配合handlers这种任务重复性不执行的问题。2)即便打上tags的资源也不能逃脱notify的监控。
posted on 2021-05-31 05:55 1251618589 阅读(14) 评论(0) 编辑 收藏 举报