以下是基于Ansible Role修改IP地址与主机名的实现方法:
修改IP地址
- 
创建Role目录结构 :假设Role名为
change_ip,目录结构如下:/etc/ansible/roles/change_ip ├── files ├── handlers │ └── main.yml ├── tasks │ └── main.yml ├── templates │ └── ifcfg-eth0.j2 └── vars └── main.yml - 
编写
vars/main.yml文件:定义IP地址等相关变量,例如:ip_address: "192.168.1.100" netmask: "255.255.255.0" gateway: "192.168.1.1" - 
编写
templates/ifcfg-eth0.j2文件:创建网络配置文件模板,根据实际情况修改接口名称等:DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR={{ ip_address }} NETMASK={{ netmask }} GATEWAY={{ gateway }} - 
编写
tasks/main.yml文件 :使用template模块将模板文件渲染到目标主机的网络配置文件中,并重启网络服务:- name: Configure network interface template: src: ifcfg-eth0.j2 dest: /etc/sysconfig/network-scripts/ifcfg-eth0 notify: restart network - name: Restart network service service: name: network state: restarted when: ansible_os_family == "RedHat" - 
编写
handlers/main.yml文件:定义重启网络服务的handler:- name: restart network service: name: network state: restarted 
修改主机名
- 
创建Role目录结构 :假设Role名为
update_hostname,目录结构如下:/etc/ansible/roles/update_hostname ├── files ├── handlers │ └── main.yml ├── tasks │ └── main.yml ├── templates └── vars └── main.yml - 
编写
vars/main.yml文件:定义主机名变量,例如:hostname: "new_hostname" - 
编写
tasks/main.yml文件 :使用hostname模块修改主机名:- name: Set hostname hostname: name: "{{ hostname }}" - 
编写
handlers/main.yml文件:通常修改主机名不需要额外的handler。 
调用Role
- 
创建启动Role的Playbook文件,例如
change_config.yml:- hosts: all become: yes roles: - change_ip - update_hostname - 
执行Playbook:
ansible-playbook change_config.yml