ansible基础-ansible角色的使用

              ansible基础-ansible角色的使用

                                        作者:尹正杰 

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在ansible中它有一个特有的名称,即角色。

一.角色相关概念

1>.每个角色都是以特定的层级目录结构进行组织

    我们知道ansible可以自定义模块,便于自己或他人调用,它也有一个特有的名称叫做角色。每个角色对应的服务可能不太一样,比如mysql,httpd,nginx,memcached。虽然每个角色(模块)的功能不一样,但是他们都以特定的目录结构进行组织,相关说明如下所述:


files:
    存放由copy或script模块等调用的文件。

templates:
    template模块查找所需要模板文件的目录。

tasks:
    用于定义任务,至少应该包含一个名为main.yml的文件(类似于java和go等编译性语言,用于指定程序的入口),其他的文件需要在此文件中通过include进行包含。

handlers:
    定义处理器,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含。

vars:
    定义变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含。

meta:
    定义元数据,至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系,其他的文件需要在此文件中通过include进行包含。

default:
    设定模式变量时使用此目录中的main.yml文件。

2>.playbook调用角色方法

在playbook调用角色方法1:
- hosts: web
  remote_user: root
  roles:
  - mysql
  - memcached
  - nginx


在playbook调用角色方法2:传递变量给角色
- hosts: web
  remote_user: root
  roles:
  - mysql
  - memcached
  - nginx

3>.ansible默认存放路径

[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# grep roles_path /etc/ansible/ansible.cfg 
roles_path    = /etc/ansible/roles:/usr/share/ansible/roles
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

二.角色实战案例一

1>.创建初始化目录(所有目录不一定都必须存在,如果用不到对应的功能咱们也可以不创建)

[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# mkdir -pv ./{nginx,tomcat,redis,memcached}/{files,templates,tasks,handlers,vars,meta,default}
mkdir: created directory ‘./nginx’
mkdir: created directory ‘./nginx/files’
mkdir: created directory ‘./nginx/templates’
mkdir: created directory ‘./nginx/tasks’
mkdir: created directory ‘./nginx/handlers’
mkdir: created directory ‘./nginx/vars’
mkdir: created directory ‘./nginx/meta’
mkdir: created directory ‘./nginx/default’
mkdir: created directory ‘./tomcat’
mkdir: created directory ‘./tomcat/files’
mkdir: created directory ‘./tomcat/templates’
mkdir: created directory ‘./tomcat/tasks’
mkdir: created directory ‘./tomcat/handlers’
mkdir: created directory ‘./tomcat/vars’
mkdir: created directory ‘./tomcat/meta’
mkdir: created directory ‘./tomcat/default’
mkdir: created directory ‘./redis’
mkdir: created directory ‘./redis/files’
mkdir: created directory ‘./redis/templates’
mkdir: created directory ‘./redis/tasks’
mkdir: created directory ‘./redis/handlers’
mkdir: created directory ‘./redis/vars’
mkdir: created directory ‘./redis/meta’
mkdir: created directory ‘./redis/default’
mkdir: created directory ‘./memcached’
mkdir: created directory ‘./memcached/files’
mkdir: created directory ‘./memcached/templates’
mkdir: created directory ‘./memcached/tasks’
mkdir: created directory ‘./memcached/handlers’
mkdir: created directory ‘./memcached/vars’
mkdir: created directory ‘./memcached/meta’
mkdir: created directory ‘./memcached/default’
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# tree .
.
├── memcached
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
├── nginx
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
├── redis
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
└── tomcat
    ├── default
    ├── files
    ├── handlers
    ├── meta
    ├── tasks
    ├── templates
    └── vars

32 directories, 0 files
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# mkdir -pv ./{nginx,tomcat,redis,memcached}/{files,templates,tasks,handlers,vars,meta,default}

2>.编写nginx角色

[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# ll
total 0
drwxr-xr-x. 9 root root 97 Mar  9 07:36 memcached
drwxr-xr-x. 9 root root 97 Mar  9 07:36 nginx
drwxr-xr-x. 9 root root 97 Mar  9 07:36 redis
drwxr-xr-x. 9 root root 97 Mar  9 07:36 tomcat
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# tree nginx/
nginx/
├── default
├── files
│   └── index.html
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   └── server.conf.j2
└── vars
    └── main.yml

7 directories, 5 files
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/files/index.html 
<h1>尹正杰到此一游</h1>
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/files/index.html
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/handlers/main.yml 
- name: reload nginx
  service: name=nginx state=reloaded
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/handlers/main.yml
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/tasks/main.yml 
- name: install epel-release package
  yum: name=epel-release state=installed
- name: install nginx package
  yum: name=nginx state=installed
- name: create doc root
  file: path={{ docroot }} state=directory
- name: install home page
  copy: src=index.html dest={{ docroot }}/
- name: install configure file
  template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
  notify: reload nginx
- name: start nginx service
  service: name=nginx enabled=true state=started
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/tasks/main.yml
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/templates/server.conf.j2 
server {
    listen 7000;
    server_name {{ ansible_fqdn }} {{ ansible_hostname }};
    
    location / {
        root {{ docroot }};
        index index.jsp index.html;
    }
}
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/templates/server.conf.j2
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/vars/main.yml 
docroot: /yinzhengjie/data/nginx
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cat nginx/vars/main.yml

3>.编写剧本调用nginx角色

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat nginx.yaml 
- hosts: all
  remote_user: root
  roles:
  - nginx
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --syntax-check nginx.yaml 

playbook: nginx.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat nginx.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check nginx.yaml 

PLAY [all] **************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [node102.yinzhengjie.org.cn]
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] *****************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]

TASK [nginx : install nginx package] ************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]

TASK [nginx : create doc root] ******************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]

TASK [nginx : install home page] ****************************************************************************************************************************
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]

TASK [nginx : install configure file] ***********************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]

TASK [nginx : start nginx service] **************************************************************************************************************************
changed: [node103.yinzhengjie.org.cn]
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]

RUNNING HANDLER [nginx : reload nginx] **********************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]

PLAY RECAP **************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok=8    changed=6    unreachable=0    failed=0   
node102.yinzhengjie.org.cn : ok=8    changed=6    unreachable=0    failed=0   
node103.yinzhengjie.org.cn : ok=8    changed=6    unreachable=0    failed=0   

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check nginx.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook  nginx.yaml 

PLAY [all] ************************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] ***************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install nginx package] **********************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]

TASK [nginx : create doc root] ****************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]

TASK [nginx : install home page] **************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]

TASK [nginx : install configure file] *********************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]

TASK [nginx : start nginx service] ************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node103.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]

RUNNING HANDLER [nginx : reload nginx] ********************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]
changed: [node103.yinzhengjie.org.cn]

PLAY RECAP ************************************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok=8    changed=2    unreachable=0    failed=0   
node102.yinzhengjie.org.cn : ok=8    changed=3    unreachable=0    failed=0   
node103.yinzhengjie.org.cn : ok=8    changed=2    unreachable=0    failed=0   

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook nginx.yaml                       #运行剧本,注意,安装nginx时请务必关闭掉httpd服务,否则可能会导致nginx服务启动不了!
[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 -ntl | grep 7000'
node101.yinzhengjie.org.cn | SUCCESS | rc=0 >>
LISTEN     0      128          *:7000                     *:*                  

node103.yinzhengjie.org.cn | SUCCESS | rc=0 >>
LISTEN     0      128          *:7000                     *:*                  

node102.yinzhengjie.org.cn | SUCCESS | rc=0 >>
LISTEN     0      128          *:7000                     *:*                  

[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 /etc/nginx/conf.d/server.conf'
node101.yinzhengjie.org.cn | SUCCESS | rc=0 >>
server {
    listen 7000;
    server_name node101.yinzhengjie.org.cn node101;
    
    location / {
        root /yinzhengjie/data/nginx;
        index index.jsp index.html;
    }
}

node103.yinzhengjie.org.cn | SUCCESS | rc=0 >>
server {
    listen 7000;
    server_name node103.yinzhengjie.org.cn node103;
    
    location / {
        root /yinzhengjie/data/nginx;
        index index.jsp index.html;
    }
}

node102.yinzhengjie.org.cn | SUCCESS | rc=0 >>
server {
    listen 7000;
    server_name node102.yinzhengjie.org.cn node102;
    
    location / {
        root /yinzhengjie/data/nginx;
        index index.jsp index.html;
    }
}

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'ss -ntl | grep 7000'            #检查nginx服务是否正常启动
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# curl http://node101.yinzhengjie.org.cn:7000/
<h1>尹正杰到此一游</h1>
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# curl http://node102.yinzhengjie.org.cn:7000/
<h1>尹正杰到此一游</h1>
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# curl http://node103.yinzhengjie.org.cn:7000/
<h1>尹正杰到此一游</h1>
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# 

三.角色实战案例二

1>.备份之前的配置

[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# ll
total 0
drwxr-xr-x. 9 root root 97 Mar  9 07:36 memcached
drwxr-xr-x. 9 root root 97 Mar  9 07:36 nginx
drwxr-xr-x. 9 root root 97 Mar  9 07:36 redis
drwxr-xr-x. 9 root root 97 Mar  9 07:36 tomcat
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cp -a nginx/ /root/
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles]# cp -a nginx/ /root/

2>. 编写nginx角色

[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# pwd
/etc/ansible/roles/nginx
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# ll
total 0
drwxr-xr-x. 2 root root  6 Mar  9 07:36 default
drwxr-xr-x. 2 root root 23 Mar  9 07:55 files
drwxr-xr-x. 2 root root 21 Mar  9 07:54 handlers
drwxr-xr-x. 2 root root  6 Mar  9 07:36 meta
drwxr-xr-x. 2 root root 21 Mar  9 09:20 tasks
drwxr-xr-x. 2 root root 47 Mar  9 09:20 templates
drwxr-xr-x. 2 root root 21 Mar  9 08:59 vars
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# tree .
.
├── default
├── files
│   └── index.html
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   ├── proxy.conf.j2
│   └── server.conf.j2
└── vars
    └── main.yml

7 directories, 6 files
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat files/index.html 
<h1>尹正杰到此一游</h1>
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat files/index.html
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat handlers/main.yml 
- name: reload nginx
  service: name=nginx state=reloaded
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat handlers/main.yml
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat  tasks/main.yml 
- name: install epel-release package
  yum: name=epel-release state=installed

- name: install nginx package
  yum: name=nginx state=installed

- name: create doc root
  file: path={{ docroot }} state=directory
  when: servertype == 'web'

- name: install home page
  copy: src=index.html dest={{ docroot }}/
  when: servertype == 'web'

- name: install web configure file
  template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
  when: servertype == 'web'
  notify: reload nginx

- name: install proxy configure file
  template: src=proxy.conf.j2 dest=/etc/nginx/conf.d/server.conf
  when: servertype == 'proxy'
  notify: reload nginx

- name: start nginx service
  service: name=nginx enabled=true state=started
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat tasks/main.yml
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat templates/proxy.conf.j2 
server {
    listen 7500;
    server_name {{ ansible_fqdn }} {{ ansible_hostname }};
    
    location / {
        proxy_pass {{ backendurl }}
    }
}
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat templates/proxy.conf.j2
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat templates/server.conf.j2 
server {
    listen 7000;
    server_name {{ ansible_fqdn }} {{ ansible_hostname }};
    
    location / {
        root {{ docroot }};
        index index.jsp index.html;
    }
}
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat templates/server.conf.j2
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat vars/main.yml 
servertype: web
backendurl: 'http:node101.yinzhengjie.org.cn:8080/'
docroot: /yinzhengjie/data/nginx
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# 
[root@node101.yinzhengjie.org.cn /etc/ansible/roles/nginx]# cat vars/main.yml

3>.编写剧本调用nginx角色

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat /etc/ansible/hosts 
[web]
node[101:102].yinzhengjie.org.cn 


[tomcat]
node101.yinzhengjie.org.cn
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat nginx-v2.yaml
- hosts: tomcat
  remote_user: root
  roles:
  - { role: nginx, servertype=proxy }


- hosts: web
  remote_user: root
  roles:
  - nginx
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat nginx-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook  --check nginx-v2.yaml

PLAY [tomcat] *********************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] ***************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install nginx package] **********************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : create doc root] ****************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install home page] **************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install web configure file] *****************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install proxy configure file] ***************************************************************************************************************************************
skipping: [node101.yinzhengjie.org.cn]

TASK [nginx : start nginx service] ************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

PLAY [web] ************************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] ***************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install nginx package] **********************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : create doc root] ****************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install home page] **************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install web configure file] *****************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install proxy configure file] ***************************************************************************************************************************************
skipping: [node101.yinzhengjie.org.cn]
skipping: [node102.yinzhengjie.org.cn]

TASK [nginx : start nginx service] ************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

PLAY RECAP ************************************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok=14   changed=0    unreachable=0    failed=0   
node102.yinzhengjie.org.cn : ok=7    changed=0    unreachable=0    failed=0   

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook --check nginx-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook   nginx-v2.yaml

PLAY [tomcat] *********************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] ***************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install nginx package] **********************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : create doc root] ****************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install home page] **************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

TASK [nginx : install web configure file] *****************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]

TASK [nginx : install proxy configure file] ***************************************************************************************************************************************
skipping: [node101.yinzhengjie.org.cn]

TASK [nginx : start nginx service] ************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]

RUNNING HANDLER [nginx : reload nginx] ********************************************************************************************************************************************
changed: [node101.yinzhengjie.org.cn]

PLAY [web] ************************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install epel-release package] ***************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install nginx package] **********************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : create doc root] ****************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install home page] **************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

TASK [nginx : install web configure file] *****************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
changed: [node102.yinzhengjie.org.cn]

TASK [nginx : install proxy configure file] ***************************************************************************************************************************************
skipping: [node101.yinzhengjie.org.cn]
skipping: [node102.yinzhengjie.org.cn]

TASK [nginx : start nginx service] ************************************************************************************************************************************************
ok: [node101.yinzhengjie.org.cn]
ok: [node102.yinzhengjie.org.cn]

RUNNING HANDLER [nginx : reload nginx] ********************************************************************************************************************************************
changed: [node102.yinzhengjie.org.cn]

PLAY RECAP ************************************************************************************************************************************************************************
node101.yinzhengjie.org.cn : ok=15   changed=2    unreachable=0    failed=0   
node102.yinzhengjie.org.cn : ok=8    changed=2    unreachable=0    failed=0   

[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible-playbook nginx-v2.yaml
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# 
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# ansible all -m shell -a 'cat /etc/nginx/conf.d/server.conf'
node101.yinzhengjie.org.cn | SUCCESS | rc=0 >>
server {
    listen 7000;
    server_name node101.yinzhengjie.org.cn node101;
    
    location / {
        root /yinzhengjie/data/nginx;
        index index.jsp index.html;
    }
}

node103.yinzhengjie.org.cn | FAILED | rc=1 >>
cat: /etc/nginx/conf.d/server.conf: No such file or directorynon-zero return code

node102.yinzhengjie.org.cn | SUCCESS | rc=0 >>
server {
    listen 7000;
    server_name node102.yinzhengjie.org.cn node102;
    
    location / {
        root /yinzhengjie/data/nginx;
        index index.jsp index.html;
    }
}

[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 
node[101:103].yinzhengjie.org.cn 
[web]
node[101:102].yinzhengjie.org.cn 


[tomcat]
node101.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 all -m shell -a 'cat /etc/nginx/conf.d/server.conf'

  角色的使用就介绍到这里了,其实我们可以用角色可以干很多我们想要干的事情,比如:设定基于msm的tomcat集群的角色,为tomcat部署应用,每个节点本地使用nginx发现代理,所有节点前端有一个nginx负载均衡器等等之类的!感兴趣的小伙伴可以自行测试~

原文地址:https://www.cnblogs.com/yinzhengjie/p/10459141.html