LoginSignup
1
1

More than 5 years have passed since last update.

【備忘録】Ansible② Playbookとインベントリの書き方

Last updated at Posted at 2018-12-15

環境

・インスタンスタイプ : T2.micro
・OS : Amazon Linux 2

インストール

Amazon Linux2 環境ではExtras LibraryにAnsibleパッケージが含まれているので、

以下のコマンドですぐにインストールできる。(Pythonパッケージでのインストールもできる)

$ sudo amazon-linux-extras install -y ansible2
$ ansible --version
ansible 2.x.x

Ansibleの実行に必要な要素

Ansibleを実行するには、以下のインプットが必要となる。

要素 備考
Playbook 実行する内容を記述したファイル
インベントリ Playbookの実行対象のホスト情報を記述した設定ファイル
クレデンシャル 実行対象に接続するための認証情報(ログインに使用する)
変数 Playbook内で変数化された部分に値を設定(使用しない場合あり)

インベントリの設定

インベントリファイルは /etc/ansible/ansible.cfg にインベントリファイルの参照先を追記する。(例では /etc/ansible/hosts をインベントリファイルとする設定)

[defaults]

# some basic default values...

↓ この行がコメントアウトされているので#を削除する
inventory      = /etc/ansible/hosts
#library        = /usr/share/my_modules/
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp
#local_tmp      = ~/.ansible/tmp
#forks          = 5
#poll_interval  = 15
#sudo_user      = root
#ask_sudo_pass = True
#ask_pass      = True
#transport      = smart
#remote_port    = 22

インベントリファイルはすでに存在するが、中身を消して下記の通り設定。

[文字列] は各ホストが属するグループを指定する際に使用する。例えば、webサーバー → [web]、アプリサーバー → [app]、DBサーバー → [db] となる。

各グループに複数の接続先ホストを記述することができる。

ansible_connection は接続の方法を指定する際に使用する。

指定しない場合、sshが選択される。sshの場合は実行時にssh接続と認証が行われる。

ansible_host は接続先ホストのIPアドレスと指定するオプションで、接続先ホストに別名をつけたい時に使用する(したの例では node-1 、node-2 という別名をつけている)。

[group1]
127.0.0.1 ansible_connection=local

[group2]
127.0.0.1 ansible_connection=local

[nodes]
node-1 ansible_host=127.0.0.1 ansible_connection=local
node-2 ansible_host=127.0.0.1 ansible_connection=local

Playbookを変数と接続先ホストを指定して実行

ここでは、インベントリファイルで指定したグループで変数(実行時引数)に指定した文字列を表示するPlaybookを作成する。

Playbookの作成

vi ~/sample.yml

sample.ymlの内容

- hosts: group1  # ここでグループを指定
  vars:
    sample_args: "書き換えられる文字列"
  tasks:                        # tasks で定義された内容が実行される
    - debug:
        msg: "{{ sample_args }}"  # 変数を展開する場合 "{{}}" を使用する

作成後、以下のコマンドでPlaybookを実行する。

-e '変数名=設定したい値' でPlaybook内で宣言した変数に値を渡すことができる。

$ ansible-playbook sample.yml -e 'sample_args=上書き後の文字 列'

PLAY [group1] ***************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [127.0.0.1]

TASK [debug] ****************************************************************************
ok: [127.0.0.1] => {
    "msg": "上書き後の文字列"
}

PLAY RECAP ******************************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0 

変数を渡さなかった場合、Playbook内で宣言された値が表示される。

ansible-playbook sample.yml

PLAY [group1] ***************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [127.0.0.1]

TASK [debug] ****************************************************************************
ok: [127.0.0.1] => {
    "msg": "書き換えられる文字列"
}

PLAY RECAP ******************************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0 


1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1