ansibleロール呼び出し(roles)


このブログはただ勉強に供して、実際のプロジェクトの意義がなくて、ただ学習の用に供します
    :
VMware® Workstation 12 Pro
    :
CentOS Linux release 7.4.1708           3.10.0-693.el7.x86_64

Ansible中国語権威ガイド:http://www.ansible.com.cn/
  • 実験目的:センタサーバを構成して2台のマシンを自動的にnginxに配置する反響例サービスとnginxのwebサービス.

  • ansible角色调用(roles)_第1张图片
    鍵接続の構成:
         ssh    
    cd /root/.ssh/
         
    ssh-keygen -t rsa -b 4096
                
    ssh-copy-id -i id_rsa.pub [email protected]
        
    ssh [email protected]

    キャラクタのパスを定義する:既定の位置[root@localhost ~]# less/etc/ansible/ansible.cfg
    # additional paths to search for roles in, colon separated
    #roles_path    = /etc/ansible/roles

    適切なディレクトリを作成するには、次の手順に従います.
    ~]# cd /etc/ansible/roles/
    [root@localhost roles]#  mkdir -pv ./nginx/{files,templates,tasks,handlers,vars,meta,dafault}

    ディレクトリ構造
    [root@localhost roles]# tree
    ├── memcached
                ├── dafault
                ├── files
                ├── handlers
                ├── meta
                ├── tasks
                ├── templates
                └── vars

    構成nginx構想:パッケージをインストールし、プロファイルをコピーし、サービスを開始します.
    編集/nginx/tasks/main.ymlファイル(タスクリストの設定)
    [root@localhost nginx]# vim 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 }}/
            #    templates    j2  
            #            templates   
    - name: install conf 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
    
         #  templates            :
                etc/ansible/roles/nginx     
             template: copy: src=templates/server.conf.j2  dest=/etc/nginx/conf.d/server.conf
                   
                template: copy: src=/etc/ansible/roles/nginx/templates/server.conf.j2  dest=/etc/nginx/conf.d/server.conf
                     templates       
             template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf

    nginxのテンプレートプロファイル(.j 2ファイル)
    [root@localhost nginx]# vim templates/server.conf.j2 
    server {
                    listen 80;
                    server_name {{ ansible_fqdn }} {{ ansible_hostname  }};
    
                    location / {
                                    root {{ docroot }};
                                    index index.jsp index.html;
                    }
    }

    トリガファイル構成
    [root@localhost nginx]# vim handlers/main.yml
    - name: reload nginx
        server: name=nginx state=reloaded

    このnginx wedサービスは、テストページが必要で、ウェブサイトのホームページを編集します.
    [root@localhost nginx]# vim files/index.html
    

    Welcome to nginx


    変数の定義:
    [root@localhost nginx]# vim vars/main.yml
    #         
    docroot: /data/nginx/

    yamlファイルplay_booksファイル
    [root@localhost ~]# cd ansible/
    [root@localhost ansible]# vim nginx.yml
    - hosts: all
        remote_user: root
        roles:
        - nginx

    構文の検出:
    [root@localhost ansible]# ansible-playbook --syntax-check nginx.yml 

    テストの実行:
    [root@localhost ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [10.10.11.2] *************************************************************************************************
    
    TASK [Gathering Facts] ********************************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] ***********************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ******************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ************************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] **********************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] **********************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] ********************************************************************************
    ok: [10.10.11.2]
    
    PLAY RECAP ***********************************************************************************
    10.10.11.2                 : ok=7    changed=0    unreachable=0    failed=0   

    実行ファイルの確認:
    [root@localhost ansible]# ansible-playbook  nginx.yml 
    
    PLAY [10.10.11.2] *******************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    ok: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.2                 : ok=7    changed=0    unreachable=0    failed=0   

    コマンドを実行するノードのポートの表示
    [root@localhost ~]# ss -ntlp |grep 80
    LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=11368,fd=6),("nginx",pid=11314,fd=6))

    プロファイルの表示
    [root@localhost ~]#  cat /etc/nginx/conf.d/server.conf 
    server {
        listen 80;
        server_name localhost.localdomain localhost;
    
        location / {
            root /data/nginx/;
            index index.jsp index.html;
        } 
    }

    上の実験の結果はnginxのwebサービス機能を実現することであり,現在はnginxのwebとproxyを実現し,nginxの異なる役割機能の位置づけに対して異なる機械の分機能の配置を実現する必要がある.
    変更前にバックアップ
    [root@localhost roles]#  cp -a nginx/ /root/

    カスタム変数の変更
    [root@localhost nginx]# vim vars/main.yml 
    #  servertype    web
    servertype: web    
    docroot: /data/nginx/

    修正:/nginx/tasks/main.ymlファイル(タスクリストの設定)
    [root@localhost nginx]# vim 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
         #      web
        when: servertype == 'web'
    - name: install home page
        copy: src=index.html dest={{ docroot }}/
         #      web
        when: servertype == 'web'
    - name: install conf file
        template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
         #      web
        when: servertype == 'web'
        notify: reload nginx
    - name: start nginx service
        service: name=nginx enabled=true state=started

    テスト実行nging=web(問題なし)
    [root@localhost ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [10.10.11.2] *******************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install conf file] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.2                 : ok=7    changed=1    unreachable=0    failed=0   

    プロキシの設定
    変数の設定
    [root@localhost nginx]# vim vars/main.yml 
    servertype: web
    #    ,              
    backendurl: 'http://127.0.0.1:8080'
    docroot: /data/nginx/

    Proxyのテンプレートファイルの作成
    [root@localhost nginx]# vim templates/proxy.conf.j2 
    server {
                    listen 80;
                    server_name {{ ansible_fqdn }} {{ ansible_hostname }};
                    location / {
                                    proxy_pass {{ backendurl }};
                    }
    }

    yamlファイル、play_booksファイル、変更:/nginx/tasks/main.ymlファイル(タスクリストの設定)
    [root@localhost nginx]# vim 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 conf file
        template: src=server.conf.j2 dest=/etc/nginx/conf.d/server.conf
        when: servertype == 'web'
        notify: reload nginx
        #  proxy     
    - name: install proxy conf 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
    /nginx/tasks/main.yml  (      )  

    手動個別テスト
    デフォルト実行web ansible角色调用(roles)_第2张图片
    使用:-e servertype=proxy手動トリガproxy ansible角色调用(roles)_第3张图片
    自動インプリメンテーション(修正部分は以下の通りです.)
    構成/etc/ansible/hosts
    [root@localhost nginx]# vim /etc/ansible/hosts 
    [tomcat]
    10.10.11.133
    [web]
    10.10.11.2

    yamlファイルplay_booksファイル
    [root@localhost ansible]# cat nginx.yml 
    - hosts: tomcat
    remote_user: root
    roles:
    - { role: nginx, servertype: proxy }
    
    - hosts: web
    remote_user: root
    roles:
    - nginx

    テスト:
    [root@localhost ansible]# ansible-playbook --check nginx.yml 
    
    PLAY [tomcat] ***********************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.133]
    
    TASK [nginx : install epel-release package] *****************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : install nginx package] ************************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : create doc root] ******************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install home page] ****************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install web conf file] ************************************************************
    skipping: [10.10.11.133]
    
    TASK [nginx : install proxy conf file] **********************************************************
    changed: [10.10.11.133]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.133]
    
    RUNNING HANDLER [nginx : reload nginx] **********************************************************
    changed: [10.10.11.133]
    
    PLAY [web] **************************************************************************************
    
    TASK [Gathering Facts] **************************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install epel-release package] *****************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install nginx package] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : create doc root] ******************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install home page] ****************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install web conf file] ************************************************************
    ok: [10.10.11.2]
    
    TASK [nginx : install proxy conf file] **********************************************************
    skipping: [10.10.11.2]
    
    TASK [nginx : start nginx service] **************************************************************
    changed: [10.10.11.2]
    
    PLAY RECAP **************************************************************************************
    10.10.11.133               : ok=6    changed=5    unreachable=0    failed=0   
    10.10.11.2                 : ok=7    changed=1    unreachable=0    failed=0   

    実際の実行結果
    ansible角色调用(roles)_第4张图片
    最後のディレクトリ構造は次のとおりです.
    [root@localhost nginx]# tree.[root@localhost nginx]# tree
    .
    ├── dafault
    ├── files
    │   └── index.html
    ├── handlers
    │   └── main.yml
    ├── meta
    ├── tasks
    │   └── main.yml
    ├── templates
    │   ├── proxy.conf.j2
    │   └── server.conf.j2
    └── vars
            └── main.yml