角色功能说明:
- 该角色主要完成对客户端主机的ssh公钥分发、IP和主机名以及hosts文件配置
角色部署:
- 创建目录结构,创建软连接,关联默认变量文件
WorkDir=~/devops/ansible/os_init && cd ${WorkDir}
RoleName=ssh_ip_host
mkdir -pv roles/${RoleName}/{defaults,files,handlers,meta,tasks,templates,vars}
ln -s ${WorkDir}/defaults_var.yml roles/${RoleName}/defaults/main.yml
- 配置网卡模版文件,如果环境中有多个vlan,则为每个vlan配置网卡模版文件
cat >roles/${RoleName}/templates/ifcfg-interface-192.168.77.j2<<EOF
DEVICE={{ interface.stdout }}
NAME={{ interface.stdout }}
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
DEFROUTE=yes
IPADDR={{ target_ip }}
PREFIX=24
GATEWAY=192.168.77.1
EOF
- 创建角色任务
cat >roles/${RoleName}/tasks/main.yml<<\EOF
---
- name: "分发公钥"
authorized_key:
user: root
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
- name: "获取网卡设备名"
shell:
"ip link show|grep ^[0-9]|grep -v ' lo: '|awk -F'[ |:]' '{print $3}' "
register: interface
- name: "获取网段信息"
shell:
"echo {{ target_ip }}|awk -F'.' '{print $1\".\"$2\".\"$3}'"
register: interface_gw
- name: "模版配置网卡"
template:
src: ifcfg-interface-{{ interface_gw.stdout }}.j2
dest: /etc/sysconfig/network-scripts/ifcfg-{{ interface.stdout }}
force: yes
owner: root
group: root
mode: 0644
- name: "生成主机名后半部分"
shell:
"echo {{ target_ip }}|awk -F'.' '{print $2$3$4}'"
register: hostname_tail
- name: "配置主机名 centos6"
shell:
"{{ host_name_set_6 }}"
when: ansible_distribution_major_version == "6"
- name: "配置主机名 centos7"
shell:
"{{ host_name_set_7 }}"
when: ansible_distribution_major_version == "7"
- name: "配置hosts文件"
shell:
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts && echo "{{ target_ip }} {{ host_name }}">>/etc/hosts
EOF
- 创建任务playbook并执行
cat >os-init-2-${RoleName}.yml<<EOF
---
- hosts: all
remote_user: root
gather_facts: true
become: no
roles:
- ${RoleName}
EOF
ansible-playbook -i inventory/hosts os-init-2-${RoleName}.yml
注意事项:
- 该角色对IP只进行配置,IP生效需要重启网络或重启主机实现
- 重启功能由下一个角色reboot实现,重启后需要修改inventory/hosts相应的IP配置
- 该角色可以反复执行,但是要保证inventory/hosts相应的IP配置是正确的
[TOC]
597

被折叠的 条评论
为什么被折叠?



