まとめ
Ansibleでローカルのファイル/ディレクトリをリモートに持っていくためには
synchronize
ではなくcopy
モジュールを使えば良い
synchronize
とcopy
ansible directory copy - Google 検索すると、copy
とsynchronize
の2つのコマンドが出てくる
copy
ファイルをコピーするためのコマンドっぽい
documentのサンプルでも
# Example from Ansible Playbooks
- copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644
# The same example as above, but using a symbolic mode equivalent to 0644
- copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode="u=rw,g=r,o=r"
# Another symbolic mode example, adding some permissions and removing others
- copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode="u+rw,g-wx,o-rwx"
# Copy a new "ntp.conf file into place, backing up the original if it differs from the copied version
- copy: src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes
# Copy a new "sudoers" file into place, after passing validation with visudo
- copy: src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'
全てファイルのコピーを行っている
synchronize
rsync
コマンドを実行するモジュールっぽい
# Synchronization of src on the control machine to dest on the remote hosts
synchronize: src=some/relative/path dest=/some/absolute/path
# Synchronization without any --archive options enabled
synchronize: src=some/relative/path dest=/some/absolute/path archive=no
# Synchronization with --archive options enabled except for --recursive
synchronize: src=some/relative/path dest=/some/absolute/path recursive=no
recursive
とかあるし、ディレクトリを持って行くにはsynchronize
モジュールが適切っぽく思われる
しかし、synchronize
で実行すると、
msg: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]
と出てしまってコピー出来なかった。
sshを使ったrsync
のはずが、何故かパスワードを求められていて、Permission deniedとなってしまっている。
ディレクトリのコピー
最初のまとめにも書いた通り、
copy: src={{ src_dir }} dest={{ dest_dir }}
だけで良かった。
なお、ディレクトリを丸ごとコピーするには
src_dir: /src/path/local_dir
dest_dir: /dest/path/remot_dir
とする。
これでローカルの/src/path/
のlocal_dir
というディレクトリが、リモートの/dest/path/
のremote_dir
という名前でコピーされる
src_dir: /src/path/local_dir/
dest_dir: /dest/path/remot_dir/
とすると、
/src/path/local_dir/*
が/dest/path/remote_dir/
にコピーされる