oc_image.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # pylint: skip-file
  2. # flake8: noqa
  3. # pylint: disable=too-many-arguments
  4. class OCImage(OpenShiftCLI):
  5. ''' Class to import and create an imagestream object'''
  6. def __init__(self,
  7. namespace,
  8. registry_url,
  9. image_name,
  10. image_tag,
  11. kubeconfig='/etc/origin/master/admin.kubeconfig',
  12. verbose=False):
  13. ''' Constructor for OCImage'''
  14. super(OCImage, self).__init__(namespace, kubeconfig)
  15. self.registry_url = registry_url
  16. self.image_name = image_name
  17. self.image_tag = image_tag
  18. self.verbose = verbose
  19. def get(self):
  20. '''return a image by name '''
  21. results = self._get('imagestream', self.image_name)
  22. results['exists'] = False
  23. if results['returncode'] == 0 and results['results'][0]:
  24. results['exists'] = True
  25. if results['returncode'] != 0 and '"{}" not found'.format(self.image_name) in results['stderr']:
  26. results['returncode'] = 0
  27. return results
  28. def create(self, url=None, name=None, tag=None):
  29. '''Create an image '''
  30. return self._import_image(url, name, tag)
  31. # pylint: disable=too-many-return-statements
  32. @staticmethod
  33. def run_ansible(params, check_mode):
  34. ''' run the oc_image module'''
  35. ocimage = OCImage(params['namespace'],
  36. params['registry_url'],
  37. params['image_name'],
  38. params['image_tag'],
  39. kubeconfig=params['kubeconfig'],
  40. verbose=params['debug'])
  41. state = params['state']
  42. api_rval = ocimage.get()
  43. #####
  44. # Get
  45. #####
  46. if state == 'list':
  47. if api_rval['returncode'] != 0:
  48. return {"failed": True, "msg": api_rval}
  49. return {"changed": False, "results": api_rval, "state": "list"}
  50. ########
  51. # Create
  52. ########
  53. if state == 'present':
  54. if not Utils.exists(api_rval['results'], params['image_name']):
  55. if check_mode:
  56. return {"changed": False, "msg": 'CHECK_MODE: Would have performed a create'}
  57. api_rval = ocimage.create(params['registry_url'],
  58. params['image_name'],
  59. params['image_tag'])
  60. if api_rval['returncode'] != 0:
  61. return {"failed": True, "msg": api_rval}
  62. # return the newly created object
  63. api_rval = ocimage.get()
  64. if api_rval['returncode'] != 0:
  65. return {"failed": True, "msg": api_rval}
  66. return {"changed": True, "results": api_rval, "state": "present"}
  67. # image exists, no change
  68. return {"changed": False, "results": api_rval, "state": "present"}
  69. return {"failed": True, "changed": False, "msg": "Unknown state passed. {0}".format(state)}