利用ansible实现tomcat自动安装和配置
一、总体设计
目前编写脚本的思路为:将tomcat压缩包从获取、解压再到安装、配置的全部过程写在一个playbook脚本里,后面可以根据需求,将不同的功能拆分开,对应不同的结点。
二、参数配置
用户可以在界面上配置相应的参数,目前可以配置的有tomcat源地址、tomcat安装路径、http端口号、AJP端口号以及shutdown端口号。其中,tomcat源地址和tomcat安装路径为必填项,http端口号、AJP端口号和shutdown端口号为选填项,选填项不填则按默认值传入。后续可以根据用户和业务需求,加入更多的配置项。
三、详细设计(对应代码中的task)
- 检查jdk是否存在,jdk不存在时报错。
- 检查http端口号是否在1-65535之间,不在范围内时报错。
- 检查http端口号是否被占用,http端口号被占用时报错。
- 检查AJP端口号是否在1-65535之间,不在范围内时报错。
- 检查AJP端口号是否被占用,AJP端口号被占用时报错。
- 检查shutdown端口号是否在1-65535之间,不在范围内时报错。
- 检查shutdown端口号是否被占用,shutdown端口号被占用时报错。
- 创建临时目录,用于存储将要获取的tomcat压缩包。
- 获取tomcat压缩包,目前用copy模块,有文件服务器时用get-url模块。
- 创建tomcat安装目录,存储解压后的tomcat文件。
- 解压tomcat压缩包。
- 获取tomcat压缩包解压后的配置文件的路径。
- 删除之前创建的tomcat压缩包所在的临时目录。
- 通过tomcat配置文件的路径获取tomcat压缩包解压后的文件名。
- 在配置文件中配置http端口。
- 在配置文件中配置AJP端口。
- 在配置文件中配置shutdown端口。
- 配置tomcat环境变量。
- 后台启动tomcat服务。
- 测试tomcat是否成功启动,tomcat启动失败时报错。
四、时间消耗
直接通过ansible服务器在单个主机上执行脚本大约40s,通过平台执行该脚本在单个主机上运行,大约60s。
五、所遇问题
- 如何获取tomcat压缩包解压后所得到的文件夹的名字,这是获取tomcat配置文件所在路径的关键,linux系统好像没有这个功能。本脚本中使用的方法不能确保适用于所有版本tomcat压缩包。
- 如果将来对平台进行改进,则应满足templates功能,即根据模块文件动态生成对应的配置文件。
- templates文件必须存放与templates目录下,且命名为.j2结尾
- yml文件需和templates目录平级,目录结构如下:
六、详细代码
---
# tomcat自动安装和配置
- name: tomcat installation and configuration
hosts: 192.168.1.231,192.168.1.232
gather_facts: no
# 前端界面所传参数
vars:
# tomcat压缩包源路径
tomcat_src: "{
{ src }}"
# tomcat安装路径
tomcat_dest: "{
{ dest }}"
#if using template,http_port,AJP_port and shutdown_port is unnecessary.
# 三个tomcat配置文件中的参数,可根据用户需要添加
http_port: "{
{ http_port_num | default('8080') }}"
AJP_port: "{
{ AJP_port_num | default('8009')}}"
shutdown_port: "{
{ shutdown_port_num | default('8005')}}"
#url: "{
{ url }}"
#user_password: "{
{ user_password }}"
#user_passname: "{
{ user_passname }}"
tasks:
# 检查jdk是否存在
- name: check whether jdk exists
shell:
java -version
register: jdk_result
ignore_errors: True
# jdk不存在时报错
- name: jdk doesn't exists
fail:
msg: "jdk doesn't exists, please install jdk first!"
when: jdk_result is failed
- debug:
msg: "jdk existed"
# 检查http端口号是否在1-65535之间,不在范围内时报错