wiki:devops/Ansible

Version 2 (modified by yuna, 9 years ago) (diff)

--

Ansibleのメモ

踏み台経由でのAnsibleの実行

外から直接繋がっていないホストをSSHのプロキシサーバ経由で環境構築を行う。下記のような構成を想定する。

Ansible Client   10.0.2.8
     | 
Proxy Server     10.0.2.7
     |
Target Server    192.168.1.7

インベントリファイルは次のような内容を想定。

inventry

[target]
192.168.1.7

認証鍵の作成

ターゲットホストに乗り込むための認証鍵を作成する。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/okamototk/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/okamototk/.ssh/id_rsa.
Your public key has been saved in /home/okamototk/.ssh/id_rsa.pub.
The key fingerprint is:
0d:62:14:09:20:9a:48:79:2b:2a:c2:b9:71:e8:d1:21 okamototk@mypc
The key's randomart image is:
+---[RSA 2048]----+
|..o...oo         |
|++ . ..          |
|+ . . o .        |
| E o . . o       |
|o * .   S .      |
|+* o             |
|+ =              |
| o               |
|                 |
+-----------------+

認証鍵のコピー

作成された~/.ssh/id_rsa.pubをTargeサーバの.ssh/authorized_keysにコピーする。

SSH設定ファイルを作成

プロキシ経由でSSH接続するための接続設定ファイルを作成する。

sshconfig

Host *
     IdentityFile /root/.ssh/id_rsa
     ProxyCommand ssh -W %h:%@ -w 120 root@10.0.2.7

下記のコマンドでAnsible ClientからTargetホストにSSH接続できるか確認。

$ ssh -F sshconfig root@192.168.1.7

Ansible実行

上記の設定ファイルをANSIBLE_SSH_ARGSで指定して、ansibleを実行するだけ

$ export ANSIBLE_SSH_ARGS=' -F  sshconfig'
$ ansible-playbook -i inventy site.yml

エラー時の処理

コマンドの実行結果により、条件を分岐する例と、メッセージがエラーのときにタスクを失敗にする例。 ここでは、docker-engineパッケージがあるかどうかチェックし、存在しないときに、Dockerインストールスクリプトを実行する。 スクリプトの出力メッセージにFailedが含まれれば、タスクを失敗とする。

- command: rpm -q docker-engine
  register: rpm_installed
  failed_when: rpm_installed.rc not in [0, 1]

- shell:  curl -sSL https://get.docker.com/ | sh
  when: rpm_installed.rc == 1
  register: install_result
  failed_when: "'Failed' in install_result.stderr"