博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用 Ansible 打补丁以及安装应用
阅读量:6455 次
发布时间:2019-06-23

本文共 2651 字,大约阅读时间需要 8 分钟。

你有没有想过,如何打补丁、重启系统,然后继续工作?

如果你的回答是肯定的,那就需要了解一下 了。它是一个配置管理工具,对于一些复杂的有时候需要几个小时才能完成的系统管理任务,又或者对安全性有比较高要求的时候,使用 Ansible 能够大大简化工作流程。

以我作为系统管理员的经验,打补丁是一项最有难度的工作。每次遇到公共漏洞批露Common Vulnearbilities and Exposure(CVE)通知或者信息保障漏洞预警Information Assurance Vulnerability Alert(IAVA)时都必须要高度关注安全漏洞,否则安全部门将会严肃追究自己的责任。

使用 Ansible 可以通过运行以缩短打补丁的时间,下面以 更新系统为例,使用 Ansible 可以执行安装、更新、删除、从其它地方安装(例如持续集成/持续开发中的 rpmbuild)。以下是系统更新的任务:

 
  1. - name: update the system
  2. yum:
  3. name: "*"
  4. state: latest

在第一行,我们给这个任务命名,这样可以清楚 Ansible 的工作内容。第二行表示使用 yum 模块在CentOS虚拟机中执行更新操作。第三行 name: "*" 表示更新所有程序。最后一行 state: latest 表示更新到最新的 RPM。

系统更新结束之后,需要重新启动并重新连接:

 
  1. - name: restart system to reboot to newest kernel
  2. shell: "sleep 5 && reboot"
  3. async: 1
  4. poll: 0
  5. - name: wait for 10 seconds
  6. pause:
  7. seconds: 10
  8. - name: wait for the system to reboot
  9. wait_for_connection:
  10. connect_timeout: 20
  11. sleep: 5
  12. delay: 5
  13. timeout: 60
  14. - name: install epel-release
  15. yum:
  16. name: epel-release
  17. state: latest

shell 模块中的命令让系统在 5 秒休眠之后重新启动,我们使用 sleep 来保持连接不断开,使用 async 设定最大等待时长以避免发生超时,poll 设置为 0 表示直接执行不需要等待执行结果。暂停 10 秒钟以等待虚拟机恢复,使用 wait_for_connection 在虚拟机恢复连接后尽快连接。随后由 install epel-release 任务检查 RPM 的安装情况。你可以对这个剧本执行多次来验证它的幂等性,唯一会显示造成影响的是重启操作,因为我们使用了 shell 模块。如果不想造成实际的影响,可以在使用 shell 模块的时候 changed_when: False

现在我们已经知道如何对系统进行更新、重启虚拟机、重新连接、安装 RPM 包。下面我们通过 来安装 NGINX:

 
  1. - name: Ensure nginx packages are present
  2. yum:
  3. name: nginx, python-pip, python-devel, devel
  4. state: present
  5. notify: restart-nginx-service
  6. - name: Ensure uwsgi package is present
  7. pip:
  8. name: uwsgi
  9. state: present
  10. notify: restart-nginx-service
  11. - name: Ensure latest default.conf is present
  12. template:
  13. src: templates/nginx.conf.j2
  14. dest: /etc/nginx/nginx.conf
  15. backup: yes
  16. notify: restart-nginx-service
  17. - name: Ensure latest index.html is present
  18. template:
  19. src: templates/index.html.j2
  20. dest: /usr/share/nginx/html/index.html
  21. - name: Ensure nginx service is started and enabled
  22. service:
  23. name: nginx
  24. state: started
  25. enabled: yes
  26. - name: Ensure proper response from localhost can be received
  27. uri:
  28. url: "http://localhost:80/"
  29. return_content: yes
  30. register: response
  31. until: 'nginx_test_message in response.content'
  32. retries: 10
  33. delay: 1

以及用来重启 nginx 服务的操作文件:

 
  1. # 安装 nginx 的操作文件
  2. - name: restart-nginx-service
  3. service:
  4. name: nginx
  5. state: restarted

在这个角色里,我们使用 RPM 安装了 nginxpython-pippython-develdevel,用 PIP 安装了 uwsgi,接下来使用 template 模块复制 nginx.confindex.html 以显示页面,并确保服务在系统启动时启动。然后就可以使用 uri 模块检查到页面的连接了。

这个是一个系统更新、系统重启、安装 RPM 包的剧本示例,后续可以继续安装 nginx,当然这里可以替换成任何你想要的角色和应用程序。

 
  1. - hosts: all
  2. roles:
  3. - centos-update
  4. - nginx-simple

这只是关于如何更新系统、重启以及后续工作的示例。简单起见,我只添加了不带的包,当你在操作大量主机的时候,你就需要修改其中的一些设置了:

这是由于在生产环境中如果你想逐一更新每一台主机的系统,你需要花相当一段时间去等待主机重启才能够继续下去。

原文发布时间为:2018-05-20

本文来自云栖社区合作伙伴“”,了解相关信息可以关注“”。

转载地址:http://bzbzo.baihongyu.com/

你可能感兴趣的文章
Linux 的 NUMA 技术
查看>>
虚拟磁带库VTL在实践中的优势
查看>>
人生需要放下的八样东西
查看>>
企业级Nginx Web 服务优化实战
查看>>
IE和Firefox对同一域名进行请求的并发连接数限制
查看>>
arm linux ppp拨号gprs上网移植
查看>>
linux新建用户的全程解析
查看>>
微软原版Windows XP Pro With SP3 VOL MSDN原版镜像
查看>>
学点Unicode又不会死
查看>>
linux关于关闭防火墙和selinux的操作
查看>>
python 文件操作
查看>>
MCSE命令学习持续更新
查看>>
eclipse环境快速配置
查看>>
solaris11忘记root密码的处理方法
查看>>
Windows Server 2016 主域控制器搭建(一)
查看>>
如何将磁盘从GPT格式转换成MBR
查看>>
UI 架构 - 读Martin Flower相关文章总结
查看>>
Linux ---各种yum源配置详解
查看>>
CString类型转换为char类型
查看>>
DNS 在企业网络中的应用-2
查看>>