歡迎光臨
每天分享高質量文章

如何使用 Ansible 打補丁以及安裝應用 | Linux 中國

使用 Ansible IT 自動化引擎節省更新的時間。
— Jonathan Lozada De La Matta


致謝
編譯自 | https://opensource.com/article/18/3/ansible-patch-systems 
 作者 | Jonathan Lozada De La Matta
 譯者 | Hank Chow (HankChow) ? ? 共計翻譯:4 篇 貢獻時間:118 天

使用 Ansible IT 自動化引擎節省更新的時間。

你有沒有想過,如何打補丁、重啟系統,然後繼續工作?

如果你的回答是肯定的,那就需要瞭解一下 Ansible[1] 了。它是一個配置管理工具,對於一些複雜的有時候需要幾個小時才能完成的系統管理任務,又或者對安全性有比較高要求的時候,使用 Ansible 能夠大大簡化工作流程。

以我作為系統管理員的經驗,打補丁是一項最有難度的工作。每次遇到公共漏洞批露Common Vulnearbilities and Exposure(CVE)通知或者資訊保障漏洞預警Information Assurance Vulnerability Alert(IAVA)時都必須要高度關註安全漏洞,否則安全部門將會嚴肅追究自己的責任。

使用 Ansible 可以透過執行封裝模組[2]以縮短打補丁的時間,下麵以 yum 模組[3]更新系統為例,使用 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 包。下麵我們透過 Ansible Lightbulb[4] 來安裝 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.conf 和 index.html以顯示頁面,並確保服務在系統啟動時啟動。然後就可以使用 uri 模組檢查到頁面的連線了。

這個是一個系統更新、系統重啟、安裝 RPM 包的劇本示例,後續可以繼續安裝 nginx,當然這裡可以替換成任何你想要的角色和應用程式。

  1.  - hosts: all

  2.    roles:

  3.      - centos-update

  4.      - nginx-simple

 

這隻是關於如何更新系統、重啟以及後續工作的示例。簡單起見,我只添加了不帶變數[5]的包,當你在操作大量主機的時候,你就需要修改其中的一些設定了:

◈ async & poll[6]
◈ serial[7]
◈ forks[8]

這是由於在生產環境中如果你想逐一更新每一臺主機的系統,你需要花相當一段時間去等待主機重啟才能夠繼續下去。


via: https://opensource.com/article/18/3/ansible-patch-systems

作者:Jonathan Lozada De La Matta[10] 譯者:HankChow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖