• 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负载均衡器等等之类的!感兴趣的小伙伴可以自行测试~

  • 相关阅读:
    通向全栈之路——(4)nginx反向代理配置
    通向全栈之路——(3)node环境搭建
    通向全栈之路——(2)服务器安全设置
    通向全栈之路——(1)服务器新增用户及授权
    window.location.href跳转至空白页
    webpack 1.x 学习总结
    win7下使用apache ab 比较测试node与 tomcat
    Enum,Int,String的互相转换
    读写appSettings配置节方法
    SC命令
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/10459141.html
Copyright © 2020-2023  润新知