ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.YAML概述
1>.YAML的诞生
YAML是一个可读性高,用来表达数据序列的格式。 YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822。 Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。\
2>.YAML的命名
YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。 在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)。但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而反向缩略语重命名。
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。
它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料。
由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作。
其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。
4>.JSON格式和YAML格式表现数据结构(基本数据结构)案例对比
JSON格式:
{id:,name:尹正杰,age:,spouse:{id:,name:jason,age:},fav:[red,yellow,blue]} YAML格式:
id:1
name:尹正杰
age:18
spouse:
id:2
name:jason
age:26
fav:
-red
-yellow
-blue
5>.YAML语法检查
其实ansible自带的就有YAML语法检查的脚本,当然你也可以参考网页连接的检查:https://www.bejson.com/validators/yaml/。
二.Playbook的核心元素
Hosts:
定义可以操作的主机, Tasks:
定义我们需要执行的任务列表。 Variable:
支持变量,流程控制语句,如循环语句等等。(YAML支持编程语言的基本语法,如条件表达式,循环语句,流程控制等等,这也是为什么ansible选择它的一个原因吧!) Templates:
包含了模板语法的文本文件。 Handlers:
处理器是由特定条件触发的任务。 Roles:
定义角色,其实我们可以理解角色是将服务器主机进行分组,然后基于组的方式进行批量管理。这个角色和MySQL8.0之后版本的角色功能很相似!
三.运行playbook的方式案例展示
1>.playbook的基础组件
playbook的基础组件:
Hosts:
运行指定任务的目标主机。
remoute_user:
在远程主机上执行任务的用户。
tasks:
任务列表。
模块,模块参数
格式:
action:module arguments
module:arguments
温馨提示:
shell和command模块后面直接跟命令,而非key=value类的参数列表。
某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers。
任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用。
2>.运行playbook的步骤简介
运行playbook的方式:
1>.测试
ansible-playbook --check
只检测可能会发生的改变,但不是真正执行操作。
ansible-playbook --list-hosts
列出运行任务的主机。
ansible-playbook --list-tasks
列出运行的任务列表。
ansible-playbook --syntax-check
语法检查。
2>.运行
3>.编写剧本(注意,每个冒号后面都有一个空格,如果你没写的话,可能会报错!)
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat memcached.yaml
- hosts: node102.yinzhengjie.org.cn
remote_user: root
tasks:
- name: 'install memcached package'
yum: 'name=memcached state=installed'
- name: 'start memcached service'
service: 'name=memcached enabled=true state=started'
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat memcached.yaml
4>.只检测可能会发生的改变,但不是真正执行操作。
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check memcached.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install memcached package] ****************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] TASK [start memcached service] ******************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check memcached.yaml
5>.列出运行任务的主机。
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --list-hosts memcached.yaml playbook: memcached.yaml play # (node102.yinzhengjie.org.cn): node102.yinzhengjie.org.cn TAGS: []
pattern: [u'node102.yinzhengjie.org.cn']
hosts ():
node102.yinzhengjie.org.cn
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --list-hosts memcached.yaml
6>.语法检查。如果没有任何的报错就是最好的结果!
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check memcached.yaml playbook: memcached.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check memcached.yaml
7>.执行playbook
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook memcached.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install memcached package] ****************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] TASK [start memcached service] ******************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'ss -tnl | grep 11211'
node101.yinzhengjie.org.cn | FAILED | rc= >>
non-zero return code node103.yinzhengjie.org.cn | FAILED | rc= >>
non-zero return code node102.yinzhengjie.org.cn | SUCCESS | rc= >>
LISTEN *: *:*
LISTEN ::: :::* [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook memcached.yaml
四.handlers案例展示
1>.handlers用法简介
handlers:
任务,在特定的条件下触发;
接收到其他的任务的通知时被触发:
notify: HANDLER TASK NAME
2>.编写playbook
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat conf/memcached
PORT=""
USER="memcached"
MAXCONN=""
CACHESIZE=""
OPTIONS=""
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat memcached-v2.yaml
- hosts: all
remote_user: root
tasks:
- name: 'install memcached package'
yum: 'name=memcached state=installed'
- name: 'install conf file'
copy: 'src=/root/ansible_workshop/conf/memcached dest=/etc/sysconfig/memcached'
notify: 'restart memcached service'
- name: 'start memcached service'
service: 'name=memcached enabled=true state=started'
handlers:
- name: 'restart memcached service'
service: 'name=memcached state=restarted'
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat memcached-v2.yaml
3>.语法检查
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check memcached-v2.yaml playbook: memcached-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check memcached-v2.yaml
4>.检查剧本的执行(注意,若文件没有被改变时不会发送通知的!)
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check memcached-v2.yaml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install memcached package] ****************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [install conf file] ************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] TASK [start memcached service] ******************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] RUNNING HANDLER [restart memcached service] *****************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check memcached-v2.yaml
5>.运行剧本
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook memcached-v2.yaml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install memcached package] ****************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install conf file] ************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] TASK [start memcached service] ******************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn] RUNNING HANDLER [restart memcached service] *****************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook memcached-v2.yaml
6>.验证剧本的执行结果
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'ss -tnl | grep 11235'
node101.yinzhengjie.org.cn | SUCCESS | rc= >>
LISTEN *: *:*
LISTEN ::: :::* node102.yinzhengjie.org.cn | SUCCESS | rc= >>
LISTEN *: *:*
LISTEN ::: :::* node103.yinzhengjie.org.cn | SUCCESS | rc= >>
LISTEN *: *:*
LISTEN ::: :::* [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'ss -tnl | grep 11235'
五.variables案例展示
1>.variables简介
variables:
1>.facts: 可直接调用
注意,可使用setup模块直接获取目标主机的facters。
2>.用户自定义变量:
在ansible-playbook命令的命令行中
-e VARS,--extra-vars=VARS
在playbook中定义变量的方法:
vars:
-var1:values1
-var2:values2
变量引用的方法和python的django框架模板语法类似,如:{{ variable }}
3>.通过roles传递变量
4>.Host Inventory
用户自定义变量
向不同的主机传递不同的变量
IP/HOSTNAME varaiable=value var2=value2
向组中的主机传递相同的变量
[groupname:vars]
variable=value
invertory参数
用于定义ansible远程目标连接主机时使用的参数,而非传递给playbook的变量,一般我们在/etc/ansible/hosts 对应的主机后面定义即可
ansible_ssh_host
ansible_ssh_port
ansible_ssh_user
ansible_ssh_pass
ansible_sudo_pass
2>.用户自定义变量案例实操
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ll
total
drwxr-xr-x. root root Mar : conf
-rw-r--r--. root root Mar : install_package.yaml
-rw-r--r--. root root Mar : memcached-v2.yaml
-rw-r--r--. root root Mar : memcached.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat install_package.yaml
- hosts: node102.yinzhengjie.org.cn
remote_user: root
vars:
- package_name: 'tree'
tasks:
- name: 'install something package'
yum: name={{ package_name }} state=installed
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check install_package.yaml playbook: install_package.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check install_package.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install something package] ****************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook install_package.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install something package] ****************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat install_package.yaml #在剧本中自定义变量
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ll
total
drwxr-xr-x. root root Mar : conf
-rw-r--r--. root root Mar : install_package.yaml
-rw-r--r--. root root Mar : memcached-v2.yaml
-rw-r--r--. root root Mar : memcached.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cp install_package.yaml install_package-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# vi install_package-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat install_package-v2.yaml
- hosts: node102.yinzhengjie.org.cn
remote_user: root
vars:
- package_name: 'httpd'
tasks:
- name: install something {{ package_name }}
yum: name={{ package_name }} state=installed
- name: start {{ package_name }}
service: name={{ package_name }} state=started
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -e package_name='mysql' install_package-v2.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install something mysql] ******************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] TASK [start mysql] ******************************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -e package_name='mysql' install_package-v2.yaml #自定义变量后,咱们可以在命令行中进行传参操作!
3>.Host Inventory
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat /etc/ansible/hosts
[web]
node[:].yinzhengjie.org.cn [web:vars]
package_name='nginx' [db]
node[:].yinzhengjie.org.cn [tomcat]
node[:].yinzhengjie.org.cn [redis]
node101.yinzhengjie.org.cn [redis:vars]
package_name='redis'
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ll
total
drwxr-xr-x. root root Mar : conf
-rw-r--r--. root root Mar : install_package-v2.yaml
-rw-r--r--. root root Mar : install_package.yaml
-rw-r--r--. root root Mar : memcached-v2.yaml
-rw-r--r--. root root Mar : memcached.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cp install_package-v2.yaml install_package-v3.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# vi install_package-v3.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat install_package-v3.yaml
- hosts: web
remote_user: root
vars:
- package_name: 'httpd'
tasks:
- name: install something {{ package_name }}
yum: name={{ package_name }} state=installed
- name: start {{ package_name }}
service: name={{ package_name }} state=started
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check install_package-v3.yaml PLAY [web] ************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [install something httpd] ******************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [start httpd] ******************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check install_package-v3.yaml
六.模板模块
1>.定义配置文件用模板将其引用
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat jinja2.j2
hostname: {{ ansible_fqdn }}
myvar: {{ package_name }}
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat jinja2.j2 #想使用模板就得提前定义好自己模板!
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat jinja2.yaml
- hosts: all
remote_user: root
tasks:
- name: 'install file'
template: src=/root/ansible_workshop/jinja2.j2 dest=/tmp/test.conf
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat jinja2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook -e package_name='someackage' --check jinja2.yaml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install file] *****************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook -e package_name='someackage' --check jinja2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook -e package_name='someackage' jinja2.yaml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install file] *****************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook -e package_name='someackage' jinja2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ll /tmp/test.conf
-rw-r--r--. root root Mar : /tmp/test.conf
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat /tmp/test.conf
hostname: node101.yinzhengjie.org.cn
myvar: someackage
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'cat /tmp/test.conf'
node101.yinzhengjie.org.cn | SUCCESS | rc= >>
hostname: node101.yinzhengjie.org.cn
myvar: someackage node102.yinzhengjie.org.cn | SUCCESS | rc= >>
hostname: node102.yinzhengjie.org.cn
myvar: someackage node103.yinzhengjie.org.cn | SUCCESS | rc= >>
hostname: node103.yinzhengjie.org.cn
myvar: someackage [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'cat /tmp/test.conf'
2>.安装Tomcat服务并配置相应的配置文件
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# yum -y install tomcat tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp java-1.8.-openjdk-devel .........
libXi.x86_64 :1.7.-.el7 libXinerama.x86_64 :1.1.-2.1.el7
libXrandr.x86_64 :1.5.-.el7 libXrender.x86_64 :0.9.-.el7
libXtst.x86_64 :1.2.-.el7 libXxf86vm.x86_64 :1.1.-.el7
libfontenc.x86_64 :1.1.-.el7 libglvnd.x86_64 :1.0.-0.8.git5baa1e5.el7
libglvnd-egl.x86_64 :1.0.-0.8.git5baa1e5.el7 libglvnd-glx.x86_64 :1.0.-0.8.git5baa1e5.el7
libjpeg-turbo.x86_64 :1.2.-.el7 libpng.x86_64 :1.5.-.el7_2
libthai.x86_64 :0.1.-.el7 libtiff.x86_64 :4.0.-.el7_3
libwayland-client.x86_64 :1.15.-.el7 libwayland-server.x86_64 :1.15.-.el7
libxcb.x86_64 :1.13-.el7 libxshmfence.x86_64 :1.2-.el7
libxslt.x86_64 :1.1.-.el7 lksctp-tools.x86_64 :1.0.-.el7
log4j.noarch :1.2.-.el7_4 mesa-libEGL.x86_64 :18.0.-.el7_6
mesa-libGL.x86_64 :18.0.-.el7_6 mesa-libgbm.x86_64 :18.0.-.el7_6
mesa-libglapi.x86_64 :18.0.-.el7_6 nss-pem.x86_64 :1.0.-.el7
pango.x86_64 :1.42.-.el7 pcsc-lite-libs.x86_64 :1.8.-.el7
pixman.x86_64 :0.34.-.el7 python-javapackages.noarch :3.4.-.el7
python-lxml.x86_64 :3.2.-.el7 tomcat-el-2.2-api.noarch :7.0.-.el7_5
tomcat-jsp-2.2-api.noarch :7.0.-.el7_5 tomcat-lib.noarch :7.0.-.el7_5
tomcat-servlet-3.0-api.noarch :7.0.-.el7_5 ttmkfdir.x86_64 :3.0.-.el7
tzdata-java.noarch :2018i-.el7 xalan-j2.noarch :2.7.-.el7
xerces-j2.noarch :2.11.-.el7_0 xml-commons-apis.noarch :1.4.-.el7
xml-commons-resolver.noarch :1.2-.el7 xorg-x11-font-utils.x86_64 :7.5-.el7
xorg-x11-fonts-Type1.noarch :7.5-.el7 Dependency Updated:
chkconfig.x86_64 :1.7.-.el7 freetype.x86_64 :2.8-.el7_6. glib2.x86_64 :2.56.-.el7 libdrm.x86_64 :2.4.-.el7
nspr.x86_64 :4.19.-.el7_5 nss.x86_64 :3.36.-7.1.el7_6 nss-softokn.x86_64 :3.36.-.el7_5 nss-softokn-freebl.x86_64 :3.36.-.el7_5
nss-sysinit.x86_64 :3.36.-7.1.el7_6 nss-tools.x86_64 :3.36.-7.1.el7_6 nss-util.x86_64 :3.36.-1.1.el7_6 Complete!
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# yum -y install tomcat tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp java-1.8.0-openjdk-devel
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cp /etc/tomcat/server.xml ./server.xml.j2
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# vi server.xml.j2
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# grep "jvmRoute=" server.xml.j2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="{{ ansible_hostname }}">
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# grep "jvmRoute=" server.xml.j2
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cp /etc/tomcat/tomcat-users.xml ./
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# vi tomcat-users.xml
......
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="yinzhengjie" roles="manager-gui,admin-gui"/> ......
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat /etc/ansible/hosts
[web]
node[:].yinzhengjie.org.cn [tomcat]
node[:].yinzhengjie.org.cn
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check tomcat.yaml playbook: tomcat.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check tomcat.yaml PLAY [tomcat] *********************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install tomcat-admin-webapps] *************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] TASK [install tomcat-users.xml] *****************************************************************************************************************************
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] TASK [install server.xml] ***********************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] TASK [start tomcat] *****************************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] RUNNING HANDLER [restart tomcat] ****************************************************************************************************************************
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]# [root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users>
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web
application.
-->
<!--
NOTE: The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
--> <role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="yinzhengjie" roles="manager-gui,admin-gui"/> <!-- <role rolename="admin"/> -->
<!-- <role rolename="admin-gui"/> -->
<!-- <role rolename="admin-script"/> -->
<!-- <role rolename="manager"/> -->
<!-- <role rolename="manager-gui"/> -->
<!-- <role rolename="manager-script"/> -->
<!-- <role rolename="manager-jmx"/> -->
<!-- <role rolename="manager-status"/> -->
<!-- <user name="admin" password="adminadmin" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> -->
</tomcat-users>
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat.yaml
- hosts: tomcat
remote_user: root
tasks:
- name: install tomcat-admin-webapps
yum: name=tomcat-admin-webapps state=installed
- name: install tomcat-users.xml
copy: src=/root/ansible_workshop/tomcat-users.xml dest=/etc/tomcat/tomcat-users.xml owner=root group=tomcat mode=
notify: restart tomcat
- name: install server.xml
template: src=/root/ansible_workshop/server.xml.j2 dest=/etc/tomcat/server.xml owner=root group=tomcat
notify: restart tomcat
- name: start tomcat
service: name=tomcat state=started
handlers:
- name: restart tomcat
service: name=tomcat state=restarted
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat.yaml
- hosts: tomcat
remote_user: root
tasks:
- name: install tomcat-admin-webapps
yum: name=tomcat-admin-webapps state=installed
- name: install tomcat-users.xml
copy: src=/root/ansible_workshop/tomcat-users.xml dest=/etc/tomcat/tomcat-users.xml owner=root group=tomcat mode=
notify: restart tomcat
- name: install server.xml
template: src=/root/ansible_workshop/server.xml.j2 dest=/etc/tomcat/server.xml owner=root group=tomcat
notify: restart tomcat
- name: start tomcat
service: name=tomcat state=started
handlers:
- name: restart tomcat
service: name=tomcat state=restarted
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook tomcat.yaml PLAY [tomcat] *********************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [install tomcat-admin-webapps] *************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] TASK [install tomcat-users.xml] *****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] TASK [install server.xml] ***********************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] TASK [start tomcat] *****************************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn] RUNNING HANDLER [restart tomcat] ****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook tomcat.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible tomcat -m shell -a 'cat /etc/tomcat/server.xml | grep jvmRoute='
node102.yinzhengjie.org.cn | SUCCESS | rc= >>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node102"> node101.yinzhengjie.org.cn | SUCCESS | rc= >>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node101"> node103.yinzhengjie.org.cn | SUCCESS | rc= >>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node103"> [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible tomcat -m shell -a 'cat /etc/tomcat/server.xml | grep jvmRoute=' #检查服务是否安装成功
3>.tags案例
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users>
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary. It is
strongly recommended that you do NOT use one of the users in the commented out
section below since they are intended for use with the examples web
application.
-->
<!--
NOTE: The sample user and role entries below are intended for use with the
examples web application. They are wrapped in a comment and thus are ignored
when reading this file. If you wish to configure these users for use with the
examples web application, do not forget to remove the <!.. ..> that surrounds
them. You will also need to set the passwords to something appropriate.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
--> <role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="admin" roles="manager-gui,admin-gui"/> <!-- <role rolename="admin"/> -->
<!-- <role rolename="admin-gui"/> -->
<!-- <role rolename="admin-script"/> -->
<!-- <role rolename="manager"/> -->
<!-- <role rolename="manager-gui"/> -->
<!-- <role rolename="manager-script"/> -->
<!-- <role rolename="manager-jmx"/> -->
<!-- <role rolename="manager-status"/> -->
<!-- <user name="admin" password="adminadmin" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> -->
</tomcat-users>
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat-users.xml #我么对该配置文件稍作修改!
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cp tomcat.yaml tomcat-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# vi tomcat-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat-v2.yaml
- hosts: tomcat
remote_user: root
tasks:
- name: install tomcat-admin-webapps
yum: name=tomcat-admin-webapps state=installed
- name: install tomcat-users.xml
copy: src=/root/ansible_workshop/tomcat-users.xml dest=/etc/tomcat/tomcat-users.xml owner=root group=tomcat mode=
tags: tcusers
notify: restart tomcat
- name: install server.xml
template: src=/root/ansible_workshop/server.xml.j2 dest=/etc/tomcat/server.xml owner=root group=tomcat
notify: restart tomcat
tags: serverconf
- name: start tomcat
service: name=tomcat state=started
handlers:
- name: restart tomcat
service: name=tomcat state=restarted
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check tomcat-v2.yaml playbook: tomcat-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check tomcat-v2.yaml PLAY [tomcat] *********************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install tomcat-admin-webapps] *************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [install tomcat-users.xml] *****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn] TASK [install server.xml] ***********************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] TASK [start tomcat] *****************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn] RUNNING HANDLER [restart tomcat] ****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat tomcat-v2.yaml #修改剧本文件,给我打上tags配置
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check --list-tags tomcat-v2.yaml playbook: tomcat-v2.yaml play # (tomcat): tomcat TAGS: []
TASK TAGS: [serverconf, tcusers]
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check --list-tags tomcat-v2.yaml #检查自定义的标签
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -t tcusers tomcat-v2.yaml PLAY [tomcat] *********************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [install tomcat-users.xml] *****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] RUNNING HANDLER [restart tomcat] ****************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -t tcusers tomcat-v2.yaml #触发tcusers这个tags!我么会发现有变化,原因是我们刚刚修改了tomcat-users.xml这个配置文件!
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -t serverconf tomcat-v2.yaml PLAY [tomcat] *********************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] TASK [install server.xml] ***********************************************************************************************************************************
ok: [node103.yinzhengjie.org.cn]
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn] PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed=
node103.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check -t serverconf tomcat-v2.yaml #触发serverconf这个tags,很明显每一任何改变,因为我么每一修改啊该tag对应的配置文件!
4>.循环语句案例展示
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat lamp.yaml
- hosts: node102.yinzhengjie.org.cn
remote_user: root
tasks:
- name: install {{ item }}
yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
- php-fpm
- name: start {{ item }}
service: name={{ item }} state=started
with_items:
- httpd
- memcached
- php-fpm
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check lamp.yaml playbook: lamp.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check lamp.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install {{ item }}] ***********************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] => (item=[u'httpd', u'memcached', u'php-fpm']) TASK [start {{ item }}] *************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] => (item=httpd)
ok: [node102.yinzhengjie.org.cn] => (item=memcached)
changed: [node102.yinzhengjie.org.cn] => (item=php-fpm) PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat lamp.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook lamp.yaml PLAY [node102.yinzhengjie.org.cn] *************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] TASK [install {{ item }}] ***********************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn] => (item=[u'httpd', u'memcached', u'php-fpm']) TASK [start {{ item }}] *************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn] => (item=httpd)
ok: [node102.yinzhengjie.org.cn] => (item=memcached)
changed: [node102.yinzhengjie.org.cn] => (item=php-fpm) PLAY RECAP **************************************************************************************************************************************************
node102.yinzhengjie.org.cn : ok= changed= unreachable= failed= [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook lamp.yaml
5>.when语句案例展示
ansible基础-playbook剧本的使用的更多相关文章
- Ansible之playbook剧本
Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...
- ansible的playbook剧本
一.playbook剧本介绍 1)playbook介绍 Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansibl ...
- 自动化运维工具-Ansible基础
目录 自动化运维工具-Ansible基础 什么是Ansible 同类型软件对比 Ansible的功能及优点 Ansible的架构 Ansible的执行流程 安装Ansible ansible配置文件 ...
- 自动化运维工具-Ansible基础及Ansible Ad-Hoc
第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...
- Ansible--01 ansible基础 Ansible-ad- hoc
目录 自动化运维工具-Ansible基础 自动化运维的含义 Ansible 基础及安装 Ansible的架构 Ansible的执行流程 ansible配置文件 ansible Inventory(主机 ...
- 第二十五章 ansible基础
一.Ansible概述 1.什么是Ansible Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复 ...
- 2.Ansible Playbook剧本
1.playbook?playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色 task: 定义的是具体执行的任务 playbook: 由一 ...
- ansible服务及剧本编写
第1章 ansible软件概念说明 python语言是运维人员必会的语言,而ansible是一个基于Python开发的自动化运维工具 (saltstack).其功能实现基于SSH远程连接服务:ansi ...
- ansible基础-ansible角色的使用
ansible基础-ansible角色的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...
随机推荐
- 扫描某目录下的所有文件的MD5码并导出文件【可执行jar】
pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...
- POJ 2750 鸡兔同笼
参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6414781.html POJ 2750鸡兔同笼 总时间限制:1000ms 内存限制:65536kB ...
- Golden Eggs HDU - 3820(最小割)
Golden Eggs Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Apache 开启压缩传输
在 /etc/httpd/conf/httpd.conf 中添加如下配置: # Enable gzip - by Jerryhuang # <IfModule mod_deflate.c> ...
- Android 一些关于 Activity 的技巧
锁定 Activity 运行时的屏幕方向 Android 内置了方向感应器的支持.在 G1 中,Android 会根据 G1 所处的方向自动在竖屏和横屏间切换.但是有时我们的应用程序仅能在横屏 / 竖 ...
- C#解决方案生成工具(2)
环境 VS2017 社区版 W10 Project类 : 在Microsoft.Build.Evaluation命名空间下,可使用Project类分析项目的.csproj文件 // 实例化对象,参数 ...
- LVS搭建负载均衡(一)NAT模型
应用场景:LVS配置负载均衡方式之一:nat 测试环境: 测试步骤: 1. 在主机lvs上安装ipvsadm lvs~]# yum install ipvsadm -y lvs~]# ipvsadm ...
- angular2路由与express路由冲突的问题
angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...
- angular与vue的应用对比
因为各种笔试面试,最近都没时间做一些值得分享的东西,正好复习一下vue技术栈,与angular做一下对比. angular1就跟vue比略low了. 1.数据绑定 ng1 ng-bind,{{ sco ...
- LOJ#2720 你的名字
题意:给定母串s和若干个询问.每个询问是一个串t和两个数l,r,表示求t中有多少个本质不同的子串没有在s[l,r]中出现过. 解:我写的并不是正解......是个毒瘤做法.只在loj上面卡时过了就写l ...