import re
import logging
import salt.utils.network
log = logging.getLogger(__name__)
dc_by_octet = {
'20': 'corp',
'30': 'foo',
'40': 'foo',
'31': 'bar',
'41': 'bar',
'50': 'baz',
'51': 'ugh'
}
aws_by_octet = dict(
{ str(i): 'us-east-1' for i in range(60, 80) }.items() +
{ str(i): 'eu-central-1' for i in range(80, 100) }.items()
)
def get_datacenter():
'''
Return the server's datacenter based on its IP address. For simplicity's sake,
treat the local DMZ (192.168.34.0/24) as a datacenter.
'''
aws = False
ipaddrs = salt.utils.network.ip_addrs()
matches_10 = filter(lambda ip: re.search(r'^10\.', ip), ipaddrs)
matches_192 = filter(lambda ip: re.search(r'^192\.168\.34\.', ip), ipaddrs)
if len(matches_192) == 1 and len(matches_10) == 0:
datacenter = 'dmz'
elif len(matches_192) == 0 and len(matches_10) > 0:
octet = matches_10[0].split('.')[1]
if octet in dc_by_octet.keys():
datacenter = dc_by_octet[octet]
elif octet in aws_by_octet.keys():
datacenter = aws_by_octet[octet]
aws = True
else:
datacenter = 'unknown'
else:
datacenter = 'unknown'
return { 'datacenter': datacenter, 'aws': aws }
if __name__ == '__main__':
print get_datacenter()
https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.match.html
I also happen to setup a master or two per logical dc, so you could target minions based on the master grain.
{% macro dc_by_octets(octets, dc) %}
{% for octet in octets %}
{% set cidr = '10.' ~ octet ~ '.0.0/16' %}
{{ cidr | indent(2, true) }}:
- match: ipcidr
- datacenter.{{ dc }}
{% endfor %}
{% endmacro %}
'192.168.10.0/24':
- match: ipcidr
- datacenter.dmz
{{ dc_by_octets([20], 'corp') }}
{{ dc_by_octets([30, 31], 'foo') }}
{{ dc_by_octets([40, 41], 'bar') }}
{{ dc_by_octets([50], 'baz') }}
{{ dc_by_octets([60], 'meh') }}
{{ dc_by_octets(range(60, 80), 'us-east-1') }}
{{ dc_by_octets(range(80, 100), 'eu-central-1') }}
base:
'*':
- datacenters
{% for dc in pillar.keys('datacenters') %}
{% for cidr in pillar.get('datacenters:' ~ dc ~ ':subnets') %}
{{ cidr | indent(2, true) }}:
- match: ipcidr
- datacenter.{{ dc }}
{% endfor %}
{% endfor %}
To view this discussion on the web visit https://groups.google.com/d/msgid/salt-users/3eaa4104-1a7f-4eb1-bfb6-78864aa8bd97%40googlegroups.com.--
You received this message because you are subscribed to the Google Groups "Salt-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to salt-users+unsubscribe@googlegroups.com.