Version 7 (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:%p -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"
バージョンによる分岐
バージョンをチェックし、古いバージョンの場合、パッチを当てる例
- shell: /opt/td-agent/embedded/bin/fluentd --version |awk '{print $2}' register: fluentd_version - lineinfile: > dest=/opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-{{fluentd_version.stdout}}/lib/fluent/parser.rb line=" conf = Config::Element.new('default_regexp_conf', '', conf, []) unless conf.is_a?(Config::Element)" regexp=" conf = Config::Element\.new\('default_regexp_conf', '', conf, \[\]\)" when: fluentd_version.stdout | version_compare('0.12.12', '<=')
デバッグメモ
デバッグメッセージの出力
$ ansible-playbook -vvv ...
ログ出力
debugを使う
- debug: msg="メッセージ:{{variable}}"
特定のホストだけ実行する
$ ansible-playbook --host-lists site.yml
でホスト一覧を確認し、
$ ansible-playbook --l ホスト名 site.yml
で実行。
特定のタスクから実行
$ ansible-playbook --start-at=タスク名