ansible 复制程序
您是否曾经想过如何修补系统,重新启动并继续工作?
Ansible ,一个简单的配置管理工具,可以简化一些最艰巨的工作。
例如,系统管理任务可能很复杂,需要数小时才能完成或对安全性有复杂的要求。
以我的经验,成为系统管理员最困难的部分之一就是打补丁系统。 每次收到安全部门强制要求的常见漏洞和披露(CVE)通知或信息保证漏洞警报(IAVA)时,您都必须加倍努力以消除安全漏洞。 (并且,相信我,除非漏洞得到修补,否则您的安全人员会追捕您。)
Ansible可以通过运行打包模块来减少修补系统所需的时间。 为了演示,让我们使用yum模块来更新系统。 Ansible可以从其他位置安装,更新,删除或安装(例如,通过持续集成/持续开发获得的rpmbuild )。 这是更新系统的任务:
- name: update the system
yum:
name: "*"
state: latest
在第一行中,我们给任务取一个有意义的name以便我们知道Ansible在做什么。 在下一行中, yum module更新CentOS虚拟机(VM),然后name: "*"告诉yum更新所有内容,最后state: latest更新到最新RPM。
更新系统后,我们需要重新启动并重新连接:
- name: restart system to reboot to newest kernel
shell: "sleep 5 && reboot"
async: 1
poll: 0
- name: wait for 10 seconds
pause:
seconds: 10
- name: wait for the system to reboot
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 60
- name: install epel-release
yum:
name: epel-release
state: latest
shell module使系统进入Hibernate状态5秒钟,然后重新启动。 我们使用sleep来防止连接断开,使用async来避免超时,并使用poll来激发并忘记。 我们暂停10秒钟,以等待VM回来,并使用wait_for_connection尽快建立连接,以重新连接到VM。 然后,我们install epel-release以测试RPM安装。 您可以多次运行此剧本以显示idempotent ,由于我们正在使用shell模块,因此唯一显示为已更改的任务是重新启动。 如果不希望实际更改,可以在使用shell模块时使用changed_when: False忽略更改。
到目前为止,我们已经学习了如何更新系统,重新启动VM,重新连接和安装RPM。 接下来,我们将使用Ansible Lightbulb中的角色安装NGINX。
- name: Ensure nginx packages are present
yum:
name: nginx, python-pip, python-devel, devel
state: present
notify: restart-nginx-service
- name: Ensure uwsgi package is present
pip:
name: uwsgi
state: present
notify: restart-nginx-service
- name: Ensure latest default.conf is present
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
backup: yes
notify: restart-nginx-service
- name: Ensure latest index.html is present
template:
src: templates/index.html.j2
dest: /usr/share/nginx/html/index.html
- name: Ensure nginx service is started and enabled
service:
name: nginx
state: started
enabled: yes
- name: Ensure proper response from localhost can be received
uri:
url: "http://localhost:80/"
return_content: yes
register: response
until: 'nginx_test_message in response.content'
retries: 10
delay: 1
以及重新启动nginx服务的处理程序:
# handlers file for nginx-example
- name: restart-nginx-service
service:
name: nginx
state: restarted
在这个角色中,我们将安装RPM nginx , python-pip , python-devel和devel并使用PIP安装uwsgi 。 接下来,我们使用template模块复制nginx.conf和index.html以显示页面。 之后,我们确保在启动和启动时启用该服务。 然后,我们使用uri模块检查与页面的连接。
这是一本剧本,显示了更新,重新启动和安装RPM的示例。 然后继续安装nginx。 可以使用所需的任何其他角色/应用程序完成此操作。
- hosts: all
roles:
- centos-update
- nginx-simple
观看此演示视频,以进一步了解该过程。
这只是有关如何更新,重新引导和继续的简单示例。 为了简单起见,我添加了没有变量的软件包。 一旦开始使用大量主机,就需要更改一些设置:
异步和轮询
连载
叉子
这是因为在生产环境中,您可能希望一次更新一个系统(而不是一劳永逸),实际上需要等待更长的时间才能重新引导系统并继续。
有关使用此工具自动执行工作的更多方法,请参阅Opensource.com上的其他Ansible文章 。
ansible 复制程序