File: 10-merge-svc-map-files

package info (click to toggle)
python-diskimage-builder 3.37.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,572 kB
  • sloc: sh: 7,380; python: 6,444; makefile: 37
file content (86 lines) | stat: -rwxr-xr-x 2,809 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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', 'fedora', 'rhel']:
        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()