ansible批量修改主机名
生产环境中,一个节点主机数量少有几十台,多则百余台,甚至更甚,资源前期基础环境中修改主机名是个麻烦的事情,一台台上去修改太麻烦,本文利用hosts文件中指定各个主机的主机名来实现,虽说繁琐了点,总好过一台台上去改,基本够用了;
准备两份文件:
1、ansible的hosts文件,本文使用 -i 指定hosts文件,hosts文件路径名称:/root/ansible/dfs ;
2、ansible的yaml文件,文件路径名称:/root/script/name.yaml ;
1、hosts文件,也就是ansible的主机分组,这里指定每台主机的IP地址、主机名称(hostname想要修改的主机名这里写入);
[root@luan-9-6 ~]# cat ansible/dfs
[dfs] #这里是ansible/dfs文件中的dfs组,里面有6台主机;
192.168.4.203 hostname=luan-CTG-DFS-1 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
192.168.4.204 hostname=luan-CTG-DFS-2 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
192.168.4.205 hostname=luan-CTG-DFS-3 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
192.168.4.206 hostname=luan-CTG-DFS-4 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
192.168.4.207 hostname=luan-CTG-DFS-5 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
192.168.4.208 hostname=luan-CTG-DFS-6 ansible_ssh_port=22101 ansible_ssh_user=root ansible_ssh_pass="luanfpl@030"
2、写palybook剧本,也就是yaml文件,脚本固定,修改下yaml文件中的 hosts组名 和 用户 即可直接使用;
#纯净,直接复制粘贴使用:
[root@luan-9-6 ~]# cat script/name.yaml
- hosts: dfs
remote_user: root
gather_facts: no
tasks:
- name: change name
raw: "echo {{hostname|quote}} > /etc/hostname"
- name:
shell: hostname {{hostname|quote}}
------------------------------------------------------------------------------------------------------
#注释版
[root@luan-9-6 ~]# cat script/name.yaml
- hosts: dfs #这里的dfs就是ansible/dfs文件中的dfs组;
remote_user: root #用的用户是root;
gather_facts: no #在执行第一个Playbook任务时不收集目标主机的事实信息,信息包括主机名、内核版本、网卡接口、IP地址、操作系统版本、CPU、内存、磁盘等,存储在ansible_facts字典中,可以在后续的任务中被访问和使用;
tasks: #具体任务
- name: Permanently change name #任务名称
raw: "echo {{hostname|quote}} > /etc/hostname" #执行raw模块命令,通过导入覆盖目标主机的/etc/hostname文件实现永久修改主机名;
- name: update name #任务名称
shell: hostname {{hostname|quote}} #shell模块触发命令,实现实时修改;
3、测试执行
#1、检测yaml文件语法格式是否有误;
[root@luan-9-6 ~]# ansible-playbook --syntax-check script/name.yaml
#这里显示空格行,表示正确,语法格式正确,反之显示有内容则出错,需检查;
playbook: script/name.yaml
#2、-C 检测是否执行报错,不真正执行修改,正确无报错,则可以去掉-C执行;
[root@luan-9-6 ~]# ansible-playbook -C script/name.yaml -i ansible/dfs
PLAY [dfs] *********************************************************************************************************************************************************************************
TASK [change name] *************************************************************************************************************************************************************************
skipping: [192.168.4.203] #这里可看到,是skipping跳过,不会执行任务;
skipping: [192.168.4.204]
skipping: [192.168.4.205]
skipping: [192.168.4.206]
skipping: [192.168.4.207]
skipping: [192.168.4.208]
TASK [shell] *******************************************************************************************************************************************************************************
skipping: [192.168.4.203]
skipping: [192.168.4.205]
skipping: [192.168.4.204]
skipping: [192.168.4.206]
skipping: [192.168.4.207]
skipping: [192.168.4.208]
PLAY RECAP *********************************************************************************************************************************************************************************
192.168.4.203 : ok=0 changed=0 unreachable=0 failed=0
192.168.4.204 : ok=0 changed=0 unreachable=0 failed=0
192.168.4.205 : ok=0 changed=0 unreachable=0 failed=0
192.168.4.206 : ok=0 changed=0 unreachable=0 failed=0
192.168.4.207 : ok=0 changed=0 unreachable=0 failed=0
192.168.4.208 : ok=0 changed=0 unreachable=0 failed=0
[root@luan-9-6 ~]#
#3、正式执行ansible剧本,修改主机名
[root@luan-9-6 ~]# ansible-playbook script/name.yaml -i ansible/dfs
PLAY [dfs] *********************************************************************************************************************************************************************************
TASK [change name] *************************************************************************************************************************************************************************
changed: [192.168.4.203]
changed: [192.168.4.204]
changed: [192.168.4.205]
changed: [192.168.4.206]
changed: [192.168.4.207]
changed: [192.168.4.208]
TASK [shell] *******************************************************************************************************************************************************************************
changed: [192.168.4.203]
changed: [192.168.4.205]
changed: [192.168.4.204]
changed: [192.168.4.207]
changed: [192.168.4.206]
changed: [192.168.4.208]
PLAY RECAP *********************************************************************************************************************************************************************************
192.168.4.203 : ok=2 changed=2 unreachable=0 failed=0
192.168.4.204 : ok=2 changed=2 unreachable=0 failed=0
192.168.4.205 : ok=2 changed=2 unreachable=0 failed=0
192.168.4.206 : ok=2 changed=2 unreachable=0 failed=0
192.168.4.207 : ok=2 changed=2 unreachable=0 failed=0
192.168.4.208 : ok=2 changed=2 unreachable=0 failed=0
[root@luan-9-6 ~]#
[root@luna-9-6 ~]#
#4、验证主机名更改,可以看到已经更改完毕;
[root@luan-9-6 ~]# ansible -i ansible/dfs dfs -m shell -a "hostname"
192.168.4.203 | SUCCESS | rc=0 >>
luan-CTG-DFS-1
192.168.4.206 | SUCCESS | rc=0 >>
luan-CTG-DFS-4
192.168.4.204 | SUCCESS | rc=0 >>
luan-CTG-DFS-2
192.168.4.205 | SUCCESS | rc=0 >>
luan-CTG-DFS-3
192.168.4.207 | SUCCESS | rc=0 >>
luan-CTG-DFS-5
192.168.4.208 | SUCCESS | rc=0 >>
luan-CTG-DFS-6
[root@luan-9-6 ~]#