簡體   English   中英

ansible playbook 的動態組分配

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM