背景
Ansibleでターゲットホストに何かをコピーするとき
copy
モジュールを使ってる人はとても多いと思います。
しかし恐ろしいぐらい遅いため、ansible copy slow
何かで調べると
色々対策が書かれている記事があると思います。
まあそれを試しても劇的な改善はなく、結果として意味のないものです。
Synchronizeモジュールを使う
Copyモジュールと同等のことをやってみます。
1. ターゲットホストにファイルを配置する
- name: Copy Web API to /home/node synchronize: src: Web-API dest: /home/node recursive: yes use_ssh_args: yes
2. パーミッションを変更する
- name: Change permission to /home/node/Web-API file: path: /home/node/Web-API owner: node group: node recurse: yes mode: 0755
Synchronizeモジュール
にもowner
やgroup
オプションはあるんですが
これは Ansible 実行マシンに存在するユーザー、グループで且つ、
ターゲットホストにも存在しないといけないという制約があるので、
別タスクでパーミッション等を変更する必要があります。
比較
全部で350行ぐらいある Playbook の中のcopy
モジュール版と
Synchronize
モジュール版で比べた結果です。
Copy
real 4m25.575s
Synchronize
real 2m12.755s
圧倒的