一千萬個為什麽

搜索

在Ansible中確定性地和可重復地分配增加的端口號



我是Ansible的新手,但我必須維護一套劇本,這些劇本對應於在特定環境中設置的服務。他們需要被分配一個端口,證書等。這導致許多文件中包含基本上總是相同的名稱和分配給他們的列表。

在很多情況下,我認為我可以輕松地重用service_name作為變量,但是當映射到IP,端口或其他數字標識符時,我還沒有想出一種方法來確定性地以可重現的方式為它們分配不同的數字,並且最好保持即使添加新的服務也是如此。我已經考慮過使用SQLite數據庫來存儲服務,並從它們的id生成值,但我不知道如何將它與Ansible集成。

我認為分配增加的端口號並不是全新的東西;這是很多系統管理員在日常工作中所需要做的事情,所以必須有一些方法可以做到這一點。

Edit: We directly add the port numbers etc. in group_vars/all.yml like this:

ports:
    service1:1024
    service2:1025
    service3:1026

庫存是自動生成的,因為我們創建了額外的監獄(BSD)並取決於將要執行的角色。

轉載註明原文: 在Ansible中確定性地和可重復地分配增加的端口號

一共有 1 個回答:

免責聲明:我沒有使用Ansible。

我會做的是使用隨機的“可預測”數字。 根據Ansible doc,你可以給隨機數發生器播種:

從Ansible版本2.3起,也可以初始化隨機數   來自種子的數字發生器。這樣,你可以創建   隨機但冪等數字:     

“{{59 | random(seed = inventory_hostname)}} * * * * root   /腳本/從/ cron的“

所以在你的情況下為一個端口號(我假設沒有特權)我會用類似的東西去找一個變量:

port="{{ 32767 |random(start=1024,seed=service_name) }}"

最大值為32767,以避免與任何客戶端啟動的端口沖突(由於原因,請參見臨時端口)。