Ansible-8 RolesおよびGalaxy
7153 ワード
1つのデータセンターに複数のタイプのサーバが存在する可能性があります.例えばWEBタイプ、DBタイプ、開発者が使用する開発タイプ、QAが使用するテストタイプなどです.各タイプのサーバの初期化動作が一致しない場合、1つのPlayBookでこれらの動作を完了するには、このPlayBookは肥大化し、膨大になり、後続のメンテナンスと更新が困難になります.各タイプのサーバごとにPlayBookを個別に作成し、最後に何らかの方法でこのPlayBookを統合すれば、管理方式が簡単になります.Ansibleには似たような概念、すなわちRoleが提供されている.管理者は、管理者が複雑なPlayBookを小さな論理ユニットに分解して、メンテナンスと管理を容易にします.
Roles構造
ROLEって何ですか
では、本物のRoleのディレクトリ構造は次のようになります.
ロールを作る
最終的に最適化されたPlayBook
このPlayBookを分解してroleの名前をnginxと名付けます
filesフォルダ保存ファイル
handlersフォルダのmain.ymlファイル
tasksフォルダのmain.ymlファイル
templatesフォルダ格納テンプレート
varsフォルダのmain.ymlファイル
PlayBookでロールを使用する方法
さっき作成したnginxディレクトリの同レベルでrole.ymlファイルを作成
そして実行
Galaxyの使い方
ヘルプの取得
特定のサブコマンドのヘルプの取得
常用命令
Example
Roles構造
ROLEって何ですか
, 。 role 。 role , 。
tasks: task
handlers: handlers
files: task
templages: task
meta: role role( role , role)
vars: role
defaults: role
では、本物のRoleのディレクトリ構造は次のようになります.
user.example/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
role user.example。
tasks 、handlers 、meta、 vars、defaults main.yml, 。
ロールを作る
PlayBook, Role。 ?
最終的に最適化されたPlayBook
- name: template playbook example
hosts: web-servers
vars:
createuser:
- tomcat
- www
- mysql
tasks:
- name: create user
user: name={{ item }} state=present
with_items: "{{ createuser }}"
- name: yum nginx webserver
yum: name=nginx state=present
# use ansible template
- name: update nginx main config
template: src=nginx.conf.j2 dest=/etc/nginx/
tags: updateconfig
notify: reload nginx server
- name: add virtualhost config
copy: src=www.qfedu.com.conf dest=/etc/nginx/conf.d/
tags: updateconfig
notify: reload nginx server
- name: check nginx syntax
shell: /usr/sbin/nginx -t
register: nginxsyntax
tags: updateconfig
- name: check nginx running
stat: path=/var/run/nginx.pid
register: nginxrunning
tags: updateconfig
- name: print nginx syntax
debug: var=nginxsyntax
- name: start nginx server
service: name=nginx state=started
when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == false
handlers:
- name: reload nginx server
service: name=nginx state=started
when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == true
このPlayBookを分解してroleの名前をnginxと名付けます
nginx/
│
├── files
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
filesフォルダ保存ファイル
www.qfedu.com.conf
handlersフォルダのmain.ymlファイル
---
- name: reload nginx server
service: name=nginx state=reloaded
when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == true
tasksフォルダのmain.ymlファイル
---
- name: create user
user: name={{ item }} state=present
with_items: "{{ createuser }}"
- name: yum nginx webserver
yum: name=nginx state=present
# use ansible template
- name: update nginx main config
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags: updateconfig
notify: reload nginx server
- name: add virtualhost config
copy: src=/root/www.qfedu.com.conf dest=/etc/nginx/conf.d/
tags: updateconfig
notify: reload nginx server
- name: check nginx syntax
shell: /usr/sbin/nginx -t
register: nginxsyntax
tags: updateconfig
- name: check nginx running
stat: path=/var/run/nginx.pid
register: nginxrunning
tags: updateconfig
- name: print nginx syntax
debug: var=nginxsyntax
- name: start nginx server
service: name=nginx state=started
when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == false
templatesフォルダ格納テンプレート
nginx.conf.j2
varsフォルダのmain.ymlファイル
---
createuser:
- tomcat
- www
- mysql
PlayBook , nginx ROLE。
, , ROLE, ROLE , , 。
PlayBookでロールを使用する方法
Role , PlayBook 。
さっき作成したnginxディレクトリの同レベルでrole.ymlファイルを作成
- name: a playbook used role
hosts: all
roles:
- nginx
そして実行
#ansible-playbook role.yml
Galaxyの使い方
Ansible galaxy , github。 Role galaxy 。 , galaxy role。 :https://galaxy.ansible.com
ansible-galaxy galaxy 。 galaxy 。
ansible-galaxy galaxy 。
ヘルプの取得
# ansible-galaxy --help
Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
Options:
-h, --help show this help message and exit
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection
debugging)
--version show program's version number and exit
特定のサブコマンドのヘルプの取得
ansible-galaxy --help
: delete|import|info|init|install|list|login|remove|search|setup
ansible-galaxy delete|import|info|init|install|list|login|remove|search|setup --help
# ansible-galaxy install --help
Usage: ansible-galaxy install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]
Options:
-f, --force Force overwriting an existing role
-h, --help show this help message and exit
-c, --ignore-certs Ignore SSL certificate validation errors.
-i, --ignore-errors Ignore errors and continue with the next specified
role.
-n, --no-deps Don't download roles listed as dependencies
-r ROLE_FILE, --role-file=ROLE_FILE
A file containing a list of roles to be imported
-p ROLES_PATH, --roles-path=ROLES_PATH
The path to the directory containing your roles. The
default is the roles_path configured in your
ansible.cfg file (/etc/ansible/roles if not
configured)
-s API_SERVER, --server=API_SERVER
The API server destination
-v, --verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)
--version show program's version number and exit
常用命令
// galaxy ROLE
# ansible-galaxy search
// galaxy ROLE
# ansible-galaxy install
// ansible-galaxy ROLE
# ansible-galaxy list
// ROLE , ROLE , 。
# ansible-galaxy init --offline
Example
// testrole ROLE , 。
# ansible-galaxy init --offline testrole
# tree testrole/
testrole/
├── defaults
│ └── main.yml
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml