[英]Dynamic group assignment for ansible playbook
我正在编写一个可配置 redis 集群的 ansible playbook。 我的剧本查看了 3 个组,但我不知道如何正确地将节点分配给一个组。
出现问题是因为我有一个动态数量的节点。 如果请求 2 个节点,我希望有如下所示的组:
[redis_master]
node1
[redis_slave]
node2
在 3 的情况下:
[redis_master]
node1
[redis_slave]
node2
[redis_sentinel]
node3
在 4 等情况下:
[redis_master]
node1
node4
[redis_slave]
node2
[redis_sentinel]
node3
有没有我在这里缺少的范例?
我不确定我是否完全了解情况。 通常您预先定义所有涉及的主机并将它们分组。 playbook 可能处理的所有主机都需要在清单中定义。 哪些主机由剧本处理然后或多或少是固定的。 你到底是什么意思:
如果请求X 个节点...
我知道您可以使用--limit
将剧本限制为最初定义的主机的子集。 您也可以使用--extra-vars
定义的参数来选择特定组或一组主机。 但是它们仍然需要在清单中预先定义,并且依赖组和角色(redis master、slave 等)依赖于所涉及的主机数量对我来说似乎很奇怪(并且容易出错)。
话虽这么说...我认为库存脚本可能是你正在寻找的。 使用这些脚本,您可以生成库存动态。 我认为您不能传递参数,但您可以导出变量并稍后从脚本中读取它们。
嗯,使用 Redis Sentinel,库存本质上是动态的。 您可以在[redis_master]
组中定义某个主机,但集群主机可以自动重新分配主机角色。 Redis Sentinel 重写了 Sentinel 配置文件。
所以你可能会惊讶地登录到你认为是主人的机器并发现这一点!!
redis-cli info replication
...
role:slave
master_host:10.1.1.20
...
因此,要为集群扮演幂等角色,您需要通过探测[redis_sentinel]
组中的主机(假设您在每个主机上运行哨兵)来发现谁是主[redis_sentinel]
。 然后用这样的东西组成组:
- name: get master_host
run_once: true
shell: "redis-cli info replication|grep -A1 role|tail -1|cut -d: -f2"
register: master_host
- name: add master_host
add_host:
name: "{{ master_host.stdout }}"
groups: redis_master
如果您在 Centos/RHEL 上工作,请考虑在此处提出拉取请求: https : //github.com/dockpack/base_redis
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.