Deployment
Ansible“熱身”部署
我有下面的劇本(簡化)。
它工作得很好,但我希望能夠進行熱身,我只部署到單個主機(如串列: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