def update_ovdc_k8s_provider_metadata(sysadmin_client: vcd_client.Client,
                                      ovdc_id,
                                      k8s_provider_data=None,
                                      k8s_provider=None):
    """Set the k8s provider metadata for given ovdc.

    :param pyvcloud.vcd.client.Client sysadmin_client:
    :param str ovdc_id:
    :param dict k8s_provider_data:  k8s provider context details
    :param K8sProvider k8s_provider:
    :return:
    """
    vcd_utils.raise_error_if_user_not_from_system_org(sysadmin_client)

    ovdc = vcd_utils.get_vdc(sysadmin_client, vdc_id=ovdc_id)
    ovdc_name = ovdc.get_resource().get('name')
    metadata = {K8S_PROVIDER_KEY: k8s_provider or K8sProvider.NONE}

    if k8s_provider != K8sProvider.PKS:
        LOGGER.debug(f"Remove existing metadata for ovdc:{ovdc_name}")
        _remove_metadata_from_ovdc(ovdc, PksCache.get_pks_keys())
        LOGGER.debug(f"Updated metadata for {k8s_provider}:" f"{metadata}")
    else:
        k8s_provider_data.pop('username')
        k8s_provider_data.pop('secret')
        k8s_provider_data.pop('nsxt')
        metadata.update(k8s_provider_data)

    # set ovdc metadata into Vcd
    LOGGER.debug(f"On ovdc:{ovdc_name}, setting metadata:{metadata}")
    return ovdc.set_multiple_metadata(metadata,
                                      vcd_client.MetadataDomain.SYSTEM,
                                      vcd_client.MetadataVisibility.PRIVATE)
Example #2
0
def get_ovdc_k8s_provider_metadata(sysadmin_client: vcd_client.Client,
                                   org_name=None,
                                   ovdc_name=None,
                                   ovdc_id=None,
                                   include_credentials=False,
                                   include_nsxt_info=False):
    """Get k8s provider metadata for an org VDC.

    :param sysadmin_client:
    :param org_name:
    :param ovdc_name:
    :param ovdc_id:
    :param include_credentials:
    :param include_nsxt_info:
    :return:  Dictionary with k8s provider metadata
    """
    vcd_utils.raise_error_if_user_not_from_system_org(sysadmin_client)

    ovdc = vcd_utils.get_vdc(client=sysadmin_client,
                             vdc_name=ovdc_name,
                             vdc_id=ovdc_id,
                             org_name=org_name,
                             is_admin_operation=True)

    all_metadata = pyvcd_utils.metadata_to_dict(ovdc.get_all_metadata())
    k8s_provider = all_metadata.get(K8S_PROVIDER_KEY, K8sProvider.NONE)

    result = {K8S_PROVIDER_KEY: k8s_provider}

    if k8s_provider == K8sProvider.PKS:
        result.update({k: all_metadata[k]
                       for k in PksCache.get_pks_keys()})  # noqa: E501
        result[PKS_PLANS_KEY] = result[PKS_PLANS_KEY].split(',')

        # Get the credentials from PksCache
        if include_credentials or include_nsxt_info:
            pks_cache = server_utils.get_pks_cache()
            pvdc_info = pks_cache.get_pvdc_info(
                vcd_utils.get_pvdc_id(sysadmin_client, ovdc))
            if include_credentials:
                # noqa: E501 TODO in case only ovdc_id is provided, we need a way to get org_name
                pks_info = pks_cache.get_pks_account_info(
                    org_name, pvdc_info.vc)
                result.update(pks_info.credentials._asdict())
            if include_nsxt_info:
                nsxt_info = pks_cache.get_nsxt_info(pvdc_info.vc)
                result['nsxt'] = nsxt_info

    return result