角色功能說明:
- 該角色實現將部署的生產環境主機信息保存到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
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]