ansibleロール呼び出し(roles)
14673 ワード
このブログはただ勉強に供して、実際のプロジェクトの意義がなくて、ただ学習の用に供します
Ansible中国語権威ガイド:http://www.ansible.com.cn/実験目的:センタサーバを構成して2台のマシンを自動的にnginxに配置する反響例サービスとnginxのwebサービス.
鍵接続の構成:
キャラクタのパスを定義する:既定の位置[root@localhost ~]# less/etc/ansible/ansible.cfg
適切なディレクトリを作成するには、次の手順に従います.
ディレクトリ構造
構成nginx構想:パッケージをインストールし、プロファイルをコピーし、サービスを開始します.
編集/nginx/tasks/main.ymlファイル(タスクリストの設定)
nginxのテンプレートプロファイル(.j 2ファイル)
トリガファイル構成
このnginx wedサービスは、テストページが必要で、ウェブサイトのホームページを編集します.
変数の定義:
yamlファイルplay_booksファイル
構文の検出:
テストの実行:
実行ファイルの確認:
コマンドを実行するノードのポートの表示
プロファイルの表示
上の実験の結果はnginxのwebサービス機能を実現することであり,現在はnginxのwebとproxyを実現し,nginxの異なる役割機能の位置づけに対して異なる機械の分機能の配置を実現する必要がある.
変更前にバックアップ
カスタム変数の変更
修正:/nginx/tasks/main.ymlファイル(タスクリストの設定)
テスト実行nging=web(問題なし)
プロキシの設定
変数の設定
Proxyのテンプレートファイルの作成
yamlファイル、play_booksファイル、変更:/nginx/tasks/main.ymlファイル(タスクリストの設定)
手動個別テスト
デフォルト実行web
使用:-e servertype=proxy手動トリガproxy
自動インプリメンテーション(修正部分は以下の通りです.)
構成/etc/ansible/hosts
yamlファイルplay_booksファイル
テスト:
実際の実行結果
最後のディレクトリ構造は次のとおりです.
[root@localhost nginx]# tree.[root@localhost nginx]# tree
:
VMware® Workstation 12 Pro
:
CentOS Linux release 7.4.1708 3.10.0-693.el7.x86_64
Ansible中国語権威ガイド:http://www.ansible.com.cn/
鍵接続の構成:
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
使用:-e servertype=proxy手動トリガproxy
自動インプリメンテーション(修正部分は以下の通りです.)
構成/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
実際の実行結果
最後のディレクトリ構造は次のとおりです.
[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