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)}
|