Hi Michael,

Thanks for your reply - and my apologies for pasting with all the syntax 
colours and backgrounds - I would have removed those if I was be able to 
preview how ugly my post would look like :-)

15 minutes past my submit I was able to figure out myself that my claim 
that this piece of code works was wrong:

  local_action: uri user={{ jenkins.admin }} password={{ jenkins.password 
}} method=POST url="http://{{ jenkins.master_host }}:{{ jenkins.master_port 
}}/computer/doCreateItem?name={{ node_name 
}}&type=hudson.slaves.DumbSlave&json={{ lookup('file', '/tmp/{{ node_name 
}}_newslave.json' )|urlencode }}" force_basic_auth=yes return_content=yes 
status_code=302

so I had to rewrite it as 

  local_action: uri user='{{ jenkins.admin }}' password='{{ 
jenkins.password }}' method=POST url="http://{{ jenkins.master_host }}:{{ 
jenkins.master_port }}/computer/doCreateItem?name={{ node_name 
}}&type=hudson.slaves.DumbSlave&json={{ lookup('file', '/tmp/' ~ node_name 
~ '_newslave.json' )|urlencode }}" force_basic_auth=yes return_content=yes 
status_code=302

along the lines of what you proposed. Unfortunately I was not able to edit 
or reply to my post, as it was not approved as yet.
And yes, urlencode works there inside {{}} after the lookup. But thanks for 
the hint about the `set_fact:`, it is handy indeed - I was in fact looking 
for something like that and somehow missed to spot it on the Ansible 
modules page <http://www.ansibleworks.com/docs/modules.html#set-fact>. May 
be it's worthwhile to mention it on a Best Practices 
page<http://www.ansibleworks.com/docs/playbooks_best_practices.html>
?

And yes, I am using the 'develop' branch of Ansible - and will be stating 
the version in my next posts should they occur.

Thanks again for your time and hints,

Best regards,
Roman

On Thursday, December 12, 2013 12:20:40 AM UTC+11, Michael DeHaan wrote:
>
> Hi Roman,
>
> Happy to help.
>
> Small request -- can you please send just text based mail in the future? 
>  It would make this a lot easier to read.  Thanks!
>
> Quick public service announcement, assuming you are using a recent 
> Ansible, you should simplify your clauses:
>
> when: none_name not in node_query.json.computer | 
> map(attribute='displayName') | list 
>
> The need to do all the {{ dereference }} is not needed in recent Ansible 
> and can cause problems.
>
> Also, your lookup is should not nest templates, that won't work.
>
> It should look like:
>
> lookup('file', '/tmp/' + node_name + '_newslave.json')
>
> I'm pretty sure you can't urlencode right there inside the lookup 
> statement either, so I'd recommend this:
>
> set_fact:  my_path={{ '/tmp' + node_name + '_newslave.json' | urlencode }}
>
> Save that variable and then it looks much much cleaner!
>
> {{ lookup('file', my_path) }}
>
> I would also define a variable for the URL so your playbooks can be 
> cleaner.
>
> Also, in the future please report what Ansible version you are using when 
> you have questions, as that can sometimes be relevant.
>
> Thanks and hope this helps, let us know if you have more questions!
>
> --Michael
>
>
> On Wed, Dec 11, 2013 at 1:19 AM, Roman Revyakin 
> <[email protected]<javascript:>
> > wrote:
>
>> Hi guys,
>>
>> Can anyone tell me why variables in this simple playbook do not get 
>> expanded?
>>
>> ---
>>
>> - hosts: all
>>
>>   gather_facts: false
>>
>>   user: ubuntu
>>
>>   vars:
>>
>>     tokens_file: /tmp/tokens.yml
>>
>>   tasks:
>>
>>   - debug: msg="{{ lookup('file', '{{ tokens_file }}' ) }}"
>>
>> All I get is
>>
>> $ ansible-playbook -i host -vvv test_lookup.yaml 
>>
>>
>> PLAY [all] 
>> ******************************************************************** 
>>
>> ERROR: /private/tmp/{{tokens_file}} does not exist
>>
>> And this is mind-boggling, because tasks like below from my another 
>> playbook work fine, with all variables getting expanded correctly:
>>
>> - name: register slave on Jenkins master
>>
>>   local_action: uri user={{ jenkins.admin }} password={{jenkins.password 
>> }} method=POST url="http://{{ jenkins.master_host }}:{{ 
>> jenkins.master_port }}/computer/doCreateItem?name={{ node_name 
>> }}&type=hudson.slaves.DumbSlave&json={{ lookup('file', '/tmp/{{ node_name 
>> }}_newslave.json' )|urlencode }}" force_basic_auth=yes 
>> return_content=yesstatus_code=
>> 302
>>
>>   tags:
>>
>>    - jenkins_slave
>>
>>    - setup
>>
>>   when: '"{{ node_name }}" not in "{{ 
>> node_query.json.computer|map(attribute="displayName")|list }}"'
>>
>> Any hint is greatly appreciated!
>>
>> Thanks!
>>
>>  -- 
>> 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:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
>
> -- 
> Michael DeHaan <[email protected] <javascript:>>
> CTO, AnsibleWorks, Inc.
> http://www.ansibleworks.com/
>
>  

-- 
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].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to