71 lines
2.3 KiB
Text
71 lines
2.3 KiB
Text
|
#!/usr/bin/env python
|
||
|
import os
|
||
|
import sys
|
||
|
import yaml
|
||
|
|
||
|
|
||
|
def os_family(distro):
|
||
|
"""Given a distribution, returns a operating system family."""
|
||
|
family = None
|
||
|
if distro in ['centos', 'fedora', 'rhel', 'rhel7']:
|
||
|
family = 'redhat'
|
||
|
elif distro in ['debian', 'ubuntu']:
|
||
|
family = 'debian'
|
||
|
elif distro == 'opensuse':
|
||
|
family = 'suse'
|
||
|
return family
|
||
|
|
||
|
|
||
|
def merge_data(source, destination, distro):
|
||
|
"""Merges two dictionaries and filters on distro, family, or default
|
||
|
(in order)."""
|
||
|
result = dict()
|
||
|
result.update(destination)
|
||
|
family = os_family(distro)
|
||
|
for servicename, mapping in source.iteritems():
|
||
|
if servicename in result:
|
||
|
raise Exception("%s already found in services list" % servicename)
|
||
|
if distro in mapping:
|
||
|
result[servicename] = mapping.get(distro)
|
||
|
elif family in mapping:
|
||
|
result[servicename] = mapping.get(family)
|
||
|
elif 'default' in mapping:
|
||
|
result[servicename] = mapping.get('default')
|
||
|
else:
|
||
|
result[servicename] = servicename
|
||
|
|
||
|
return result
|
||
|
|
||
|
|
||
|
def write_data_to_file(data, service_file_path):
|
||
|
"""Writes yaml data to a specified path."""
|
||
|
with open(service_file_path, 'w') as destination:
|
||
|
yaml.dump(data, destination, default_flow_style=False)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
elements = os.environ.get("IMAGE_ELEMENT").split(' ')
|
||
|
element_paths = os.environ.get("ELEMENTS_PATH").split(':')
|
||
|
service_names = dict()
|
||
|
for element in elements:
|
||
|
for element_path in element_paths:
|
||
|
data_path = os.path.join(element_path, element, "svc-map")
|
||
|
if os.path.exists(data_path):
|
||
|
with open(data_path, 'r') as dataFile:
|
||
|
data = yaml.load(dataFile.read())
|
||
|
try:
|
||
|
service_names = merge_data(
|
||
|
data,
|
||
|
service_names,
|
||
|
os.environ.get("DISTRO_NAME"))
|
||
|
except Exception as err:
|
||
|
print("%s. Check %s for duplicate \
|
||
|
service name." % (err, element))
|
||
|
sys.exit(1)
|
||
|
|
||
|
write_data_to_file(service_names, os.path.join("/tmp", 'svc-map-services'))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|