summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift/src/class/oc_sdnvalidator.py
blob: da923337b51114729c1cbea46ccfbada1bf5aed4 (plain)
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
# pylint: skip-file
# flake8: noqa

# pylint: disable=too-many-instance-attributes
class OCSDNValidator(OpenShiftCLI):
    ''' Class to wrap the oc command line tools '''

    def __init__(self, kubeconfig):
        ''' Constructor for OCSDNValidator '''
        # namespace has no meaning for SDN validation, hardcode to 'default'
        super(OCSDNValidator, self).__init__('default', kubeconfig)

    def get(self, kind, invalid_filter):
        ''' return SDN information '''

        rval = self._get(kind)
        if rval['returncode'] != 0:
            return False, rval, []

        return True, rval, filter(invalid_filter, rval['results'][0]['items'])

    # pylint: disable=too-many-return-statements
    @staticmethod
    def run_ansible(params):
        ''' run the idempotent ansible code

            params comes from the ansible portion of this module
        '''

        sdnvalidator = OCSDNValidator(params['kubeconfig'])
        all_invalid = {}
        failed = False

        checks = (
            (
                'hostsubnet',
                lambda x: x['metadata']['name'] != x['host'],
                u'hostsubnets where metadata.name != host',
            ),
            (
                'netnamespace',
                lambda x: x['metadata']['name'] != x['netname'],
                u'netnamespaces where metadata.name != netname',
            ),
        )

        for resource, invalid_filter, invalid_msg in checks:
            success, rval, invalid = sdnvalidator.get(resource, invalid_filter)
            if not success:
                return {'failed': True, 'msg': 'Failed to GET {}.'.format(resource), 'state': 'list', 'results': rval}
            if invalid:
                failed = True
                all_invalid[invalid_msg] = invalid

        if failed:
            return {'failed': True, 'msg': 'All SDN objects are not valid.', 'state': 'list', 'results': all_invalid}

        return {'msg': 'All SDN objects are valid.'}