[英]Automation of networks using ansible on openstack
我寫了一個ansible腳本,根據條件創建一個網絡。 因此,即使我再次運行ansible腳本,它也不會在我的openstack環境中創建重復的條目。
任務:
name: "create network"
shell: neutron net-create (openstack details like project username,password, api) network_1
when: ("neutron net-list -c name| grep network_1| awk '{print$2}'" == "null")
the above condition didn't work so, I tried another condition
when: ("neutron net-list -c name| grep network_1| awk '{print$2}'" == neutron net-list -c name| grep network_2 | awk '{print$2}')
我的項目中沒有任何兩種網絡。 我的意圖是,兩個語句都顯示空輸出,並且firsttime條件變為true,它應該執行並創建一個網絡。 如果我第二次運行腳本,它不滿足條件和條件檢查變為false並且不會創建網絡。
但是兩個條件都被跳過並且返回錯誤說條件檢查失敗。
你的條件需要是Ansible會識別的東西,而不僅僅是你沒有告訴它如何執行的shell命令。
在這種情況下,您可以執行以下操作:
- name: check for network_1
shell: "neutron net-list -c name| grep network_1| awk '{print$2}'"
register: network_1
- name: "create network"
shell: neutron net-create (openstack details like project username,password, api) network_1
when: network_1.stdout == "null"
這是假設當你運行neutron net-list -c name| grep network_1| awk '{print$2}'
neutron net-list -c name| grep network_1| awk '{print$2}'
neutron net-list -c name| grep network_1| awk '{print$2}'
當network_1不存在時返回null
(我沒有使用OpenStack,因此不確定這是否真的如此)。
一般來說,使用Ansible,如果你絕對需要,你應該只是在炮轟,因為那時你需要做上面的事情,你需要檢查資源是否存在,並管理任何體面的模塊應該為你提供的冪等性。 在這種情況下,如果網絡尚不存在,您應該能夠使用os_network
來創建網絡:
- os_network:
cloud: mycloud
state: present
name: network_1
external: false
它還將很樂意在運行Ansible的主機上獲取OS_USERNAME
等環境變量,這樣您就可以避免將憑據放入Ansible代碼中。
名稱:網絡列表
shell:neutron net-list -c name | grep網絡| awk'{print $ 2}'
注冊:res
名稱:網絡創建
shell:中子網創建網絡
when:res.stdout!=“網絡”
這里在第一個語句中檢查列表中是否存在網絡名稱。 第二部分我說如果網絡名稱不等於網絡,則創建網絡。 如果我們再次運行playbook,則這個條件將為false,因為第一個語句將能夠從表中檢索名稱。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.