Ansible unarchive 模块在访问爆炸文件时失败并出现意外错误:[Errno 2] 没有这样的文件或目录:

问题描述

我的 zip 文件包含一个文件UAT-04022021_01,其中包含多个文件

我本地ansible服务器上的ls输出zip实现文件及其内容如下:

-rwxrwxr-x 1 user1 user1 171910544 Feb  4 07:02 /web

/playbooks/automation/deployments/tmpfiles/04/UAT-04022021_01.zip
$ unzip -l "/web/playbooks/automation/deployments/tmpfiles/04/UAT-04022021_01.zip"
Archive:  /web/playbooks/automation/deployments/tmpfiles/04/UAT-04022021_01.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  02-04-2021 17:31   UAT-04022021_01/
144241065  02-04-2021 15:58   UAT-04022021_01/canv.ear
  8342584  02-04-2021 16:00   UAT-04022021_01/canpizza.ear
 10522141  02-04-2021 16:01   UAT-04022021_01/cantity.ear
  8778258  02-04-2021 15:59   UAT-04022021_01/canipc.ear
---------                     -------
171884048                     5 files
[user1@linuxlocalhost deployments]$

以下是我将 zip 解压缩到所有远程目标主机的代码

---
- name: "Play 1"
  host: "{{ dest_host }}"
  user: "{{ USER }}"

   - name: Give better permissions to the zip file
     tags: validate
     file:
       path: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/{{ depfile | basename }}"
       mode: 0775
     delegate_to: localhost
     run_once: true

   - name: "Untar artifacts in CURRENT Folder"
     tags: validate
     unarchive:
       src: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/{{ depfile | basename }}"
       dest: "/web/bea_apps/applications/{{ domain_home }}/{{ item }}/CURRENT/"
     with_items: "{{ CLUSTER.split(',') }}"

输出

#############################################\n\n')
The full traceback is:
  File "/tmp/ansible_MCNgND/ansible_module_unarchive.py",line 873,in main
    res_args['changed'] = module.set_fs_attributes_if_different(file_args,res_args['changed'],expand=False)
  File "/tmp/ansible_MCNgND/ansible_modlib.zip/ansible/module_utils/basic.py",line 1473,in set_fs_attributes_if_different
    file_args['path'],file_args['mode'],changed,diff,expand
  File "/tmp/ansible_MCNgND/ansible_modlib.zip/ansible/module_utils/basic.py",line 1204,in set_mode_if_different
    path_stat = os.lstat(b_path)

Failed: [myserver2] (item=VL_BATCH) => {
    "changed": false,"dest": "/web/bea_apps/applications/mydom1/VL_BATCH/CURRENT/","gid": 64332,"group": "wladmin","handler": "ZipArchive","invocation": {
        "module_args": {
            "attributes": null,"backup": null,"content": null,"creates": null,"delimiter": null,"directory_mode": null,"exclude": [],"extra_opts": [],"follow": false,"force": null,"group": null,"keep_newer": false,"list_files": false,"mode": null,"original_basename": "UAT-04022021_01.zip","owner": null,"regexp": null,"remote_src": false,"selevel": null,"serole": null,"setype": null,"seuser": null,"src": "/home/wladmin/.ansible/tmp/ansible-tmp-1612477399.28-110140157282432/source","unsafe_writes": null,"validate_certs": true
        }
    },"item": "VL_BATCH","mode": "0755","msg": "Unexpected error when accessing exploded file: [Errno 2] No such file or directory: '/web/bea_apps/applications/mydom1/VL_BATCH/CURRENT/UAT-04022021_01/'","owner": "wladmin","size": 2,"state": "directory","uid": 600000008
}

/web/bea_apps/applications/mydom1/VL_BATCH/CURRENT/ 为空,用户有写入权限。

我检查了目的地,它确实包含此文件/web/bea_apps/applications/mydom1/VL_BATCH/CURRENT/ 但不包含 /web/bea_apps/applications/mydom1/VL_BATCH/CURRENT/UAT-04022021_01/

如果在 UAT-04022021_01 文件夹下解压,它应该创建此文件CURRENT

在进一步研究后,我尝试了建议的 environment 修复方法,但也无济于事。

   - name: "Untar artifacts in CURRENT Folder"
     tags: validate
     unarchive:
       src: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/{{ depfile | basename }}"
       dest: "/web/bea_apps/applications/{{ domain_home }}/{{ item }}/CURRENT/"
     with_items: "{{ CLUSTER.split(',') }}"
     environment:
       LANG: C
       LC_ALL: C
       LC_MESSAGES: C

我的源是 Linux,而目标是 Solaris。

你能提出什么问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)