Hello James,

nameoffile.stat.isreg is undefined and nameoffile.stat.isreg == false,  
evaluates to true when the file does not exists. I just deleted the target 
file, ran the playbook and this one copies the src to target. If the 
destination exists does not do anything.

I tried with the statement that you suggested:

           flag_to_overwrite or nameoffile.stat.isreg is undefined or not 
nameoffile.stat.isreg

but also does not matter what value flag_to_overwrite has, if the 
destination exists, the src it isn't copied. 

The contents of vars/main.yml is:
---
flag_to_overwrite: true



How to use variables defined outside the *when* clause of the stat module?


I tested again placing inside of* when* clause:

flag_to_overwrite == true 

but the file is only copied if destination does not exist.


If the destination does not exist placing flag_to_overwrite to false the 
playbook does not change anything (leaving only ----- when: 
flag_to_overwrite in the stat module invocation), changing 
flag_to_overwrite to true does copy the src to dest only one time. (i.e. if 
destination exists it is not overwritten even if flag_to_overwrite is set 
to true).


Thanks for your suggestions.



Adam

On Monday, April 6, 2015 at 11:03:19 AM UTC-5, James Cammarata wrote:
>
> Hi Adam, the logic you have there is the problem. "(nameoffile.stat.isreg 
> is undefined and nameoffile.stat.isreg == false)" will never evaluate to 
> true, as "isreg" cannot be both undefined and false. I think you want to 
> change the and to an or, as follows (also simplified a little):
>
> when: flag_to_overwrite or nameoffile.stat.isreg is undefined or not 
> nameoffile.stat.isreg
>
> Hope that helps!
>
>
> James Cammarata
> Director, Ansible Core Engineering
> github: jimi-c
>
> On Sat, Apr 4, 2015 at 1:53 AM, Adam R. <[email protected] <javascript:>> 
> wrote:
>
>> Hello,
>>
>>
>> I am using the stat module to check if a file exist, if not, copy from 
>> src to destination. I also want to setup a flag in order to overwrite 
>> destination, to achieve this, i am using a conditional like the one on the 
>> *when* clause:
>>
>> - stat: path=/path/to/file
>>   register: nameoffile
>> - copy: src=/home/user/source.tar.gz dest=/destination/path/file owner=root 
>> group=root
>>   when: flag_to_overwrite == true or (nameoffile.stat.isreg is undefined 
>> and nameoffile.stat.isreg == false)
>>
>>
>> In vars/main.yml:
>> flag_to_overwrite: true
>>
>>
>> If the destination does exist and flag_to_overwrite is set to true,  when 
>> i run the playbook, ansible-playbook doesn't show any error, but the file 
>> is not overwritten. 
>>
>> If i use only the variable flag_to_overwrite, the value it's been 
>> evaluated and works ok (true copies the file, false does not do anything).
>>   when: flag_to_overwrite == true
>>
>>
>> I have used:
>> when: flag_to_overwrite or (nameoffile.stat.isreg is undefined and 
>> nameoffile.stat.isreg == false)
>>
>> when: (flag_to_overwrite == true) or (nameoffile.stat.isreg is undefined 
>> and nameoffile.stat.isreg == false)
>>
>> but the compound conditional does not work.
>>
>>
>> Any hint?
>>
>>
>> Thanks in advance!
>>
>>
>> Ansible 1.7
>>
>>
>>
>>
>>
>>  -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/74d19de5-32a7-4b40-b31b-3617fe18af5e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/74d19de5-32a7-4b40-b31b-3617fe18af5e%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> 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/35582265-2ded-4d4e-b4ae-7e1bebb8dbd5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to