如何正确使用 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 地址定义一个任务,而不是使用循环。如果是这种情况,为什么要在 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 来更改主机名,因此您应该添加 "become: yes"
---
- hosts: k8s_kvm_vms
become: yes
tasks:
- name: "update hostnames"
hostname:
name: "{{ new_hostname }}"
我正在尝试使用 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
您可以为清单中的每个服务器创建一个新变量,例如
[k8s_kvm_vms]
server1 new_hostname=centos1
server2 new_hostname=centos2
剧本:
---
- hosts: k8s_kvm_vms
tasks:
- name: "update hostnames"
hostname:
name: "{{ new_hostname }}"
我认为您需要 sudo 来更改主机名,因此您应该添加 "become: yes"
---
- hosts: k8s_kvm_vms
become: yes
tasks:
- name: "update hostnames"
hostname:
name: "{{ new_hostname }}"