summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Rüetschi <tr@brief.li>2016-08-30 20:38:16 +0200
committerJohn R Barker <john@johnrbarker.com>2016-08-30 19:38:16 +0100
commitfc18b967f234b35c5a11ef7550c01887f5fa8f35 (patch)
tree09eb7986a42387c3888eee3ed9f2ccb8c14c27c8
parentcd446baf39f0b14c166d32493bea9667320517a8 (diff)
downloadansible-modules-extras-fc18b967f234b35c5a11ef7550c01887f5fa8f35.tar.gz
Feature udm group (#2396)
* UCS udm_group: added Signed-off-by: Tobias Rüetschi <tobias.ruetschi@adfinis-sygroup.ch> * UCS udm_group: updated Signed-off-by: Tobias Rüetschi <tobias.ruetschi@adfinis-sygroup.ch> * UCS udm_group: add key description Signed-off-by: Tobias Rüetschi <tobias.ruetschi@adfinis-sygroup.ch> * python styling Signed-off-by: Tobias Rüetschi <tobias.ruetschi@adfinis-sygroup.ch> * UCS udm_group: updated, add supports check mode Signed-off-by: Tobias Rüetschi <tobias.ruetschi@adfinis-sygroup.ch> * UCS udm_group: updated, add support to modify groups * UCS udm_group: change string formating * UCS udm_group: add type definitions to the argument specification * UCS udm_group: import common code for univention from ansible.module_utils.univention * univention udm_group: add documentation * UCS udm_group: add requirement python >= 2.6 * univention udm_group: add more examples
-rw-r--r--univention/udm_group.py176
1 files changed, 176 insertions, 0 deletions
diff --git a/univention/udm_group.py b/univention/udm_group.py
new file mode 100644
index 00000000..588c7655
--- /dev/null
+++ b/univention/udm_group.py
@@ -0,0 +1,176 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+
+# Copyright (c) 2016, Adfinis SyGroup AG
+# Tobias Rueetschi <tobias.ruetschi@adfinis-sygroup.ch>
+#
+# This file is part of Ansible
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
+#
+
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.univention_umc import (
+ umc_module_for_add,
+ umc_module_for_edit,
+ ldap_search,
+ base_dn,
+)
+
+
+DOCUMENTATION = '''
+---
+module: udm_group
+version_added: "2.2"
+author: "Tobias Rueetschi (@2-B)"
+short_description: Manage of the posix group
+description:
+ - "This module allows to manage user groups on a univention corporate server (UCS).
+ It uses the python API of the UCS to create a new object or edit it."
+requirements:
+ - Python >= 2.6
+options:
+ state:
+ required: false
+ default: "present"
+ choices: [ present, absent ]
+ description:
+ - Whether the group is present or not.
+ name:
+ required: true
+ description:
+ - Name of the posix group.
+ description:
+ required: false
+ description:
+ - Group description.
+ position:
+ required: false
+ description:
+ - define the whole ldap position of the group, e.g.
+ C(cn=g123m-1A,cn=classes,cn=schueler,cn=groups,ou=schule,dc=example,dc=com).
+ ou:
+ required: false
+ description:
+ - LDAP OU, e.g. school for LDAP OU C(ou=school,dc=example,dc=com).
+ subpath:
+ required: false
+ description:
+ - Subpath inside the OU, e.g. C(cn=classes,cn=students,cn=groups).
+'''
+
+
+EXAMPLES = '''
+# Create a POSIX group
+- udm_group: name=g123m-1A
+
+# Create a POSIX group with the exact DN
+# C(cn=g123m-1A,cn=classes,cn=students,cn=groups,ou=school,dc=school,dc=example,dc=com)
+- udm_group: name=g123m-1A
+ subpath='cn=classes,cn=students,cn=groups'
+ ou=school
+# or
+- udm_group: name=g123m-1A
+ position='cn=classes,cn=students,cn=groups,ou=school,dc=school,dc=example,dc=com'
+'''
+
+
+RETURN = '''# '''
+
+
+def main():
+ module = AnsibleModule(
+ argument_spec = dict(
+ name = dict(required=True,
+ type='str'),
+ description = dict(default=None,
+ type='str'),
+ position = dict(default='',
+ type='str'),
+ ou = dict(default='',
+ type='str'),
+ subpath = dict(default='cn=groups',
+ type='str'),
+ state = dict(default='present',
+ choices=['present', 'absent'],
+ type='str')
+ ),
+ supports_check_mode=True
+ )
+ name = module.params['name']
+ description = module.params['description']
+ position = module.params['position']
+ ou = module.params['ou']
+ subpath = module.params['subpath']
+ state = module.params['state']
+ changed = False
+
+ groups = list(ldap_search(
+ '(&(objectClass=posixGroup)(cn={}))'.format(name),
+ attr=['cn']
+ ))
+ if position != '':
+ container = position
+ else:
+ if ou != '':
+ ou = 'ou={},'.format(ou)
+ if subpath != '':
+ subpath = '{},'.format(subpath)
+ container = '{}{}{}'.format(subpath, ou, base_dn())
+ group_dn = 'cn={},{}'.format(name, container)
+
+ exists = bool(len(groups))
+
+ if state == 'present':
+ try:
+ if not exists:
+ grp = umc_module_for_add('groups/group', container)
+ else:
+ grp = umc_module_for_edit('groups/group', group_dn)
+ grp['name'] = name
+ grp['description'] = description
+ diff = grp.diff()
+ changed = grp.diff() != []
+ if not module.check_mode:
+ if not exists:
+ grp.create()
+ else:
+ grp.modify()
+ except:
+ module.fail_json(
+ msg="Creating/editing group {} in {} failed".format(name, container)
+ )
+
+ if state == 'absent' and exists:
+ try:
+ grp = umc_module_for_edit('groups/group', group_dn)
+ if not module.check_mode:
+ grp.remove()
+ changed = True
+ except:
+ module.fail_json(
+ msg="Removing group {} failed".format(name)
+ )
+
+ module.exit_json(
+ changed=changed,
+ name=name,
+ diff=diff,
+ container=container
+ )
+
+
+if __name__ == '__main__':
+ main()