読者です 読者をやめる 読者になる 読者になる

ログってなんぼ

日々のメモです

Ansible:pipeliningを使ってplaybookの実行を高速化

http://docs.ansible.com/ansible/intro_configuration.html#pipelining

playbookが大きくなってきたら更に恩恵ありそうな予感がする結果となったため作業内容をメモ。

普通に実行した時の実測値がこちら

PLAY RECAP *********************************************************************
hoge1                      : ok=27   changed=5    unreachable=0    failed=0
hoge2                      : ok=8    changed=3    unreachable=0    failed=0
hoge3                      : ok=17   changed=3    unreachable=0    failed=0


real    7m24.880s
user    0m45.240s
sys 0m43.901s

pipeliningをONにする

高速化を狙って「パイプライン」という機能を使うように設定。

対象サーバーにssh接続した後、pythonスクリプトをコピーしてから実行するのではなく、sshのセッションにパイプして実行するというものらしいです。

ansible.cfgに追記

[defaults]
pipelining = True

実行結果

PLAY RECAP *********************************************************************
hoge1                      : ok=27   changed=5    unreachable=0    failed=0
hoge2                      : ok=8    changed=3    unreachable=0    failed=0
hoge3                      : ok=17   changed=3    unreachable=0    failed=0


real    2m39.120s
user    0m15.759s
sys 0m15.344s

かなり短縮されました。ターミナルを流れる実行ログを見ていても、ずんずん処理が進んでいくのでかなり快適です。

初めてのAnsible

初めてのAnsible

pipeliningが使用できる条件

リモート側のサーバーに存在する「playbookを実行するユーザー」にrequirettyが無効化されている必要あり。vagrant+Chefとかで経験済みの人も多い?

okisanjp.hatenablog.jp

かくいう自分も過去に・・・w

ちなみに、requrettyが設定されているユーザーでpipeliningを使用しようとすると

fatal: [hogeserver]: FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: sudo を実行するには tty がなければいけません。すみません\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}

こんな感じでエラーとなります。

requirettyを無効にする方法

visudoコマンドで/etc/sudoersを編集してrequirettyを無効にします。

Defaults requiretty
Defaults:hogeuser !requiretty #これ追記

今回ぼくが作業したCentOS6.4の環境では/etc/sudoers.dがあるので、そこに新たにファイルを作って

Defaults:hogeuser !requiretty

こんな内容に。

これで、hogeuserはtty無しでのsudoが可能になります。

Defaultsのrequirettyは無効にせず、特定userに関する設定を追記する感じで。

グループを指定する場合は

Defaults:%wheel !requiretty

このような形になります。

かなり快適になりましたよ(´・ω・`) あとは、先に!requirettyするplaybookだけ流して、メインのplaybookを流し終わったら元に戻しておくって言う風にしてもいいかな?