module_availenabled/availenabled.py
2021-09-20 22:57:00 +02:00

82 lines
2.3 KiB
Python

#!/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()