in src/ansible_collections/alibaba/apsarastack/plugins/modules/ali_slb_vsg.py [0:0]
def main():
argument_spec = common_argument_spec()
argument_spec.update(dict(
state=dict(type='str', default='present', choices=['present', 'absent']),
load_balancer_id=dict(type='str', required=True, aliases=['lb_id']),
vserver_group_name=dict(type='str', required=True, aliases=['group_name', 'name']),
backend_servers=dict(type='list', elements='dict'),
vserver_group_id=dict(type='str', aliases=['group_id']),
purge_backend_servers=dict(type='bool', default=False),
multi_ok=dict(type='bool', default=False)
))
module = AnsibleModule(argument_spec=argument_spec,
# required_if=([
# ('state', 'present', ['backend_servers'])
# ])
)
if HAS_FOOTMARK is False:
module.fail_json(msg='footmark required for the module ali_slb_vsg.')
slb = slb_connect(module)
state = module.params['state']
lb_id = module.params['load_balancer_id']
vsg_name = module.params['vserver_group_name']
vserver_group_id = module.params['vserver_group_id']
changed = False
matching = None
if not module.params['multi_ok']:
try:
matching_vsgs = []
for group in slb.describe_vserver_groups(**{'load_balancer_id': lb_id}):
if vsg_name and group.name != vsg_name:
continue
if vserver_group_id and group.id != vserver_group_id:
continue
matching_vsgs.append(group)
if len(matching_vsgs) == 1:
matching = matching_vsgs[0]
elif len(matching_vsgs) > 1:
module.fail_json(msg='Currently there are {0} virtual server groups that have the same name {1}. '
'If you would like to create anyway '
'please pass True to the multi_ok param.'.format(len(matching_vsgs), vsg_name))
except Exception as e:
module.fail_json(msg=str("Unable to describe vserver group attribute, error:{0}".format(e)))
if state == 'absent':
if matching:
try:
changed = matching.delete()
except Exception as e:
module.fail_json(msg=str("Unable to delete vserver group, error: {0}".format(e)))
module.exit_json(changed=changed, vserver_group={})
backend_servers = module.params['backend_servers']
check_backend_servers(module, backend_servers)
if not matching:
try:
params = module.params
params['backend_servers'] = format_backend_servers(backend_servers[:20])
matching = slb.create_vserver_group(**params)
changed = True
except Exception as e:
module.fail_json(msg=str("Unable to create vserver group error:{0}".format(e)))
if backend_servers:
old, new, removed = filter_backend_servers(matching.backend_servers['backend_server'], backend_servers)
if old:
try:
if matching.modify(backend_servers=old):
changed = True
except Exception as e:
module.fail_json(msg='Modify backend servers failed: {0}'.format(e))
if new:
try:
if matching.add(backend_servers=new):
changed = True
except Exception as e:
module.fail_json(msg='Add backend servers failed: {0}'.format(e))
if module.params['purge_backend_servers'] and removed:
try:
if matching.remove(backend_servers=removed):
changed = True
except Exception as e:
module.fail_json(msg='Remove backend servers failed: {0}'.format(e))
module.exit_json(changed=changed, vserver_group=matching.get().read())