Deal with corner cases in custom module
[integration/packaging/ansible-opendaylight.git] / library / odl_usermod.py
1 from ansible.module_utils.basic import AnsibleModule
2
3 ANSIBLE_METADATA = {'metadata_version': '1.0', 'status': ['preview'],
4                     'supported_by': 'community'}
5
6 DOCUMENTATION = \
7     '''
8 ---
9 module: odl_usermod
10 short_description: Manipulate ODL users
11 description:
12     - Use this module to add, delete and list ODL users
13 version_added: "1.0"
14 author: "Taseer Ahmed (@Taseer)"
15 options:
16 notes:
17 requirements:
18 '''
19
20 RETURN = \
21     '''
22 message:
23   description: Add/remove/list OpenDaylight users
24 '''
25
26 EXAMPLES = \
27     '''
28 ---
29 - hosts: localhost
30   tasks:
31     - name: create odl user
32       odl_usermod:
33         username: admin
34         password: admin
35         state: present
36
37     - name: delete odl user
38       odl_usermod:
39         username: admin
40         state: absent
41
42     - name: list odl users
43       odl_usermod:
44         state: list
45 '''
46
47
48 def build_cmd(module, *args):
49     cmd = [
50         module.get_bin_path('java', True),
51         '-jar',
52         '/opt/opendaylight/bin/aaa-cli-jar.jar',
53         '--dbd',
54         '/opt/opendaylight/data'
55         ]
56     for arg in args:
57         cmd.append(arg)
58     return cmd
59
60
61 def main():
62     module = AnsibleModule(
63         argument_spec=dict(
64             username=dict(type='str'),
65             password=dict(type='str'),
66             state=dict(type='str')
67         )
68     )
69
70     username = module.params['username']
71     password = module.params['password']
72     state = module.params['state']
73
74     if state == 'absent':
75         if not username:
76             module.exit_json(changed=False, failed=True,
77                              msg="Username not provided")
78         ls_users_cmd = build_cmd(module, "-l")
79         (rc, out, err) = module.run_command(ls_users_cmd)
80         if username in out:
81             cmd = build_cmd(module, '--deleteUser', username)
82             (rc, out, err) = module.run_command(cmd)
83             if rc is not None and rc != 0:
84                 return module.fail_json(msg=err)
85             module.exit_json(changed=True, msg="User deleted")
86         else:
87             module.exit_json(changed=False, msg="No such user exists")
88     elif state == 'present':
89         if not username or not password:
90             module.exit_json(changed=False, failed=True,
91                              msg="Username or password not provided")
92         ls_users_cmd = build_cmd(module, "-l")
93         (rc, out, err) = module.run_command(ls_users_cmd)
94         if rc is not None and rc != 0:
95             return module.fail_json(msg=err)
96
97         if username in out:
98             module.exit_json(changed=False, msg="User already exists")
99         else:
100             cmd = build_cmd(module, '--newUser', username, '-p', password)
101             (rc, out, err) = module.run_command(cmd)
102             if rc is not None and rc != 0:
103                 return module.fail_json(msg=err)
104             module.exit_json(changed=True, msg="User added")
105     elif state == 'list':
106         ls_users_cmd = build_cmd(module, "-l")
107         (rc, out, err) = module.run_command(ls_users_cmd)
108         if rc is not None and rc != 0:
109             return module.fail_json(msg=err)
110         users = out.split('\n')
111         if users[0] == 'User names:':
112             users.pop(0)
113         module.exit_json(changed=False, msg=users)
114     else:
115         module.exit_json(changed=False, msg="No state specified")
116
117
118 if __name__ == '__main__':
119     main()