diff options
Diffstat (limited to 'lib/ansible/modules/group.py')
-rw-r--r-- | lib/ansible/modules/group.py | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/lib/ansible/modules/group.py b/lib/ansible/modules/group.py index 109a161..45590d1 100644 --- a/lib/ansible/modules/group.py +++ b/lib/ansible/modules/group.py @@ -35,9 +35,16 @@ options: type: str choices: [ absent, present ] default: present + force: + description: + - Whether to delete a group even if it is the primary group of a user. + - Only applicable on platforms which implement a --force flag on the group deletion command. + type: bool + default: false + version_added: "2.15" system: description: - - If I(yes), indicates that the group created is a system group. + - If V(yes), indicates that the group created is a system group. type: bool default: no local: @@ -51,7 +58,7 @@ options: version_added: "2.6" non_unique: description: - - This option allows to change the group ID to a non-unique value. Requires C(gid). + - This option allows to change the group ID to a non-unique value. Requires O(gid). - Not supported on macOS or BusyBox distributions. type: bool default: no @@ -87,7 +94,7 @@ EXAMPLES = ''' RETURN = r''' gid: description: Group ID of the group. - returned: When C(state) is 'present' + returned: When O(state) is C(present) type: int sample: 1001 name: @@ -102,7 +109,7 @@ state: sample: 'absent' system: description: Whether the group is a system group or not. - returned: When C(state) is 'present' + returned: When O(state) is C(present) type: bool sample: False ''' @@ -110,7 +117,7 @@ system: import grp import os -from ansible.module_utils._text import to_bytes +from ansible.module_utils.common.text.converters import to_bytes from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.sys_info import get_platform_subclass @@ -140,6 +147,7 @@ class Group(object): self.module = module self.state = module.params['state'] self.name = module.params['name'] + self.force = module.params['force'] self.gid = module.params['gid'] self.system = module.params['system'] self.local = module.params['local'] @@ -219,14 +227,7 @@ class Group(object): if line.startswith(to_bytes(name_test)): exists = True break - - if not exists: - self.module.warn( - "'local: true' specified and group was not found in {file}. " - "The local group may already exist if the local group database exists somewhere other than {file}.".format(file=self.GROUPFILE)) - return exists - else: try: if grp.getgrnam(self.name): @@ -246,6 +247,31 @@ class Group(object): # =========================================== +class Linux(Group): + """ + This is a Linux Group manipulation class. This is to apply the '-f' parameter to the groupdel command + + This overrides the following methods from the generic class:- + - group_del() + """ + + platform = 'Linux' + distribution = None + + def group_del(self): + if self.local: + command_name = 'lgroupdel' + else: + command_name = 'groupdel' + cmd = [self.module.get_bin_path(command_name, True)] + if self.force: + cmd.append('-f') + cmd.append(self.name) + return self.execute_command(cmd) + + +# =========================================== + class SunOS(Group): """ This is a SunOS Group manipulation class. Solaris doesn't have @@ -596,6 +622,7 @@ def main(): argument_spec=dict( state=dict(type='str', default='present', choices=['absent', 'present']), name=dict(type='str', required=True), + force=dict(type='bool', default=False), gid=dict(type='int'), system=dict(type='bool', default=False), local=dict(type='bool', default=False), @@ -607,6 +634,9 @@ def main(): ], ) + if module.params['force'] and module.params['local']: + module.fail_json(msg='force is not a valid option for local, force=True and local=True are mutually exclusive') + group = Group(module) module.debug('Group instantiated - platform %s' % group.platform) |