ansible部署tomcat及 include机制

简介:

1、本文尝试着使用ansible部署tomcat,test为测试工程

roles如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[lansgg@node1 ansible_playbook]$  pwd
/opt/lansgg/ansible_playbook
[lansgg@node1 ansible_playbook]$  ls
hosts  roles  site.yml
[lansgg@node1 ansible_playbook]$ tree
.
├── hosts
├── roles
│   └── http
│       ├── default
│       ├── files
│       │   ├── apache-tomcat-7.0.68. tar .gz
│       │   ├── jdk-7u72-linux-x64. tar .gz
│       │   └── ROOT
│       │       └──  test .html
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └──  test
│       │       └──  test .html
│       ├── tasks
│       │   ├── bak.yml
│       │   └── main.yml
│       ├── templates
│       │   └──  test .yml
│       └── vars
└── site.yml
 
11 directories, 10 files
[lansgg@node1 ansible_playbook]$

main.yml 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[lansgg@node1 tasks]$  cat  main.yml 
- name: 将jdk压缩包copy到远程主机 jdk-7u72-linux-x64. tar .gz
   copy: src=jdk-7u72-linux-x64. tar .gz dest= /opt/lansgg/
- name: 解压jdk压缩包 jdk-7u72-linux-x64. tar .gz
   shell: chdir= /opt/lansgg  tar  zxvf jdk-7u72-linux-x64. tar .gz
- name: 将tomcat压缩包copy到远程主机 apache-tomcat-7.0.68. tar .gz
   copy: src=apache-tomcat-7.0.68. tar .gz dest= /opt/lansgg
- name: 解压tomcat压缩包
   shell: chdir= /opt/lansgg  tar  zxvf apache-tomcat-7.0.68. tar .gz
- name: 将tomcat压缩包 重新命名为 tomcat
   shell: chdir= /opt/lansgg  mv  apache-tomcat-7.0.68 tomcat
- name: 将用户的 .bashrc 模板文件 copy 到远程主机
   copy: src=.bashrc dest=`ansible_user_dir`/
- name: 将用户的 .bash_profile 模板文件 copy 到远程主机
   copy: src=.bash_profile dest=`ansible_user_dir`/
- name: 首次启动tomcat
   shell: chdir=`ansible_user_dir` /tomcat/bin  nohup  . /startup .sh &
- name: 将  test  工程 copy 到远程主机
   copy: src= /opt/lansgg/ansible_playbook/roles/http/meta/test  dest=`ansible_user_dir` /tomcat/webapps/
   tags: 
    - updateconf
   notify:
    - stop tomcat service
    - start tomcat service
- name: 将某些模板文件 copy 到远程主机
   template: src= test .yml dest=`ansible_user_dir` /tomcat/webapps/test/test .html

handlers:

1
2
3
4
5
[lansgg@node1 handlers]$  more  main.yml 
- name: stop tomcat service
   shell:  "ps -ef |grep `ansible_user_dir`/tomcat |grep -v grep |awk '{print $2}' |xargs kill -9"
- name: start tomcat service
   shell: chdir=`ansible_user_dir` /tomcat/bin  nohup  . /startup .sh &

执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts site.yml
 
PLAY [http] ******************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.131]
 
TASK: [http | 将jdk压缩包copy到远程主机 jdk-7u72-linux-x64. tar .gz] *** 
changed: [192.168.100.131]
 
TASK: [http | 解压jdk压缩包 jdk-7u72-linux-x64. tar .gz] ******************* 
changed: [192.168.100.131]
 
TASK: [http | 将tomcat压缩包copy到远程主机 apache-tomcat-7.0.68. tar .gz] *** 
changed: [192.168.100.131]
 
TASK: [http | 解压tomcat压缩包] ****************************************** 
changed: [192.168.100.131]
 
TASK: [http | 将tomcat压缩包 重新命名为 tomcat] ********************** 
changed: [192.168.100.131]
 
TASK: [http | 将用户的 .bashrc 模板文件 copy 到远程主机] ********* 
changed: [192.168.100.131]
 
TASK: [http | 将用户的 .bash_profile 模板文件 copy 到远程主机] *** 
changed: [192.168.100.131]
 
TASK: [http | 首次启动tomcat] ********************************************* 
changed: [192.168.100.131]
 
TASK: [http | 将  test  工程 copy 到远程主机] *************************** 
changed: [192.168.100.131]
 
TASK: [http | 将某些模板文件 copy 到远程主机] ********************* 
changed: [192.168.100.131]
 
NOTIFIED: [http | stop tomcat service] **************************************** 
changed: [192.168.100.131]
 
NOTIFIED: [http | start tomcat service] *************************************** 
changed: [192.168.100.131]
 
PLAY RECAP ******************************************************************** 
192.168.100.131            : ok=13   changed=12   unreachable=0    failed=0   
 
[lansgg@node1 ansible_playbook]$

核实测试主机:

1
2
3
4
5
[lansgg@node1 ansible_playbook]$ ansible -i hosts http -m shell -a  'ps -ef|grep tomcat |grep -v grep'
192.168.100.131 | success | rc=0 >>
lansgg   54034     1  6 13:09 ?        00:00:06  /opt/lansgg/jdk1 .7.0_72 /jre/bin/java  -Djava.util.logging.config. file = /opt/lansgg/tomcat/conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed. dirs = /opt/lansgg/tomcat/endorsed  -classpath  /opt/lansgg/tomcat/bin/bootstrap .jar: /opt/lansgg/tomcat/bin/tomcat-juli .jar -Dcatalina.base= /opt/lansgg/tomcat  -Dcatalina.home= /opt/lansgg/tomcat  -Djava.io.tmpdir= /opt/lansgg/tomcat/temp  org.apache.catalina.startup.Bootstrap start
 
[lansgg@node1 ansible_playbook]$
1
2
3
4
5
[lansgg@node1 ansible_playbook]$ curl http: //192 .168.100.131:8080 /test/test .html
this is a  test 
hostname :v2.lansgg.com
abcdefg
[lansgg@node1 ansible_playbook]$

测试更新操作:


1.1、修改测试文件:

1
[lansgg@node1 ansible_playbook]$  echo  "abcdefg"  >> roles /http/meta/test/test .html

执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts site.yml --tags=updateconf
 
PLAY [http] ******************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.131]
 
TASK: [http | 将  test  工程 copy 到远程主机] *************************** 
changed: [192.168.100.131]
 
NOTIFIED: [http | stop tomcat service] **************************************** 
changed: [192.168.100.131]
 
NOTIFIED: [http | start tomcat service] *************************************** 
changed: [192.168.100.131]
 
PLAY RECAP ******************************************************************** 
192.168.100.131            : ok=4    changed=3    unreachable=0    failed=0   
 
[lansgg@node1 ansible_playbook]$ 
 
[lansgg@node1 ansible_playbook]$ curl http: //192 .168.100.131:8080 /test/test .html
this is a  test 
hostname : hostname
1111111111111111111111111111
 
[lansgg@node1 ansible_playbook]$ ansible -i hosts http -m shell -a  'ps -ef|grep tomcat |grep -v grep'
192.168.100.131 | success | rc=0 >>
lansgg   54236     1 24 13:11 ?        00:00:05  /opt/lansgg/jdk1 .7.0_72 /jre/bin/java  -Djava.util.logging.config. file = /opt/lansgg/tomcat/conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed. dirs = /opt/lansgg/tomcat/endorsed  -classpath  /opt/lansgg/tomcat/bin/bootstrap .jar: /opt/lansgg/tomcat/bin/tomcat-juli .jar -Dcatalina.base= /opt/lansgg/tomcat  -Dcatalina.home= /opt/lansgg/tomcat  -Djava.io.tmpdir= /opt/lansgg/tomcat/temp  org.apache.catalina.startup.Bootstrap start
 
[lansgg@node1 ansible_playbook]$

2、ansible 中的include 机制

测试目的,可以随意指定要操作的主机组 和 要操作的状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[lansgg@node1 ansible_playbook]$  pwd
/opt/lansgg/ansible_playbook
[lansgg@node1 ansible_playbook]$ tree
.
├── hosts
├── roles
│   └──  test
│       └── tasks
│           ├── del.yml
│           ├── main.yml
│           └──  touch .yml
└──  test .yml
 
3 directories, 5 files
[lansgg@node1 ansible_playbook]$

tasks:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[lansgg@node1 ansible_playbook]$  cat  roles /test/tasks/touch .yml 
- name:  touch  file
   shell:  touch  /tmp/123
[lansgg@node1 ansible_playbook]$  cat  roles /test/tasks/del .yml 
- name: del  file
   shell:  rm  /tmp/123
[lansgg@node1 ansible_playbook]$  cat  roles /test/tasks/main .yml 
- name: include  touch  yml
   include:  touch .yml
   when:  "state=='touch'"
- name: include del yml
   include: del.yml
   when:  "state=='del'"
[lansgg@node1 ansible_playbook]$ 
[lansgg@node1 ansible_playbook]$  cat  test .yml 
- hosts:  '`testhost`'
   remote_user: lansgg
   roles:
    test
[lansgg@node1 ansible_playbook]$  cat  hosts
[http]
192.168.100.131
[db]
192.168.100.132
[lansgg@node1 ansible_playbook]$

执行并查看结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts  test .yml --extra-vars  "testhost=http state=touch"
 
PLAY [http] ******************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.131]
 
TASK: [ test  touch  file ] ***************************************************** 
changed: [192.168.100.131]
 
TASK: [ test  | del  file ] ******************************************************* 
skipping: [192.168.100.131]
 
PLAY RECAP ******************************************************************** 
192.168.100.131            : ok=2    changed=1    unreachable=0    failed=0

上面是创建文件,我们也可以删除操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts  test .yml --extra-vars  "testhost=http state=del"
 
PLAY [http] ******************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.131]
 
TASK: [ test  touch  file ] ***************************************************** 
skipping: [192.168.100.131]
 
TASK: [ test  | del  file ] ******************************************************* 
changed: [192.168.100.131]
 
PLAY RECAP ******************************************************************** 
192.168.100.131            : ok=2    changed=1    unreachable=0    failed=0   
 
[lansgg@node1 ansible_playbook]$ ansible -i hosts http -m shell -a  'ls -l /tmp/'
192.168.100.131 | success | rc=0 >>
total 0
 
[lansgg@node1 ansible_playbook]$

可以以命令式的方式控制要操作的主机及状态 (对 db 主机组操作)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts  test .yml --extra-vars  "testhost=db state=touch"
 
PLAY [db] ********************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.132]
 
TASK: [ test  touch  file ] ***************************************************** 
changed: [192.168.100.132]
 
TASK: [ test  | del  file ] ******************************************************* 
skipping: [192.168.100.132]
 
PLAY RECAP ******************************************************************** 
192.168.100.132            : ok=2    changed=1    unreachable=0    failed=0   
 
[lansgg@node1 ansible_playbook]$ ansible -i hosts db -m shell -a  'ls -l /tmp/'
192.168.100.132 | success | rc=0 >>
total 0
-rw-rw-r-- 1 lansgg lansgg 0 Mar  9 16:20 123
 
[lansgg@node1 ansible_playbook]$

删除操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[lansgg@node1 ansible_playbook]$ ansible-playbook -i hosts  test .yml --extra-vars  "testhost=db state=del"
 
PLAY [db] ********************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [192.168.100.132]
 
TASK: [ test  touch  file ] ***************************************************** 
skipping: [192.168.100.132]
 
TASK: [ test  | del  file ] ******************************************************* 
changed: [192.168.100.132]
 
PLAY RECAP ******************************************************************** 
192.168.100.132            : ok=2    changed=1    unreachable=0    failed=0   
 
[lansgg@node1 ansible_playbook]$ ansible -i hosts db -m shell -a  'ls -l /tmp/'
192.168.100.132 | success | rc=0 >>
total 0
 
[lansgg@node1 ansible_playbook]$



本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1749179
相关文章
|
3月前
|
监控 Java 应用服务中间件
部署tomcat部署实战案例
本文是关于Tomcat部署实战案例的教程,包括通过yum和二进制方式部署Tomcat的详细步骤,以及如何监控Tomcat服务。
215 84
部署tomcat部署实战案例
|
4月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
2月前
|
网络协议 Java 应用服务中间件
深入浅出Tomcat网络通信的高并发处理机制
【10月更文挑战第3天】本文详细解析了Tomcat在处理高并发网络请求时的机制,重点关注了其三种不同的IO模型:NioEndPoint、Nio2EndPoint 和 AprEndPoint。NioEndPoint 采用多路复用模型,通过 Acceptor 接收连接、Poller 监听事件及 Executor 处理请求;Nio2EndPoint 则使用 AIO 异步模型,通过回调函数处理连接和数据就绪事件;AprEndPoint 通过 JNI 调用本地库实现高性能,但已在 Tomcat 10 中弃用
深入浅出Tomcat网络通信的高并发处理机制
|
3月前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
2月前
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
146 0
|
4月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
3月前
|
设计模式 人工智能 安全
【Tomcat源码分析】生命周期机制 Lifecycle
Tomcat内部通过各种组件协同工作,构建了一个复杂的Web服务器架构。其中,`Lifecycle`机制作为核心,管理组件从创建到销毁的整个生命周期。本文详细解析了Lifecycle的工作原理及其方法,如初始化、启动、停止和销毁等关键步骤,并展示了LifecycleBase类如何通过状态机和模板模式实现这一过程。通过深入理解Lifecycle,我们可以更好地掌握组件生命周期管理,提升系统设计能力。欢迎关注【码上遇见你】获取更多信息,或搜索【AI贝塔】体验免费的Chat GPT。希望本章内容对你有所帮助。
|
3月前
|
前端开发 Java 应用服务中间件
react自学(6) 部署到tomcat中
react自学(6) 部署到tomcat中
|
4月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
81 3
|
5月前
|
存储 数据安全/隐私保护 Docker
Kolla-ansible部署openStack
Kolla-ansible部署openStack
447 11