Example #1
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        callback_url=dict(type='str', ),
        description=dict(type='str', ),
        name=dict(type='str', required=True),
        tenant_ref=dict(type='str', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
        verification_token=dict(type='str', no_log=True),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'webhook', set([]))
Example #2
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        clone_servers=dict(type='list', ),
        cloud_ref=dict(type='str', ),
        name=dict(type='str', required=True),
        preserve_client_ip=dict(type='bool', ),
        tenant_ref=dict(type='str', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'trafficcloneprofile', set([]))
Example #3
0
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        application_persistence_profile_ref=dict(type='str',),
        controller_health_status_enabled=dict(type='bool',),
        created_by=dict(type='str',),
        description=dict(type='str',),
        domain_names=dict(type='list',),
        down_response=dict(type='dict',),
        enabled=dict(type='bool',),
        groups=dict(type='list',),
        health_monitor_refs=dict(type='list',),
        health_monitor_scope=dict(type='str',),
        hm_off=dict(type='bool',),
        is_federated=dict(type='bool',),
        min_members=dict(type='int',),
        name=dict(type='str', required=True),
        num_dns_ip=dict(type='int',),
        pool_algorithm=dict(type='str',),
        site_persistence_enabled=dict(type='bool',),
        tenant_ref=dict(type='str',),
        ttl=dict(type='int',),
        url=dict(type='str',),
        use_edns_client_subnet=dict(type='bool',),
        uuid=dict(type='str',),
        wildcard_match=dict(type='bool',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'gslbservice',
                           set([]))
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        account_lock_timeout=dict(type='int', ),
        credentials_timeout_threshold=dict(type='int', ),
        max_concurrent_sessions=dict(type='int', ),
        max_login_failure_count=dict(type='int', ),
        max_password_history_count=dict(type='int', ),
        name=dict(type='str', required=True),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'useraccountprofile', set([]))
Example #5
0
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        se_agent_properties=dict(type='dict',),
        se_bootup_properties=dict(type='dict',),
        se_runtime_properties=dict(type='dict',),
        url=dict(type='str',),
        uuid=dict(type='str',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'seproperties',
                           set([]))
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        description=dict(type='str', ),
        image_id=dict(type='str', ),
        mesos=dict(type='dict', ),
        name=dict(type='str', required=True),
        openstack=dict(type='dict', ),
        tenant_ref=dict(type='str', ),
        url=dict(type='str', ),
        use_external_asg=dict(type='bool', ),
        uuid=dict(type='str', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'autoscalelaunchconfig', set([]))
Example #7
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        backup_config_ref=dict(type='str', ),
        file_name=dict(type='str', required=True),
        local_file_url=dict(type='str', ),
        remote_file_url=dict(type='str', ),
        scheduler_ref=dict(type='str', ),
        tenant_ref=dict(type='str', ),
        timestamp=dict(type='str', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'backup', set([]))
Example #8
0
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        ca_certs=dict(type='list',),
        certificate=dict(type='dict', required=True),
        certificate_base64=dict(type='bool',),
        certificate_management_profile_ref=dict(type='str',),
        created_by=dict(type='str',),
        dynamic_params=dict(type='list',),
        enckey_base64=dict(type='str',),
        enckey_name=dict(type='str',),
        format=dict(type='str',),
        hardwaresecuritymodulegroup_ref=dict(type='str',),
        key=dict(type='str', no_log=True,),
        key_base64=dict(type='bool',),
        key_params=dict(type='dict',),
        key_passphrase=dict(type='str', no_log=True,),
        name=dict(type='str', required=True),
        status=dict(type='str',),
        tenant_ref=dict(type='str',),
        type=dict(type='str',),
        url=dict(type='str',),
        uuid=dict(type='str',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'sslkeyandcertificate',
                           set(['key_passphrase', 'key']))
Example #9
0
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        description=dict(type='str',),
        dns_monitor=dict(type='dict',),
        external_monitor=dict(type='dict',),
        failed_checks=dict(type='int',),
        http_monitor=dict(type='dict',),
        https_monitor=dict(type='dict',),
        is_federated=dict(type='bool',),
        monitor_port=dict(type='int',),
        name=dict(type='str', required=True),
        radius_monitor=dict(type='dict',),
        receive_timeout=dict(type='int',),
        send_interval=dict(type='int',),
        sip_monitor=dict(type='dict',),
        successful_checks=dict(type='int',),
        tcp_monitor=dict(type='dict',),
        tenant_ref=dict(type='str',),
        type=dict(type='str', required=True),
        udp_monitor=dict(type='dict',),
        url=dict(type='str',),
        uuid=dict(type='str',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'healthmonitor',
                           set([]))
Example #10
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        name=dict(type='str', required=True),
        obj_username=dict(type='str', required=True),
        obj_password=dict(type='str', required=True, no_log=True),
        access=dict(type='list', ),
        email=dict(type='str', ),
        is_superuser=dict(type='bool', ),
        is_active=dict(type='bool', ),
        avi_api_update_method=dict(default='put',
                                   choices=['post', 'put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        user_profile_ref=dict(type='str', ),
        default_tenant_ref=dict(type='str', default='/api/tenant?name=admin'),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'user', set([]))
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        action_group_ref=dict(type='str',),
        alert_rule=dict(type='dict', required=True),
        autoscale_alert=dict(type='bool',),
        category=dict(type='str', required=True),
        description=dict(type='str',),
        enabled=dict(type='bool',),
        expiry_time=dict(type='int',),
        name=dict(type='str', required=True),
        obj_uuid=dict(type='str',),
        object_type=dict(type='str',),
        recommendation=dict(type='str',),
        rolling_window=dict(type='int',),
        source=dict(type='str', required=True),
        summary=dict(type='str',),
        tenant_ref=dict(type='str',),
        threshold=dict(type='int',),
        throttle=dict(type='int',),
        url=dict(type='str',),
        uuid=dict(type='str',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'alertconfig',
                           set([]))
Example #12
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        async_interval=dict(type='int', ),
        clear_on_max_retries=dict(type='int', ),
        client_ip_addr_group=dict(type='dict', ),
        description=dict(type='str', ),
        dns_configs=dict(type='list', ),
        is_federated=dict(type='bool', ),
        leader_cluster_uuid=dict(type='str', required=True),
        maintenance_mode=dict(type='bool', ),
        name=dict(type='str', required=True),
        send_interval=dict(type='int', ),
        send_interval_prior_to_maintenance_mode=dict(type='int', ),
        sites=dict(type='list', ),
        tenant_ref=dict(type='str', ),
        third_party_sites=dict(type='list', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
        view_id=dict(type='int', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    api_method = module.params['avi_api_update_method']
    if str(api_method).lower() == 'patch':
        patch_op = module.params['avi_api_patch_op']
        # Create controller session
        api_creds = AviCredentials()
        api_creds.update_from_ansible_module(module)
        api = ApiSession.get_session(api_creds.controller,
                                     api_creds.username,
                                     password=api_creds.password,
                                     timeout=api_creds.timeout,
                                     tenant=api_creds.tenant,
                                     tenant_uuid=api_creds.tenant_uuid,
                                     token=api_creds.token,
                                     port=api_creds.port)
        # Get existing gslb objects
        rsp = api.get('gslb', api_version=api_creds.api_version)
        existing_gslb = rsp.json()
        gslb = existing_gslb['results']
        sites = module.params['gslb_sites_config']
        for gslb_obj in gslb:
            # Update/Delete domain names in dns_configs fields in gslb object.
            if 'dns_configs' in module.params:
                if gslb_obj['leader_cluster_uuid'] == module.params[
                        'leader_cluster_uuid']:
                    if str(patch_op).lower() == 'delete':
                        gslb_obj['dns_configs'] = []
                    elif str(patch_op).lower() == 'add':
                        if module.params['dns_configs'] not in gslb_obj[
                                'dns_configs']:
                            gslb_obj['dns_configs'].extend(
                                module.params['dns_configs'])
                    else:
                        gslb_obj['dns_configs'] = module.params['dns_configs']
            # Update/Delete sites configuration
            if sites:
                for site_obj in gslb_obj['sites']:
                    dns_vses = site_obj.get('dns_vses', [])
                    for obj in sites:
                        config_for = obj.get('ip_addr', None)
                        if not config_for:
                            return module.fail_json(msg=(
                                "ip_addr of site in a configuration is mandatory. "
                                "Please provide ip_addr i.e. gslb site's ip."))
                        if config_for == site_obj['ip_addresses'][0]['addr']:
                            if str(patch_op).lower() == 'delete':
                                site_obj['dns_vses'] = []
                            else:
                                # Modify existing gslb sites object
                                for key, val in obj.items():
                                    if key == 'dns_vses' and str(
                                            patch_op).lower() == 'add':
                                        found = False
                                        # Check dns_vses field already exists on the controller
                                        for v in dns_vses:
                                            if val[0]['dns_vs_uuid'] != v[
                                                    'dns_vs_uuid']:
                                                found = True
                                                break
                                        if not found:
                                            dns_vses.extend(val)
                                    else:
                                        site_obj[key] = val
                                if str(patch_op).lower() == 'add':
                                    site_obj['dns_vses'] = dns_vses
            uni_dns_configs = [
                dict(tupleized) for tupleized in set(
                    tuple(item.items()) for item in gslb_obj['dns_configs'])
            ]
            gslb_obj['dns_configs'] = uni_dns_configs
            module.params.update(gslb_obj)
        module.params.update({
            'avi_api_update_method': 'put',
            'state': 'present'
        })
    return avi_ansible_api(module, 'gslb', set([]))
Example #13
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        active_standby_se_tag=dict(type='str', ),
        allow_invalid_client_cert=dict(type='bool', ),
        analytics_policy=dict(type='dict', ),
        analytics_profile_ref=dict(type='str', ),
        apic_contract_graph=dict(type='str', ),
        application_profile_ref=dict(type='str', ),
        auto_allocate_floating_ip=dict(type='bool', ),
        auto_allocate_ip=dict(type='bool', ),
        availability_zone=dict(type='str', ),
        avi_allocated_fip=dict(type='bool', ),
        avi_allocated_vip=dict(type='bool', ),
        azure_availability_set=dict(type='str', ),
        bulk_sync_kvcache=dict(type='bool', ),
        client_auth=dict(type='dict', ),
        close_client_conn_on_config_update=dict(type='bool', ),
        cloud_config_cksum=dict(type='str', ),
        cloud_ref=dict(type='str', ),
        cloud_type=dict(type='str', ),
        connections_rate_limit=dict(type='dict', ),
        content_rewrite=dict(type='dict', ),
        created_by=dict(type='str', ),
        delay_fairness=dict(type='bool', ),
        description=dict(type='str', ),
        discovered_network_ref=dict(type='list', ),
        discovered_networks=dict(type='list', ),
        discovered_subnet=dict(type='list', ),
        dns_info=dict(type='list', ),
        dns_policies=dict(type='list', ),
        east_west_placement=dict(type='bool', ),
        enable_autogw=dict(type='bool', ),
        enable_rhi=dict(type='bool', ),
        enable_rhi_snat=dict(type='bool', ),
        enabled=dict(type='bool', ),
        error_page_profile_ref=dict(type='str', ),
        floating_ip=dict(type='dict', ),
        floating_subnet_uuid=dict(type='str', ),
        flow_dist=dict(type='str', ),
        flow_label_type=dict(type='str', ),
        fqdn=dict(type='str', ),
        host_name_xlate=dict(type='str', ),
        http_policies=dict(type='list', ),
        ign_pool_net_reach=dict(type='bool', ),
        ip_address=dict(type='dict', ),
        ipam_network_subnet=dict(type='dict', ),
        l4_policies=dict(type='list', ),
        limit_doser=dict(type='bool', ),
        max_cps_per_client=dict(type='int', ),
        microservice_ref=dict(type='str', ),
        min_pools_up=dict(type='int', ),
        name=dict(type='str', required=True),
        network_profile_ref=dict(type='str', ),
        network_ref=dict(type='str', ),
        network_security_policy_ref=dict(type='str', ),
        nsx_securitygroup=dict(type='list', ),
        performance_limits=dict(type='dict', ),
        pool_group_ref=dict(type='str', ),
        pool_ref=dict(type='str', ),
        port_uuid=dict(type='str', ),
        remove_listening_port_on_vs_down=dict(type='bool', ),
        requests_rate_limit=dict(type='dict', ),
        saml_sp_config=dict(type='dict', ),
        scaleout_ecmp=dict(type='bool', ),
        se_group_ref=dict(type='str', ),
        security_policy_ref=dict(type='str', ),
        server_network_profile_ref=dict(type='str', ),
        service_metadata=dict(type='str', ),
        service_pool_select=dict(type='list', ),
        services=dict(type='list', ),
        sideband_profile=dict(type='dict', ),
        snat_ip=dict(type='list', ),
        sp_pool_refs=dict(type='list', ),
        ssl_key_and_certificate_refs=dict(type='list', ),
        ssl_profile_ref=dict(type='str', ),
        ssl_profile_selectors=dict(type='list', ),
        ssl_sess_cache_avg_size=dict(type='int', ),
        sso_policy=dict(type='dict', ),
        sso_policy_ref=dict(type='str', ),
        static_dns_records=dict(type='list', ),
        subnet=dict(type='dict', ),
        subnet_uuid=dict(type='str', ),
        tenant_ref=dict(type='str', ),
        topology_policies=dict(type='list', ),
        traffic_clone_profile_ref=dict(type='str', ),
        traffic_enabled=dict(type='bool', ),
        type=dict(type='str', ),
        url=dict(type='str', ),
        use_bridge_ip_as_vip=dict(type='bool', ),
        use_vip_as_snat=dict(type='bool', ),
        uuid=dict(type='str', ),
        vh_domain_name=dict(type='list', ),
        vh_parent_vs_uuid=dict(type='str', ),
        vip=dict(type='list', ),
        vrf_context_ref=dict(type='str', ),
        vs_datascripts=dict(type='list', ),
        vsvip_cloud_config_cksum=dict(type='str', ),
        vsvip_ref=dict(type='str', ),
        waf_policy_ref=dict(type='str', ),
        weight=dict(type='int', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'virtualservice', set([]))
Example #14
0
def main():
    argument_specs = dict(
        http_method=dict(required=True,
                         choices=['get', 'put', 'post', 'patch',
                                  'delete']),
        path=dict(type='str', required=True),
        params=dict(type='dict'),
        data=dict(type='jsonarg'),
        timeout=dict(type='int', default=60)
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    api_creds = AviCredentials()
    api_creds.update_from_ansible_module(module)
    api = ApiSession.get_session(
        api_creds.controller, api_creds.username, password=api_creds.password,
        timeout=api_creds.timeout, tenant=api_creds.tenant,
        tenant_uuid=api_creds.tenant_uuid, token=api_creds.token,
        port=api_creds.port)

    tenant_uuid = api_creds.tenant_uuid
    tenant = api_creds.tenant
    timeout = int(module.params.get('timeout'))
    # path is a required argument
    path = module.params.get('path', '')
    params = module.params.get('params', None)
    data = module.params.get('data', None)
    # Get the api_version from module.
    api_version = api_creds.api_version
    if data is not None:
        data = json.loads(data)
    method = module.params['http_method']

    existing_obj = None
    changed = method != 'get'
    gparams = deepcopy(params) if params else {}
    gparams.update({'include_refs': '', 'include_name': ''})

    # API methods not allowed
    api_get_not_allowed = ["cluster", "gslbsiteops"]
    api_post_not_allowed = ["alert", "fileservice"]
    api_put_not_allowed = ["backup"]

    if method == 'post' and not any(path.startswith(uri) for uri in api_post_not_allowed):
        # TODO: Above condition should be updated after AV-38981 is fixed
        # need to check if object already exists. In that case
        # change the method to be put
        try:
            using_collection = False
            if not any(path.startswith(uri) for uri in api_get_not_allowed):
                if 'name' in data:
                    gparams['name'] = data['name']
                using_collection = True
            if not any(path.startswith(uri) for uri in api_get_not_allowed):
                rsp = api.get(path, tenant=tenant, tenant_uuid=tenant_uuid,
                              params=gparams, api_version=api_version)
                existing_obj = rsp.json()
                if using_collection:
                    existing_obj = existing_obj['results'][0]
        except (IndexError, KeyError):
            # object is not found
            pass
        else:
            if not any(path.startswith(uri) for uri in api_get_not_allowed):
                # object is present
                method = 'put'
                path += '/' + existing_obj['uuid']

    if method == 'put' and not any(path.startswith(uri) for uri in api_put_not_allowed):
        # put can happen with when full path is specified or it is put + post
        if existing_obj is None:
            using_collection = False
            if ((len(path.split('/')) == 1) and ('name' in data) and
                    (not any(path.startswith(uri) for uri in api_get_not_allowed))):
                gparams['name'] = data['name']
                using_collection = True
            rsp = api.get(path, tenant=tenant, tenant_uuid=tenant_uuid,
                          params=gparams, api_version=api_version)
            rsp_data = rsp.json()
            if using_collection:
                if rsp_data['results']:
                    existing_obj = rsp_data['results'][0]
                    path += '/' + existing_obj['uuid']
                else:
                    method = 'post'
            else:
                if rsp.status_code == 404:
                    method = 'post'
                else:
                    existing_obj = rsp_data
        if existing_obj:
            changed = not avi_obj_cmp(data, existing_obj)
            cleanup_absent_fields(data)
    if method == 'patch':
        rsp = api.get(path, tenant=tenant, tenant_uuid=tenant_uuid,
                      params=gparams, api_version=api_version)
        existing_obj = rsp.json()

    if (method == 'put' and changed) or (method != 'put'):
        fn = getattr(api, method)
        rsp = fn(path, tenant=tenant, tenant_uuid=tenant, timeout=timeout,
                 params=params, data=data, api_version=api_version)
    else:
        rsp = None
    if method == 'delete' and rsp.status_code == 404:
        changed = False
        rsp.status_code = 200
    if method == 'patch' and existing_obj and rsp.status_code < 299:
        # Ideally the comparison should happen with the return values
        # from the patch API call. However, currently Avi API are
        # returning different hostname when GET is used vs Patch.
        # tracked as AV-12561
        if path.startswith('pool'):
            time.sleep(1)
        gparams = deepcopy(params) if params else {}
        gparams.update({'include_refs': '', 'include_name': ''})
        rsp = api.get(path, tenant=tenant, tenant_uuid=tenant_uuid,
                      params=gparams, api_version=api_version)
        new_obj = rsp.json()
        changed = not avi_obj_cmp(new_obj, existing_obj)
    if rsp is None:
        return module.exit_json(changed=changed, obj=existing_obj)
    return ansible_return(module, rsp, changed, req=data)
Example #15
0
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        allow_ip_forwarding=dict(type='bool', ),
        allow_unauthenticated_apis=dict(type='bool', ),
        allow_unauthenticated_nodes=dict(type='bool', ),
        api_idle_timeout=dict(type='int', ),
        api_perf_logging_threshold=dict(type='int', ),
        appviewx_compat_mode=dict(type='bool', ),
        attach_ip_retry_interval=dict(type='int', ),
        attach_ip_retry_limit=dict(type='int', ),
        bm_use_ansible=dict(type='bool', ),
        cleanup_expired_authtoken_timeout_period=dict(type='int', ),
        cleanup_sessions_timeout_period=dict(type='int', ),
        cloud_reconcile=dict(type='bool', ),
        cluster_ip_gratuitous_arp_period=dict(type='int', ),
        consistency_check_timeout_period=dict(type='int', ),
        crashed_se_reboot=dict(type='int', ),
        dead_se_detection_timer=dict(type='int', ),
        dns_refresh_period=dict(type='int', ),
        dummy=dict(type='int', ),
        enable_api_sharding=dict(type='bool', ),
        enable_memory_balancer=dict(type='bool', ),
        fatal_error_lease_time=dict(type='int', ),
        max_dead_se_in_grp=dict(type='int', ),
        max_pcap_per_tenant=dict(type='int', ),
        max_seq_attach_ip_failures=dict(type='int', ),
        max_seq_vnic_failures=dict(type='int', ),
        persistence_key_rotate_period=dict(type='int', ),
        portal_token=dict(
            type='str',
            no_log=True,
        ),
        process_locked_useraccounts_timeout_period=dict(type='int', ),
        process_pki_profile_timeout_period=dict(type='int', ),
        query_host_fail=dict(type='int', ),
        safenet_hsm_version=dict(type='str', ),
        se_create_timeout=dict(type='int', ),
        se_failover_attempt_interval=dict(type='int', ),
        se_from_marketplace=dict(type='str', ),
        se_offline_del=dict(type='int', ),
        se_vnic_cooldown=dict(type='int', ),
        secure_channel_cleanup_timeout=dict(type='int', ),
        secure_channel_controller_token_timeout=dict(type='int', ),
        secure_channel_se_token_timeout=dict(type='int', ),
        seupgrade_fabric_pool_size=dict(type='int', ),
        seupgrade_segroup_min_dead_timeout=dict(type='int', ),
        ssl_certificate_expiry_warning_days=dict(type='list', ),
        unresponsive_se_reboot=dict(type='int', ),
        upgrade_dns_ttl=dict(type='int', ),
        upgrade_lease_time=dict(type='int', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
        vnic_op_fail_time=dict(type='int', ),
        vs_apic_scaleout_timeout=dict(type='int', ),
        vs_awaiting_se_timeout=dict(type='int', ),
        vs_key_rotate_period=dict(type='int', ),
        vs_scaleout_ready_check_interval=dict(type='int', ),
        vs_se_attach_ip_fail=dict(type='int', ),
        vs_se_bootup_fail=dict(type='int', ),
        vs_se_create_fail=dict(type='int', ),
        vs_se_ping_fail=dict(type='int', ),
        vs_se_vnic_fail=dict(type='int', ),
        vs_se_vnic_ip_fail=dict(type='int', ),
        warmstart_se_reconnect_wait_time=dict(type='int', ),
        warmstart_vs_resync_wait_time=dict(type='int', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'controllerproperties',
                           set(['portal_token']))
Example #16
0
def main():
    argument_specs = dict(params=dict(type='dict'),
                          data=dict(type='dict'),
                          name=dict(type='str', required=True),
                          state=dict(default='present',
                                     choices=['absent', 'present']))
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or ansible>=2.8 is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    api_creds = AviCredentials()
    api_creds.update_from_ansible_module(module)
    api = ApiSession.get_session(api_creds.controller,
                                 api_creds.username,
                                 password=api_creds.password,
                                 timeout=api_creds.timeout,
                                 tenant=api_creds.tenant,
                                 tenant_uuid=api_creds.tenant_uuid,
                                 token=api_creds.token,
                                 port=api_creds.port)

    tenant = api_creds.tenant
    tenant_uuid = api_creds.tenant_uuid
    params = module.params.get('params', None)
    data = module.params.get('data', None)
    gparams = deepcopy(params) if params else {}
    gparams.update({'include_refs': '', 'include_name': ''})
    name = module.params.get('name', '')
    state = module.params['state']
    # Get the api version from module.
    api_version = api_creds.api_version
    """
    state: present
    1. Check if the GSLB service is present
    2.    If not then create the GSLB service with the member
    3. Check if the group exists
    4.    if not then create the group with the member
    5. Check if the member is present
          if not then add the member
    state: absent
    1. check if GSLB service is present if not then exit
    2. check if group is present. if not then exit
    3. check if member is present. if present then remove it.
    """
    obj_type = 'gslbservice'
    # Added api version to call
    existing_obj = api.get_object_by_name(obj_type,
                                          name,
                                          tenant=tenant,
                                          tenant_uuid=tenant_uuid,
                                          params={
                                              'include_refs': '',
                                              'include_name': ''
                                          },
                                          api_version=api_version)
    check_mode = module.check_mode
    if state == 'absent':
        # Added api version to call
        changed, rsp = delete_member(module, check_mode, api, tenant,
                                     tenant_uuid, existing_obj, data,
                                     api_version)
    else:
        # Added api version to call
        changed, rsp = add_member(module, check_mode, api, tenant, tenant_uuid,
                                  existing_obj, data, name, api_version)
    if check_mode or not changed:
        return module.exit_json(changed=changed, obj=existing_obj)
    return ansible_return(module, rsp, changed, req=data)
def main():
    argument_specs = dict(
        state=dict(default='present', choices=['absent', 'present']),
        avi_api_update_method=dict(default='put', choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        apdex_response_threshold=dict(type='int', ),
        apdex_response_tolerated_factor=dict(type='float', ),
        apdex_rtt_threshold=dict(type='int', ),
        apdex_rtt_tolerated_factor=dict(type='float', ),
        apdex_rum_threshold=dict(type='int', ),
        apdex_rum_tolerated_factor=dict(type='float', ),
        apdex_server_response_threshold=dict(type='int', ),
        apdex_server_response_tolerated_factor=dict(type='float', ),
        apdex_server_rtt_threshold=dict(type='int', ),
        apdex_server_rtt_tolerated_factor=dict(type='float', ),
        client_log_config=dict(type='dict', ),
        client_log_streaming_config=dict(type='dict', ),
        conn_lossy_ooo_threshold=dict(type='int', ),
        conn_lossy_timeo_rexmt_threshold=dict(type='int', ),
        conn_lossy_total_rexmt_threshold=dict(type='int', ),
        conn_lossy_zero_win_size_event_threshold=dict(type='int', ),
        conn_server_lossy_ooo_threshold=dict(type='int', ),
        conn_server_lossy_timeo_rexmt_threshold=dict(type='int', ),
        conn_server_lossy_total_rexmt_threshold=dict(type='int', ),
        conn_server_lossy_zero_win_size_event_threshold=dict(type='int', ),
        description=dict(type='str', ),
        disable_ondemand_metrics=dict(type='bool', ),
        disable_se_analytics=dict(type='bool', ),
        disable_server_analytics=dict(type='bool', ),
        disable_vs_analytics=dict(type='bool', ),
        enable_advanced_analytics=dict(type='bool', ),
        exclude_client_close_before_request_as_error=dict(type='bool', ),
        exclude_dns_policy_drop_as_significant=dict(type='bool', ),
        exclude_gs_down_as_error=dict(type='bool', ),
        exclude_http_error_codes=dict(type='list', ),
        exclude_invalid_dns_domain_as_error=dict(type='bool', ),
        exclude_invalid_dns_query_as_error=dict(type='bool', ),
        exclude_no_dns_record_as_error=dict(type='bool', ),
        exclude_no_valid_gs_member_as_error=dict(type='bool', ),
        exclude_persistence_change_as_error=dict(type='bool', ),
        exclude_server_dns_error_as_error=dict(type='bool', ),
        exclude_server_tcp_reset_as_error=dict(type='bool', ),
        exclude_sip_error_codes=dict(type='list', ),
        exclude_syn_retransmit_as_error=dict(type='bool', ),
        exclude_tcp_reset_as_error=dict(type='bool', ),
        exclude_unsupported_dns_query_as_error=dict(type='bool', ),
        healthscore_max_server_limit=dict(type='int', ),
        hs_event_throttle_window=dict(type='int', ),
        hs_max_anomaly_penalty=dict(type='int', ),
        hs_max_resources_penalty=dict(type='int', ),
        hs_max_security_penalty=dict(type='int', ),
        hs_min_dos_rate=dict(type='int', ),
        hs_performance_boost=dict(type='int', ),
        hs_pscore_traffic_threshold_l4_client=dict(type='float', ),
        hs_pscore_traffic_threshold_l4_server=dict(type='float', ),
        hs_security_certscore_expired=dict(type='float', ),
        hs_security_certscore_gt30d=dict(type='float', ),
        hs_security_certscore_le07d=dict(type='float', ),
        hs_security_certscore_le30d=dict(type='float', ),
        hs_security_chain_invalidity_penalty=dict(type='float', ),
        hs_security_cipherscore_eq000b=dict(type='float', ),
        hs_security_cipherscore_ge128b=dict(type='float', ),
        hs_security_cipherscore_lt128b=dict(type='float', ),
        hs_security_encalgo_score_none=dict(type='float', ),
        hs_security_encalgo_score_rc4=dict(type='float', ),
        hs_security_hsts_penalty=dict(type='float', ),
        hs_security_nonpfs_penalty=dict(type='float', ),
        hs_security_selfsignedcert_penalty=dict(type='float', ),
        hs_security_ssl30_score=dict(type='float', ),
        hs_security_tls10_score=dict(type='float', ),
        hs_security_tls11_score=dict(type='float', ),
        hs_security_tls12_score=dict(type='float', ),
        hs_security_weak_signature_algo_penalty=dict(type='float', ),
        name=dict(type='str', required=True),
        ondemand_metrics_idle_timeout=dict(type='int', ),
        ranges=dict(type='list', ),
        resp_code_block=dict(type='list', ),
        sensitive_log_profile=dict(type='dict', ),
        sip_log_depth=dict(type='int', ),
        tenant_ref=dict(type='str', ),
        url=dict(type='str', ),
        uuid=dict(type='str', ),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(argument_spec=argument_specs,
                           supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'analyticsprofile', set([]))
Example #18
0
def main():
    argument_specs = dict(
        state=dict(default='present',
                   choices=['absent', 'present']),
        avi_api_update_method=dict(default='put',
                                   choices=['put', 'patch']),
        avi_api_patch_op=dict(choices=['add', 'replace', 'delete']),
        a_pool=dict(type='str',),
        ab_pool=dict(type='dict',),
        ab_priority=dict(type='int',),
        analytics_policy=dict(type='dict',),
        analytics_profile_ref=dict(type='str',),
        apic_epg_name=dict(type='str',),
        application_persistence_profile_ref=dict(type='str',),
        autoscale_launch_config_ref=dict(type='str',),
        autoscale_networks=dict(type='list',),
        autoscale_policy_ref=dict(type='str',),
        capacity_estimation=dict(type='bool',),
        capacity_estimation_ttfb_thresh=dict(type='int',),
        cloud_config_cksum=dict(type='str',),
        cloud_ref=dict(type='str',),
        conn_pool_properties=dict(type='dict',),
        connection_ramp_duration=dict(type='int',),
        created_by=dict(type='str',),
        default_server_port=dict(type='int',),
        delete_server_on_dns_refresh=dict(type='bool',),
        description=dict(type='str',),
        domain_name=dict(type='list',),
        east_west=dict(type='bool',),
        enabled=dict(type='bool',),
        external_autoscale_groups=dict(type='list',),
        fail_action=dict(type='dict',),
        fewest_tasks_feedback_delay=dict(type='int',),
        graceful_disable_timeout=dict(type='int',),
        gslb_sp_enabled=dict(type='bool',),
        health_monitor_refs=dict(type='list',),
        host_check_enabled=dict(type='bool',),
        inline_health_monitor=dict(type='bool',),
        ipaddrgroup_ref=dict(type='str',),
        lb_algorithm=dict(type='str',),
        lb_algorithm_consistent_hash_hdr=dict(type='str',),
        lb_algorithm_core_nonaffinity=dict(type='int',),
        lb_algorithm_hash=dict(type='str',),
        lookup_server_by_name=dict(type='bool',),
        max_concurrent_connections_per_server=dict(type='int',),
        max_conn_rate_per_server=dict(type='dict',),
        min_health_monitors_up=dict(type='int',),
        min_servers_up=dict(type='int',),
        name=dict(type='str', required=True),
        networks=dict(type='list',),
        nsx_securitygroup=dict(type='list',),
        pki_profile_ref=dict(type='str',),
        placement_networks=dict(type='list',),
        prst_hdr_name=dict(type='str',),
        request_queue_depth=dict(type='int',),
        request_queue_enabled=dict(type='bool',),
        rewrite_host_header_to_server_name=dict(type='bool',),
        rewrite_host_header_to_sni=dict(type='bool',),
        server_auto_scale=dict(type='bool',),
        server_count=dict(type='int',),
        server_name=dict(type='str',),
        server_reselect=dict(type='dict',),
        server_timeout=dict(type='int',),
        servers=dict(type='list',),
        service_metadata=dict(type='str',),
        sni_enabled=dict(type='bool',),
        ssl_key_and_certificate_ref=dict(type='str',),
        ssl_profile_ref=dict(type='str',),
        tenant_ref=dict(type='str',),
        url=dict(type='str',),
        use_service_port=dict(type='bool',),
        uuid=dict(type='str',),
        vrf_ref=dict(type='str',),
    )
    argument_specs.update(avi_common_argument_spec())
    module = AnsibleModule(
        argument_spec=argument_specs, supports_check_mode=True)
    if not HAS_AVI:
        return module.fail_json(msg=(
            'Avi python API SDK (avisdk>=17.1) or requests is not installed. '
            'For more details visit https://github.com/avinetworks/sdk.'))
    return avi_ansible_api(module, 'pool',
                           set([]))