ansible基础-playbook剧本的使用

时间:2024-03-27 11:38:02

                  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"(仍是一种置标语言)。但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而反向缩略语重命名。
3>.YAML的功能
  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语句案例展示