"""
-Configure interfaces inside a container by pulling down files via URL.
+Update /etc/hosts in slivers to contain the contents of the sliver_hostmap tag.
"""
import logger
def GetSlivers(data, config=None, plc=None):
if 'slivers' not in data:
- logger.log_missing_data("hostmap.GetSlivers",'slivers')
+ logger.log_missing_data("hostmap.GetSlivers", 'slivers')
return
if 'hostname' not in data:
hostname = data['hostname']
+ hostname_filter = ".".join(hostname.split(".")[1:])
+
for sliver in data['slivers']:
slicename = sliver['name']
for tag in sliver['attributes']:
if not os.path.exists(fn):
continue
- contents = file(fn,"r").read()
+ with open(fn) as f:
+ contents = f.read()
hostmap = []
for index, entry in enumerate(tag["value"].split("\n")):
parts = entry.split(" ")
if len(parts)==2:
- if parts[1] == hostname:
- line = "127.0.0.1 %s.%s private%d" % (slicename, parts[1], index)
- else:
- line = "%s %s.%s private%d" % (parts[0], slicename, parts[1], index)
+ line = "%s pvt.%s private%d" % (parts[0], parts[1], index)
+
+ if (parts[0].startswith("10.")) and (hostname_filter not in parts[1]):
+ continue
if (index==0):
line = line + " headnode"
+ if parts[1] == hostname:
+ line = line + " pvt.self"
+
hostmap.append(line)
hostmap = "\n".join(hostmap)
# remove anything between PREFIX and SUFFIX from contents
- pattern = PREFIX + ".*" + SUFFIX
+ pattern = PREFIX + ".*" + SUFFIX + "\n"
regex = re.compile(pattern, re.DOTALL)
if regex.search(contents) != None:
contents = regex.sub(hostmap, contents)
contents = contents + hostmap
try:
- file(fn, "w").write(contents)
+ with open(fn, "w") as f:
+ f.write(contents)
except:
logger.log_exc("hostmap (%s): failed to write %s" % (slicename, fn))
-