如何在Ansible中确定性地和可重复地分配增加的端口号?


12

我是Ansible的新手,但我必须维护一组剧本,这些剧本与在给定环境中要设置的服务相对应。需要为它们分配端口,证书等。这将导致许多文件具有基本上总是相同名称的列表以及对它们的分配。

在许多情况下,我认为我可以轻松地将service_name用作变量,但是当映射到IP,端口或其他数字标识符时,我还没有找到一种方法来确定性地为它们分配可重复的不同编号,并且最好保留即使添加新服务也是如此。我考虑过使用SQLite数据库存储服务并从其ID中生成值,但是我不知道如何将其与Ansible集成。

我认为分配越来越多的端口号并不是什么新鲜事。这是很多系统管理员每天要做的事情,因此必须有某种方法可以做到这一点。

编辑:我们直接添加端口号等,group_vars/all.yml如下所示:

ports:
    service1:1024
    service2:1025
    service3:1026

由于我们创建了其他监狱(BSD),并且清单将取决于要执行的角色,因此清单是自动生成的。


2
由于您可能仍然必须将服务添加到清单中,是什么阻止了您在此处手动添加特定的端口号?或者,如果您的库存是自动生成的,那么您可能应该在库存生成级别解决问题
SztupY

您能否附上一些Ansible片段?目前尚不清楚您是否正在使用group_vars变量或将变量直接添加到清单文件中。还不清楚您的库存是如何生成的。
Woodland Hunter'3

您是否考虑过使用像HashiCorp的Consul这样的服务发现工具?
Foghorn首席技术官

Answers:


5

免责声明:我没有使用Ansible。

我要做的是使用随机的“可预测”数字。根据Ansible文档,您可以为随机数生成器添加种子:

从Ansible 2.3版开始,还可以从种子初始化随机数生成器。这样,您可以创建随机但幂等的数字:

“ {{59 | random(seed = inventory_hostname)}} * * * * root / script / from / cron”

因此,对于您的端口号(我假定为非特权),我将使用类似以下内容的变量:

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

最大值为32767,以避免与任何客户端启动的端口发生冲突(有关原因,请参阅临时端口)。


我考虑过,这是一个好主意,但这使增加的部分成为不可能。具有在特定端口范围内在逻辑上相关的某些服务可能是非常理想的。
中旬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.