簡體   English   中英

如何檢查池中可用的浮動IP數量?

[英]How to check number of floating IPs available in a pool?

我正在編寫腳本以在Openstack上創建VM。 如果浮動IP在池中耗盡,我可能會收到錯誤消息。 我如何檢查該池中是否有可用的浮動IP? Openstack是否可以從所有可用池中自動選擇池?

您可以查看正在使用的腳本API的文檔,但是可以從命令行列出分配給當前項目的所有浮動IP地址,然后運行:

   $ openstack floating ip list
   +--------------------------------------+---------------------+------------------+------+
   | ID                                   | Floating IP Address |  Fixed IP Address | Port |
    +--------------------------------------+---------------------+------------------+------+
   | 760963b2-779c-4a49-a50d-f073c1ca5b9e | 172.24.4.228        | None             | None |
   | 89532684-13e1-4af3-bd79-f434c9920cc3 | 172.24.4.235        | None             | None |
   | ea3ebc6d-a146-47cd-aaa8-35f06e1e8c3d | 172.24.4.229        | None             | None |
   +--------------------------------------+---------------------+------------------+------+

然后,您可以進行一些命令行編輯以提取ip colmn並獲得ip計數。

您可以選擇使用API​​(例如使用curl)或使用openstack CLI(提交問題時使用的方法)進行選擇。 CLI更易於直接編寫腳本。 這是查詢浮動IP的方法。 警告:使用“ -f json”輸出然后使用“ jq”命令進行字段查詢已變得非常普遍。 您也可以使用-f csv或-f值,並使用grep或sed進行解析。 但是,盡管您可能以前沒有做過,但是我建議嘗試json和jq。 確切地解決您的問題值得您花費時間。

(請注意,“無”列是“僅顯示”文本。實際存儲的字段值為“空”。)

鑒於:

[user@system ~]$ openstack floating ip list
+--------------------------------------+---------------------+------------------+--------------------------------------+
| ID                                   | Floating IP Address | Fixed IP Address | Port                                 |
+--------------------------------------+---------------------+------------------+--------------------------------------+
| 2492aa71-cadf-4011-9c4f-87f856cd2551 | 172.25.250.29       | 192.168.3.10     | 1e0b868b-8b3c-4e8d-8f11-d6ed15d0e750 |
| 74c9233e-1420-4681-aaa7-357843f48962 | 172.25.250.36       | None             | None                                 |
| f235dfae-a01c-4290-864d-89b83f9a8de9 | 172.25.250.37       | None             | None                                 |
+--------------------------------------+---------------------+------------------+--------------------------------------+

在json中看起來像這樣:

[stack@director ~]$ openstack floating ip list -f json
[
  {
    "Fixed IP Address": "192.168.3.10", 
    "ID": "2492aa71-cadf-4011-9c4f-87f856cd2551", 
    "Floating IP Address": "172.25.250.29", 
    "Port": "1e0b868b-8b3c-4e8d-8f11-d6ed15d0e750"
  }, 
  {
    "Fixed IP Address": null, 
    "ID": "74c9233e-1420-4681-aaa7-357843f48962", 
    "Floating IP Address": "172.25.250.36", 
    "Port": null
  }, 
  {
    "Fixed IP Address": null, 
    "ID": "f235dfae-a01c-4290-864d-89b83f9a8de9", 
    "Floating IP Address": "172.25.250.37", 
    "Port": null
  }
]

使用“ jq”解析此輸出,請允許我首先用英語釋義。 jq中的管道就像bash外殼中的管道。 因此,“采用整個陣列” “選擇此字段等於此值” “返回另一個字段”。 如果需要,可以返回多個字段。

[user@system ~]$ openstack floating ip list -f json | jq  '.[] | select(.["Fixed IP Address"] == null ) | .["Floating IP Address"] '
"172.25.250.36"
"172.25.250.37"

如果您不希望結果用引號引起來,請請求原始輸出(簡稱-r)。

[user@system ~]$ openstack floating ip list -f json | jq  --raw-output '.[] | select(.["Fixed IP Address"] == null ) | .["Floating IP Address"]'
172.25.250.36
172.25.250.37

這些是您可用的浮動IP。 如果將它們放入數組,則可以查詢該數組以查看有多少。

[user@system ~]$ floats=( $( openstack floating ip list -f json | jq  --raw-output '.[] | select(.["Fixed IP Address"] == null ) | .["Floating IP Address"]' ) )
[user@system ~]$ echo ${#floats[@]}
2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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