基於ansible的生產環境部署構建(十三) 角色savehost

角色功能說明:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章