我是Ansible的新手,但我必须维护一组剧本,这些剧本与要在给定环境中设置的服务相对应。需要为它们分配端口,证书等。这将导致许多文件具有基本上始终相同的名称列表,并为其分配一个名称。作为变量,但是当映射到IP,端口或其他数字标识符时,我还没有找到一种方法来确定性地为它们分配可重复的不同编号,即使添加新服务也最好保持不变。我考虑过使用SQLite数据库存储服务并从其ID中生成值,但是我不知道如何将其与Ansible集成。

我认为分配递增的端口号并不是一些全新的东西;这是很多系统管理员每天要做的事情,因此必须有某种方法可以做到。

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

ports:
    service1:1024
    service2:1025
    service3:1026


库存是自动生成的,因为我们创建了其他监狱(BSD)并取决于将要执行的角色。

评论

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

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

您是否考虑过使用像HashiCorp的Consul这样的服务发现工具?

#1 楼

免责声明:我不使用Ansible。

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


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

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


所以在您的情况下,您需要一个端口号(我认为是非特权的),我会使用以下变量:

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

评论


我考虑过,这是一个好主意,但这使增加的部分成为不可能。具有在特定端口范围内逻辑相关的某些服务可能是非常理想的。

– Midor
17 Mar 2 '17 at 13:13