Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Ansible トラノマキ

Ansible トラノマキ

更新:2014-05-07
バージョン:0.0.1
作者:@voluntas
URL:http://voluntas.github.io/

概要

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
@hnakamur
hnakamur commented Dec 7, 2013

ignore_errorsよりfailed_whenを使うほうがお勧めです。

- 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

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の処理が実行されてしまいます。

@voluntas
Owner
voluntas commented May 6, 2014

アドバイスありがとうございます! 修正させて頂きました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment