Ansibleのインストール


Ansibleインストールについて

研究でAnsibleを使うことになりインストールしたところいくつか躓いたので、対処方法を記述する。
Ansibleで管理端末のシャットダウンを行うこととする。

実験環境

  • UbuntuServer 16.04 LTS
  • SSH ## インストール サーバ側 AnsibleとPython2.7をインストールする。
$ sudo apt-get install ansible
$ sudo apt-get install python2.7

クライアント側
Python Simplejsonをインストールする。

$ sudo apt-get install python-simplejson

これで必要なものはすべてインストールしたことになる。

クライアントの設定

Ansibleでサーバからクライアントに接続するためには、公開鍵認証が必要になる。
しかし、わざわざお金をかけて認証局から証明書を発行してもらわなくても、自己証明書で十分なので自己証明書を用いて行う。
ただし、公開鍵で認証するのではなく秘密鍵を用いて認証を行う
今回はパスワードを設定を行わない。
必ず秘密鍵をサーバにコピーしておくこと

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/karuma/.ssh/id_rsa): ← Enterキーを押します
Created directory '/home/karuma/.ssh'. ← ~/.ssh がない場合、ディレクトリを作成します
Enter passphrase (empty for no passphrase): ← パスフレーズを入力します(今回は入力しない)
Enter same passphrase again: ← もう一度パスフレーズを入力します(今回は入力しない)
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa*
$ chmod 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

サーバの設定

  • ./ssh/config
  • /etc/ansible/hosts (任意の階層でよい)
  • /etc/ansible/test.yml (任意の階層でよい)

用意しなければいけないのは上記の3つである。
また、例を示すが自身の環境に合わせて適宜変えること。

.ssh/config
Host IPアドレス
    HostName IPアドレス
    User test
    Port 22
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile "秘密鍵の絶対座標"
    IdentitiesOnly yes
    LogLevel FATAL
/etc/ansible/hosts.
[all]
(IPAddress) ansbile_ssh_user=(UserName) ansible_ssh_private_key_file=(秘密鍵の絶対座標)

[all:vars]
ansible_sudo_pass=(sudoパスワード)

※Qiitaの仕様上"."を付けないとファイル名を指定できない為hostsの後に"."がついています。
(IPAddress) = 127.0.0.1
のように置き換えること

[test:vars]とすることで[test]に記述したすべての端末で同じ設定のものを指定することができる。
この例の場合はsudoパスワードを指定している

/etc/ansible/test.yml
---
- hosts:all
  always_run:yes
  tasks:
    - name: shutdown
      Command: shutdown -h now

動作確認

Ansibleから管理する端末に向けて疎通確認ができることを確認する。

$ ansible all -m ping

このような表示になれば成功である。

次にシャットダウンを行ってみる。

$ ansible-playbook /etc/ansible/shutdown.yml --check -s

今回動作チェックを行うために"--check"を付けたが実際に使用する場合には必要ない。

また、この画像ではエラーを入れいるがこの原因は今後調べていこうと考えている。
しかし、これで正常に管理端末をシャットダウンすることが確認できている。

このエラーはAnsible側でSSH接続している最中に管理端末がシャットダウンすることでコネクションが切れることが原因であることが分かった。
なので、以下の内容に書き換えることで正常にAnsibleを終了することができる。
コマンドを"now"より"1"にしたことで1分後にシャットダウンを行うようになる。

/etc/ansible/test.yml
---
- hosts:all
  always_run:yes
  tasks:
    - name: shutdown
      Command: shutdown -h 1