summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift/src/class/oc_image.py
blob: d253491278908c76710411de7a44c489a3b0667b (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
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
87
88
89
90
91
# pylint: skip-file
# flake8: noqa


# pylint: disable=too-many-arguments
class OCImage(OpenShiftCLI):
    ''' Class to import and create an imagestream object'''
    def __init__(self,
                 namespace,
                 registry_url,
                 image_name,
                 image_tag,
                 kubeconfig='/etc/origin/master/admin.kubeconfig',
                 verbose=False):
        ''' Constructor for OCImage'''
        super(OCImage, self).__init__(namespace, kubeconfig)
        self.registry_url = registry_url
        self.image_name = image_name
        self.image_tag = image_tag
        self.verbose = verbose

    def get(self):
        '''return a image by name '''
        results = self._get('imagestream', self.image_name)
        results['exists'] = False
        if results['returncode'] == 0 and results['results'][0]:
            results['exists'] = True

        if results['returncode'] != 0 and '"{}" not found'.format(self.image_name) in results['stderr']:
            results['returncode'] = 0

        return results

    def create(self, url=None, name=None, tag=None):
        '''Create an image '''
        return self._import_image(url, name, tag)


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

        ocimage = OCImage(params['namespace'],
                          params['registry_url'],
                          params['image_name'],
                          params['image_tag'],
                          kubeconfig=params['kubeconfig'],
                          verbose=params['debug'])

        state = params['state']

        api_rval = ocimage.get()

        #####
        # Get
        #####
        if state == 'list':
            if api_rval['returncode'] != 0:
                return {"failed": True, "msg": api_rval}
            return {"changed": False, "results": api_rval, "state": "list"}

        ########
        # Create
        ########
        if state == 'present':

            if not Utils.exists(api_rval['results'], params['image_name']):

                if check_mode:
                    return {"changed": False, "msg": 'CHECK_MODE: Would have performed a create'}

                api_rval = ocimage.create(params['registry_url'],
                                          params['image_name'],
                                          params['image_tag'])

                if api_rval['returncode'] != 0:
                    return {"failed": True, "msg": api_rval}

                # return the newly created object
                api_rval = ocimage.get()

                if api_rval['returncode'] != 0:
                    return {"failed": True, "msg": api_rval}

                return {"changed": True, "results": api_rval, "state": "present"}

            # image exists, no change
            return {"changed": False, "results": api_rval, "state": "present"}

        return {"failed": True, "changed": False, "msg": "Unknown state passed. {0}".format(state)}