投稿日:
2018年3月13日
最終更新日:
【失われしベストプラクティスを求めて】Ansibleでの特殊な動きをするディレクトリについて
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
目次
Ansibleのディレクトリ構造
ちょっと複雑
Ansibleには、様々なディレクトリや設定ファイルが登場します。
とても便利なのですが、数が多いのでそれぞれの意味を理解するのが少し大変です。
なので今回はAnsibleで出てくる各種ディレクトリの用途についてまとめてみました。
※roles内部にも似たようなディレクトリ構造を持つことが可能ですが、そちらはまた別の記事にてご紹介しようと思います
説明
前提
筆者の作業環境のAnsibleのバージョンは2.4.2.0となります。
全体像
まずは、以下のような構造で用意してみました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
.
├── echo.yml
├── files
│ └── local
│ └── sample
│ └── file.json
├── files.yml
├── handlers
│ └── apache
│ └── main.yml
├── inventories
│ └── local
│ ├── group_vars
│ │ ├── all.yml
│ │ └── localservers.yml
│ └── hosts
├── roles
│ ├── echo
│ │ └── hello
│ │ └── tasks
│ │ └── main.yml
│ ├── files
│ │ └── copy
│ │ └── tasks
│ │ └── main.yml
│ ├── synchronize
│ │ └── copy
│ │ └── tasks
│ │ └── main.yml
│ └── templates
│ └── copy
│ └── tasks
│ └── main.yml
├── synchronize.yml
├── templates
│ └── local
│ └── sample
│ └── file.j2
├── templates.yml
└── temporaries
└── local
├── files
│ └── sample
│ └── file.json
├── synchronize
│ └── sample
│ └── file.json
└── templates
└── sample
└── file.json
|
インベントリーは以下のように指定しています。
1
2
3
4
5
6
7
8
|
[allservers:children]
localservers
[localservers:children]
localserver
[localserver]
127.0.0.1
|
次にそれぞれのディレクトリの役割を紹介していきます。
スポンサーリンク
336×280
group_vars
inventories/{環境}ディレクトリの中にあるgroup_varsディレクトリは、読み込んだhostsファイルにて記述したセクション単位で適用する変数を設定することが可能です。
またファイル名をall.ymlにするとグループ関係無く全てのグループに変数定義が適用されます。
まずは、今回はlocal環境のみに接続をするので、以下のように指定してみます。
1
2
3
4
5
|
---
#------------------------------------------
# 環境
#------------------------------------------
ENV: "local"
|
roles
rolesディレクトリは、実際にplaybookコマンドで実行する処理単位で記述したファイル群を管理するディレクトリです。
このタスクの中でshellスクリプトを実行したり、各種ansibleの標準モジュールを使ってサーバー操作をしていく事になります。
今回はサンプルとして、shellを実行するplaybook及びタスクを以下のように記述してみます。
1
2
3
4
|
---
- hosts: allservers
roles:
- echo/hello
|
1
2
3
4
5
6
7
8
|
- name: Echo
shell: echo 'Hello,World!!'
register: result
- debug: var=result.stdout
when: result | success
tags:
- always
|
files
filesディレクトリは主に、CopyモジュールやSynchronizeモジュールを使って設定ファイル等をリモート先に配置する際のファイル群を管理するディレクトリです。Copyモジュールのsrc属性は自動的にこのfilesディレクトリの内部をデフォルトで参照します。
playbook及びタスクは以下のようになります。
1
2
3
4
5
|
---
- hosts: allservers
roles:
- files/copy
- synchronize/copy
|
1
2
3
4
|
- name: Copy
copy:
src={{ ENV }}/sample/file.json
dest=temporaries/{{ ENV }}/files/sample/file.json
|
1
2
3
4
|
- name: Synchronize
synchronize:
src: "{{ ENV }}/sample"
dest: "temporaries/{{ ENV }}/synchronize"
|
実際に実行してみましょう。
1 |
ansible-playbook -i inventories/local/hosts files.yml --connection=local
|
1
2
3
4
5
6
7
8
|
└── temporaries
└── local
├── files
│ └── sample
│ └── file.json
└── synchronize
└── sample
└── file.json
|
上記のように、正常にコピーされていると思います。。
templates
templatesディレクトリは主に、Templateモジュールを使って、ファイルの内容を動的に変えた上でリモート先に配置する際のテンプレートファイル群を管理するディレクトリです。Templateモジュールのsrc属性は自動的にこのtemplatesディレクトリの内部をデフォルトで参照します。
また、このテンプレートファイルはJinja2という形式になり、拡張子はj2となります。
playbook及びタスクは以下のようになります。
1
2
3
4
|
---
- hosts: allservers
roles:
- templates/copy
|
1
2
3
4
|
- name: Template
template:
src: "{{ ENV }}/sample/file.j2"
dest: "temporaries/{{ ENV }}/templates/sample/file.json"
|
1
2
3
4
|
{
"name": "{{ USER.NAME }}",
"from": "templates"
}
|
このタスク用にlocalserverグループ用group_vars変数も追加します。
1
2
3
4
5
6
|
---
#------------------------------------------
# ユーザー
#------------------------------------------
USER:
NAME: Ansible
|
では、実際に実行してみましょう。
1 |
ansible-playbook -i inventories/local/hosts templates.yml --connection=local
|
1
2
3
4
5
|
└── temporaries
└── local
└── templates
└── sample
└── file.json
|
1
2
3
4
|
{
"name": "Ansible",
"from": "templates"
}
|
正常に変数が置換された上でコピーされていますね。
終わりに
今回はgroup_vars/roles/files/templatesディレクトリの動きについてご紹介しました。
こちらのディレクトリ構造をうまく使えばより効率的なAnsible構成を実現することが可能になりますので、是非参考にしてみてください。