我如何正确使用ansible主机名模块?

问题描述 投票:0回答:1

我正在尝试使用Ansible来修改一打新创建的虚拟机的主机名,但是我无法理解如何正确地循环。

这是我写的剧本:

---
- hosts: k8s_kvm_vms
  tasks:
  - name: "update hostnames"
    hostname:
      name: "{{ item }}"
    with_items:
      - centos01
      - centos02
      ...

结果是它使用每个主机名更新每个主机。因此,如果我有12台计算机,则该剧本结尾处的每个主机名均为“ centos12”。

我希望此行为基本上产生与以下结果相同的结果:

num=0
for ip in ${list_of_ips[*]}; do 
    ssh $ip hostnamectl set-hostname centos${num}
    num=$((num+1))
done

如果我自己用bash编写

The answer on this page使我相信我必须将所有IP地址都包括在我的剧本中。在我看来,脚本编写的好处是,即使它们的IP发生了变化,我也可以拥有相同的主机名(我只需要将ip地址复制到/ etc / ansible / hosts中)即可与其他剧本一起使用。我已经阅读了主机名模块上的ansible页面,但是他们的示例使我相信,我将不必为每个IP地址定义一个任务,而不必使用循环。如果是这种情况,为什么要在bash脚本上使用ansible?

ansible hostname module

bash ansible virtual-machine sysadmin
1个回答
0
投票

您可以为清单中的每个服务器创建一个新变量,例如

[k8s_kvm_vms]
server1 new_hostname=centos1
server2 new_hostname=centos2

Playbook:

---
- hosts: k8s_kvm_vms
  tasks:
  - name: "update hostnames"
    hostname:
      name: "{{ new_hostname }}"
© www.soinside.com 2019 - 2024. All rights reserved.