Ansible:在库存上设置主机名

Ansible:在库存上设置主机名

我是 Ansible 的新手,但是我是一名长期的程序员,也使用过一些 puppet。

情况是这样的,我需要初始化一些网络设备,它们不支持 bash,所以我使用生的模块,到目前为止,在这方面一切都很好。但我在让不同的命令在不同主机上运行方面遇到了问题。我可能有可变数量的主机要设置主机名,从 1 到 N,其中 N 小于 10。主机名前缀始终相同像前缀_。我想从列表中添加后缀:

ctr_suffixes:  "[ 'A', 'B', 'C', 'D', 'E']

suffix_list 应该始终具有足够的元素来提供唯一的后缀(即,数量级为 10 的列表将为指定的 1 - 10 个主机提供后缀,但如果仅指定 3 个,则将使用 A、B、C,但不会再使用。)

因此,如果我的库存中有 3 个主机,我想要创建一个剧本,它将产生以下主机名

prefix_A
prefix_B
prefix_C

需要在每个主机上运行的命令是

set hostname prefix_{{item}}

其中 {{item}} 应填写 A 表示第一个主机,B 表示第二个主机,依此类推。

不幸的是,我尝试过的所有方法都会将 set hostname 命令应用于清单中的每个主机,最终所有主机都命名为 prefix_C

这是我目前遇到的无法正常工作的情况:

---
-   hosts: controllers_test
    gather_facts: no
    remote_user:  admin
    vars:
#       ctr_suffixes: [ 'A', 'B', 'C', 'D', 'E' ]
      ctr_suffixes: [ 'A', 'B']

    tasks:
      - name: Assign names to the Controllers
        raw:  "set hostname ctr-TEST-{{item|quote}}"
        with_items: ctr_suffixes

我的ansible_hosts文件有:

[controllers_test]
10.144.38.137
10.144.38.139

我得到的结果是:

TASK: [Assign names to the Controllers]
***************************************  ok: [10.144.38.139] => (item=A) => {"item": "A", "rc": 0, "stderr": "", "stdout": ""} ok: [10.144.38.137] => (item=A) => {"item": "A", "rc": 0, "stderr": "", "stdout": ""} ok: [10.144.38.137] => (item=B) => {"item": "B", "rc": 0, "stderr": "", "stdout": ""} ok: [10.144.38.139] => (item=B) => {"item": "B", "rc": 0, "stderr": "", "stdout": ""}

PLAY RECAP
******************************************************************** 
10.144.38.137              : ok=2    changed=0    unreachable=0    failed=0   
10.144.38.139              : ok=2    changed=0    unreachable=0    failed=0

我尝试过 with_together 和其他一些方法,但它们似乎都想将整个前缀列表应用于每个主机。如果这能让代码更简单,我会满足于保留与主机数量相同的列表。

我怀疑我需要使用某种模板。

答案1

你可以用以下方法实现宿主变量这样你的ansible_hosts文件有:

[controllers_test]
10.144.38.137   hostname_suffix=A
10.144.38.139   hostname_suffix=B

然后你的剧本就变成了:

---
- hosts: controllers_test
  gather_facts: no
  remote_user:  admin
  tasks:
    - name: Assign names to the Controllers
      raw:  "set hostname ctr-TEST-{{hostname_suffix|quote}}"

相关内容