#!/usr/bin/python
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
#
# This module 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.
#
# This software 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 this software.  If not, see <http://www.gnu.org/licenses/>.


try:
    import shade
    from shade import meta
    HAS_SHADE = True
except ImportError:
    HAS_SHADE = False

DOCUMENTATION = '''
---
module: os_user_group
short_description: Associate OpenStack Identity users and groups
extends_documentation_fragment: openstack
version_added: "2.0"
description:
    - Add and remove users from groups
options:
   user:
     description:
        - Name or id for the user
     required: true
   group:
     description:
        - Name or id for the group.
     required: true
   state:
     description:
       - Should the user be present or absent in the group
     choices: [present, absent]
     default: present
requirements:
    - "python >= 2.6"
    - "shade"
'''

EXAMPLES = '''
# Add the demo user to the demo group
- os_user_group: user=demo group=demo
'''


def main():

    argument_spec = openstack_full_argument_spec(
    argument_spec = dict(
        user=dict(required=True),
        group=dict(required=True),
        state=dict(default='present', choices=['absent', 'present']),
    ))

    module_kwargs = openstack_module_kwargs()
    module = AnsibleModule(argument_spec, **module_kwargs)

    if not HAS_SHADE:
        module.fail_json(msg='shade is required for this module')

    user = module.params.pop('user')
    group = module.params.pop('group')
    state = module.params.pop('state')

    try:
        cloud = shade.openstack_cloud(**module.params)

        in_group = cloud.is_user_in_group(user, group)

        if state == 'present':

            if in_group:
                changed = False
            else:
                cloud.add_user_to_group(
                    user_name_or_id=user, group_name_or_id=group)
                changed = True
        elif state == 'absent':
            if in_group:
                cloud.remove_user_from_group(
                    user_name_or_id=user, group_name_or_id=group)
                changed=True
            else:
                changed=False
        module.exit_json(changed=changed)

    except shade.OpenStackCloudException as e:
        module.fail_json(msg=e.message, extra_data=e.extra_data)

from ansible.module_utils.basic import *
from ansible.module_utils.openstack import *


if __name__ == '__main__':
    main()

@@ -739,35 +739,8 @@
 ade%0A
-    from shade import meta%0A
     
@@ -973,16 +973,49 @@
 : %222.0%22%0A
+author: %22Monty Taylor (@emonty)%22%0A
 descript
@@ -1501,25 +1501,48 @@
 oup:
+%0A  cloud: mycloud%0A 
  user
-=
+: 
 demo
+%0A 
  group
-=
+: 
 demo
@@ -1556,16 +1556,199 @@
 def 
+_system_state_change(state, in_group):%0A    if state == 'present' and not in_group:%0A        return True%0A    if state == 'absent' and in_group:%0A        return True%0A    return False%0A%0Adef 
 main():
-%0A
 %0A   
@@ -1798,34 +1798,8 @@
 ec(%0A
-    argument_spec = dict(%0A
     
@@ -1938,17 +1938,16 @@
 ),%0A    )
-)
 %0A%0A    mo
@@ -2027,16 +2027,96 @@
 nt_spec,
+%0A                           supports_check_mode=True,%0A                          
  **modul
@@ -2243,20 +2243,16 @@
 rams
-.pop(
+%5B
 'user'
-)
+%5D
 %0A   
@@ -2277,21 +2277,17 @@
 rams
-.pop(
+%5B
 'group'
-)
+%5D
 %0A   
@@ -2312,21 +2312,17 @@
 rams
-.pop(
+%5B
 'state'
-)
+%5D
 %0A%0A  
@@ -2353,22 +2353,21 @@
 hade.ope
-nstack
+rator
 _cloud(*
@@ -2454,43 +2454,91 @@
  if 
-state == 'present':%0A%0A            if
+module.check_mode:%0A            module.exit_json(changed=_system_state_change(state,
  in_
@@ -2538,34 +2538,28 @@
 te, in_group
-:%0A        
+))%0A%0A
         chan
@@ -2582,58 +2582,59 @@
     
-    else:%0A                cloud.add_user_to
+if state == 'present':%0A            if not in
 _group
-(
+:
 %0A   
@@ -2650,51 +2650,38 @@
     
-    user_name_or_id=user, group_name_or_id=
+cloud.add_user_to_group(user, 
 grou
@@ -2710,24 +2710,25 @@
 nged = True%0A
+%0A
         elif
@@ -2821,151 +2821,50 @@
 oup(
-%0A                    user_name_or_id=user, group_name_or_id=group)%0A                changed=True%0A            else:%0A                changed=False
+user, group)%0A                changed=True%0A
 %0A   
@@ -3016,16 +3016,17 @@
 _data)%0A%0A
+%0A
 from ans
@@ -3104,17 +3104,16 @@
 port *%0A%0A
-%0A
 if __nam

Fix os_user_group module