Deployment

Ansible“熱身”部署

  • May 10, 2017

我有下面的劇本(簡化)。

它工作得很好,但我希望能夠進行熱身,我只部署到單個主機(如串列:1)然後暫停,以便我可以檢查日誌以驗證一切都很好,然後再發佈到像我所有服務的 33%。

Ansible 有沒有一種簡單的方法可以讓你做到這一點?

我現在有一個非常 hacky 的解決方案,基本上涉及使用序列號複製和粘貼我的程式碼:1、失敗語句、一堆 when 檢查和命令行參數。必須有比破壞原本乾淨易讀的劇本更好的方法。我只是不確定它可能是什麼。

- name: 33% at a time max-analytics deploy
 hosts: role_max_logger
 serial: 33%
 tasks:
   - name: take out of lb analytics
     shell: haproxy stuff
   - pause:
       seconds: 5
   - name: gracefulReloading max-analytics
     shell: reload stuff
   - name: add back to lb analytics
     shell: haproxy stuff

從 Ansible 2.2 開始,您可以設置動態批量大小

---
- hosts: mygroup
 serial:
  - 1
  - 33%
 tasks:
   - shell: date
   - pause:
       prompt: check if everything ok
     when: ansible_play_hosts.index(inventory_hostname) == 0

這將只在第一批中使用一個主機,在該主機上執行 date 命令,如果目前主機是第一個播放主機,則暫停。所以它只會暫停一次,然後 33% 的批次將不會暫停。

您可以將序列設置為變數,並傳入您希望 playbook 執行的數量。例如,您可以傳入“1”作為序列號,並且在劇本的末尾,如果變數為“1”,則退出劇本。

如果變數不是“1”,則 playbook 將繼續使用其他伺服器。您的第一台伺服器可能會再次部署,但沒有問題,因為您的更改應該已經是最新的。

更多資訊來自這裡:http ://docs.ansible.com/ansible/playbooks_variables.html#passing-variables-on-the-command-line

如果變數為“1”,則使用失敗模組退出:http: //docs.ansible.com/ansible/fail_module.html

引用自:https://serverfault.com/questions/849219