Ansible Role修改IP地址与主机名
以下是基于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 interfacetemplate:src: ifcfg-eth0.j2dest: /etc/sysconfig/network-scripts/ifcfg-eth0notify: restart network - name: Restart network serviceservice:name: networkstate: restartedwhen: ansible_os_family == "RedHat"
编写
handlers/main.yml
文件:定义重启网络服务的handler:- name: restart networkservice:name: networkstate: 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 hostnamehostname:name: "{{ hostname }}"
编写
handlers/main.yml
文件:通常修改主机名不需要额外的handler。
调用Role
创建启动Role的Playbook文件,例如
change_config.yml
:- hosts: allbecome: yesroles:- change_ip- update_hostname
执行Playbook:
ansible-playbook change_config.yml