8b08d212c3
Now that DIB is python3 only we can remove a hack that made sure
scripts outside the chroot ran with the correct version of python.
This is necessary as python3 does not resolve symbolic links to the
binary like python2.x did, which causes element scripts to fail finding
modules when DIB was run from inside a venv.
This patch does the following:
1. Reverts 9c7b8d1714
which was the
workaround for mixed python2/3 environments.
2. Updates the scripts to use "python3" instead of "python".
Change-Id: If2402bb02fc8a4778fa9434fa167ea1fafd87c28
86 lines
2.8 KiB
Python
Executable file
86 lines
2.8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import os
|
|
import sys
|
|
|
|
import yaml
|
|
|
|
|
|
def os_family(distro):
|
|
"Given a distribution, returns a operating system family."
|
|
family = None
|
|
if distro in ['centos', 'centos7', '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.
|
|
|
|
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.items():
|
|
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 = yaml.safe_load(os.environ.get("IMAGE_ELEMENT_YAML"))
|
|
service_names = dict()
|
|
for element, path in elements.items():
|
|
data_path = os.path.join(path, "svc-map")
|
|
if os.path.exists(data_path):
|
|
with open(data_path, 'r') as dataFile:
|
|
data = yaml.safe_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(os.environ['TMP_MOUNT_PATH'], 'tmp', 'svc-map-services'))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|