是否有可能取代主機:目標與變量?Ansible模板中的主機可以使用變量嗎?
- name: ansible application deploy
hosts: {{ vm_ip }}
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
我試圖通過vm_ip在命令行中使用--extra-vars="vm_ip: IPP_ADDR "
,但它從來沒有工作過。
是否有可能取代主機:目標與變量?Ansible模板中的主機可以使用變量嗎?
- name: ansible application deploy
hosts: {{ vm_ip }}
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
我試圖通過vm_ip在命令行中使用--extra-vars="vm_ip: IPP_ADDR "
,但它從來沒有工作過。
我寧願只設置hosts:all
,並且只對需要執行的主機執行帶有limit
的操作手冊。
- name: ansible application deploy
hosts: all
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
使用limit
條款執行劇本:
ansible-playbook app_deploy.yml -l IPP_ADDR
另一個possibilite創造與IP地址的文件。
/tmp/execute_only_that_host
文件內容:
IPP_ADDR
執行:ansible-playbook app_deploy.yml -l @/tmp/execute_only_that_host
我推薦這種方法,因爲這是你自己的應用程序,將打電話給你的劇本,你總是可以保證其與limit
呼籲,因此你不需要打擾與hosts
在你的劇本的頂部。
你可以從命令行傳遞它,是的。
請確保您有有效的YAML:
hosts: "{{ vm_ip }}"
這表達必須引用或你碰到yaml gotcha。
但主機必須首先在庫存中定義,我想這是你失蹤的一塊。這幾乎沒有意義,因爲按照@Bernardo Vale的說法,hosts: all
與--limit
沒有什麼優勢,但是這是更爲合理的標準。
我不會使用limit
,如果您忘記錯誤地指定,那麼它會在所有危險的主機上運行。你的命令行是錯誤的。嘗試:
--extra-vars "vm_ip=IP_ADDR"
和
hosts: "{{ vm_ip }}"
我不能想象一個必要。你能解釋爲什麼你需要這個嗎?有很多方法可以在主機上不使用變量的情況下執行此操作。 –
我正在開發rails應用程序,它會執行可執行的腳本來自動執行後端中的幾件事情,並且腳本需要根據任務對不同的虛擬機運行,您能想出有關如何替換hosts值的任何想法嗎?我正在考慮首先運行sed或awk,然後運行腳本,但使用變量將會更清潔 – Deano
爲什麼不設置hosts:all或設置爲包含該應用程序的所有虛擬機的組,並且只需使用-l執行操作手冊vm_ip –