[英]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.