Ansible vmware_guest_file_operation 大容量の10MBを超えるファイルをコピー失敗 urlopen error The write operation timed outの警告がでる事象があるようです。
30 MB のファイルを VM にコピーするときのタイムアウト エラー。
問題の種類
バグレポート
コンポーネント名
vmware_guest_file_operationアンシブルバージョン
ansible [core 2.12.5]
python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
jinja version = 3.1.2
libyaml = Trueコレクションバージョン
# /usr/local/lib/python3.8/dist-packages/ansible_collections
Collection Version
---------------- -------
community.vmware 1.18.0# /root/.ansible/collections/ansible_collections
Collection Version
---------------- -------
community.vmware 2.4.0
#構成
DEFAULT_LOG_PATH(/etc/ansible/ansible.cfg) = /var/log/ansible.log
DEFAULT_STDOUT_CALLBACK(/etc/ansible/ansible.cfg) = json
HOST_KEY_CHECKING(/etc/ansible/ansible.cfg) = FalseOS / 環境
Debian を使用した Docker コンテナYAML ファイル
---
- hosts: localhost
gather_facts: no
become: false
connection: localhosttasks:
- name: copy file to vm
vmware_guest_file_operation:
hostname: "{{ esxi_host }}"
username: "{{ esxi_username }}"
password: "{{ esxi_password }}"
datacenter: "{{ datacenter_name }}"
vm_id: "{{ vm_name }}"
validate_certs: "{{ validate_certs }}"
vm_username: "{{ vm_username }}"
vm_password: "{{ vm_password }}"
copy:
src: "{{ src }}"
dest: "{{ dest }}"
overwrite: False
delegate_to: localhost
実績
30 MB のファイルをコピーしようとすると、タイムアウト エラーが発生します。すべてが正常に開始されますが、数秒後に次のエラーメッセージが表示されます。実際に vm に転送されるのは、30 MB のうち 10 MB だけです。
同じモジュールを使用して vm からファイルをフェッチすると、正常に機能しました。
"msg": "problem during file transfer, http message:{'url': 'https://{{ip here}}/guestFile?id=526&token=5258550d-69f6-ccbb-be4e-16a7aec674df526', 'status': -1, 'msg': 'Request failed: <urlopen error The write operation timed out>'}"
以下のメソッドにタイムアウトパラメータを追加してみました。
resp, info = urls.fetch_url(self.module, url, data=data, method="PUT", timeout=10000)
そして、それは今も機能しているようです。これが正しい解決策なのか、それとも何か間違ったことをしているのかはわかりませんが。
こちらに解決したとあります。
https://github.com/ansible-collections/community.vmware/pull/1513
最新のAnsibleならこの問題は発生しないと思われます。