0

对于 HCL 连接,我们仍然需要 WebSphere,我想用 Ansible 自动化这个复杂而缓慢的过程。WebSphere 需要手动下载每个组件的不同 ZIP 文件,例如:

├── CIK1VML.zip
├── CIK1WML.zip
└── CIK1XML.zip

后面的字符CIK1标识零件。在命令行上,我可以通过用问号替换那些部分标识符来解压缩它们:

 unzip '/cnx-smb/was/supplements/CIK1?ML.zip' -d /tmp/was-suppl-manual

我想使用unarchive模块,因为它支持remote_src对我有用的功能,所以我尝试了一个简单的 POC 剧本:

- hosts: 127.0.0.1
  connection: local
  tasks:
    - name: Unpack test
      become: yes
      unarchive:
        src: "/cnx-smb/was/supplements/CIK1?ML.zip"
        remote_src: no
        dest: "/tmp/was-extracted"

但这不起作用:

TASK [Unpack test] **********************************************************************************************************************************************************************************************************************************************************
Wednesday 10 February 2021  16:17:25 +0000 (0:00:00.637)       0:00:00.651 ****
fatal: [127.0.0.1]: FAILED! => changed=false
  msg: |-
    Could not find or access '/cnx-smb/was/supplements/'CIK1?ML.zip'' on the Ansible Controller.
    If you are using a module and expect the file to exist on the remote, see the remote_src option

我还尝试了不同的src路径,例如/cnx-smb/was/supplements/'CIK1?ML.zip',导致unzipCLI 调用仅在至少文件名被引号或整个路径屏蔽时才起作用。Ansible 仅在引用文件名时接受,'/cnx-smb/was/supplements/CIK1?ML.zip'似乎被解释为相对路径(显然失败)。

4

1 回答 1

0

似乎这些多部分 zip 存档并不是真正的“多部分”存档,正如我从像 7zip 这样的压缩格式中知道的,我们有 File.partX.7z,它们只能一起使用。7zip 会验证它们并在例如缺少某个部件时抛出错误。

这些 zip 文件的情况有所不同。我查看了它们并注意到我可以提取每个 zip 文件而无需其他文件。每个 zip 文件都包含安装存档的一部分。似乎 zip 本身并没有将大文件夹分成几部分。出于某种原因,IBM 将一些文件夹(如disk2 )放在单独的存档文件中。

这意味着我可以对 ansible 做同样的事情:只需单独提取每个文件,但在同一个目录中:

- hosts: 127.0.0.1
  connection: local
  vars:
    base_dir: /cnx-smb/was/supplements/

  tasks:
    - name: Unpack
      become: yes
      unarchive:
        src: "{{ base_dir }}/{{ item }}"
        remote_src: no
        dest: "/tmp/was-extracted"
      with_items: 
        - CIK1VML.zip
        - CIK1WML.zip
        - CIK1XML.zip

两个提取的文件夹e(Ansible + 手动使用zip带有?占位符的命令)具有相同的大小并包含相同的数据:

vagrant@ansible:/cnx-repo$ du -hs /tmp/was-extracted/
3.0G    /tmp/was-extracted/
vagrant@ansible:/cnx-repo$ du -hs /tmp/was-suppl-manual
3.0G    /tmp/was-suppl-manual
于 2021-02-10T20:22:55.270 回答