Create variables based on hostname

41 views
Skip to first unread message

Yz Xyz

unread,
Jan 2, 2018, 12:53:03 PM1/2/18
to Ansible Project
Hi - I want to create 3 variables based on hostname. These variables will be used inside other tasks.

Host Pattern: mabos<qa1><component><nodenum>
Ex: mabosqa1was01

what is the best way to create variables and use for subsequent task  on host  ?

should I write 3 different shell scripts to register appropriate variables ?

Thanks,


Mike Klebolt

unread,
Jan 4, 2018, 4:09:23 PM1/4/18
to Ansible Project
You can create your own filter.  I've created this one that you should easily be able to modify to suit your needs.

import math
import collections
from ansible import errors

def uppercase_all(arg):
     
return arg.upper()

def extract_siteid(arg):
   
if len(arg) < 10:
       
return FALSE
    site_id
= arg[:7]
   
return site_id

def extract_datacenter(arg):
   
if len(arg) < 10:
       
return FALSE
    datacenter
= arg[7:10]
   
return datacenter






class FilterModule(object):
     
def filters(self):
         
return {'uppercase_all': uppercase_all, 'extract_siteid': extract_siteid, 'extract_datacenter': extract_datacenter}

Brian Coca

unread,
Jun 15, 2018, 7:40:13 PM6/15/18
to Ansible Project
just define vars based on inventory_hostname:

group_vars/all.yml

nodenum: '{{inventory_hostname|regex_replace("mabos.+?(\d+)$", "\1")}}'
component: '{{inventory_hostname|regex_replace("mabos.+?\d+(\w+?)\d+$", "\1")}}'
...





--
----------
Brian Coca
Reply all
Reply to author
Forward
0 new messages