Skip to content

Commit

Permalink
Merge pull request #1 from waghswapnil/master
Browse files Browse the repository at this point in the history
add admin related tasks
  • Loading branch information
vvb authored Jan 2, 2017
2 parents 5e47926 + 5d9ab65 commit 8beeeba
Show file tree
Hide file tree
Showing 4 changed files with 485 additions and 0 deletions.
74 changes: 74 additions & 0 deletions docs/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,80 @@ These are settings that an administrator would need to configure prior to bring

### 2.1.1 users

1. **`cisco_imc_user_password_policy`**

Configures the password policy and password expiration policy for local users on a Cisco IMC server.
Input Params:
strong_password:
description:
This will enable the strong password policy.
choices: ["enabled", "disabled"]
default: "disabled"
required: False
password_expiry_duration:
description: Specifies in days when the password will expire when password expiry is enabled.
choices: [0-3650]
default: 0
required: False
password_history:
description: Tracks password change history. Specifies in number of instances, the new password entered should not have been used in the past.
choices: [0-5]
default: 0
required: False
password_notification_period:
description: Specifies the number of days the user will be notified before password expiry.
choices: [0-15]
default: 0
required: False
password_grace_period:
description: Specifies the number of days the old password will still be valid after the password expiry.
choices: [0-5]
default: 0
required: False
imcsdk apis:
imcsdk.apis.admin.user.strong_password_set
imcsdk.apis.admin.user.is_strong_password_set
imcsdk.apis.admin.user.password_expiration_set
imcsdk.apis.admin.user.password_expiration_exists

2. **`cisco_imc_user`**

Configures a local user on a Cisco IMC Server.
Input Params:
name:
description: Username for the local user
required: True
pwd:
description: Password for the local user
required: False
priv:
description: Privilege level of the local user
choices: ["admin", "read-only", "user"]
default: "read-only"
required: False
state:
description: Used to create or delete the local user
choices: ["present", "absent"]
default: "present"
required: False
imcsdk apis:
imcsdk.apis.admin.user.local_user_create
imcsdk.apis.admin.user.local_user_delete
imcsdk.apis.admin.user.local_user_exists

### 2.1.2 roles

### 2.1.3 NTP
Expand Down
160 changes: 160 additions & 0 deletions library/cisco_imc_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#!/usr/bin/python

DOCUMENTATION = '''
---
module: cisco_imc_user
short_description: Configures a local user on a Cisco IMC Server
version_added: "0.9.0.0"
description:
- Configures a local user on a Cisco IMC Server
Input Params:
name:
description: Username for the local user
required: True
pwd:
description: Password for the local user
required: True
priv:
description: Privilege level of the local user
choices: ["admin", "read-only", "user"]
default: "read-only"
required: False
state:
description: Used to create or delete the local user
choices: ["present", "absent"]
default: "present"
required: False
imcsdk apis:
imcsdk.apis.admin.user.local_user_create
imcsdk.apis.admin.user.local_user_delete
imcsdk.apis.admin.user.local_user_exists
requirements: ['imcsdk']
author: "Swapnil Wagh([email protected])"
'''

EXAMPLES = '''
- name: create local user
cisco_imc_user:
name: "ansible-user"
pwd: "password"
priv: "admin"
state: "present"
ip: "192.168.1.1"
username: "admin"
password: "password"
'''


def login(module):
ansible = module.params
server = ansible.get('server')
if server:
return server

from imcsdk.imchandle import ImcHandle
results = {}
try:
server = ImcHandle(ip=ansible["ip"],
username=ansible["username"],
password=ansible["password"],
port=ansible["port"],
secure=ansible["secure"],
proxy=ansible["proxy"])
server.login()
except Exception as e:
results["msg"] = str(e)
module.fail_json(**results)
return server


def logout(module, imc_server):
ansible = module.params
server = ansible.get('server')
if server:
# we used a pre-existing handle from another task.
# do not logout
return False

if imc_server:
imc_server.logout()
return True
return False


def local_user_setup(server, module):
from imcsdk.apis.admin.user import local_user_create, local_user_delete, \
local_user_exists

ansible = module.params
name, pwd, priv = ansible["name"], ansible["pwd"], ansible["priv"]

exists, user = local_user_exists(server, name=name, priv=priv)
if ansible["state"] == "present":
if exists:
return False
local_user_create(server, name=name, pwd=pwd, priv=priv)
else:
if not exists:
return False
local_user_delete(server, name=name)
return True


def setup(server, module):

results = {}
err = False

try:
results["changed"] = local_user_setup(server, module)

except Exception as e:
err = True
results["msg"] = str(e)
results["changed"] = False
server.logout()
raise

return results, err


def main():
from ansible.module_utils.basic import AnsibleModule
module = AnsibleModule(
argument_spec=dict(
name=dict(required=True, type='str'),
pwd=dict(required=False, default=None, type='str'),
priv=dict(required=False, default="read-only",
choices=["admin", "read-only", "user"], type='str'),
state=dict(required=False, default="present",
choices=["present", "absent"], type='str'),

# ImcHandle
server=dict(required=False, type='dict'),

# Imc server credentials
ip=dict(required=False, type='str'),
username=dict(required=False, default="admin", type='str'),
password=dict(required=False, type='str'),
port=dict(required=False, default=None),
secure=dict(required=False, default=None),
proxy=dict(required=False, default=None)
),
supports_check_mode=True
)

server = login(module)
results, err = setup(server, module)
logout(module, server)
if err:
module.fail_json(**results)
module.exit_json(**results)


if __name__ == '__main__':
main()
Loading

0 comments on commit 8beeeba

Please sign in to comment.