Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [2.10.1] - 2025-09-16

# Fixed

- Resolved error while importing new SSL certificate with duplicate primary key error

## [2.10.0] - 2025-08-22

### Added
Expand Down Expand Up @@ -190,7 +196,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- Initial Release
[unreleased]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.10.0...HEAD

[unreleased]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.10.1...HEAD
[2.10.1]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.10.0...2.10.1
[2.10.0]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.9.2...2.10.0
[2.9.2]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.9.1...2.9.2
[2.9.1]: https://github.com/netscaler/ansible-collection-netscaleradc/compare/2.9.0...2.9.1
Expand Down
28 changes: 14 additions & 14 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
fmt:
autoflake plugins/modules/*.py
autoflake plugins/module_utils/*.py
autoflake --recursive tests/
autoflake migrationtool/*py
autoflake plugins/modules/*.py
autoflake plugins/module_utils/*.py
autoflake --recursive tests/
autoflake tools/migrationtool/*py

black plugins/modules/*.py
black plugins/module_utils/*.py
black tests/
black migrationtool/*.py
black plugins/modules/*.py
black plugins/module_utils/*.py
black tests/
black tools/migrationtool/*.py

isort plugins/modules/*.py
isort plugins/module_utils/*.py
isort tests/
isort migrationtool/*.py
isort plugins/modules/*.py
isort plugins/module_utils/*.py
isort tests/
isort tools/migrationtool/*.py

yamlfmt .
yamlfmt $(shell find . -name '*.yml' -o -name '*.yaml')

install:
ansible-galaxy collection install . --force
Expand Down Expand Up @@ -42,7 +42,7 @@ build:
ansible-galaxy collection build --force

galaxy_importer: build
python3 -m galaxy_importer.main netscaler-adc-2.10.0.tar.gz
python3 -m galaxy_importer.main netscaler-adc-2.10.1.tar.gz

# build_docs:
# rm -rf _built_docs
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ python3 migrationtool/convert_yaml.py -i legacy_playbook.yaml -o migrated_playbo
port: 80
```

For detailed migration tool documentation, usage examples, and troubleshooting, refer to the [Migration Tool README](https://github.com/netscaler/ansible-collection-netscaleradc/blob/main/migrationtool/README.md).
For detailed migration tool documentation, usage examples, and troubleshooting, refer to the [Migration Tool README](https://github.com/netscaler/ansible-collection-netscaleradc/blob/main/tools/migrationtool/README.md).

### Invocation

Expand Down
22 changes: 22 additions & 0 deletions examples/bgprouter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
- name: BGP routing
hosts: localhost
gather_facts: false
tasks:
- name: Configure BGP routing
delegate_to: localhost
netscaler.adc.bgprouter:
state: present
localAS: 10
afParams_addressFamily: "ipv4"
afParams_redistribute_protocol: "kernel"
routerId: "10.102.201.219"
neighbor_ASOriginationInterval: 15
neighbor_address: "2.2.12.30"
neighbor_advertisementInterval: 30
neighbor_afParams_addressFamily: "ipv4"
neighbor_holdTimerConfig: 90
neighbor_keepaliveTimerConfig: 30
neighbor_multihopBfd: "False"
neighbor_remoteAS: 100
neighbor_singlehopBfd: "False"
2 changes: 1 addition & 1 deletion galaxy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace: netscaler
# The name of the collection. Has the same character restrictions as 'namespace'
name: adc
# The version of the collection. Must be compatible with semantic versioning
version: 2.10.0
version: 2.10.1
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
readme: README.md
# A list of the collection's content authors. Can be just the name or in the format 'Full Name <email> (url)
Expand Down
22 changes: 13 additions & 9 deletions meta/runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ action_groups:
- autoscaleprofile
- azureapplication
- azurekeyvault
- bgprouter
- bfdinterface
- botglobal_botpolicy_binding
- botpolicy
- botpolicylabel
Expand Down Expand Up @@ -411,6 +413,7 @@ action_groups:
- fis
- fis_channel_binding
- fis_interface_binding
- filesystemencryption.py
- forwardingsession
- gslbconfig
- gslbldnsentries
Expand Down Expand Up @@ -448,6 +451,7 @@ action_groups:
- interfacepair
- ip6tunnel
- ip6tunnelparam
- iproute
- ipsecalgprofile
- ipsecalgsession
- ipsecparameter
Expand All @@ -458,6 +462,8 @@ action_groups:
- iptunnel
- iptunnelparam
- ipv6
- kafkacluster.py
- kafkacluster_servicegroup_binding.py
- l2param
- l3param
- l4param
Expand Down Expand Up @@ -594,9 +600,11 @@ action_groups:
- nsicapprofile
- nsip
- nsip6
- nskeymanagerproxy.py
- nslicenseparameters
- nslicenseproxyserver
- nslicenseserver
- nslaslicense.py
- nslimitidentifier
- nslimitselector
- nslimitsessions
Expand Down Expand Up @@ -697,6 +705,7 @@ action_groups:
- route
- route6
- routerdynamicrouting
- routemap
- rsskeytype
- save_config
- server
Expand Down Expand Up @@ -741,12 +750,14 @@ action_groups:
- ssldhfile
- ssldhparam
- ssldtlsprofile
- sslechconfig.py
- sslecdsakey
- sslfips
- sslfipskey
- sslfipssimsource
- sslfipssimtarget
- sslglobal_sslpolicy_binding
- sslhpkekey.py
- sslhsmkey
- sslkeyfile
- ssllogprofile
Expand All @@ -759,9 +770,10 @@ action_groups:
- sslpolicylabel_sslpolicy_binding
- sslprofile
- sslprofile_ecccurve_binding
- sslprofile_sslcertkey_binding
- sslprofile_sslcipher_binding
- sslprofile_sslciphersuite_binding
- sslprofile_sslcertkey_binding
- sslprofile_sslechconfig_binding.py
- sslrsakey
- sslservice
- sslservice_ecccurve_binding
Expand Down Expand Up @@ -973,11 +985,3 @@ action_groups:
- vxlan_srcip_binding
- vxlanvlanmap
- vxlanvlanmap_vxlan_binding
- filesystemencryption.py
- kafkacluster.py
- kafkacluster_servicegroup_binding.py
- nskeymanagerproxy.py
- nslaslicense.py
- sslechconfig.py
- sslhpkekey.py
- sslprofile_sslechconfig_binding.py
57 changes: 35 additions & 22 deletions plugins/module_utils/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
from ansible.module_utils.six.moves.urllib.parse import quote
from ansible.module_utils.urls import fetch_url

from .constants import HTTP_SUCCESS_CODES
from .constants import (
HTTP_SUCCESS_CODES,
NESTED_POST_DATA_RESOURCES,
NESTED_POST_DATA_RESOURCES_ALIAS,
)
from .decorators import trace
from .logger import log

Expand Down Expand Up @@ -62,25 +66,25 @@ def __init__(self, module, resource_name):
)
if netscaler_console_as_proxy:
if self._module.params.get("managed_netscaler_instance_name"):
self._headers[
"_MPS_API_PROXY_MANAGED_INSTANCE_NAME"
] = self._module.params.get("managed_netscaler_instance_name")
self._headers["_MPS_API_PROXY_MANAGED_INSTANCE_NAME"] = (
self._module.params.get("managed_netscaler_instance_name")
)
if self._module.params.get("managed_netscaler_instance_ip"):
self._headers[
"_MPS_API_PROXY_MANAGED_INSTANCE_IP"
] = self._module.params.get("managed_netscaler_instance_ip")
self._headers["_MPS_API_PROXY_MANAGED_INSTANCE_IP"] = (
self._module.params.get("managed_netscaler_instance_ip")
)
if self._module.params.get("managed_netscaler_instance_id"):
self._headers[
"_MPS_API_PROXY_MANAGED_INSTANCE_ID"
] = self._module.params.get("managed_netscaler_instance_id")
self._headers["_MPS_API_PROXY_MANAGED_INSTANCE_ID"] = (
self._module.params.get("managed_netscaler_instance_id")
)
if self._module.params.get("managed_netscaler_instance_username"):
self._headers[
"_MPS_API_PROXY_MANAGED_INSTANCE_USERNAME"
] = self._module.params.get("managed_netscaler_instance_username")
self._headers["_MPS_API_PROXY_MANAGED_INSTANCE_USERNAME"] = (
self._module.params.get("managed_netscaler_instance_username")
)
if self._module.params.get("managed_netscaler_instance_password"):
self._headers[
"_MPS_API_PROXY_MANAGED_INSTANCE_PASSWORD"
] = self._module.params.get("managed_netscaler_instance_password")
self._headers["_MPS_API_PROXY_MANAGED_INSTANCE_PASSWORD"] = (
self._module.params.get("managed_netscaler_instance_password")
)

@trace
def url_builder(
Expand All @@ -98,12 +102,21 @@ def url_builder(
filter = filter if filter is not None else {}

# Construct basic URL
url = "%s://%s/%s/%s" % (
self._module.params["nitro_protocol"],
self._module.params["nsip"],
self.api_path,
resource,
)
if resource in NESTED_POST_DATA_RESOURCES:
url = "%s://%s/%s/%s/%s" % (
self._module.params["nitro_protocol"],
self._module.params["nsip"],
self.api_path,
"routerDynamicRouting",
NESTED_POST_DATA_RESOURCES_ALIAS[resource],
)
else:
url = "%s://%s/%s/%s" % (
self._module.params["nitro_protocol"],
self._module.params["nsip"],
self.api_path,
resource,
)

# Append resource id
if id:
Expand Down
Loading