Skip to content

Commit

Permalink
Update for v3.1.0
Browse files Browse the repository at this point in the history
- Updates to support DNA version 2.2.2.3
  • Loading branch information
William Astorga committed Aug 10, 2021
1 parent 020f7d8 commit 69f49cd
Show file tree
Hide file tree
Showing 265 changed files with 12,230 additions and 2,736 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This collection has been tested and supports Cisco DNA Center 2.1.1.

## Requirements
- Ansible >= 2.9
- [DNA Center SDK](https://github.com/cisco-en-programmability/dnacentersdk) v2.2.4 or newer
- [DNA Center SDK](https://github.com/cisco-en-programmability/dnacentersdk) v2.3.1 or newer
- Python >= 3.6, as the DNA Center SDK doesn't support Python version 2.x

## Install
Expand All @@ -36,7 +36,7 @@ dnac_host: <A.B.C.D>
dnac_port: 443 # optional, defaults to 443
dnac_username: <username>
dnac_password: <password>
dnac_version: 2.1.1 # optional, defaults to 2.1.1
dnac_version: 2.2.2.3 # optional, defaults to 2.2.2.3
dnac_verify: False # optional, defaults to True
dnac_debug: False # optional, defaults to False
```
Expand Down
9 changes: 8 additions & 1 deletion changelogs/changelogs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,11 @@ releases:
- Adds _info plugins to query information from database.
- Adds resources for modules to manage CRUD operations.
- Adds plugins without state that perform special operation on DNA Center.
- Adds plugins for resource's operations that have different structure in request/response bodies (ie. _create, _update, _delete plugins).
- Adds plugins for resource's operations that have different structure in request/response bodies (ie. _create, _update, _delete plugins).
3.1.0:
release_date: '2021-08-10'
changes:
release_summary: Updates to support DNA version 2.2.2.3
major_changes:
- Adds new plugins related to DNA version 2.2.2.3.
- Updates previouse plugins to follow DNA version 2.2.2.3 specification.
2 changes: 1 addition & 1 deletion galaxy.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
namespace: cisco
name: dnac
version: 3.0.0
version: 3.1.0
readme: README.md
authors:
- Rafael Campos <[email protected]>
Expand Down
19 changes: 19 additions & 0 deletions playbooks/authentication_import.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
- hosts: dnac_servers
vars_files:
- credentials.yml
gather_facts: no
tasks:
- name: Import certificate file
cisco.dnac.authentication_import_certificate:
dnac_host: "{{dnac_host}}"
dnac_username: "{{dnac_username}}"
dnac_password: "{{dnac_password}}"
dnac_verify: "{{dnac_verify}}"
dnac_debug: "{{dnac_debug}}"
certFilePath: /Users/wilhelm32/Developer/Work/GitHub/dnacenter-ansible1/playbooks/files/test.template
pkFilePath: /Users/wilhelm32/Developer/Work/GitHub/dnacenter-ansible1/playbooks/files/test.template
register: result

- name: Show result
debug:
msg: "{{ result }}"
2 changes: 1 addition & 1 deletion playbooks/credentials.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ dnac_host: <A.B.C.D>
dnac_port: 443
dnac_username: <username>
dnac_password: <password>
dnac_version: 2.1.1
dnac_version: 2.2.2.3
dnac_verify: False
dnac_debug: False
1 change: 0 additions & 1 deletion playbooks/import_image_file.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
dnac_username: "{{dnac_username}}"
dnac_password: "{{dnac_password}}"
dnac_verify: "{{dnac_verify}}"
fileName: test.template # string
filePath: fullpath/playbooks/files/test.template # string
isThirdParty: True # boolean
thirdPartyApplicationType: SomeValue # string
Expand Down
22 changes: 22 additions & 0 deletions playbooks/reports_executions_info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
- hosts: dnac_servers
vars_files:
- credentials.yml
gather_facts: no
tasks:

- name: Download report content
cisco.dnac.reports_executions_info:
dnac_host: "{{dnac_host}}"
dnac_username: "{{dnac_username}}"
dnac_password: "{{dnac_password}}"
dnac_verify: "{{dnac_verify}}"
dnac_debug: "{{dnac_debug}}"
reportId: be9d6d76-0bff-4c49-84a1-16adf58431c6
executionId: 586da15e-5f50-4f65-8f3d-303f88dfdf18
dirPath: /Users/wilhelm32/Downloads/dna
saveFile: True
register: result

- name: Show result
debug:
msg: "{{ result.dnac_response }}"
89 changes: 89 additions & 0 deletions plugins/action/authentication_import_certificate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.plugins.action import ActionBase
try:
from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
AnsibleArgSpecValidator,
)
except ImportError:
ANSIBLE_UTILS_IS_INSTALLED = False
else:
ANSIBLE_UTILS_IS_INSTALLED = True
from ansible.errors import AnsibleActionFail
from ansible_collections.cisco.dnac.plugins.module_utils.dnac import (
DNACSDK,
dnac_argument_spec,
)

# Get common arguements specification
argument_spec = dnac_argument_spec()
# Add arguments specific for this module
argument_spec.update(dict(
pkPassword=dict(type="str", no_log=True),
listOfUsers=dict(type="list"),
certFilePath=dict(type="str"),
pkFilePath=dict(type="str"),
))

required_if = []
required_one_of = []
mutually_exclusive = []
required_together = []


class ActionModule(ActionBase):
def __init__(self, *args, **kwargs):
if not ANSIBLE_UTILS_IS_INSTALLED:
raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'")
super(ActionModule, self).__init__(*args, **kwargs)
self._supports_async = True
self._result = None

# Checks the supplied parameters against the argument spec for this module
def _check_argspec(self):
aav = AnsibleArgSpecValidator(
data=self._task.args,
schema=dict(argument_spec=argument_spec),
schema_format="argspec",
schema_conditionals=dict(
required_if=required_if,
required_one_of=required_one_of,
mutually_exclusive=mutually_exclusive,
required_together=required_together,
),
name=self._task.action,
)
valid, errors, self._task.args = aav.validate()
if not valid:
raise AnsibleActionFail(errors)

def get_object(self, params):
new_object = dict(
pk_password=params.get("pkPassword"),
list_of_users=params.get("listOfUsers"),
cert_file_path=params.get("certFilePath"),
pk_file_path=params.get("pkFilePath"),
)
return new_object

def run(self, tmp=None, task_vars=None):
self._task.diff = False
self._result = super(ActionModule, self).run(tmp, task_vars)
self._result["changed"] = False
self._check_argspec()

dnac = DNACSDK(params=self._task.args)

response = dnac.exec(
family="authentication_management",
function='import_certificate',
op_modifies=True,
params=self.get_object(self._task.args),
file_paths=[
('cert_file_path', 'certFileUpload'),
('pk_file_path', 'pkFileUpload'),
],
)
self._result.update(dict(dnac_response=response))
self._result.update(dnac.exit_json())
return self._result
86 changes: 86 additions & 0 deletions plugins/action/authentication_import_certificate_p12.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.plugins.action import ActionBase
try:
from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import (
AnsibleArgSpecValidator,
)
except ImportError:
ANSIBLE_UTILS_IS_INSTALLED = False
else:
ANSIBLE_UTILS_IS_INSTALLED = True
from ansible.errors import AnsibleActionFail
from ansible_collections.cisco.dnac.plugins.module_utils.dnac import (
DNACSDK,
dnac_argument_spec,
)

# Get common arguements specification
argument_spec = dnac_argument_spec()
# Add arguments specific for this module
argument_spec.update(dict(
p12Password=dict(type="str", no_log=True),
pkPassword=dict(type="str", no_log=True),
listOfUsers=dict(type="list"),
p12FilePath=dict(type="str"),
))

required_if = []
required_one_of = []
mutually_exclusive = []
required_together = []


class ActionModule(ActionBase):
def __init__(self, *args, **kwargs):
if not ANSIBLE_UTILS_IS_INSTALLED:
raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'")
super(ActionModule, self).__init__(*args, **kwargs)
self._supports_async = True
self._result = None

# Checks the supplied parameters against the argument spec for this module
def _check_argspec(self):
aav = AnsibleArgSpecValidator(
data=self._task.args,
schema=dict(argument_spec=argument_spec),
schema_format="argspec",
schema_conditionals=dict(
required_if=required_if,
required_one_of=required_one_of,
mutually_exclusive=mutually_exclusive,
required_together=required_together,
),
name=self._task.action,
)
valid, errors, self._task.args = aav.validate()
if not valid:
raise AnsibleActionFail(errors)

def get_object(self, params):
new_object = dict(
p12_password=params.get("p12Password"),
pk_password=params.get("pkPassword"),
list_of_users=params.get("listOfUsers"),
p12_file_path=params.get("p12FilePath"),
)
return new_object

def run(self, tmp=None, task_vars=None):
self._task.diff = False
self._result = super(ActionModule, self).run(tmp, task_vars)
self._result["changed"] = False
self._check_argspec()

dnac = DNACSDK(params=self._task.args)

response = dnac.exec(
family="authentication_management",
function='import_certificate_p12',
op_modifies=True,
params=self.get_object(self._task.args),
file_paths=[('p12_file_path', 'p12FileUpload')],
)
self._result.update(dict(dnac_response=response))
self._result.update(dnac.exit_json())
return self._result
25 changes: 13 additions & 12 deletions plugins/action/cli_credential.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
comments=dict(type="str"),
credentialType=dict(type="str"),
description=dict(type="str"),
enablePassword=dict(type="str"),
enablePassword=dict(type="str", no_log=True),
id=dict(type="str"),
instanceTenantId=dict(type="str"),
instanceUuid=dict(type="str"),
Expand Down Expand Up @@ -62,15 +62,17 @@ def __init__(self, params, dnac):

def create_params(self):
new_object_params = {}
new_object_params['comments'] = self.new_object.get('comments')
new_object_params['credentialType'] = self.new_object.get('credentialType')
new_object_params['description'] = self.new_object.get('description')
new_object_params['enablePassword'] = self.new_object.get('enablePassword')
new_object_params['id'] = self.new_object.get('id')
new_object_params['instanceTenantId'] = self.new_object.get('instanceTenantId')
new_object_params['instanceUuid'] = self.new_object.get('instanceUuid')
new_object_params['password'] = self.new_object.get('password')
new_object_params['username'] = self.new_object.get('username')
payload = {}
payload['comments'] = self.new_object.get('comments')
payload['credentialType'] = self.new_object.get('credentialType')
payload['description'] = self.new_object.get('description')
payload['enablePassword'] = self.new_object.get('enablePassword')
payload['id'] = self.new_object.get('id')
payload['instanceTenantId'] = self.new_object.get('instanceTenantId')
payload['instanceUuid'] = self.new_object.get('instanceUuid')
payload['password'] = self.new_object.get('password')
payload['username'] = self.new_object.get('username')
new_object_params['payload'] = payload
return new_object_params

def update_all_params(self):
Expand Down Expand Up @@ -135,12 +137,11 @@ def exists(self):

def requires_update(self, current_obj):
requested_obj = self.new_object

obj_params = [
("payload", "payload"),
("comments", "comments"),
("credentialType", "credentialType"),
("description", "description"),
("enablePassword", "enablePassword"),
("id", "id"),
("instanceTenantId", "instanceTenantId"),
("instanceUuid", "instanceUuid"),
Expand Down
Loading

0 comments on commit 69f49cd

Please sign in to comment.