ansible“ unarchive”模块未按预期运行

时间:2018-11-27 13:07:49

标签: ansible ansible-2.x ansible-inventory ansible-facts ansible-template

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

我正在尝试2种条件

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

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

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

NOT NULL

1 个答案:

答案 0 :(得分:1)

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

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

foo1.zip和foo2.tgz只是测试压缩和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 }}"
...

希望这样的事情对您有所帮助。