obj.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. # pylint: skip-file
  2. # pylint: disable=too-many-branches
  3. def main():
  4. '''
  5. ansible oc module for services
  6. '''
  7. module = AnsibleModule(
  8. argument_spec=dict(
  9. kubeconfig=dict(default='/etc/origin/master/admin.kubeconfig', type='str'),
  10. state=dict(default='present', type='str',
  11. choices=['present', 'absent', 'list']),
  12. debug=dict(default=False, type='bool'),
  13. namespace=dict(default='default', type='str'),
  14. name=dict(default=None, type='str'),
  15. files=dict(default=None, type='list'),
  16. kind=dict(required=True,
  17. type='str',
  18. choices=['dc', 'deploymentconfig',
  19. 'svc', 'service',
  20. 'secret',
  21. ]),
  22. delete_after=dict(default=False, type='bool'),
  23. content=dict(default=None, type='dict'),
  24. force=dict(default=False, type='bool'),
  25. ),
  26. mutually_exclusive=[["content", "files"]],
  27. supports_check_mode=True,
  28. )
  29. ocobj = OCObject(module.params['kind'],
  30. module.params['namespace'],
  31. module.params['name'],
  32. kubeconfig=module.params['kubeconfig'],
  33. verbose=module.params['debug'])
  34. state = module.params['state']
  35. api_rval = ocobj.get()
  36. #####
  37. # Get
  38. #####
  39. if state == 'list':
  40. module.exit_json(changed=False, results=api_rval['results'], state="list")
  41. if not module.params['name']:
  42. module.fail_json(msg='Please specify a name when state is absent|present.')
  43. ########
  44. # Delete
  45. ########
  46. if state == 'absent':
  47. if not Utils.exists(api_rval['results'], module.params['name']):
  48. module.exit_json(changed=False, state="absent")
  49. if module.check_mode:
  50. module.exit_json(change=False, msg='Would have performed a delete.')
  51. api_rval = ocobj.delete()
  52. module.exit_json(changed=True, results=api_rval, state="absent")
  53. if state == 'present':
  54. ########
  55. # Create
  56. ########
  57. if not Utils.exists(api_rval['results'], module.params['name']):
  58. if module.check_mode:
  59. module.exit_json(change=False, msg='Would have performed a create.')
  60. # Create it here
  61. api_rval = ocobj.create(module.params['files'], module.params['content'])
  62. if api_rval['returncode'] != 0:
  63. module.fail_json(msg=api_rval)
  64. # return the created object
  65. api_rval = ocobj.get()
  66. if api_rval['returncode'] != 0:
  67. module.fail_json(msg=api_rval)
  68. # Remove files
  69. if module.params['files'] and module.params['delete_after']:
  70. Utils.cleanup(module.params['files'])
  71. module.exit_json(changed=True, results=api_rval, state="present")
  72. ########
  73. # Update
  74. ########
  75. # if a file path is passed, use it.
  76. update = ocobj.needs_update(module.params['files'], module.params['content'])
  77. if not isinstance(update, bool):
  78. module.fail_json(msg=update)
  79. # No changes
  80. if not update:
  81. if module.params['files'] and module.params['delete_after']:
  82. Utils.cleanup(module.params['files'])
  83. module.exit_json(changed=False, results=api_rval['results'][0], state="present")
  84. if module.check_mode:
  85. module.exit_json(change=False, msg='Would have performed an update.')
  86. api_rval = ocobj.update(module.params['files'],
  87. module.params['content'],
  88. module.params['force'])
  89. if api_rval['returncode'] != 0:
  90. module.fail_json(msg=api_rval)
  91. # return the created object
  92. api_rval = ocobj.get()
  93. if api_rval['returncode'] != 0:
  94. module.fail_json(msg=api_rval)
  95. module.exit_json(changed=True, results=api_rval, state="present")
  96. module.exit_json(failed=True,
  97. changed=False,
  98. results='Unknown state passed. %s' % state,
  99. state="unknown")
  100. # pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled
  101. # import module snippets. This are required
  102. from ansible.module_utils.basic import *
  103. main()