secret.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # pylint: skip-file
  2. # pylint: disable=too-many-branches
  3. def main():
  4. '''
  5. ansible oc module for secrets
  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. delete_after=dict(default=False, type='bool'),
  17. contents=dict(default=None, type='list'),
  18. force=dict(default=False, type='bool'),
  19. ),
  20. mutually_exclusive=[["contents", "files"]],
  21. supports_check_mode=True,
  22. )
  23. occmd = Secret(module.params['namespace'],
  24. module.params['name'],
  25. kubeconfig=module.params['kubeconfig'],
  26. verbose=module.params['debug'])
  27. state = module.params['state']
  28. api_rval = occmd.get()
  29. #####
  30. # Get
  31. #####
  32. if state == 'list':
  33. module.exit_json(changed=False, results=api_rval['results'], state="list")
  34. if not module.params['name']:
  35. module.fail_json(msg='Please specify a name when state is absent|present.')
  36. ########
  37. # Delete
  38. ########
  39. if state == 'absent':
  40. if not Utils.exists(api_rval['results'], module.params['name']):
  41. module.exit_json(changed=False, state="absent")
  42. if module.check_mode:
  43. module.exit_json(change=False, msg='Would have performed a delete.')
  44. api_rval = occmd.delete()
  45. module.exit_json(changed=True, results=api_rval, state="absent")
  46. if state == 'present':
  47. if module.params['files']:
  48. files = module.params['files']
  49. elif module.params['contents']:
  50. files = Utils.create_files_from_contents(module.params['contents'])
  51. else:
  52. module.fail_json(msg='Either specify files or contents.')
  53. ########
  54. # Create
  55. ########
  56. if not Utils.exists(api_rval['results'], module.params['name']):
  57. if module.check_mode:
  58. module.exit_json(change=False, msg='Would have performed a create.')
  59. api_rval = occmd.create(module.params['files'], module.params['contents'])
  60. # Remove files
  61. if files and module.params['delete_after']:
  62. Utils.cleanup(files)
  63. module.exit_json(changed=True, results=api_rval, state="present")
  64. ########
  65. # Update
  66. ########
  67. secret = occmd.prep_secret(module.params['files'], module.params['contents'])
  68. if secret['returncode'] != 0:
  69. module.fail_json(msg=secret)
  70. if Utils.check_def_equal(secret['results'], api_rval['results'][0]):
  71. # Remove files
  72. if files and module.params['delete_after']:
  73. Utils.cleanup(files)
  74. module.exit_json(changed=False, results=secret['results'], state="present")
  75. if module.check_mode:
  76. module.exit_json(change=False, msg='Would have performed an update.')
  77. api_rval = occmd.update(files, force=module.params['force'])
  78. # Remove files
  79. if secret and module.params['delete_after']:
  80. Utils.cleanup(files)
  81. if api_rval['returncode'] != 0:
  82. module.fail_json(msg=api_rval)
  83. module.exit_json(changed=True, results=api_rval, state="present")
  84. module.exit_json(failed=True,
  85. changed=False,
  86. results='Unknown state passed. %s' % state,
  87. state="unknown")
  88. # pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled
  89. # import module snippets. This are required
  90. from ansible.module_utils.basic import *
  91. main()