Netscaler various fixes (#34800)

* Add default lb vserver option in netscaler_cs_vserver
Add documentation for ssl_certkey option in netscaler_cs_vserver

* Add options for gracefully disabling netscaler_server

* Add "state" suboption for netscaler_servicegroup servicemembers
Fix servicemember modification algorithm in netscaler_servicegroup
Fix monitorbindings modification algorithm in netscaler_servicegroup
This commit is contained in:
George Nikolopoulos 2018-02-06 21:11:44 +02:00 committed by John R Barker
commit b1a8f3b3d3
6 changed files with 245 additions and 33 deletions

View file

@ -500,6 +500,19 @@ options:
- "."
- "Minimum value = C(1)"
lbvserver:
description:
- The default Load Balancing virtual server.
version_added: "2.5"
ssl_certkey:
description:
- The name of the ssl certificate that is bound to this service.
- The ssl certificate must already exist.
- Creating the certificate can be done with the M(netscaler_ssl_certkey) module.
- This option is only applicable only when C(servicetype) is C(SSL).
version_added: "2.5"
disabled:
description:
- When set to C(yes) the cs vserver will be disabled.
@ -570,6 +583,7 @@ from ansible.module_utils.network.netscaler.netscaler import (
)
try:
from nssrc.com.citrix.netscaler.nitro.resource.config.cs.csvserver import csvserver
from nssrc.com.citrix.netscaler.nitro.resource.config.cs.csvserver_lbvserver_binding import csvserver_lbvserver_binding
from nssrc.com.citrix.netscaler.nitro.resource.config.cs.csvserver_cspolicy_binding import csvserver_cspolicy_binding
from nssrc.com.citrix.netscaler.nitro.resource.config.ssl.sslvserver_sslcertkey_binding import sslvserver_sslcertkey_binding
from nssrc.com.citrix.netscaler.nitro.exception.nitro_exception import nitro_exception
@ -624,6 +638,75 @@ def get_configured_policybindings(client, module):
return bindings
def get_default_lb_vserver(client, module):
try:
default_lb_vserver = csvserver_lbvserver_binding.get(client, module.params['name'])
return default_lb_vserver[0]
except nitro_exception as e:
if e.errorcode == 258:
return csvserver_lbvserver_binding()
else:
raise
def default_lb_vserver_identical(client, module):
d = get_default_lb_vserver(client, module)
configured = ConfigProxy(
actual=csvserver_lbvserver_binding(),
client=client,
readwrite_attrs=[
'name',
'lbvserver',
],
attribute_values_dict={
'name': module.params['name'],
'lbvserver': module.params['lbvserver'],
}
)
log('default lb vserver %s' % ((d.name, d.lbvserver),))
if d.name is None and module.params['lbvserver'] is None:
log('Default lb vserver identical missing')
return True
elif d.name is not None and module.params['lbvserver'] is None:
log('Default lb vserver needs removing')
return False
elif configured.has_equal_attributes(d):
log('Default lb vserver identical')
return True
else:
log('Default lb vserver not identical')
return False
def sync_default_lb_vserver(client, module):
d = get_default_lb_vserver(client, module)
if module.params['lbvserver'] is not None:
configured = ConfigProxy(
actual=csvserver_lbvserver_binding(),
client=client,
readwrite_attrs=[
'name',
'lbvserver',
],
attribute_values_dict={
'name': module.params['name'],
'lbvserver': module.params['lbvserver'],
}
)
if not configured.has_equal_attributes(d):
if d.name is not None:
log('Deleting default lb vserver %s' % d.lbvserver)
csvserver_lbvserver_binding.delete(client, d)
log('Adding default lb vserver %s' % configured.lbvserver)
configured.add()
else:
if d.name is not None:
log('Deleting default lb vserver %s' % d.lbvserver)
csvserver_lbvserver_binding.delete(client, d)
def get_actual_policybindings(client, module):
log('Getting actual policy bindigs')
bindings = {}
@ -949,6 +1032,7 @@ def main():
type='bool',
default=False
),
lbvserver=dict(type='str'),
)
argument_spec = dict()
@ -1168,6 +1252,12 @@ def main():
module_result['changed'] = True
# Check default lb vserver
if not default_lb_vserver_identical(client, module):
if not module.check_mode:
sync_default_lb_vserver(client, module)
module_result['changed'] = True
if not module.check_mode:
res = do_state_change(client, module, csvserver_proxy)
if res.errorcode != 0: