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 }}"
...
希望这样的内容对您有所帮助。
我的目标是将控制器中的 .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 }}"
...
希望这样的内容对您有所帮助。