角色功能说明:
- 该角色实现将部署的生产环境主机信息保存到git仓库中
角色部署:
- 创建目录结构,创建软连接,关联默认变量文件
WorkDir=~/devops/ansible/os_init && cd ${WorkDir}
RoleName=savehost
mkdir -pv roles/${RoleName}/{defaults,files,handlers,meta,tasks,templates,vars}
ln -s ${WorkDir}/defaults_var.yml roles/${RoleName}/defaults/main.yml
- 创建主机列表配置脚本
cat >roles/${RoleName}/templates/savehost.sh.j2<<\EOF
#!/bin/bash
source /etc/profile
cd {{ work_dir }}
cat {{ inventory_hosts }}|while read line
do
IP=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^ansible_ssh_host/) {gsub("ansible_ssh_host=","",$i);print $i}}')
HostPre=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^target_hostname_prefix/) {gsub("target_hostname_prefix=","",$i);print $i}}')
Project=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^project/) {gsub("project=","",$i);print $i}}')
Sub_Pro=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^sub_pro/) {gsub("sub_pro=","",$i);print $i}}')
JavaVer=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^java_version/) {gsub("java_version=","",$i);print $i}}')
Tom_Ver=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^tomcat_version/) {gsub("tomcat_version=","",$i);print $i}}')
Location=$(echo ${line}|awk '{for(i=1;i<=NF;i++) if ($i ~ /^location/) {gsub("location=","",$i);print $i}}')
mkdir -p ../host_list_${Location} && cd ../host_list_${Location}
echo "${IP} ansible_ssh_host=${IP} target_hostname_prefix=${HostPre} project=${Project} java_version=${JavaVer} tomcat_version=${Tom_Ver} port=8080">>${Sub_Pro}
done
>{{ inventory_hosts }}
rm -rf {{ pro_mark }}/*
EOF
- 创建角色任务
cat >roles/${RoleName}/tasks/main.yml<<EOF
---
- name: "同步脚本"
template:
src: savehost.sh.j2
dest: /tmp/savehost.sh
force: yes
owner: root
group: root
mode: 0644
- name: "执行脚本"
shell:
/bin/bash /tmp/savehost.sh
- name: "配置.gitignore文件"
copy:
dest: ${WorkDir}/.gitignore
content: "inventory/*\npro_mark/*\nsoftware/*\n"
force: yes
- name: "提交到git仓库"
shell:
Time=\$(date +%F' '%T) && git add -A && git commit -m "[+] \${Time} update host list" && git push -u origin master
args:
chdir: ${WorkDir}/../
EOF
- 创建任务playbook并执行
cat >os-init-12-${RoleName}.yml<<EOF
---
- hosts: localhost
remote_user: root
gather_facts: true
become: no
roles:
- ${RoleName}
EOF
ansible-playbook -i inventory/hosts os-init-12-${RoleName}.yml
[TOC]
395

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



