Ansibleとは
- Red Hat が開発するオープンソースの構成管理ツール
- 管理対象機器の情報を記したインベントリと、操作内容を記したプレイブックと呼ばれるファイルをもとに管理対象機器に対して以下のような操作を行う
- ソフトウェアのインストール
- Ansible マシンからのファイル転送
- ファイル/フォルダ操作
- その他、各種設定など
- 何度実行されても同じ状態に収束する、冪等性(べきとうせい)という性質を持つ
- ただし、操作内容によっては冪等性は保証されない
- モジュールと呼ばれる機能を使用して管理対象を操作する
- 様々なモジュールが用意されている
- 管理対象にエージェントをインストールする必要はないが、以下2点は必要
- Python がインストールされていること(Ansible マシン及び管理対象)
- Ansible マシンから管理対象へのSSH接続ができる状態であること
- 接続先 SSH ユーザが sudo 権限を持っていること(管理者権限が必要な処理の場合)
- インベントリは INI 形式または YAML 形式で記される
- プレイブックは YAML 形式で記される
Ansibleのインストール手順
環境
- CentOS 8.0.1905
- Python 3.6.8
- Ansible 2.9.2
Ansibleのインストール手順
sudo 権限のあるユーザでコマンドを実行する場合の例を説明します。
※root ユーザで実施する場合はコマンドから sudo を除いてください
まず以下コマンドで Python(ver.3)をインストールします。
※ここでは簡単な方法としてシステム環境にインストールすることとします
※pyenv を使用してユーザ環境にインストールする場合はこちらを参照
$ sudo dnf install python3 -y
Python をインストールできたら、以下のコマンドでパッケージ管理ツールである pip のバージョンを最新化しておきます。
$ sudo pip3 install --upgrade pip
続いて、以下のように pipで Ansible をインストールします。
$ sudo pip3 install ansible
インストールできたら Ansible のバージョンを確認してみます。
$ ansible --version
ansible 2.9.2
config file = None
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.6.8 (default, Oct 7 2019, 17:58:22) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
sshpass のインストール
Ansible で SSH 接続する際に sshpass が必要となるためインストールしてください。
$ sudo dnf install -y sshpass
※ sshpass が見つからないというエラーになった場合は epel-release を先にインストールしてみてください
Ansibleの動作確認
管理対象サーバと操作内容
- 管理対象サーバホスト名:centos01
- OS: CentOS 8.0
- IP:10.69.34.54
- sshユーザ:testuser
- sshパスワード:testuser
- 操作内容:管理対象サーバのOSのメジャーバージョンを表示
インベントリファイルの作成
- インベントリファイル名:hosts
- 内容:
[centos]
10.69.34.54
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=testuser
ansible_ssh_pass=testuser
- [centos] の部分について
- centos という名前の管理対象機器グループを定義しています
- グループに所属する機器としてIPアドレス 10.69.34.54 の機器を指定しています
- [all:vars] の部分について
- すべての管理対象機器グループで使用するパラメータを指定しています
- ansible_ssh_port=22
- SSH接続で使用するポートは22
- ansible_ssh_user=testuser
- SSH接続で使用するユーザ名はtestuser
- ansible_ssh_pass=testuser
- SSH接続で使用するパスワードはtestuser
プレイブックファイルの作成
プレイブックは YAML 形式で作成します。
- プレイブックファイル名: test.yml
- 内容:
- hosts: centos
tasks:
- name: show version
debug:
msg: "{{ansible_distribution_major_version}}"
- hosts: centos
- 操作対象機器グループはcentos(インベントリに記載したグループを指定)
- tasks:
- 以降の行で操作内容を記載
以下の部分が操作内容を示します。
- name: show version
debug:
msg: "{{ansible_distribution_major_version}}"
- name: show version
- Ansible 実行時に表示される説明文を「show version」と指定しています
- debug:
- debug モジュールを使用しています。debug モジュールは指定した内容を出力させます
- msg: “{{ansible_distribution_major_version}}”
- 出力させる内容として操作対象機器のディストリビューションのメジャーバージョンを指定しています
Ansibleの実行
Ansible の実行コマンドの書式は以下の通りです。
$ ansible-playbook -i [インベントリ] [プレイブック]
※ インベントリとプレイブックは絶対パスまたはカレントディレクトリからの相対パスで指定
$ ansible-playbook -i hosts test.yml
PLAY [centos] **********************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [10.69.34.54]
TASK [show version] ****************************************************************************************************************************************************
ok: [10.69.34.54] => {
"msg": "8"
}
PLAY RECAP *************************************************************************************************************************************************************
10.69.34.54 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
CentOS のメジャーバージョンである”8″という情報が取得できていることが確認できました。
―――――――――――――