Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active February 24, 2016 03:44
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voluntas/7844901 to your computer and use it in GitHub Desktop.
Save voluntas/7844901 to your computer and use it in GitHub Desktop.
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
Copy link

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
Copy link
Author

voluntas commented May 6, 2014

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

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