Hi Michael,

Sorry about the SO mix-up.

The reason I don't want to define it at the inventory or group level is it
isn't associated with them - it's associated with the role - because the
service wherever it runs will use the same jars - and because the jars
often have version numbers in that will change slowly with release - so it
doesn't make sense to pass them in every time but also it makes sense to
have them in a config so they can be changed without breaking the template.

Actually, it turns out it's easy and I was being stupid because the "best
practice" document does say that I can create vars at the role level (as
Leucos pointed out, thanks!). My next question was going to be if roles can
share vars but I am guessing by your reply above they can via the common
task just like handlers.

For the list and map, this is how I would do it Python - I'm just keen to
avoid duplicate config values.

build_server_path = 'http://builderserver/path'
dest_path = '/dest/path/'
jars = {'pathA':'jarA', 'pathB': 'jarB', 'pathC': 'jarC'}

# jars have path on build server because they come from different modules
urls = [build_server_path + k + '/' + jars[k] for k in jars]

# but for service execution put them one directory and generate classpath
to simplify things
dest_jars = ['/dest/path/' + jars[k] for k in jars]
classpath = ':'.join(dest_jars)

download(urls, dest_path)
set_classpath(classpath)

Thanks,

Mark


On 24 February 2014 11:55, Michael DeHaan <[email protected]> wrote:

>
>
>
> On Mon, Feb 24, 2014 at 2:45 PM, Mark Butler <[email protected]>wrote:
>
>> Hello team,
>>
>> I am getting started with ansible but I have a number of questions.
>> Apologies in advance for the rather noob questions:
>>
>>
>> 1. In my inventory, is there anyway I can specify a single domain for all
>> the hosts e.g.
>>
>> [myhosts]
>> hostA
>> hostB
>>
>> rather than
>>
>> [myhosts]
>> hostA.example.com
>> hostB.example.com
>>
>> Given the requirement that I might be run tests from outside the domain?
>>
>
>
> There is not a way to set the domain name suffix on a group all together.
>
> OS mechanisms on short filenames (i.e. resolv.conf) will apply
>
>
>>
>>
>> 2. Many of my roles need to call supervisor when they have finished so
>> they all use the same handler:
>>
>> ---
>> - name: restart supervisor
>>   service: name=supervisor state=restarted
>>
>> However at the moment I have the same duplicated handler file for each
>> role - how can I avoid this and have a single handler file?
>>
>
> Yes, you can define the handler in a common role and just use it once.
>
> It's ok if the role doesn't have a tasks file too.
>
>
>>
>>
>> 3. Is it possible to create strings from list?
>>
>> I need to create a classpath variable - this is how I do it currently:
>>
>> classpath: "{{ dest }}jarA.jar:{{ dest }}jarB.jar:{{ dest }}jarC.jar:{{
>> dest }}jarD.jar"
>>
>
> Yes!   See the "set_fact" module in the module docs, or just define a
> variable like so anywhere else in Ansible.
>
> Variables are lazy-evaluated at the time of use.
>
>
>>
>> In Python I could use a loop to do this. Is there any way to do this in
>> Ansible?
>>
>>
>> 4. Do map style structures exist?
>>
>> Similarly, when I am getting these jars I use a list like this - ideally
>> it would be better to use a map, then generate the list from the map to
>> avoid configuration duplication. Is there any way to achieve this?
>>
>> - name: my service | Get jars
>>   action: get_url url={{ build_url }}lastSuccessfulBuild/artifact/{{ item
>> }} dest={{ dest }} mode=0440
>>   with_items:
>>     - pathA/jarA
>>     - pathB/jarB
>>     - pathC/jarC
>>     - pathD/jarD
>>
>
> So what you have above works.
>
> What would be in your map/dictionary?   You can definitely iterate across
> a list of dictionaries and hopefully I can help explain further -- just
> need a bit more context.
>
> Thanks!
>
>
>>
>> Thanks in advance,
>>
>> Mark
>>
>>
>>  --
>> 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/58e4fa83-8ce3-41fc-a6f6-48e8c2f52f3a%40googlegroups.com
>> .
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ansible Project" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/ansible-project/7N9qqACa3lI/unsubscribe.
> To unsubscribe from this group and all its topics, 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/CAEVJ8QMT3390_okm6JZmN3tqZ5gejG7n5ufM9qXwXsnBYBauZg%40mail.gmail.com
> .
>
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
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/CAC_tV581HSSALTmM-7f2JVVAW%2B3yV96udyeer2rRp%3D6-HDMwZQ%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to