ansible "unarchive" 模块没有按预期工作

ansible "unarchive" module is not working as expected

我的目标是将控制器中的 .zip 文件解压缩到应用程序服务器中的特定文件夹(因为我有另一个脚本指定了此路径来调用包)。

我正在尝试 2 个条件

1) 检查目标服务器目录是否存在(例如:/opt/mypack)。如果存在则跳过其他创建目录。

2) 检查以上目录是否已经有解压文件。如果没有提取,如果有则跳过提取。

我尝试使用下面的剧本,我想将 2 个 .zip 包提取到所有目标服务器的特定位置(/opt/mypack 和 /opt/mypack2)

 ---

   - name: Extract CLM-Web Package into /opt/mypack
     hosts: localhost,IHS,CCM,RM
     vars:
       source_dir: /etc/ansible/roles/IBM2/files/mypack.zip
       dest_dir: /opt/mypack
     tasks:
       - name: check the folder existance
         stat: path=/opt/mypack
         register: folder_exist

       - name: create directory
         command: mkdir /opt/mypack
         when: folder_exist.stat.exists == False

       - name: extract the .zip file
         unarchive:
           src: "{{ source_dir }}"
           dest: "{{ dest_dir }}/"
         when: folder_exist.stat.exists == True

    - name: Extract CLM Installation Package to /opt/mypack
      hosts: localhost,CCM,RM
      vars:
        source_dir: /etc/ansible/roles/IBM2/files/mypack2.zip
         dest_dir: /opt/mypack2
      tasks:
        - name: check the folder existance
          stat: path=/opt/mypack2
          register: folder_exist

       - name: create directory
         command: mkdir /opt/mypack2
         When: folder_exist.stat.exists == False

       - name: extract the .zip file
         unarchive:
            src: "{{ source_dir }}"
            dest: "{{ dest_dir }}/"
         when: folder_exist.stat.exists == True

您可以使用文件模块和循环来完成所需的工作。我更喜欢角​​色。因此,我创建了以下目录结构:

.
+ testunarchive.yml
+ unarchive
  + files
  | + foo1.zip
  | + foo2.tgz
  + tasks
    + main.yml
    + unarchive.yml

foo1.zip 和 foo2.tgz 只是 zip 和压缩 tar 格式的测试存档文件。

testunarchive.yml 包含剧本。我刚刚在本地主机上测试了这个。

---
- hosts: localhost
  roles:
    - unarchive
...

main.yml 任务引入 unarchive.yml 文件并循环遍历该文件中的所有任务。

---
- include: unarchive.yml
  loop:
    - { src: foo1.zip, dest: /tmp/foo1 }
    - { src: foo2.tgz, dest: /var/tmp/foo2 }
...

unarchive.yml 任务文件执行创建目标目录(如果不存在)以及将源存档解压缩到目标目录的实际工作。

---
- name: "Creating {{ item.dest }}"
  file:
    path: "{{ item.dest }}"
    state: directory
- name: "Unarchiving {{ item.src }}"
  unarchive:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
...

希望这样的内容对您有所帮助。