ちなみに、ITILでいう「構成管理」とは意味が異なる
- ITILでいう構成管理:ITサービスに含まれる資産とその構成情報を一元管理すること
- ここでいう構成管理:IT機器の構成情報をコード化・自動化すること
本記事では、Ansibleのインストールから、実際に簡単なPlaybookを作成して処理を実行する手順について記載することにする。実際にやってみればわかるが、1時間もあればできてしまう。
環境
Ansibleをインストールするサーバー、Ansibleにて処理を実行するサーバーともに、CentOS 7.5を用いる。念のためバージョン情報を以下に記載する。
[root@t1000cent ~]# cat /etc/redhat-release
------------------------------
CentOS Linux release 7.5.1804 (Core)
------------------------------
IPアドレスは以下の通りとなる。
- Ansibleサーバー:192.168.11.221 (ホスト名:t1000cent)
- 処理対象サーバー:192.168.11.223
Ansibleインストール
Ansibleはyumを使ってインストールするのが一番手っ取り早い。依存関係のあるパッケージとして、複数のPythonのライブラリが合わせてインストールされる。[root@t1000cent ~]# yum install ansible
------------------------------
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.usonyx.net
* extras: ftp-srv2.kddilabs.jp
* updates: centos.usonyx.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ ansible.noarch 0:2.4.2.0-2.el7 を インストール
--> 依存性の処理をしています: sshpass のパッケージ: ansible-2.4.2.0-2.el7.noarch
--> 依存性の処理をしています: python2-jmespath のパッケージ: ansible-2.4.2.0-2.el7.noarch
--> 依存性の処理をしています: python-six のパッケージ: ansible-2.4.2.0-2.el7.noarch
~(中略)~
python2-jmespath.noarch 0:0.9.0-3.el7
python2-pyasn1.noarch 0:0.1.9-7.el7
sshpass.x86_64 0:1.06-2.el7
完了しました!
------------------------------
Ansibleのバージョンを確認しておく。2.4.2というバージョンとなる。
[root@t1000cent ~]# ansible --version
------------------------------
ansible 2.4.2.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
------------------------------
Ansibleから接続するための初期設定
Ansibleでは、処理対象のサーバーとの接続性を確認するコマンドが用意されており、構文は以下となる。------------------------------
ansible <接続先ホスト名 or IPアドレス> -m ping -k
-m : モジュールを指定。今回は「ping」モジュールを使う
-k : 実行時に接続先サーバーのパスワードの入力を求める
------------------------------
しかし、上記を実行してみたが、そのままではエラーとなってしまう。
[root@t1000cent ~]# ansible 192.168.11.223 -m ping -k
------------------------------
SSH password:
[WARNING]: Could not match supplied host pattern, ignoring: all
[WARNING]: provided hosts list is empty, only localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.11.223
[WARNING]: No hosts matched, nothing to do
------------------------------
[root@t1000cent ~]# cat /etc/ansible/hosts
------------------------------
192.168.11.102
------------------------------
再実行するとエラーが変わったが失敗してしまった。
[root@t1000cent ~]# ansible 192.168.11.223 -m ping -k
------------------------------
SSH password:
192.168.11.223 | FAILED! => {
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}
------------------------------
メッセージを見ると~/.ssh/known_hostsに処理対象サーバーの署名を登録する必要がある旨書いてあるようなので、手動でssh接続して登録してみる。
[root@t1000cent ~]# ssh 192.168.11.223
------------------------------
The authenticity of host '192.168.11.223 (192.168.11.223)' can't be established.
ECDSA key fingerprint is SHA256:4sEF5Y1AsG3y4ywjkd9KOdILXIKTmcUDosmKGqJcrbA.
ECDSA key fingerprint is MD5:26:7c:6a:01:e5:a4:61:58:54:43:28:2c:18:cb:41:67.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.223' (ECDSA) to the list of known hosts. ←★署名が登録される
root@192.168.11.223's password:
Last login: Wed Aug 1 18:47:58 2018
------------------------------
すると、ようやく接続に成功した!
[root@t1000cent ~]# ansible 192.168.11.223 -m ping -k
------------------------------
SSH password:
192.168.11.223 | SUCCESS => {
"changed": false,
"ping": "pong"
}
------------------------------
ssh接続時にパスワード入力を求められないようにする
とりあえず接続には成功するのだが、毎回パスワードを入力する必要があり面倒となる。そこで、Ansibleサーバー側にてssh接続用の秘密鍵と公開鍵のペアを作成し、公開鍵を処理対象サーバーに登録することで、パスワード入力なしでログインできるようにしておく。まずはAnsibleサーバーにて秘密鍵と公開鍵のペアを作成する。
[root@t1000cent ansible]# ssh-keygen
------------------------------
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ←★そのままエンター
Enter passphrase (empty for no passphrase): ←★そのままエンター
Enter same passphrase again: ←★そのままエンター
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
~(以下略)~
------------------------------
公開鍵を処理対象サーバーにコピーする。ssh-copy-idコマンドを使うことで、処理対象サーバーの~/.ssh/authorized_keysに公開鍵情報が登録される。
[root@t1000cent ~]# ssh-copy-id 192.168.11.223
------------------------------
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.11.223's password: ←★処理対象サーバーのパスワードを入力
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.11.223'"
and check to make sure that only the key(s) you wanted were added.
------------------------------
-kオプションを抜いて接続確認をすると、パスワード入力をすることなく接続に成功した。
[root@t1000cent ~]# ansible 192.168.11.223 -m ping
------------------------------
192.168.11.223 | SUCCESS => {
"changed": false,
"ping": "pong"
}
------------------------------
Playbookを実行 (yumでパッケージをインストールする)
それでは、実際にAnsibleから処理を実行してみよう。今回は処理対象サーバーにyumを使ってtelnetをインストールさせてみる。※処理対象サーバーはインターネット接続ができる必要あり
Playbookは以下のように超シンプルなものになる。
[root@t1000cent ~]# cat install_telnet.yml
------------------------------
---
- hosts: all
tasks:
- name: install telnet
yum: name=telnet state=latest
------------------------------
それではPlaybookを実行してみよう。コマンドはansible-playbookとなる。
[root@t1000cent ~]# ansible-playbook install_telnet.yml
------------------------------
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.11.223]
TASK [install telnet] **********************************************************
changed: [192.168.11.223]
PLAY RECAP *********************************************************************
192.168.11.223 : ok=2 changed=1 unreachable=0 failed=0
------------------------------
処理対象サーバーにてインストール結果を確認してみる。
[root@localhost ~]# cat /var/log/yum.log
------------------------------
Aug 03 21:47:29 Installed: 1:telnet-0.17-64.el7.x86_64 ←★インストールされている
------------------------------
このように、Ansibleでは簡単な処理であれば、たった4行のコードを書くだけで実行できてしまう。コードの内容もわかりやすいし、公式マニュアルも充実しているので、少ない学習時間で使えるようになるのがAnsibleの特徴と言えるだろう。
参考
yum - Manages packages with the yum package managerhttps://docs.ansible.com/ansible/latest/modules/yum_module.html
0 件のコメント:
コメントを投稿