簡體   English   中英

在openstack上使用ansible的網絡自動化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM