123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/usr/bin/python
- import os
- from operator import xor
- def main():
- module = AnsibleModule(
- argument_spec = dict(
- path = dict(required=True),
- base = dict(default=""),
- p_enabled = dict(default='enabled'),
- p_available = dict(default='available'),
- name = dict(required=True),
- suffix= dict(default='.conf'),
- state = dict(default='present', choices=['present', 'absent']),
- )
- )
- # path: /etc/apache2 or /etc/apache2/conf-
- # base: conf- or ""
- # name: FILENAME or FILENAME.conf
- path = module.params.get('path')
- base = module.params.get('base')
- p_enabled = module.params.get('p_enabled')
- p_available = module.params.get('p_available')
- name = module.params.get('name')
- suffix = module.params.get('suffix')
- state = module.params.get('state') == 'present'
- # pre-checks
- if os.path.isdir(path):
- p_available = os.path.join(path, base + p_available)
- p_enabled = os.path.join(path, base + p_enabled)
- else:
- p_available = path + p_available
- p_enabled = path + p_enabled
- for p in [p_available, p_enabled]:
- if not os.path.isdir(p):
- module.fail_json(msg="Directory %s not found" % p)
- # define internal variables
- src = os.path.join(p_available, name + suffix)
- dest = os.path.join(p_enabled, name + suffix)
- if not (os.path.isfile(src) or os.path.islink(src)):
- module.fail_json(msg="Source not found")
- dest_exists=True
- if not (os.path.isfile(dest) or os.path.islink(dest)):
- dest_exists=False
- # if there's no difference, no change, exit "ok"
- if not xor(state, dest_exists):
- module.exit_json()
- if state:
- # try to create symlink
- try:
- os.symlink(os.path.relpath(src, p_enabled), dest)
- except:
- module.fail_json(msg="Could not create symlink")
- else:
- # test, if symlink
- if not os.path.islink(dest):
- module.fail_json(msg="Destination is not a symlink")
- # try to remove symlink
- try:
- os.unlink(dest)
- except:
- module.fail_json(msg="Could not remove symlink")
- module.exit_json(changed=True)
- from ansible.module_utils.basic import *
- if __name__ == '__main__':
- main()
|