AWS の public DNS に対して ansible を実行すると、us-east-1
リージョンでは成功するのに、ap-southeast-1
リージョンでは、ControlPath too long
というエラーが発生するという現象に悩んでいた。
よくよく調べてみると、デフォルトが %(directory)s/ansible-ssh-%%h-%%p-%%r
という設定になっていて、ap-southeast-1
リージョン(*.ap-southeast-1.compute.amazonaws.com)のように長いホスト名だと108文字の限界を越えてしまうせいだった。
The path to use for the ControlPath sockets. This defaults to
"%(directory)s/ansible-ssh-%%h-%%p-%%r", however on some systems with
very long hostnames or very long path names (caused by long user names > or
deeply nested home directories) this can exceed the character limit on
file socket names (108 characters for most platforms). In that case, you
may wish to shorten the string below.Example:
control_path = %(directory)s/%%h-%%r
参考: https://github.com/zimbatm/home-deploy/blob/master/ansible.cfg
ということで、~/.ansible.cfg
あたりに以下を追加して解決した。
[ssh_connection]
control_path = %(directory)s/as-%%h-%%r