繁体   English   中英

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

[英]How do I correctly use the ansible hostname module?

我正在尝试使用 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

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

ansible 主机名模块

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

[k8s_kvm_vms]
server1 new_hostname=centos1
server2 new_hostname=centos2

剧本:

---
- hosts: k8s_kvm_vms
  tasks:
  - name: "update hostnames"
    hostname:
      name: "{{ new_hostname }}"

我认为您需要 sudo 更改主机名,因此您应该添加“成为:是”

---
- hosts: k8s_kvm_vms
  become: yes
  tasks:
  - name: "update hostnames"
    hostname:
      name: "{{ new_hostname }}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM