Try the below (check for indentation)
---
- hosts: all
gather_facts: no
tasks:
- name: Ensure the folder exists!
file:
path: /opt/mypack
state: directory
mode: 0755
- name: Unpack/Unarchive the .zip file!
unarchive:
src: {{ item }}
dest: /opt/mypack
remote_src: no
with_items:
- /etc/ansible/roles/IBM2/files/mypack.zip
- /etc/ansible/roles/IBM2/files/mypack2.zip
On Tuesday, November 27, 2018 at 7:57:23 AM UTC-5, visar wrote:
> Hello Dick,
>
> Thanks for all your suggestions.
>
> I am very sorry for the mistake in my playbook which i copied here.
> Actually as i stated i would need to extract the mypack.zip file which is
> in the controller machine to all my application servers( here by mistake i
> defined as localhost, where as a list of servers are there).
>
> my aim is that extract the .zip file in the controller to the specific
> folder in application servers (because i have another script with this path
> specified for calling the package).
>
> i was trying for 2 conditions
>
> 1) check the target servers directory present or not (eg: /opt/mypack).
> if it present skip else create directory.
> 2) check the above directory already have the extracted file or not. if no
> extract, if yes skip extract.
>
>
>
> I tried with below playbook where i want to extract 2 .zip packages to all
> target servers specific location (/opt/mypack and /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
>
>
> On Tuesday, November 27, 2018 at 4:58:26 PM UTC+5:30, Dick Visser wrote:
>>
>> On Tue, 27 Nov 2018 at 09:52, visar <[email protected]> wrote:
>> >
>> > Hi Experts,
>> >
>> > I have below play book for extracting a .zip file from Ansible
>> controller machine to the target folders. But i noticed that play is not
>> working as expected if the target folder and the unzipped files are already
>> present in the target servers. Could you please guide me here ?
>>
>>
>> Hi
>>
>> Some questions:
>>
>> 1. The playbook is restricted to localhost, and 'extracting a .zip
>> file from Ansible controller machine to the target folders' also
>> indicates you want to extract a ZIP file on the controller machine.
>> But then your talk about 'files are already present in the target
>> servers' - which indicates that you DO want to extract the archive on
>> a remote host. What do you actually mean?
>>
>> 2. You mention that the play 'is not working as expected'. The
>> question then is: what _did_ you expect (and what exactly isn't going
>> as you expected)?
>> 3. You now use a fragile combination of two modules (stat + command)
>> to achieve what can also be done with only one module: file.
>> 4. The 'creates' parameter of the unarchive module should be an
>> absolute path, but you specify it as 'no'.
>> 5. Cosmetically: you define 'source_dir' but then the value is the
>> path of a (ZIP) file. Strictly speaking there is nothing wrong, but it
>> does make things confusing.
>> 6. If this is part of a role (which
>> '/etc/ansible/roles/IBM2/files/mypack.zip' indicates), you could leave
>> out the full path as this will be implicit (i.e. just
>> 'files/mypack.zip')
>>
>> The good news is that, depending on what you really want (still
>> unclear at this point), it could be as simple as use a single
>> unarchive task.
>>
>> At the risk of guessing:
>>
>> - name: Extract file
>> hosts: targethosts
>> vars:
>> zipfile: files/mypack.zip
>> destdir: /opt/mypack
>> tasks:
>> - name: extract zip file
>> unarchive:
>> src: "{{ zipfile }}"
>> dest: "{{ destdir }}"
>>
>>
>>
>>
>> Dick
>>
>>
>>
>> >
>> > ############################################################
>> >
>> > ---
>> >
>> > - name: Extract mypack.zip into /opt/mypack
>> > hosts: localhost
>> > 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 }}/"
>> > creates: no
>> > when: folder_exist.stat.exists == True
>> >
>> > #####################################################################
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> Groups "Ansible Project" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> an email to [email protected].
>> > To post to this group, send email to [email protected].
>> > To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/09e072d7-a3f6-485a-8e9b-fb8d8497228b%40googlegroups.com.
>>
>>
>> > For more options, visit https://groups.google.com/d/optout.
>>
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/41d3add1-87d7-4f7f-96ba-b580c7aebe78%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.