gpt4 book ai didi

vagrant - 开发/生产中的 Ansible 服务器/组

转载 作者:行者123 更新时间:2023-12-02 14:15:08 24 4
gpt4 key购买 nike

我所处的情况是看不到正确的使用方法。我有多个分配了不同角色的服务器,分布在多个组中。与生产/登台环境相比,我在本地 Vagrant 环境中遇到了一些使用 group_vars 的困难。在生产中,有更多的服务器,分配的组更少。在我的 Vagrant 环境中,我的机器较少,但每台机器分配了更多的角色/组。我有一台机器,它是一组组的成员,每个组都有自己的变量“tcp_ports”,它列出了应该在我的 iptables 角色中为该组成员的服务器打开的端口。当然,问题是 Ansible 不会自动合并所有 group_vars 中的这个变量。

到目前为止,我的解决方案是重命名变量 tcp_ports_<group name>然后,在我的 iptables 角色中,我有以下任务:

- name: Combine tcp_ports_<group> into tcp_ports
set_fact:
tcp_ports: "{{ tcp_ports|default([])|union(hostvars[inventory_hostname]['tcp_ports_' + item]|default([])) }}"
with_items: "{{ group_names }}"

...聚合 tcp_vars_<group>将变量分组为 tcp_ports对于当前机器所属的所有组。这可行……但感觉很脏。我知道如何在 ansible.cfg 中启用合并模式,但这个项目非常庞大,我不想对 Ansible 的操作进行如此根本性的改变,因为确保事情不会中断的测试阶段非常耗时。我还读过这样一句话:“摆弄 group_vars 意味着你做错了”,我确信我是这样的......我只是不知道如何在这个问题上做对案件。

有人以更合适的方式解决了这个问题吗?

最佳答案

您可以创建 iptables_config 角色并在那里定义支持的服务组,如下所示:

service_ports:
web:
- 80
- 443
node:
- 3000
mysql:
- 3128

并制定如下规则:

- debug: msg="allow port {{ item }}"
with_items: "{{ group_names | intersect(service_ports.keys()) | map('extract',service_ports) | sum(start=[]) }}"

因此,当您应用角色 iptables_config 时,会生成当前主机组名称和已知服务名称的交集,并且会循环为这些服务定义的端口。

关于vagrant - 开发/生产中的 Ansible 服务器/组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40278370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com