Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
スポンサーリンク
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 |
次にそれぞれのディレクトリの役割を紹介していきます。
スポンサーリンク
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構成を実現することが可能になりますので、是非参考にしてみてください。