availenabled.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/python
  2. import os
  3. from operator import xor
  4. def main():
  5. module = AnsibleModule(
  6. argument_spec = dict(
  7. path = dict(required=True),
  8. base = dict(default=""),
  9. p_enabled = dict(default='enabled'),
  10. p_available = dict(default='available'),
  11. name = dict(required=True),
  12. suffix= dict(default='.conf'),
  13. state = dict(default='present', choices=['present', 'absent']),
  14. )
  15. )
  16. # path: /etc/apache2 or /etc/apache2/conf-
  17. # base: conf- or ""
  18. # name: FILENAME or FILENAME.conf
  19. path = module.params.get('path')
  20. base = module.params.get('base')
  21. p_enabled = module.params.get('p_enabled')
  22. p_available = module.params.get('p_available')
  23. name = module.params.get('name')
  24. suffix = module.params.get('suffix')
  25. state = module.params.get('state') == 'present'
  26. # pre-checks
  27. if os.path.isdir(path):
  28. p_available = os.path.join(path, base + p_available)
  29. p_enabled = os.path.join(path, base + p_enabled)
  30. else:
  31. p_available = path + p_available
  32. p_enabled = path + p_enabled
  33. for p in [p_available, p_enabled]:
  34. if not os.path.isdir(p):
  35. module.fail_json(msg="Directory %s not found" % p)
  36. # define internal variables
  37. src = os.path.join(p_available, name + suffix)
  38. dest = os.path.join(p_enabled, name + suffix)
  39. if not (os.path.isfile(src) or os.path.islink(src)):
  40. module.fail_json(msg="Source not found")
  41. dest_exists=True
  42. if not (os.path.isfile(dest) or os.path.islink(dest)):
  43. dest_exists=False
  44. # if there's no difference, no change, exit "ok"
  45. if not xor(state, dest_exists):
  46. module.exit_json()
  47. if state:
  48. # try to create symlink
  49. try:
  50. os.symlink(os.path.relpath(src, p_enabled), dest)
  51. except:
  52. module.fail_json(msg="Could not create symlink")
  53. else:
  54. # test, if symlink
  55. if not os.path.islink(dest):
  56. module.fail_json(msg="Destination is not a symlink")
  57. # try to remove symlink
  58. try:
  59. os.unlink(dest)
  60. except:
  61. module.fail_json(msg="Could not remove symlink")
  62. module.exit_json(changed=True)
  63. from ansible.module_utils.basic import *
  64. if __name__ == '__main__':
  65. main()