Ansible

Contents

Ansibleについて


Ansibleはミドルウェアのインストールやアプリケーションのデプロイなど、対象サーバ群に対して、一定の処理を行える製品である。

構成


Ansibleをインストールしたサーバと、Ansibleの処理対象の複数のサーバが存在する。
AnsibleサーバではAnsibleが動作するが、処理対象のサーバではpythonさえインストールされていればよい。

用語

 

Role


Ansibleで実行する処理単位に分けられたファイル群のことである。
例えば、「~~のインストール」のRoleというように作成される。
通常、配布単位もRole毎に行われる。

Playbook


処理の内容を記述した設定ファイルである。
ただし、実際のコマンドレベルでの処理は記述せず、Moduleの呼び出しを使用して記述する。

Module


「ファイルのコピー」や「所有者の変更」など、最小単位の処理を担当するAnsibleのライブラリである。
単に一行のコマンドというわけではなく、何度実行しても同じ結果になるよう、環境調査や実行、例外処理などを内部で行っている。

Inventory


Ansibleで操作を行う対象サーバの一覧を記述したファイルである。
単純にホスト名を羅列して記述もできるが、ホスト個別に接続ユーザ名やポート番号の指定なども行える。

構築


Pythonは標準でインストールされているので、Ansibleのみインストールする。

  1. pipのインストール
    easy_install pip
  2. ansibleのインストール
    • 最新版をインストールする
      pip install ansible
    • 特定バージョンをインストールする
      pip install ansible==2.4.2.0
  3. 正常にインストールされたことを確認する
    ansible localhost -m ping
    「localhost | SUCCESS」と表示されたら動作している
  4. 設定ファイルを作成する
    mkdir /etc/ansible
    cat > /etc/ansible/ansible.cfg << EOT
    [defaults]
    host_key_checking = False
    EOT

 

設定

 

 

ツール

 

ansible

 

 

ansible-config

 

ansible-connection

 

ansible-console

 

ansible-doc

 

ansible-galaxy

 

ansible-inventory

 

ansible-playbook

プレイブックを実行し、対象ホストにタスクを実行する

参考:https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html

ansible-pull

 

ansible-vault




Playbookの設定

 

トップレベル設定

 

become


特定ユーザでリモート処理を実行するかどうか。
デフォルトではrootであるが、become_userディレクティブによる別のユーザを指定することも可能。
特定ユーザの実行ではsudoが使用される。suを使用する場合はbecome_methodディレクティブの変更が必要。

 

become_method



 

モジュール


一覧

ファイルコピー


https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

 

複数のファイルをコピーする場合、タスクを複数定義するか、次のように記述することもできる。
※src/destのパスを書かずに、with_itemsでフルパスで記述しても良い。

- hosts: all
tasks:
- name: <タスク名>
copy:
src: /<パス>/{{ item }}
dest: /<パス>/{{ item }}
with_items:
- "<ファイル名1>"
- "<ファイル名2>"
- "<ファイル名3>"

 

ファイル操作

ファイルの権限変更や削除、リンク作成などを行える。

https://docs.ansible.com/ansible/latest/modules/file_module.html

ファイル削除

- hosts: all
tasks:
- name: <タスク名>
file:
state: absent
path: {{ item }}
with_items:
- "<ファイルパス1>"
- "<ファイルパス2>"

 

yum

yumを使用したパッケージ操作。

ローカルのrpmのインストールも同様の方法でできる。

 

systemd

  - hosts: all
tasks:
- name: <タスク名> systemd: name: "{{ item }}" enabled: yes with_items: - "AAA.service" - "BBB.service"

 

運用

Playbookの使用

 

Hello World


インストール直後の初期状態で、Hello World的サンプルを作成して実行する
このPlaybookではリモートホストのSSHログインにパスワード方式を使用しているが、パスワード方式の場合、「sshpass」パッケージが必要となる。

yum install sshpass -y

 

 

 

 

 

ファイル転送


インストール直後の初期状態で、Hello World的サンプルを作成して実行する
このPlaybookではリモートホストのSSHログインにパスワード方式を使用しているが、パスワード方式の場合、「sshpass」パッケージが必要となる。

yum install sshpass -y

 

 

 

 

 

情報収集


各サーバに対し、情報収集を行える。
暗黙的に情報収集は常に実行されるので、ここで取得した値はPlaybookの中で利用できる。

ansible all -i <Inventoryファイルパス> -m setup


この情報収集を無効化する場合は次の設定をトップレベルに入れる必要がある。
Pythonがインストールされていない環境を対象とする場合は入れておいた方がよい。

gather_facts: false

 

 


Notice: Trying to get property 'queue' of non-object in /usr/local/wordpress/wp-includes/script-loader.php on line 2876

Warning: Invalid argument supplied for foreach() in /usr/local/wordpress/wp-includes/script-loader.php on line 2876