mujahed alwagia
mujahed alwagia

Reputation: 23

Pass get_url downloaded zip files as variable to unarchive

I've just started to use Ansible to automate binary deployments.

When downloading the zip files and trying to unzip it by passing the downloaded zip files as variable to be unzipped/unarchived but an error is always thrown.

Snippet of the YML below:

- name: Download binaries
  get_url:
    url={{ download_server }}
    url_username={{ username }}
    url_password={{ passwd }}
    dest={{ base_dir }}
  register: bin_files

- set_fact:
  my_unzipped_file: "{{ bin_files[0].stdout }}"

- name: UNZIPPING the files
  unarchive: src={{ base_dir }}/{{ item }} dest={{ base_dir }} copy=no
  with_items: my_unzipped_file

Upvotes: 2

Views: 10743

Answers (1)

levich
levich

Reputation: 698

If it wasn't a user/pass protected URL you could erase the 'get_url' module and place the URL in the src: of Unarchive module.

Check the examples: http://docs.ansible.com/ansible/latest/modules/unarchive_module.html

another way is to download all your files into a directory {{ bin_dir }} for example and use within the unarchive module 'with_fileglob' to unzip all .zip/.tar.gz and such

Example:

- name: UNZIPPING the files
  unarchive:
    src: "{{ item }}"
    dest: "{{ base_dir }}/"
    copy: no
  with_fileglob:
  - "{{ base_dir }}/*.zip"
  - "{{ base_dir }}/*.tar.gz"

another tip for you IMHO you should drop the '=' code style in modules and move to ':' as you can see above, it's more human-readable

You corrected SNIPPET:

- name: Download binaries
  get_url:
    url: {{ download_server }}
    url_username: {{ username }}
    url_passwor: {{ passwd }}
    dest: {{ base_dir }}
  register: bin_files

- name: UNZIPPING the files
  unarchive:
    src: {{ base_dir }}/{{ item }}
    dest: {{ base_dir }}
    copy: no
  with_items:
  - "{{ bin_files.stdout }}"

Upvotes: 3

Related Questions