Create a gist now

Instantly share code, notes, and snippets.

Embed
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

This comment has been minimized.

Show comment
Hide comment
@hnakamur

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

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

This comment has been minimized.

Show comment
Hide comment
@voluntas

voluntas May 6, 2014

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

Owner

voluntas commented May 6, 2014

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

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