- 更新
2014-05-07
- バージョン
0.0.1
- 作者
@voluntas
- URL
- version
1.6.0
デプロイを行う場合、サーバ毎に鍵を登録するのが面倒です。 特に GitHub を使っている場合は色々だるくなります。 ということで ssh -A と同じ効果を付与するようにしてみます。
- OS
CentOS 6.4 64 bit
念のため sudo の場合でも動作するように書いている
プロビジョン:
$ ssh-agent zsh
$ ssh-add
$ ansible-playbook -i ansible_hosts provision.yml
デプロイ:
$ ssh-agent zsh
$ ssh-add
$ ansible-playbook -i ansible_hosts deploy.yml
ansible ディレクトリ構成:
asnbile/
ansible.cfg
provision.yml
deploy.yml
roles/
core/
tasks/
main.yml
files/
ssh/
ssh_config
ansible.cfg:
[ssh_connection]
ssh_args = -o ForwardAgent=yes
provision.yml:
---
- hosts: vagrant
user: vagrant
roles:
- core
deploy.yml:
---
- hosts: vagrant
user: vagrant
tasks:
- git: repo=git@github.com:voluntas/example.git
dest=example
version=master
core/files/ssh/ssh_config:
# 以下の情報を追記した ssh_config を用意してください
StrictHostKeyChecking no
core/tasks/main.yml:
- copy: src=ssh/ssh_config dest=/etc/ssh/ssh_config
- yum: name={{ item }} state=latest
with_items:
- git
- shell: grep -q SSH_AUTH_SOCK /etc/sudoers
register: result
failed_when: result.rc not in [0, 1]
- shell: echo 'Defaults env_keep += "SSH_AUTH_SOCK"' >> /etc/sudoers
when: result.rc == 1
- git: repo=git@github.com:voluntas/example.git
dest=example
version=master
ignore_errorsよりfailed_whenを使うほうがお勧めです。
ignore_errorsだとログがfailed ... ignoringと出てfailedの部分が赤字なので一瞬ドキッとしてしまいますが、failed_whenなら赤字のfailedが出ないので利用者にやさしいです。
http://qiita.com/hnakamur/items/af07f2c5e09c05bc44eb
また、http://linux.die.net/man/1/grep によるとエラーの場合終了コードが2になるのですが、failed_whenならエラーとして終了できます。ignore_errorsだと2の場合も継続してしまうのでwhen: result|failedの処理が実行されてしまいます。