Allow user passwords to be updated
[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     - name: change user password
47       odl_usermod:
48         username: admin
49         password: admin
50         state: update
51 '''
52
53
54 def build_cmd(module, *args):
55     cmd = [
56         module.get_bin_path('java', True),
57         '-jar',
58         '/opt/opendaylight/bin/aaa-cli-jar.jar',
59         '--dbd',
60         '/opt/opendaylight/data'
61         ]
62     for arg in args:
63         cmd.append(arg)
64     return cmd
65
66
67 def main():
68     module = AnsibleModule(
69         argument_spec=dict(
70             username=dict(type='str'),
71             password=dict(type='str'),
72             state=dict(type='str')
73         )
74     )
75
76     username = module.params['username']
77     password = module.params['password']
78     state = module.params['state']
79
80     if state == 'absent':
81         if not username:
82             module.exit_json(changed=False, failed=True,
83                              msg="Username not provided")
84         ls_users_cmd = build_cmd(module, "-l")
85         (rc, out, err) = module.run_command(ls_users_cmd)
86         if username in out:
87             cmd = build_cmd(module, '--deleteUser', username)
88             (rc, out, err) = module.run_command(cmd)
89             if rc is not None and rc != 0:
90                 return module.fail_json(msg=err)
91             module.exit_json(changed=True, msg="User deleted")
92         else:
93             module.exit_json(changed=False, msg="No such user exists")
94     elif state == 'present':
95         if not username or not password:
96             module.exit_json(changed=False, failed=True,
97                              msg="Username or password not provided")
98         ls_users_cmd = build_cmd(module, "-l")
99         (rc, out, err) = module.run_command(ls_users_cmd)
100         if rc is not None and rc != 0:
101             return module.fail_json(msg=err)
102
103         if username in out:
104             module.exit_json(changed=False, msg="User already exists")
105         else:
106             cmd = build_cmd(module, '--newUser', username, '-p', password)
107             (rc, out, err) = module.run_command(cmd)
108             if rc is not None and rc != 0:
109                 return module.fail_json(msg=err)
110             module.exit_json(changed=True, msg="User added")
111     elif state == 'list':
112         ls_users_cmd = build_cmd(module, "-l")
113         (rc, out, err) = module.run_command(ls_users_cmd)
114         if rc is not None and rc != 0:
115             return module.fail_json(msg=err)
116         users = out.split('\n')
117         if users[0] == 'User names:':
118             users.pop(0)
119         module.exit_json(changed=False, msg=users)
120     elif state == 'update':
121         if not username or not password:
122             module.exit_json(changed=False, failed=True,
123                              msg="Username or password not provided")
124         cmd = build_cmd(module, "--cu", username, '-p', password)
125         (rc, out, err) = module.run_command(cmd)
126         if rc is not None and rc != 0:
127             return module.fail_json(msg=err)
128         module.exit_json(changed=True, msg="Password changed")
129     else:
130         module.exit_json(changed=False, msg="No state specified")
131
132
133 if __name__ == '__main__':
134     main()