基于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]

你可能感兴趣的:(Ansible)