角色功能說明:
- 該角色實現對客戶端主機的多版本tomcat環境部署
角色部署:
- 創建目錄結構,創建軟連接,關聯默認變量文件
WorkDir=~/devops/ansible/os_init && cd ${WorkDir}
RoleName=tomcat
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}/files/cat.sh<<\EOF
#!/bin/bash
source ~/.bash_profile
cd $(dirname $0)
d=$(date +%Y%m%d.%H.%M.%S)
# catalina.out 日切
cd ../logs/
cp catalina.out catalina.out.${d}
echo '' > catalina.out
tar -czf catalina.out.${d}.tar.gz catalina.out.${d} --remove-files
find . -name 'catalina.out.*.tar.gz' -type f -mtime +5 -exec rm -rf {} \;
# 雜項日誌清理
find . -name 'catalina.*.log' -type f -mtime +5 -exec rm -rf {} \;
find . -name 'host-manager.*.log' -type f -mtime +5 -exec rm -rf {} \;
find . -name 'localhost.*.log' -type f -mtime +5 -exec rm -rf {} \;
find . -name 'manager.*.log' -type f -mtime +5 -exec rm -rf {} \;
# access log 日切
cd /web/logs/access/tomcat
find . -name "*.txt" -type f -mtime +0 -exec tar -czf {}.tar.gz {} --remove-files \;
find . -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \;
EOF
- 創建角色任務
cat >roles/${RoleName}/tasks/main.yml<<EOF
---
- name: "創建 tomcat 環境目錄"
file:
path: /usr/local/tomcat
state: directory
owner: root
group: root
mode: 0755
- name: "分發 tomcat6 部署包"
copy:
src: ${WorkDir}/software/{{ tomcat6_name }}
dest: /tmp
owner: root
group: root
mode: 0644
- name: "分發 tomcat7 部署包"
copy:
src: ${WorkDir}/software/{{ tomcat7_name }}
dest: /tmp
owner: root
group: root
mode: 0644
- name: "分發 tomcat8 部署包"
copy:
src: ${WorkDir}/software/{{ tomcat8_name }}
dest: /tmp
owner: root
group: root
mode: 0644
- name: "部署 tomcat6"
unarchive:
src: /tmp/{{ tomcat6_name }}
dest: /usr/local/tomcat
remote_src: True
creates: /usr/local/tomcat/{{ tomcat6_dirname }}
- name: "部署 tomcat7"
unarchive:
src: /tmp/{{ tomcat7_name }}
dest: /usr/local/tomcat
remote_src: True
creates: /usr/local/tomcat/{{ tomcat7_dirname }}
- name: "部署 tomcat8"
unarchive:
src: /tmp/{{ tomcat8_name }}
dest: /usr/local/tomcat
remote_src: True
creates: /usr/local/tomcat/{{ tomcat8_dirname }}
- name: "創建軟連接 tomcat6"
file:
path: /usr/local/tomcat/tomcat6
src: /usr/local/tomcat/{{ tomcat6_dirname }}
state: link
- name: "創建軟連接 tomcat7"
file:
path: /usr/local/tomcat/tomcat7
src: /usr/local/tomcat/{{ tomcat7_dirname }}
state: link
- name: "創建軟連接 tomcat8"
file:
path: /usr/local/tomcat/tomcat8
src: /usr/local/tomcat/{{ tomcat8_dirname }}
state: link
- name: "權限統一"
file:
path: /usr/local/tomcat
state: directory
recurse: yes
owner: root
group: root
- name: "配置 tomcat6 jvm 參數"
lineinfile:
path: /usr/local/tomcat/tomcat6/bin/catalina.sh
regexp: "^cygwin=false$"
line: "JAVA_OPTS=\"{{ opts3 }}\"\n# JAVA_OPTS=\"{{ opts4 }}\"\ncygwin=false "
backrefs: yes
- name: "配置 tomcat7 jvm 參數"
lineinfile:
path: /usr/local/tomcat/tomcat7/bin/catalina.sh
regexp: "^cygwin=false$"
line: "JAVA_OPTS=\"{{ opts3 }}\"\n# JAVA_OPTS=\"{{ opts4 }}\"\ncygwin=false "
backrefs: yes
- name: "配置 tomcat8 jvm 參數"
lineinfile:
path: /usr/local/tomcat/tomcat8/bin/catalina.sh
regexp: "^cygwin=false$"
line: "JAVA_OPTS=\"{{ opts3 }}\"\n# JAVA_OPTS=\"{{ opts4 }}\"\ncygwin=false "
backrefs: yes
- name: "統一配置 tomcat 端口"
shell:
"sed -i 's/8005/18080/g' tomcat*/conf/server.xml && \
sed -i 's/8443/9443/g' tomcat*/conf/server.xml && \
sed -i 's/8009/28080/g' tomcat*/conf/server.xml"
args:
chdir: /usr/local/tomcat
warn: false
- name: "統一配置8080端口參數"
shell:
sed -i 's|Connector port="8080" protocol="HTTP/1.1"|Connector port="8080" protocol="HTTP/1.1"\n
\t\tmaxThreads="800" acceptCount="1000"\n
\t\tcompression="on"\n
\t\tcompressionMinSize="2048"\n
\t\tnoCompressionUserAgents="gozilla,traviata"\n
\t\tcompressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"|g' tomcat*/conf/server.xml
args:
chdir: /usr/local/tomcat
warn: false
- name: "統一配置項目目錄"
shell:
"sed -i 's|appBase=\"webapps\"|appBase=\"/web/project/tomcat\"|g' tomcat*/conf/server.xml"
args:
chdir: /usr/local/tomcat
warn: false
- name: "配置 tomcat6 access 日誌"
shell:
sed -i 's|<!-- Access log processes all example|
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/logs/access/tomcat"\n
\t\tprefix="localhost_access_log." suffix=".txt"\n
\t\tpattern="{\"AccIP\":\"%{X-FORWARDED-FOR}i\",\"LogIP\":\"%l\",\"AuthIP\":\"%u\",\"AccessTime\":\"%t\",\"Method\":\"%r\",\"Status\":\"%s\",\"SendBytes\":\"%b\",\"ProcessTime\":\"%D\",\"QueryString\":\"%q\",\"Partner\":\"%{Referer}i\",\"AgentVersion\":\"%{User-Agent}i\"}"\n
\t\tresolveHosts="false"/>\n
\t<!-- Access log processes all example|g' tomcat6/conf/server.xml
args:
chdir: /usr/local/tomcat
warn: false
- name: "配置 tomcat7 和 tomcat8 access 日誌目錄"
shell:
sed -i 's#directory="logs"#directory="/web/logs/access/tomcat"#g' tomcat[78]/conf/server.xml
args:
chdir: /usr/local/tomcat
warn: false
- name: "配置 tomcat7 和 tomcat8 access 日誌格式"
shell:
sed -i 's|pattern="%h %l %u %t \"%r\" %s %b" />|
pattern="{\"AccIP\":\"%{X-FORWARDED-FOR}i\",\"LogIP\":\"%l\",\"AuthIP\":\"%u\",\"AccessTime\":\"%t\",\"Method\":\"%r\",\"Status\":\"%s\",\"SendBytes\":\"%b\",\"ProcessTime\":\"%D\",\"QueryString\":\"%q\",\"Partner\":\"%{Referer}i\",\"AgentVersion\":\"%{User-Agent}i\"}"\n
\t\tresolveHosts="false"/>|g' tomcat[78]/conf/server.xml
args:
chdir: /usr/local/tomcat
warn: false
- name: "分發 tomcat6 日誌切割腳本"
copy:
src: cat.sh
dest: /usr/local/tomcat/tomcat6/bin/
owner: root
group: root
mode: 0644
- name: "分發 tomcat7 日誌切割腳本"
copy:
src: cat.sh
dest: /usr/local/tomcat/tomcat7/bin/
owner: root
group: root
mode: 0644
- name: "分發 tomcat8 日誌切割腳本"
copy:
src: cat.sh
dest: /usr/local/tomcat/tomcat8/bin/
owner: root
group: root
mode: 0644
- name: "權限修正"
shell:
find tomcat*/ -type f ! -perm -o=r -exec chmod o+r {} \; && \
find tomcat*/ -type d ! -perm -o=rx -exec chmod o+rx {} \;
args:
chdir: /usr/local/tomcat
warn: false
EOF
- 創建任務playbook並執行
cat >os-init-8-${RoleName}.yml<<EOF
---
- hosts: all
remote_user: sudoler
gather_facts: true
become: yes
become_user: root
become_method: su
roles:
- ${RoleName}
EOF
ansible-playbook -i inventory/hosts os-init-8-${RoleName}.yml
注意事項:
- 如果要進行tomcat包的升級,則:
-
- 1,將高版本的包上傳到文件共享服務器
-
- 2,修改 defaults_var.yml 中相應信息
-
- 3,下載包到部署主機 ansible-playbook -i inventory/hosts os-init-1-*.yml
-
- 4,重新執行本角色,完成升級 ansible-playbook -i inventory/hosts os-init-8-*.yml
-
- 5,這個升級可以是降級
[TOC]