master 476a00ecc1f2 cached
8514 files
129.1 MB
26.8M tokens
202754 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (107,076K chars total). Download the full file to get everything.
Repository: kubernetes/cloud-provider-gcp
Branch: master
Commit: 476a00ecc1f2
Files: 8514
Total size: 129.1 MB

Directory structure:
gitextract__43othww/

├── .gitallowed
├── .github/
│   ├── dependabot.yml
│   ├── release.yml
│   └── workflows/
│       ├── dependabot-sync.yml
│       ├── release.yml
│       ├── tag-auth-provider-gcp.yml
│       ├── tag-ccm.yml
│       └── tag-gke-gcloud-auth-plugin.yml
├── .gitignore
├── .ko.yaml
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── SECURITY_CONTACTS
├── cloudbuild.yaml
├── cmd/
│   ├── auth-provider-gcp/
│   │   ├── OWNERS
│   │   ├── app/
│   │   │   ├── getcredentials.go
│   │   │   └── getcredentials_test.go
│   │   ├── main.go
│   │   └── provider/
│   │       ├── provider.go
│   │       └── provider_test.go
│   ├── cloud-controller-manager/
│   │   ├── OWNERS
│   │   ├── gkenetworkparamsetcontroller.go
│   │   ├── gkeservicecontroller.go
│   │   ├── gkeservicecontroller_test.go
│   │   ├── gketenantcontrollermanager.go
│   │   ├── gketenantcontrollermanager_test.go
│   │   ├── main.go
│   │   ├── nodecontroller.go
│   │   ├── nodeipamcontroller.go
│   │   ├── nodeipamcontroller_test.go
│   │   ├── nodelifecyclecontroller.go
│   │   ├── nodelifecyclecontroller_test.go
│   │   └── options/
│   │       └── nodeipamcontroller.go
│   └── gke-gcloud-auth-plugin/
│       ├── OWNERS
│       ├── cred.go
│       ├── cred_test.go
│       ├── default_credentials_token_provider.go
│       ├── gcloud_edge_cloud_token_provider.go
│       ├── gcloud_token_provider.go
│       └── token_provider.go
├── code-of-conduct.md
├── deploy/
│   ├── cloud-controller-manager.manifest
│   ├── cloud-node-controller-binding.yaml
│   ├── cloud-node-controller-role.yaml
│   ├── packages/
│   │   └── default/
│   │       ├── kustomization.yaml
│   │       └── manifest.yaml
│   └── pvl-controller-role.yaml
├── dev/
│   └── ci/
│       ├── periodics/
│       │   ├── ci-cloud-provider-gcp-conformance-latest-with-gcepd.sh
│       │   ├── ci-cloud-provider-gcp-conformance-latest.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-kops.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-with-gcepd.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-with-kubernetes-master.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest.sh
│       │   └── ci-cloud-provider-gcp-e2e-scenario-kops-simple.sh
│       └── presubmits/
│           └── cloud-provider-gcp-tests
├── docs/
│   ├── RELEASE.md
│   └── kops-quickstart.md
├── e2e/
│   ├── add-kubernetes-to-workspace.sh
│   └── scenarios/
│       └── kops-simple
├── ginko-test-package-version.env
├── go.mod
├── go.sum
├── go.work
├── go.work.sum
├── metis/
│   ├── Dockerfile
│   ├── Makefile
│   ├── api/
│   │   └── adaptiveipam/
│   │       └── v1/
│   │           ├── adaptiveipam.pb.go
│   │           ├── adaptiveipam.proto
│   │           └── adaptiveipam_grpc.pb.go
│   ├── cmd/
│   │   ├── cni.go
│   │   ├── daemon.go
│   │   ├── daemonoptions.go
│   │   └── main.go
│   ├── go.mod
│   ├── go.sum
│   ├── install-plugin.sh
│   ├── pkg/
│   │   ├── cni/
│   │   │   ├── config.go
│   │   │   ├── config_test.go
│   │   │   ├── handlers.go
│   │   │   ├── handlers_test.go
│   │   │   ├── plugin.go
│   │   │   └── types.go
│   │   ├── consts.go
│   │   ├── daemon/
│   │   │   ├── daemon.go
│   │   │   ├── daemon_server.go
│   │   │   ├── daemon_server_test.go
│   │   │   └── daemon_test.go
│   │   └── store/
│   │       ├── schema.sql
│   │       ├── store.go
│   │       └── store_test.go
│   └── test/
│       └── cni_conformance_test.go
├── pkg/
│   ├── controller/
│   │   ├── gkenetworkparamset/
│   │   │   ├── gkenetworkparamset_controller.go
│   │   │   ├── gkenetworkparamset_controller_test.go
│   │   │   ├── gkenetworkparamset_metrics.go
│   │   │   └── gnpcontroller_validations.go
│   │   ├── gketenantcontrollers/
│   │   │   ├── README.md
│   │   │   ├── cloud.go
│   │   │   ├── cloud_test.go
│   │   │   ├── starter.go
│   │   │   ├── starter_test.go
│   │   │   └── utils/
│   │   │       ├── helpers.go
│   │   │       └── helpers_test.go
│   │   ├── nodeipam/
│   │   │   ├── OWNERS
│   │   │   ├── config/
│   │   │   │   ├── doc.go
│   │   │   │   ├── types.go
│   │   │   │   ├── v1alpha1/
│   │   │   │   │   ├── conversion.go
│   │   │   │   │   ├── defaults.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── register.go
│   │   │   │   │   ├── zz_generated.conversion.go
│   │   │   │   │   └── zz_generated.deepcopy.go
│   │   │   │   └── zz_generated.deepcopy.go
│   │   │   ├── doc.go
│   │   │   ├── ipam/
│   │   │   │   ├── adapter.go
│   │   │   │   ├── cidr_allocator.go
│   │   │   │   ├── cidrset/
│   │   │   │   │   ├── cidr_set.go
│   │   │   │   │   ├── cidr_set_test.go
│   │   │   │   │   └── metrics.go
│   │   │   │   ├── cloud_cidr_allocator.go
│   │   │   │   ├── cloud_cidr_allocator_metrics.go
│   │   │   │   ├── cloud_cidr_allocator_nolegacyproviders.go
│   │   │   │   ├── cloud_cidr_allocator_test.go
│   │   │   │   ├── controller_legacyprovider.go
│   │   │   │   ├── controller_test.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── multinetwork_cloud_cidr_allocator.go
│   │   │   │   ├── multinetwork_cloud_cidr_allocator_test.go
│   │   │   │   ├── node_topology_syncer.go
│   │   │   │   ├── node_topology_syncer_test.go
│   │   │   │   ├── range_allocator.go
│   │   │   │   ├── range_allocator_test.go
│   │   │   │   ├── sync/
│   │   │   │   │   ├── sync.go
│   │   │   │   │   └── sync_test.go
│   │   │   │   ├── task_queue.go
│   │   │   │   ├── task_queue_test.go
│   │   │   │   ├── test/
│   │   │   │   │   └── utils.go
│   │   │   │   ├── timeout.go
│   │   │   │   └── timeout_test.go
│   │   │   ├── legacyprovider.go
│   │   │   ├── node_ipam_controller.go
│   │   │   ├── node_ipam_controller_test.go
│   │   │   ├── nolegacyprovider.go
│   │   │   └── starter.go
│   │   ├── service/
│   │   │   ├── OWNERS
│   │   │   ├── README.md
│   │   │   ├── controller.go
│   │   │   ├── controller_gke.go
│   │   │   ├── doc.go
│   │   │   └── metrics.go
│   │   └── testutil/
│   │       └── test_utils.go
│   ├── controllermetrics/
│   │   └── controllermetrics.go
│   ├── credentialconfig/
│   │   ├── README.md
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── provider.go
│   │   └── provider_test.go
│   ├── gcpcredential/
│   │   ├── README.md
│   │   └── gcpcredential.go
│   └── util/
│       ├── controller_utils.go
│       ├── node/
│       │   ├── node.go
│       │   └── node_test.go
│       └── taints/
│           ├── taints.go
│           └── taints_test.go
├── providers/
│   ├── LICENSE
│   ├── README.md
│   ├── gce/
│   │   ├── OWNERS
│   │   ├── doc.go
│   │   ├── gce.go
│   │   ├── gce_address_manager.go
│   │   ├── gce_address_manager_test.go
│   │   ├── gce_addresses.go
│   │   ├── gce_alpha.go
│   │   ├── gce_annotations.go
│   │   ├── gce_annotations_test.go
│   │   ├── gce_backendservice.go
│   │   ├── gce_cert.go
│   │   ├── gce_clusterid.go
│   │   ├── gce_clusters.go
│   │   ├── gce_disks.go
│   │   ├── gce_disks_test.go
│   │   ├── gce_fake.go
│   │   ├── gce_firewall.go
│   │   ├── gce_forwardingrule.go
│   │   ├── gce_healthchecks.go
│   │   ├── gce_instancegroup.go
│   │   ├── gce_instances.go
│   │   ├── gce_instances_test.go
│   │   ├── gce_interfaces.go
│   │   ├── gce_loadbalancer.go
│   │   ├── gce_loadbalancer_external.go
│   │   ├── gce_loadbalancer_external_deny_test.go
│   │   ├── gce_loadbalancer_external_test.go
│   │   ├── gce_loadbalancer_internal.go
│   │   ├── gce_loadbalancer_internal_test.go
│   │   ├── gce_loadbalancer_metrics.go
│   │   ├── gce_loadbalancer_metrics_test.go
│   │   ├── gce_loadbalancer_naming.go
│   │   ├── gce_loadbalancer_naming_test.go
│   │   ├── gce_loadbalancer_test.go
│   │   ├── gce_loadbalancer_utils_test.go
│   │   ├── gce_networkendpointgroup.go
│   │   ├── gce_networks.go
│   │   ├── gce_routes.go
│   │   ├── gce_securitypolicy.go
│   │   ├── gce_subnetworks.go
│   │   ├── gce_targetpool.go
│   │   ├── gce_targetproxy.go
│   │   ├── gce_test.go
│   │   ├── gce_tpu.go
│   │   ├── gce_urlmap.go
│   │   ├── gce_util.go
│   │   ├── gce_util_test.go
│   │   ├── gce_zones.go
│   │   ├── gcpcredential/
│   │   │   ├── credentialutil.go
│   │   │   ├── gcpcredential.go
│   │   │   ├── registry_marshal.go
│   │   │   └── registry_marshal_test.go
│   │   ├── metrics.go
│   │   ├── metrics_test.go
│   │   ├── support.go
│   │   └── token_source.go
│   ├── go.mod
│   └── go.sum
├── test/
│   ├── OWNERS
│   ├── boskos.sh
│   ├── e2e/
│   │   ├── firewall.go
│   │   ├── gce.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── loadbalancer.go
│   │   ├── network_tiers.go
│   │   └── suite_test.go
│   └── e2e.sh
├── tools/
│   ├── .golint_failures
│   ├── auto-tag.sh
│   ├── common
│   ├── coverage/
│   │   └── golang_coverage.sh
│   ├── kops/
│   │   ├── main.go
│   │   └── pkg/
│   │       └── kops/
│   │           ├── config.go
│   │           ├── default_template.go
│   │           ├── gcp.go
│   │           ├── kops_test.go
│   │           ├── lifecycle.go
│   │           └── template.go
│   ├── lib/
│   │   └── util.sh
│   ├── merge_licenses.sh
│   ├── pin_k8s_deps.sh
│   ├── push-images
│   ├── run-e2e-test.sh
│   ├── sha256_generator.sh
│   ├── tools.go
│   ├── update-gofmt.sh
│   ├── update-golang
│   ├── update-proto.sh
│   ├── update_vendor.sh
│   ├── verify-all.sh
│   ├── verify-gofmt.sh
│   ├── verify-golint.sh
│   ├── verify-govet.sh
│   ├── verify-k8s-version.sh
│   ├── verify-up-to-date.sh
│   ├── verify-vendor.sh
│   └── version.sh
└── vendor/
    ├── cel.dev/
    │   └── expr/
    │       ├── .bazelversion
    │       ├── .gitattributes
    │       ├── .gitignore
    │       ├── BUILD.bazel
    │       ├── CODE_OF_CONDUCT.md
    │       ├── CONTRIBUTING.md
    │       ├── GOVERNANCE.md
    │       ├── LICENSE
    │       ├── MAINTAINERS.md
    │       ├── MODULE.bazel
    │       ├── README.md
    │       ├── WORKSPACE
    │       ├── WORKSPACE.bzlmod
    │       ├── checked.pb.go
    │       ├── cloudbuild.yaml
    │       ├── eval.pb.go
    │       ├── explain.pb.go
    │       ├── regen_go_proto.sh
    │       ├── regen_go_proto_canonical_protos.sh
    │       ├── syntax.pb.go
    │       └── value.pb.go
    ├── cloud.google.com/
    │   └── go/
    │       ├── auth/
    │       │   ├── CHANGES.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── auth.go
    │       │   ├── credentials/
    │       │   │   ├── compute.go
    │       │   │   ├── detect.go
    │       │   │   ├── doc.go
    │       │   │   ├── filetypes.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccount/
    │       │   │   │   │   ├── aws_provider.go
    │       │   │   │   │   ├── executable_provider.go
    │       │   │   │   │   ├── externalaccount.go
    │       │   │   │   │   ├── file_provider.go
    │       │   │   │   │   ├── info.go
    │       │   │   │   │   ├── programmatic_provider.go
    │       │   │   │   │   ├── url_provider.go
    │       │   │   │   │   └── x509_provider.go
    │       │   │   │   ├── externalaccountuser/
    │       │   │   │   │   └── externalaccountuser.go
    │       │   │   │   ├── gdch/
    │       │   │   │   │   └── gdch.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       └── sts_exchange.go
    │       │   │   └── selfsignedjwt.go
    │       │   ├── httptransport/
    │       │   │   ├── httptransport.go
    │       │   │   ├── trace.go
    │       │   │   └── transport.go
    │       │   ├── internal/
    │       │   │   ├── credsfile/
    │       │   │   │   ├── credsfile.go
    │       │   │   │   ├── filetype.go
    │       │   │   │   └── parse.go
    │       │   │   ├── internal.go
    │       │   │   ├── jwt/
    │       │   │   │   └── jwt.go
    │       │   │   └── transport/
    │       │   │       ├── cba.go
    │       │   │       ├── cert/
    │       │   │       │   ├── default_cert.go
    │       │   │       │   ├── enterprise_cert.go
    │       │   │       │   ├── secureconnect_cert.go
    │       │   │       │   └── workload_cert.go
    │       │   │       ├── s2a.go
    │       │   │       └── transport.go
    │       │   ├── oauth2adapt/
    │       │   │   ├── CHANGES.md
    │       │   │   ├── LICENSE
    │       │   │   └── oauth2adapt.go
    │       │   └── threelegged.go
    │       └── compute/
    │           └── metadata/
    │               ├── CHANGES.md
    │               ├── LICENSE
    │               ├── README.md
    │               ├── log.go
    │               ├── metadata.go
    │               ├── retry.go
    │               ├── retry_linux.go
    │               ├── syscheck.go
    │               ├── syscheck_linux.go
    │               └── syscheck_windows.go
    ├── github.com/
    │   ├── Azure/
    │   │   └── go-ansiterm/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── constants.go
    │   │       ├── context.go
    │   │       ├── csi_entry_state.go
    │   │       ├── csi_param_state.go
    │   │       ├── escape_intermediate_state.go
    │   │       ├── escape_state.go
    │   │       ├── event_handler.go
    │   │       ├── ground_state.go
    │   │       ├── osc_string_state.go
    │   │       ├── parser.go
    │   │       ├── parser_action_helpers.go
    │   │       ├── parser_actions.go
    │   │       ├── states.go
    │   │       ├── utilities.go
    │   │       └── winterm/
    │   │           ├── ansi.go
    │   │           ├── api.go
    │   │           ├── attr_translation.go
    │   │           ├── cursor_helpers.go
    │   │           ├── erase_helpers.go
    │   │           ├── scroll_helper.go
    │   │           ├── utilities.go
    │   │           └── win_event_handler.go
    │   ├── GoogleCloudPlatform/
    │   │   ├── gke-enterprise-mt/
    │   │   │   ├── LICENSE
    │   │   │   └── pkg/
    │   │   │       ├── apis/
    │   │   │       │   └── providerconfig/
    │   │   │       │       └── v1/
    │   │   │       │           ├── doc.go
    │   │   │       │           ├── groupversion_info.go
    │   │   │       │           ├── register.go
    │   │   │       │           ├── types.go
    │   │   │       │           ├── zz_generated.deepcopy.go
    │   │   │       │           └── zz_generated.openapi.go
    │   │   │       ├── filtered/
    │   │   │       │   ├── filteredcache.go
    │   │   │       │   ├── filteredfactory.go
    │   │   │       │   ├── filteredinformer.go
    │   │   │       │   └── helpers.go
    │   │   │       ├── framework/
    │   │   │       │   ├── controller.go
    │   │   │       │   ├── controller_map.go
    │   │   │       │   ├── manager.go
    │   │   │       │   ├── mtcontext/
    │   │   │       │   │   └── mtcontext.go
    │   │   │       │   └── taskqueue/
    │   │   │       │       └── taskqueue.go
    │   │   │       └── providerconfigcr/
    │   │   │           ├── finalizer.go
    │   │   │           ├── informer.go
    │   │   │           └── providerconfig.go
    │   │   ├── gke-networking-api/
    │   │   │   ├── LICENSE
    │   │   │   ├── apis/
    │   │   │   │   ├── network/
    │   │   │   │   │   └── v1/
    │   │   │   │   │       ├── annotations.go
    │   │   │   │   │       ├── doc.go
    │   │   │   │   │       ├── gkenetworkparamset_types.go
    │   │   │   │   │       ├── network.go
    │   │   │   │   │       ├── network_types.go
    │   │   │   │   │       ├── networkinterface_types.go
    │   │   │   │   │       ├── subnetwork_types.go
    │   │   │   │   │       ├── zz_generated.deepcopy.go
    │   │   │   │   │       └── zz_generated.register.go
    │   │   │   │   └── nodetopology/
    │   │   │   │       └── v1/
    │   │   │   │           ├── BUILD
    │   │   │   │           ├── doc.go
    │   │   │   │           ├── types.go
    │   │   │   │           ├── zz_generated.deepcopy.go
    │   │   │   │           ├── zz_generated.openapi.go
    │   │   │   │           └── zz_generated.register.go
    │   │   │   └── client/
    │   │   │       ├── network/
    │   │   │       │   ├── clientset/
    │   │   │       │   │   └── versioned/
    │   │   │       │   │       ├── clientset.go
    │   │   │       │   │       ├── fake/
    │   │   │       │   │       │   ├── clientset_generated.go
    │   │   │       │   │       │   ├── doc.go
    │   │   │       │   │       │   └── register.go
    │   │   │       │   │       ├── scheme/
    │   │   │       │   │       │   ├── doc.go
    │   │   │       │   │       │   └── register.go
    │   │   │       │   │       └── typed/
    │   │   │       │   │           └── network/
    │   │   │       │   │               └── v1/
    │   │   │       │   │                   ├── doc.go
    │   │   │       │   │                   ├── fake/
    │   │   │       │   │                   │   ├── doc.go
    │   │   │       │   │                   │   ├── fake_gkenetworkparamset.go
    │   │   │       │   │                   │   ├── fake_network.go
    │   │   │       │   │                   │   ├── fake_network_client.go
    │   │   │       │   │                   │   ├── fake_networkinterface.go
    │   │   │       │   │                   │   └── fake_subnetwork.go
    │   │   │       │   │                   ├── generated_expansion.go
    │   │   │       │   │                   ├── gkenetworkparamset.go
    │   │   │       │   │                   ├── network.go
    │   │   │       │   │                   ├── network_client.go
    │   │   │       │   │                   ├── networkinterface.go
    │   │   │       │   │                   └── subnetwork.go
    │   │   │       │   ├── informers/
    │   │   │       │   │   └── externalversions/
    │   │   │       │   │       ├── factory.go
    │   │   │       │   │       ├── generic.go
    │   │   │       │   │       ├── internalinterfaces/
    │   │   │       │   │       │   └── factory_interfaces.go
    │   │   │       │   │       └── network/
    │   │   │       │   │           ├── interface.go
    │   │   │       │   │           └── v1/
    │   │   │       │   │               ├── gkenetworkparamset.go
    │   │   │       │   │               ├── interface.go
    │   │   │       │   │               ├── network.go
    │   │   │       │   │               ├── networkinterface.go
    │   │   │       │   │               └── subnetwork.go
    │   │   │       │   └── listers/
    │   │   │       │       └── network/
    │   │   │       │           └── v1/
    │   │   │       │               ├── expansion_generated.go
    │   │   │       │               ├── gkenetworkparamset.go
    │   │   │       │               ├── network.go
    │   │   │       │               ├── networkinterface.go
    │   │   │       │               └── subnetwork.go
    │   │   │       └── nodetopology/
    │   │   │           └── clientset/
    │   │   │               └── versioned/
    │   │   │                   ├── clientset.go
    │   │   │                   ├── fake/
    │   │   │                   │   ├── clientset_generated.go
    │   │   │                   │   ├── doc.go
    │   │   │                   │   └── register.go
    │   │   │                   ├── scheme/
    │   │   │                   │   ├── doc.go
    │   │   │                   │   └── register.go
    │   │   │                   └── typed/
    │   │   │                       └── nodetopology/
    │   │   │                           └── v1/
    │   │   │                               ├── doc.go
    │   │   │                               ├── fake/
    │   │   │                               │   ├── doc.go
    │   │   │                               │   ├── fake_nodetopology.go
    │   │   │                               │   └── fake_nodetopology_client.go
    │   │   │                               ├── generated_expansion.go
    │   │   │                               ├── nodetopology.go
    │   │   │                               └── nodetopology_client.go
    │   │   └── k8s-cloud-provider/
    │   │       ├── LICENSE
    │   │       └── pkg/
    │   │           └── cloud/
    │   │               ├── constants.go
    │   │               ├── context.go
    │   │               ├── doc.go
    │   │               ├── filter/
    │   │               │   └── filter.go
    │   │               ├── gce_projects.go
    │   │               ├── gen.go
    │   │               ├── meta/
    │   │               │   ├── compute_services.go
    │   │               │   ├── doc.go
    │   │               │   ├── key.go
    │   │               │   ├── meta.go
    │   │               │   ├── method.go
    │   │               │   ├── network_services.go
    │   │               │   └── service.go
    │   │               ├── mock/
    │   │               │   └── mock.go
    │   │               ├── observe.go
    │   │               ├── op.go
    │   │               ├── op_networkservices.go
    │   │               ├── option.go
    │   │               ├── project.go
    │   │               ├── ratelimit.go
    │   │               ├── service.go
    │   │               └── utils.go
    │   ├── Masterminds/
    │   │   └── semver/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .golangci.yml
    │   │           ├── CHANGELOG.md
    │   │           ├── LICENSE.txt
    │   │           ├── Makefile
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── collection.go
    │   │           ├── constraints.go
    │   │           ├── doc.go
    │   │           └── version.go
    │   ├── NYTimes/
    │   │   └── gziphandler/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── gzip.go
    │   │       └── gzip_go18.go
    │   ├── antlr4-go/
    │   │   └── antlr/
    │   │       └── v4/
    │   │           ├── .gitignore
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── antlrdoc.go
    │   │           ├── atn.go
    │   │           ├── atn_config.go
    │   │           ├── atn_config_set.go
    │   │           ├── atn_deserialization_options.go
    │   │           ├── atn_deserializer.go
    │   │           ├── atn_simulator.go
    │   │           ├── atn_state.go
    │   │           ├── atn_type.go
    │   │           ├── char_stream.go
    │   │           ├── common_token_factory.go
    │   │           ├── common_token_stream.go
    │   │           ├── comparators.go
    │   │           ├── configuration.go
    │   │           ├── dfa.go
    │   │           ├── dfa_serializer.go
    │   │           ├── dfa_state.go
    │   │           ├── diagnostic_error_listener.go
    │   │           ├── error_listener.go
    │   │           ├── error_strategy.go
    │   │           ├── errors.go
    │   │           ├── file_stream.go
    │   │           ├── input_stream.go
    │   │           ├── int_stream.go
    │   │           ├── interval_set.go
    │   │           ├── jcollect.go
    │   │           ├── lexer.go
    │   │           ├── lexer_action.go
    │   │           ├── lexer_action_executor.go
    │   │           ├── lexer_atn_simulator.go
    │   │           ├── ll1_analyzer.go
    │   │           ├── mutex.go
    │   │           ├── mutex_nomutex.go
    │   │           ├── nostatistics.go
    │   │           ├── parser.go
    │   │           ├── parser_atn_simulator.go
    │   │           ├── parser_rule_context.go
    │   │           ├── prediction_context.go
    │   │           ├── prediction_context_cache.go
    │   │           ├── prediction_mode.go
    │   │           ├── recognizer.go
    │   │           ├── rule_context.go
    │   │           ├── semantic_context.go
    │   │           ├── statistics.go
    │   │           ├── stats_data.go
    │   │           ├── token.go
    │   │           ├── token_source.go
    │   │           ├── token_stream.go
    │   │           ├── tokenstream_rewriter.go
    │   │           ├── trace_listener.go
    │   │           ├── transition.go
    │   │           ├── tree.go
    │   │           ├── trees.go
    │   │           └── utils.go
    │   ├── beorn7/
    │   │   └── perks/
    │   │       ├── LICENSE
    │   │       └── quantile/
    │   │           ├── exampledata.txt
    │   │           └── stream.go
    │   ├── blang/
    │   │   └── semver/
    │   │       └── v4/
    │   │           ├── LICENSE
    │   │           ├── json.go
    │   │           ├── range.go
    │   │           ├── semver.go
    │   │           ├── sort.go
    │   │           └── sql.go
    │   ├── cenkalti/
    │   │   └── backoff/
    │   │       └── v5/
    │   │           ├── .gitignore
    │   │           ├── CHANGELOG.md
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── backoff.go
    │   │           ├── error.go
    │   │           ├── exponential.go
    │   │           ├── retry.go
    │   │           ├── ticker.go
    │   │           └── timer.go
    │   ├── cespare/
    │   │   └── xxhash/
    │   │       └── v2/
    │   │           ├── LICENSE.txt
    │   │           ├── README.md
    │   │           ├── testall.sh
    │   │           ├── xxhash.go
    │   │           ├── xxhash_amd64.s
    │   │           ├── xxhash_arm64.s
    │   │           ├── xxhash_asm.go
    │   │           ├── xxhash_other.go
    │   │           ├── xxhash_safe.go
    │   │           └── xxhash_unsafe.go
    │   ├── containernetworking/
    │   │   └── cni/
    │   │       ├── LICENSE
    │   │       ├── libcni/
    │   │       │   ├── api.go
    │   │       │   └── conf.go
    │   │       └── pkg/
    │   │           ├── invoke/
    │   │           │   ├── args.go
    │   │           │   ├── delegate.go
    │   │           │   ├── exec.go
    │   │           │   ├── find.go
    │   │           │   ├── os_unix.go
    │   │           │   ├── os_windows.go
    │   │           │   └── raw_exec.go
    │   │           ├── ns/
    │   │           │   ├── ns_darwin.go
    │   │           │   ├── ns_linux.go
    │   │           │   └── ns_windows.go
    │   │           ├── skel/
    │   │           │   └── skel.go
    │   │           ├── types/
    │   │           │   ├── 020/
    │   │           │   │   └── types.go
    │   │           │   ├── 040/
    │   │           │   │   └── types.go
    │   │           │   ├── 100/
    │   │           │   │   └── types.go
    │   │           │   ├── args.go
    │   │           │   ├── create/
    │   │           │   │   └── create.go
    │   │           │   ├── internal/
    │   │           │   │   ├── convert.go
    │   │           │   │   └── create.go
    │   │           │   └── types.go
    │   │           ├── utils/
    │   │           │   └── utils.go
    │   │           └── version/
    │   │               ├── conf.go
    │   │               ├── plugin.go
    │   │               ├── reconcile.go
    │   │               └── version.go
    │   ├── coreos/
    │   │   ├── go-semver/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── semver/
    │   │   │       ├── semver.go
    │   │   │       └── sort.go
    │   │   └── go-systemd/
    │   │       └── v22/
    │   │           ├── LICENSE
    │   │           ├── NOTICE
    │   │           ├── daemon/
    │   │           │   ├── sdnotify.go
    │   │           │   ├── sdnotify_other.go
    │   │           │   ├── sdnotify_unix.go
    │   │           │   └── watchdog.go
    │   │           └── journal/
    │   │               ├── journal.go
    │   │               ├── journal_unix.go
    │   │               └── journal_windows.go
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── distribution/
    │   │   └── reference/
    │   │       ├── .gitattributes
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE-OF-CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── GOVERNANCE.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── helpers.go
    │   │       ├── normalize.go
    │   │       ├── reference.go
    │   │       ├── regexp.go
    │   │       └── sort.go
    │   ├── emicklei/
    │   │   └── go-restful/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .goconvey
    │   │           ├── CHANGES.md
    │   │           ├── LICENSE
    │   │           ├── Makefile
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── Srcfile
    │   │           ├── bench_test.sh
    │   │           ├── compress.go
    │   │           ├── compressor_cache.go
    │   │           ├── compressor_pools.go
    │   │           ├── compressors.go
    │   │           ├── constants.go
    │   │           ├── container.go
    │   │           ├── cors_filter.go
    │   │           ├── coverage.sh
    │   │           ├── curly.go
    │   │           ├── curly_route.go
    │   │           ├── custom_verb.go
    │   │           ├── doc.go
    │   │           ├── entity_accessors.go
    │   │           ├── extensions.go
    │   │           ├── filter.go
    │   │           ├── filter_adapter.go
    │   │           ├── jsr311.go
    │   │           ├── log/
    │   │           │   └── log.go
    │   │           ├── logger.go
    │   │           ├── mime.go
    │   │           ├── options_filter.go
    │   │           ├── parameter.go
    │   │           ├── path_expression.go
    │   │           ├── path_processor.go
    │   │           ├── request.go
    │   │           ├── response.go
    │   │           ├── route.go
    │   │           ├── route_builder.go
    │   │           ├── route_reader.go
    │   │           ├── router.go
    │   │           ├── service_error.go
    │   │           ├── web_service.go
    │   │           └── web_service_container.go
    │   ├── evanphx/
    │   │   └── json-patch/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── errors.go
    │   │       ├── merge.go
    │   │       └── patch.go
    │   ├── fatih/
    │   │   └── color/
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── color.go
    │   │       ├── color_windows.go
    │   │       └── doc.go
    │   ├── felixge/
    │   │   └── httpsnoop/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.txt
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── capture_metrics.go
    │   │       ├── docs.go
    │   │       ├── wrap_generated_gteq_1.8.go
    │   │       └── wrap_generated_lt_1.8.go
    │   ├── fsnotify/
    │   │   └── fsnotify/
    │   │       ├── .cirrus.yml
    │   │       ├── .gitignore
    │   │       ├── .mailmap
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── backend_fen.go
    │   │       ├── backend_inotify.go
    │   │       ├── backend_kqueue.go
    │   │       ├── backend_other.go
    │   │       ├── backend_windows.go
    │   │       ├── fsnotify.go
    │   │       ├── internal/
    │   │       │   ├── darwin.go
    │   │       │   ├── debug_darwin.go
    │   │       │   ├── debug_dragonfly.go
    │   │       │   ├── debug_freebsd.go
    │   │       │   ├── debug_kqueue.go
    │   │       │   ├── debug_linux.go
    │   │       │   ├── debug_netbsd.go
    │   │       │   ├── debug_openbsd.go
    │   │       │   ├── debug_solaris.go
    │   │       │   ├── debug_windows.go
    │   │       │   ├── freebsd.go
    │   │       │   ├── internal.go
    │   │       │   ├── unix.go
    │   │       │   ├── unix2.go
    │   │       │   └── windows.go
    │   │       ├── shared.go
    │   │       ├── staticcheck.conf
    │   │       ├── system_bsd.go
    │   │       └── system_darwin.go
    │   ├── fxamacker/
    │   │   └── cbor/
    │   │       └── v2/
    │   │           ├── .gitignore
    │   │           ├── .golangci.yml
    │   │           ├── CODE_OF_CONDUCT.md
    │   │           ├── CONTRIBUTING.md
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── bytestring.go
    │   │           ├── cache.go
    │   │           ├── common.go
    │   │           ├── decode.go
    │   │           ├── diagnose.go
    │   │           ├── doc.go
    │   │           ├── encode.go
    │   │           ├── encode_map.go
    │   │           ├── omitzero_go124.go
    │   │           ├── omitzero_pre_go124.go
    │   │           ├── simplevalue.go
    │   │           ├── stream.go
    │   │           ├── structfields.go
    │   │           ├── tag.go
    │   │           └── valid.go
    │   ├── go-logr/
    │   │   ├── logr/
    │   │   │   ├── .golangci.yaml
    │   │   │   ├── CHANGELOG.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── SECURITY.md
    │   │   │   ├── context.go
    │   │   │   ├── context_noslog.go
    │   │   │   ├── context_slog.go
    │   │   │   ├── discard.go
    │   │   │   ├── funcr/
    │   │   │   │   ├── funcr.go
    │   │   │   │   └── slogsink.go
    │   │   │   ├── logr.go
    │   │   │   ├── sloghandler.go
    │   │   │   ├── slogr.go
    │   │   │   └── slogsink.go
    │   │   └── stdr/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       └── stdr.go
    │   ├── go-openapi/
    │   │   ├── jsonpointer/
    │   │   │   ├── .editorconfig
    │   │   │   ├── .gitignore
    │   │   │   ├── .golangci.yml
    │   │   │   ├── CODE_OF_CONDUCT.md
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── pointer.go
    │   │   └── jsonreference/
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── internal/
    │   │       │   └── normalize_url.go
    │   │       └── reference.go
    │   ├── gobuffalo/
    │   │   └── flect/
    │   │       ├── .gitignore
    │   │       ├── .gometalinter.json
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── SHOULDERS.md
    │   │       ├── acronyms.go
    │   │       ├── camelize.go
    │   │       ├── capitalize.go
    │   │       ├── custom_data.go
    │   │       ├── dasherize.go
    │   │       ├── flect.go
    │   │       ├── humanize.go
    │   │       ├── ident.go
    │   │       ├── lower_upper.go
    │   │       ├── ordinalize.go
    │   │       ├── pascalize.go
    │   │       ├── plural_rules.go
    │   │       ├── pluralize.go
    │   │       ├── rule.go
    │   │       ├── singular_rules.go
    │   │       ├── singularize.go
    │   │       ├── titleize.go
    │   │       ├── underscore.go
    │   │       └── version.go
    │   ├── gogo/
    │   │   └── protobuf/
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── gogoproto/
    │   │       │   ├── Makefile
    │   │       │   ├── doc.go
    │   │       │   ├── gogo.pb.go
    │   │       │   ├── gogo.pb.golden
    │   │       │   ├── gogo.proto
    │   │       │   └── helper.go
    │   │       ├── proto/
    │   │       │   ├── Makefile
    │   │       │   ├── clone.go
    │   │       │   ├── custom_gogo.go
    │   │       │   ├── decode.go
    │   │       │   ├── deprecated.go
    │   │       │   ├── discard.go
    │   │       │   ├── duration.go
    │   │       │   ├── duration_gogo.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_gogo.go
    │   │       │   ├── equal.go
    │   │       │   ├── extensions.go
    │   │       │   ├── extensions_gogo.go
    │   │       │   ├── lib.go
    │   │       │   ├── lib_gogo.go
    │   │       │   ├── message_set.go
    │   │       │   ├── pointer_reflect.go
    │   │       │   ├── pointer_reflect_gogo.go
    │   │       │   ├── pointer_unsafe.go
    │   │       │   ├── pointer_unsafe_gogo.go
    │   │       │   ├── properties.go
    │   │       │   ├── properties_gogo.go
    │   │       │   ├── skip_gogo.go
    │   │       │   ├── table_marshal.go
    │   │       │   ├── table_marshal_gogo.go
    │   │       │   ├── table_merge.go
    │   │       │   ├── table_unmarshal.go
    │   │       │   ├── table_unmarshal_gogo.go
    │   │       │   ├── text.go
    │   │       │   ├── text_gogo.go
    │   │       │   ├── text_parser.go
    │   │       │   ├── timestamp.go
    │   │       │   ├── timestamp_gogo.go
    │   │       │   ├── wrappers.go
    │   │       │   └── wrappers_gogo.go
    │   │       └── protoc-gen-gogo/
    │   │           └── descriptor/
    │   │               ├── Makefile
    │   │               ├── descriptor.go
    │   │               ├── descriptor.pb.go
    │   │               ├── descriptor_gostring.gen.go
    │   │               └── helper.go
    │   ├── golang/
    │   │   ├── groupcache/
    │   │   │   ├── LICENSE
    │   │   │   └── lru/
    │   │   │       └── lru.go
    │   │   └── protobuf/
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       └── proto/
    │   │           ├── buffer.go
    │   │           ├── defaults.go
    │   │           ├── deprecated.go
    │   │           ├── discard.go
    │   │           ├── extensions.go
    │   │           ├── properties.go
    │   │           ├── proto.go
    │   │           ├── registry.go
    │   │           ├── text_decode.go
    │   │           ├── text_encode.go
    │   │           ├── wire.go
    │   │           └── wrappers.go
    │   ├── google/
    │   │   ├── cel-go/
    │   │   │   ├── LICENSE
    │   │   │   ├── cel/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── cel.go
    │   │   │   │   ├── decls.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── folding.go
    │   │   │   │   ├── inlining.go
    │   │   │   │   ├── io.go
    │   │   │   │   ├── library.go
    │   │   │   │   ├── macro.go
    │   │   │   │   ├── optimizer.go
    │   │   │   │   ├── options.go
    │   │   │   │   ├── program.go
    │   │   │   │   ├── prompt.go
    │   │   │   │   ├── templates/
    │   │   │   │   │   └── authoring.tmpl
    │   │   │   │   └── validator.go
    │   │   │   ├── checker/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── checker.go
    │   │   │   │   ├── cost.go
    │   │   │   │   ├── decls/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── decls.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── errors.go
    │   │   │   │   ├── format.go
    │   │   │   │   ├── mapping.go
    │   │   │   │   ├── options.go
    │   │   │   │   ├── printer.go
    │   │   │   │   ├── scopes.go
    │   │   │   │   └── types.go
    │   │   │   ├── common/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── ast/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   ├── ast.go
    │   │   │   │   │   ├── conversion.go
    │   │   │   │   │   ├── expr.go
    │   │   │   │   │   ├── factory.go
    │   │   │   │   │   └── navigable.go
    │   │   │   │   ├── containers/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── container.go
    │   │   │   │   ├── cost.go
    │   │   │   │   ├── debug/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── debug.go
    │   │   │   │   ├── decls/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── decls.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── env/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── env.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── errors.go
    │   │   │   │   ├── functions/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── functions.go
    │   │   │   │   ├── location.go
    │   │   │   │   ├── operators/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── operators.go
    │   │   │   │   ├── overloads/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── overloads.go
    │   │   │   │   ├── runes/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── buffer.go
    │   │   │   │   ├── source.go
    │   │   │   │   ├── stdlib/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── standard.go
    │   │   │   │   └── types/
    │   │   │   │       ├── BUILD.bazel
    │   │   │   │       ├── any_value.go
    │   │   │   │       ├── bool.go
    │   │   │   │       ├── bytes.go
    │   │   │   │       ├── compare.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── double.go
    │   │   │   │       ├── duration.go
    │   │   │   │       ├── err.go
    │   │   │   │       ├── format.go
    │   │   │   │       ├── int.go
    │   │   │   │       ├── iterator.go
    │   │   │   │       ├── json_value.go
    │   │   │   │       ├── list.go
    │   │   │   │       ├── map.go
    │   │   │   │       ├── null.go
    │   │   │   │       ├── object.go
    │   │   │   │       ├── optional.go
    │   │   │   │       ├── overflow.go
    │   │   │   │       ├── pb/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── checked.go
    │   │   │   │       │   ├── enum.go
    │   │   │   │       │   ├── equal.go
    │   │   │   │       │   ├── file.go
    │   │   │   │       │   ├── pb.go
    │   │   │   │       │   └── type.go
    │   │   │   │       ├── provider.go
    │   │   │   │       ├── ref/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── provider.go
    │   │   │   │       │   └── reference.go
    │   │   │   │       ├── string.go
    │   │   │   │       ├── timestamp.go
    │   │   │   │       ├── traits/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── comparer.go
    │   │   │   │       │   ├── container.go
    │   │   │   │       │   ├── field_tester.go
    │   │   │   │       │   ├── indexer.go
    │   │   │   │       │   ├── iterator.go
    │   │   │   │       │   ├── lister.go
    │   │   │   │       │   ├── mapper.go
    │   │   │   │       │   ├── matcher.go
    │   │   │   │       │   ├── math.go
    │   │   │   │       │   ├── receiver.go
    │   │   │   │       │   ├── sizer.go
    │   │   │   │       │   ├── traits.go
    │   │   │   │       │   └── zeroer.go
    │   │   │   │       ├── types.go
    │   │   │   │       ├── uint.go
    │   │   │   │       ├── unknown.go
    │   │   │   │       └── util.go
    │   │   │   ├── ext/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── README.md
    │   │   │   │   ├── bindings.go
    │   │   │   │   ├── comprehensions.go
    │   │   │   │   ├── encoders.go
    │   │   │   │   ├── extension_option_factory.go
    │   │   │   │   ├── formatting.go
    │   │   │   │   ├── formatting_v2.go
    │   │   │   │   ├── guards.go
    │   │   │   │   ├── lists.go
    │   │   │   │   ├── math.go
    │   │   │   │   ├── native.go
    │   │   │   │   ├── protos.go
    │   │   │   │   ├── regex.go
    │   │   │   │   ├── sets.go
    │   │   │   │   └── strings.go
    │   │   │   ├── interpreter/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── activation.go
    │   │   │   │   ├── attribute_patterns.go
    │   │   │   │   ├── attributes.go
    │   │   │   │   ├── decorators.go
    │   │   │   │   ├── dispatcher.go
    │   │   │   │   ├── evalstate.go
    │   │   │   │   ├── functions/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── functions.go
    │   │   │   │   ├── interpretable.go
    │   │   │   │   ├── interpreter.go
    │   │   │   │   ├── optimizations.go
    │   │   │   │   ├── planner.go
    │   │   │   │   ├── prune.go
    │   │   │   │   └── runtimecost.go
    │   │   │   └── parser/
    │   │   │       ├── BUILD.bazel
    │   │   │       ├── errors.go
    │   │   │       ├── gen/
    │   │   │       │   ├── BUILD.bazel
    │   │   │       │   ├── CEL.g4
    │   │   │       │   ├── CEL.interp
    │   │   │       │   ├── CEL.tokens
    │   │   │       │   ├── CELLexer.interp
    │   │   │       │   ├── CELLexer.tokens
    │   │   │       │   ├── cel_base_listener.go
    │   │   │       │   ├── cel_base_visitor.go
    │   │   │       │   ├── cel_lexer.go
    │   │   │       │   ├── cel_listener.go
    │   │   │       │   ├── cel_parser.go
    │   │   │       │   ├── cel_visitor.go
    │   │   │       │   ├── doc.go
    │   │   │       │   └── generate.sh
    │   │   │       ├── helper.go
    │   │   │       ├── input.go
    │   │   │       ├── macro.go
    │   │   │       ├── options.go
    │   │   │       ├── parser.go
    │   │   │       ├── unescape.go
    │   │   │       └── unparser.go
    │   │   ├── gnostic-models/
    │   │   │   ├── LICENSE
    │   │   │   ├── compiler/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── context.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── extensions.go
    │   │   │   │   ├── helpers.go
    │   │   │   │   ├── main.go
    │   │   │   │   └── reader.go
    │   │   │   ├── extensions/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── extension.pb.go
    │   │   │   │   ├── extension.proto
    │   │   │   │   └── extensions.go
    │   │   │   ├── jsonschema/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── base.go
    │   │   │   │   ├── display.go
    │   │   │   │   ├── models.go
    │   │   │   │   ├── operations.go
    │   │   │   │   ├── reader.go
    │   │   │   │   ├── schema.json
    │   │   │   │   └── writer.go
    │   │   │   ├── openapiv2/
    │   │   │   │   ├── OpenAPIv2.go
    │   │   │   │   ├── OpenAPIv2.pb.go
    │   │   │   │   ├── OpenAPIv2.proto
    │   │   │   │   ├── README.md
    │   │   │   │   ├── document.go
    │   │   │   │   └── openapi-2.0.json
    │   │   │   └── openapiv3/
    │   │   │       ├── OpenAPIv3.go
    │   │   │       ├── OpenAPIv3.pb.go
    │   │   │       ├── OpenAPIv3.proto
    │   │   │       ├── README.md
    │   │   │       ├── annotations.pb.go
    │   │   │       ├── annotations.proto
    │   │   │       └── document.go
    │   │   ├── go-cmp/
    │   │   │   ├── LICENSE
    │   │   │   └── cmp/
    │   │   │       ├── cmpopts/
    │   │   │       │   ├── equate.go
    │   │   │       │   ├── ignore.go
    │   │   │       │   ├── sort.go
    │   │   │       │   ├── struct_filter.go
    │   │   │       │   └── xform.go
    │   │   │       ├── compare.go
    │   │   │       ├── export.go
    │   │   │       ├── internal/
    │   │   │       │   ├── diff/
    │   │   │       │   │   ├── debug_disable.go
    │   │   │       │   │   ├── debug_enable.go
    │   │   │       │   │   └── diff.go
    │   │   │       │   ├── flags/
    │   │   │       │   │   └── flags.go
    │   │   │       │   ├── function/
    │   │   │       │   │   └── func.go
    │   │   │       │   └── value/
    │   │   │       │       ├── name.go
    │   │   │       │       ├── pointer.go
    │   │   │       │       └── sort.go
    │   │   │       ├── options.go
    │   │   │       ├── path.go
    │   │   │       ├── report.go
    │   │   │       ├── report_compare.go
    │   │   │       ├── report_references.go
    │   │   │       ├── report_reflect.go
    │   │   │       ├── report_slices.go
    │   │   │       ├── report_text.go
    │   │   │       └── report_value.go
    │   │   ├── pprof/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   └── profile/
    │   │   │       ├── encode.go
    │   │   │       ├── filter.go
    │   │   │       ├── index.go
    │   │   │       ├── legacy_java_profile.go
    │   │   │       ├── legacy_profile.go
    │   │   │       ├── merge.go
    │   │   │       ├── profile.go
    │   │   │       ├── proto.go
    │   │   │       └── prune.go
    │   │   ├── s2a-go/
    │   │   │   ├── .gitignore
    │   │   │   ├── CODE_OF_CONDUCT.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE.md
    │   │   │   ├── README.md
    │   │   │   ├── fallback/
    │   │   │   │   └── s2a_fallback.go
    │   │   │   ├── internal/
    │   │   │   │   ├── authinfo/
    │   │   │   │   │   └── authinfo.go
    │   │   │   │   ├── handshaker/
    │   │   │   │   │   ├── handshaker.go
    │   │   │   │   │   └── service/
    │   │   │   │   │       └── service.go
    │   │   │   │   ├── proto/
    │   │   │   │   │   ├── common_go_proto/
    │   │   │   │   │   │   └── common.pb.go
    │   │   │   │   │   ├── s2a_context_go_proto/
    │   │   │   │   │   │   └── s2a_context.pb.go
    │   │   │   │   │   ├── s2a_go_proto/
    │   │   │   │   │   │   ├── s2a.pb.go
    │   │   │   │   │   │   └── s2a_grpc.pb.go
    │   │   │   │   │   └── v2/
    │   │   │   │   │       ├── common_go_proto/
    │   │   │   │   │       │   └── common.pb.go
    │   │   │   │   │       ├── s2a_context_go_proto/
    │   │   │   │   │       │   └── s2a_context.pb.go
    │   │   │   │   │       └── s2a_go_proto/
    │   │   │   │   │           ├── s2a.pb.go
    │   │   │   │   │           └── s2a_grpc.pb.go
    │   │   │   │   ├── record/
    │   │   │   │   │   ├── internal/
    │   │   │   │   │   │   ├── aeadcrypter/
    │   │   │   │   │   │   │   ├── aeadcrypter.go
    │   │   │   │   │   │   │   ├── aesgcm.go
    │   │   │   │   │   │   │   ├── chachapoly.go
    │   │   │   │   │   │   │   └── common.go
    │   │   │   │   │   │   └── halfconn/
    │   │   │   │   │   │       ├── ciphersuite.go
    │   │   │   │   │   │       ├── counter.go
    │   │   │   │   │   │       ├── expander.go
    │   │   │   │   │   │       └── halfconn.go
    │   │   │   │   │   ├── record.go
    │   │   │   │   │   └── ticketsender.go
    │   │   │   │   ├── tokenmanager/
    │   │   │   │   │   └── tokenmanager.go
    │   │   │   │   └── v2/
    │   │   │   │       ├── README.md
    │   │   │   │       ├── certverifier/
    │   │   │   │       │   └── certverifier.go
    │   │   │   │       ├── remotesigner/
    │   │   │   │       │   └── remotesigner.go
    │   │   │   │       ├── s2av2.go
    │   │   │   │       └── tlsconfigstore/
    │   │   │   │           └── tlsconfigstore.go
    │   │   │   ├── retry/
    │   │   │   │   └── retry.go
    │   │   │   ├── s2a.go
    │   │   │   ├── s2a_options.go
    │   │   │   ├── s2a_utils.go
    │   │   │   └── stream/
    │   │   │       └── s2a_stream.go
    │   │   └── uuid/
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── node_js.go
    │   │       ├── node_net.go
    │   │       ├── null.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       ├── version4.go
    │   │       ├── version6.go
    │   │       └── version7.go
    │   ├── googleapis/
    │   │   ├── enterprise-certificate-proxy/
    │   │   │   ├── LICENSE
    │   │   │   └── client/
    │   │   │       ├── client.go
    │   │   │       └── util/
    │   │   │           └── util.go
    │   │   └── gax-go/
    │   │       └── v2/
    │   │           ├── .release-please-manifest.json
    │   │           ├── CHANGES.md
    │   │           ├── LICENSE
    │   │           ├── apierror/
    │   │           │   ├── apierror.go
    │   │           │   └── internal/
    │   │           │       └── proto/
    │   │           │           ├── README.md
    │   │           │           ├── custom_error.pb.go
    │   │           │           ├── custom_error.proto
    │   │           │           ├── error.pb.go
    │   │           │           └── error.proto
    │   │           ├── call_option.go
    │   │           ├── callctx/
    │   │           │   └── callctx.go
    │   │           ├── content_type.go
    │   │           ├── gax.go
    │   │           ├── header.go
    │   │           ├── internal/
    │   │           │   └── version.go
    │   │           ├── invoke.go
    │   │           ├── proto_json_stream.go
    │   │           └── release-please-config.json
    │   ├── gorilla/
    │   │   └── websocket/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── client.go
    │   │       ├── compression.go
    │   │       ├── conn.go
    │   │       ├── doc.go
    │   │       ├── join.go
    │   │       ├── json.go
    │   │       ├── mask.go
    │   │       ├── mask_safe.go
    │   │       ├── prepared.go
    │   │       ├── proxy.go
    │   │       ├── server.go
    │   │       └── util.go
    │   ├── grpc-ecosystem/
    │   │   ├── go-grpc-middleware/
    │   │   │   ├── providers/
    │   │   │   │   └── prometheus/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── client_metrics.go
    │   │   │   │       ├── client_options.go
    │   │   │   │       ├── constants.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── options.go
    │   │   │   │       ├── reporter.go
    │   │   │   │       ├── server_metrics.go
    │   │   │   │       └── server_options.go
    │   │   │   └── v2/
    │   │   │       ├── COPYRIGHT
    │   │   │       ├── LICENSE
    │   │   │       └── interceptors/
    │   │   │           ├── callmeta.go
    │   │   │           ├── client.go
    │   │   │           ├── doc.go
    │   │   │           ├── reporter.go
    │   │   │           └── server.go
    │   │   └── grpc-gateway/
    │   │       └── v2/
    │   │           ├── LICENSE
    │   │           ├── internal/
    │   │           │   └── httprule/
    │   │           │       ├── BUILD.bazel
    │   │           │       ├── compile.go
    │   │           │       ├── fuzz.go
    │   │           │       ├── parse.go
    │   │           │       └── types.go
    │   │           ├── protoc-gen-openapiv2/
    │   │           │   └── options/
    │   │           │       ├── BUILD.bazel
    │   │           │       ├── annotations.pb.go
    │   │           │       ├── annotations.proto
    │   │           │       ├── annotations_protoopaque.pb.go
    │   │           │       ├── buf.gen.yaml
    │   │           │       ├── openapiv2.pb.go
    │   │           │       ├── openapiv2.proto
    │   │           │       └── openapiv2_protoopaque.pb.go
    │   │           ├── runtime/
    │   │           │   ├── BUILD.bazel
    │   │           │   ├── context.go
    │   │           │   ├── convert.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── fieldmask.go
    │   │           │   ├── handler.go
    │   │           │   ├── marshal_httpbodyproto.go
    │   │           │   ├── marshal_json.go
    │   │           │   ├── marshal_jsonpb.go
    │   │           │   ├── marshal_proto.go
    │   │           │   ├── marshaler.go
    │   │           │   ├── marshaler_registry.go
    │   │           │   ├── mux.go
    │   │           │   ├── pattern.go
    │   │           │   ├── proto2_convert.go
    │   │           │   └── query.go
    │   │           └── utilities/
    │   │               ├── BUILD.bazel
    │   │               ├── doc.go
    │   │               ├── pattern.go
    │   │               ├── readerfactory.go
    │   │               ├── string_array_flag.go
    │   │               └── trie.go
    │   ├── hashicorp/
    │   │   ├── errwrap/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── errwrap.go
    │   │   └── go-multierror/
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── append.go
    │   │       ├── flatten.go
    │   │       ├── format.go
    │   │       ├── group.go
    │   │       ├── multierror.go
    │   │       ├── prefix.go
    │   │       └── sort.go
    │   ├── inconshreveable/
    │   │   └── mousetrap/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── trap_others.go
    │   │       └── trap_windows.go
    │   ├── josharian/
    │   │   └── intern/
    │   │       ├── README.md
    │   │       ├── intern.go
    │   │       └── license.md
    │   ├── kylelemons/
    │   │   └── godebug/
    │   │       ├── LICENSE
    │   │       └── diff/
    │   │           └── diff.go
    │   ├── mailru/
    │   │   └── easyjson/
    │   │       ├── LICENSE
    │   │       ├── buffer/
    │   │       │   └── pool.go
    │   │       ├── jlexer/
    │   │       │   ├── bytestostr.go
    │   │       │   ├── bytestostr_nounsafe.go
    │   │       │   ├── error.go
    │   │       │   └── lexer.go
    │   │       └── jwriter/
    │   │           └── writer.go
    │   ├── mattn/
    │   │   ├── go-colorable/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── colorable_appengine.go
    │   │   │   ├── colorable_others.go
    │   │   │   ├── colorable_windows.go
    │   │   │   ├── go.test.sh
    │   │   │   └── noncolorable.go
    │   │   ├── go-isatty/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── doc.go
    │   │   │   ├── go.test.sh
    │   │   │   ├── isatty_bsd.go
    │   │   │   ├── isatty_others.go
    │   │   │   ├── isatty_plan9.go
    │   │   │   ├── isatty_solaris.go
    │   │   │   ├── isatty_tcgets.go
    │   │   │   └── isatty_windows.go
    │   │   └── go-sqlite3/
    │   │       ├── .codecov.yml
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── backup.go
    │   │       ├── callback.go
    │   │       ├── convert.go
    │   │       ├── doc.go
    │   │       ├── error.go
    │   │       ├── sqlite3-binding.c
    │   │       ├── sqlite3-binding.h
    │   │       ├── sqlite3.go
    │   │       ├── sqlite3_context.go
    │   │       ├── sqlite3_func_crypt.go
    │   │       ├── sqlite3_libsqlite3.go
    │   │       ├── sqlite3_load_extension.go
    │   │       ├── sqlite3_load_extension_omit.go
    │   │       ├── sqlite3_opt_allow_uri_authority.go
    │   │       ├── sqlite3_opt_app_armor.go
    │   │       ├── sqlite3_opt_column_metadata.go
    │   │       ├── sqlite3_opt_foreign_keys.go
    │   │       ├── sqlite3_opt_fts5.go
    │   │       ├── sqlite3_opt_icu.go
    │   │       ├── sqlite3_opt_introspect.go
    │   │       ├── sqlite3_opt_math_functions.go
    │   │       ├── sqlite3_opt_os_trace.go
    │   │       ├── sqlite3_opt_percentile.go
    │   │       ├── sqlite3_opt_preupdate.go
    │   │       ├── sqlite3_opt_preupdate_hook.go
    │   │       ├── sqlite3_opt_preupdate_omit.go
    │   │       ├── sqlite3_opt_secure_delete.go
    │   │       ├── sqlite3_opt_secure_delete_fast.go
    │   │       ├── sqlite3_opt_serialize.go
    │   │       ├── sqlite3_opt_serialize_omit.go
    │   │       ├── sqlite3_opt_stat4.go
    │   │       ├── sqlite3_opt_unlock_notify.c
    │   │       ├── sqlite3_opt_unlock_notify.go
    │   │       ├── sqlite3_opt_userauth.go
    │   │       ├── sqlite3_opt_userauth_omit.go
    │   │       ├── sqlite3_opt_vacuum_full.go
    │   │       ├── sqlite3_opt_vacuum_incr.go
    │   │       ├── sqlite3_opt_vtable.go
    │   │       ├── sqlite3_other.go
    │   │       ├── sqlite3_solaris.go
    │   │       ├── sqlite3_sql.go
    │   │       ├── sqlite3_trace.go
    │   │       ├── sqlite3_type.go
    │   │       ├── sqlite3_usleep_windows.go
    │   │       ├── sqlite3_windows.go
    │   │       ├── sqlite3ext.h
    │   │       └── static_mock.go
    │   ├── moby/
    │   │   └── spdystream/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       ├── connection.go
    │   │       ├── handlers.go
    │   │       ├── priority.go
    │   │       ├── spdy/
    │   │       │   ├── LICENSE
    │   │       │   ├── PATENTS
    │   │       │   ├── dictionary.go
    │   │       │   ├── options.go
    │   │       │   ├── read.go
    │   │       │   ├── types.go
    │   │       │   └── write.go
    │   │       ├── stream.go
    │   │       └── utils.go
    │   ├── modern-go/
    │   │   └── concurrent/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── executor.go
    │   │       ├── go_above_19.go
    │   │       ├── go_below_19.go
    │   │       ├── log.go
    │   │       ├── test.sh
    │   │       └── unbounded_executor.go
    │   ├── munnerz/
    │   │   └── goautoneg/
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.txt
    │   │       └── autoneg.go
    │   ├── natefinch/
    │   │   └── atomic/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── atomic.go
    │   │       ├── file_unix.go
    │   │       ├── file_windows.go
    │   │       └── zfile_windows.go
    │   ├── onsi/
    │   │   ├── ginkgo/
    │   │   │   └── v2/
    │   │   │       ├── .gitignore
    │   │   │       ├── CHANGELOG.md
    │   │   │       ├── CONTRIBUTING.md
    │   │   │       ├── LICENSE
    │   │   │       ├── Makefile
    │   │   │       ├── README.md
    │   │   │       ├── RELEASING.md
    │   │   │       ├── config/
    │   │   │       │   └── deprecated.go
    │   │   │       ├── core_dsl.go
    │   │   │       ├── decorator_dsl.go
    │   │   │       ├── deprecated_dsl.go
    │   │   │       ├── formatter/
    │   │   │       │   ├── colorable_others.go
    │   │   │       │   ├── colorable_windows.go
    │   │   │       │   └── formatter.go
    │   │   │       ├── ginkgo/
    │   │   │       │   ├── automaxprocs/
    │   │   │       │   │   ├── README.md
    │   │   │       │   │   ├── automaxprocs.go
    │   │   │       │   │   ├── cgroup.go
    │   │   │       │   │   ├── cgroups.go
    │   │   │       │   │   ├── cgroups2.go
    │   │   │       │   │   ├── cpu_quota_linux.go
    │   │   │       │   │   ├── cpu_quota_unsupported.go
    │   │   │       │   │   ├── errors.go
    │   │   │       │   │   ├── mountpoint.go
    │   │   │       │   │   ├── runtime.go
    │   │   │       │   │   └── subsys.go
    │   │   │       │   ├── automaxprocs.go
    │   │   │       │   ├── build/
    │   │   │       │   │   └── build_command.go
    │   │   │       │   ├── command/
    │   │   │       │   │   ├── abort.go
    │   │   │       │   │   ├── command.go
    │   │   │       │   │   └── program.go
    │   │   │       │   ├── generators/
    │   │   │       │   │   ├── boostrap_templates.go
    │   │   │       │   │   ├── bootstrap_command.go
    │   │   │       │   │   ├── generate_command.go
    │   │   │       │   │   ├── generate_templates.go
    │   │   │       │   │   └── generators_common.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── compile.go
    │   │   │       │   │   ├── gocovmerge.go
    │   │   │       │   │   ├── profiles_and_reports.go
    │   │   │       │   │   ├── run.go
    │   │   │       │   │   ├── test_suite.go
    │   │   │       │   │   ├── utils.go
    │   │   │       │   │   └── verify_version.go
    │   │   │       │   ├── labels/
    │   │   │       │   │   └── labels_command.go
    │   │   │       │   ├── main.go
    │   │   │       │   ├── outline/
    │   │   │       │   │   ├── ginkgo.go
    │   │   │       │   │   ├── import.go
    │   │   │       │   │   ├── outline.go
    │   │   │       │   │   └── outline_command.go
    │   │   │       │   ├── run/
    │   │   │       │   │   └── run_command.go
    │   │   │       │   ├── unfocus/
    │   │   │       │   │   └── unfocus_command.go
    │   │   │       │   └── watch/
    │   │   │       │       ├── delta.go
    │   │   │       │       ├── delta_tracker.go
    │   │   │       │       ├── dependencies.go
    │   │   │       │       ├── package_hash.go
    │   │   │       │       ├── package_hashes.go
    │   │   │       │       ├── suite.go
    │   │   │       │       └── watch_command.go
    │   │   │       ├── ginkgo_cli_dependencies.go
    │   │   │       ├── ginkgo_t_dsl.go
    │   │   │       ├── internal/
    │   │   │       │   ├── around_node.go
    │   │   │       │   ├── counter.go
    │   │   │       │   ├── failer.go
    │   │   │       │   ├── focus.go
    │   │   │       │   ├── global/
    │   │   │       │   │   └── init.go
    │   │   │       │   ├── group.go
    │   │   │       │   ├── interrupt_handler/
    │   │   │       │   │   ├── interrupt_handler.go
    │   │   │       │   │   ├── sigquit_swallower_unix.go
    │   │   │       │   │   └── sigquit_swallower_windows.go
    │   │   │       │   ├── node.go
    │   │   │       │   ├── ordering.go
    │   │   │       │   ├── output_interceptor.go
    │   │   │       │   ├── output_interceptor_unix.go
    │   │   │       │   ├── output_interceptor_wasm.go
    │   │   │       │   ├── output_interceptor_win.go
    │   │   │       │   ├── parallel_support/
    │   │   │       │   │   ├── client_server.go
    │   │   │       │   │   ├── http_client.go
    │   │   │       │   │   ├── http_server.go
    │   │   │       │   │   ├── rpc_client.go
    │   │   │       │   │   ├── rpc_server.go
    │   │   │       │   │   └── server_handler.go
    │   │   │       │   ├── progress_report.go
    │   │   │       │   ├── progress_report_bsd.go
    │   │   │       │   ├── progress_report_unix.go
    │   │   │       │   ├── progress_report_wasm.go
    │   │   │       │   ├── progress_report_win.go
    │   │   │       │   ├── progress_reporter_manager.go
    │   │   │       │   ├── report_entry.go
    │   │   │       │   ├── reporters/
    │   │   │       │   │   ├── gojson.go
    │   │   │       │   │   ├── gojson_event_writer.go
    │   │   │       │   │   └── gojson_reporter.go
    │   │   │       │   ├── spec.go
    │   │   │       │   ├── spec_context.go
    │   │   │       │   ├── suite.go
    │   │   │       │   ├── testingtproxy/
    │   │   │       │   │   └── testing_t_proxy.go
    │   │   │       │   ├── tree.go
    │   │   │       │   └── writer.go
    │   │   │       ├── reporters/
    │   │   │       │   ├── default_reporter.go
    │   │   │       │   ├── deprecated_reporter.go
    │   │   │       │   ├── gojson_report.go
    │   │   │       │   ├── json_report.go
    │   │   │       │   ├── junit_report.go
    │   │   │       │   ├── reporter.go
    │   │   │       │   └── teamcity_report.go
    │   │   │       ├── reporting_dsl.go
    │   │   │       ├── table_dsl.go
    │   │   │       └── types/
    │   │   │           ├── around_node.go
    │   │   │           ├── code_location.go
    │   │   │           ├── config.go
    │   │   │           ├── deprecated_types.go
    │   │   │           ├── deprecation_support.go
    │   │   │           ├── enum_support.go
    │   │   │           ├── errors.go
    │   │   │           ├── file_filter.go
    │   │   │           ├── flags.go
    │   │   │           ├── label_filter.go
    │   │   │           ├── report_entry.go
    │   │   │           ├── semver_filter.go
    │   │   │           ├── types.go
    │   │   │           └── version.go
    │   │   └── gomega/
    │   │       ├── .gitignore
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── RELEASING.md
    │   │       ├── format/
    │   │       │   └── format.go
    │   │       ├── gcustom/
    │   │       │   └── make_matcher.go
    │   │       ├── gomega_dsl.go
    │   │       ├── internal/
    │   │       │   ├── assertion.go
    │   │       │   ├── async_assertion.go
    │   │       │   ├── duration_bundle.go
    │   │       │   ├── gomega.go
    │   │       │   ├── gutil/
    │   │       │   │   ├── post_ioutil.go
    │   │       │   │   └── using_ioutil.go
    │   │       │   ├── polling_signal_error.go
    │   │       │   └── vetoptdesc.go
    │   │       ├── matchers/
    │   │       │   ├── and.go
    │   │       │   ├── assignable_to_type_of_matcher.go
    │   │       │   ├── attributes_slice.go
    │   │       │   ├── be_a_directory.go
    │   │       │   ├── be_a_regular_file.go
    │   │       │   ├── be_an_existing_file.go
    │   │       │   ├── be_closed_matcher.go
    │   │       │   ├── be_comparable_to_matcher.go
    │   │       │   ├── be_element_of_matcher.go
    │   │       │   ├── be_empty_matcher.go
    │   │       │   ├── be_equivalent_to_matcher.go
    │   │       │   ├── be_false_matcher.go
    │   │       │   ├── be_identical_to.go
    │   │       │   ├── be_key_of_matcher.go
    │   │       │   ├── be_nil_matcher.go
    │   │       │   ├── be_numerically_matcher.go
    │   │       │   ├── be_sent_matcher.go
    │   │       │   ├── be_temporally_matcher.go
    │   │       │   ├── be_true_matcher.go
    │   │       │   ├── be_zero_matcher.go
    │   │       │   ├── consist_of.go
    │   │       │   ├── contain_element_matcher.go
    │   │       │   ├── contain_elements_matcher.go
    │   │       │   ├── contain_substring_matcher.go
    │   │       │   ├── equal_matcher.go
    │   │       │   ├── have_cap_matcher.go
    │   │       │   ├── have_each_matcher.go
    │   │       │   ├── have_exact_elements.go
    │   │       │   ├── have_existing_field_matcher.go
    │   │       │   ├── have_field.go
    │   │       │   ├── have_http_body_matcher.go
    │   │       │   ├── have_http_header_with_value_matcher.go
    │   │       │   ├── have_http_status_matcher.go
    │   │       │   ├── have_key_matcher.go
    │   │       │   ├── have_key_with_value_matcher.go
    │   │       │   ├── have_len_matcher.go
    │   │       │   ├── have_occurred_matcher.go
    │   │       │   ├── have_prefix_matcher.go
    │   │       │   ├── have_suffix_matcher.go
    │   │       │   ├── have_value.go
    │   │       │   ├── internal/
    │   │       │   │   └── miter/
    │   │       │   │       ├── type_support_iter.go
    │   │       │   │       └── type_support_noiter.go
    │   │       │   ├── match_error_matcher.go
    │   │       │   ├── match_error_strictly_matcher.go
    │   │       │   ├── match_json_matcher.go
    │   │       │   ├── match_regexp_matcher.go
    │   │       │   ├── match_xml_matcher.go
    │   │       │   ├── match_yaml_matcher.go
    │   │       │   ├── not.go
    │   │       │   ├── or.go
    │   │       │   ├── panic_matcher.go
    │   │       │   ├── receive_matcher.go
    │   │       │   ├── satisfy_matcher.go
    │   │       │   ├── semi_structured_data_support.go
    │   │       │   ├── succeed_matcher.go
    │   │       │   ├── support/
    │   │       │   │   └── goraph/
    │   │       │   │       ├── bipartitegraph/
    │   │       │   │       │   ├── bipartitegraph.go
    │   │       │   │       │   └── bipartitegraphmatching.go
    │   │       │   │       ├── edge/
    │   │       │   │       │   └── edge.go
    │   │       │   │       ├── node/
    │   │       │   │       │   └── node.go
    │   │       │   │       └── util/
    │   │       │   │           └── util.go
    │   │       │   ├── type_support.go
    │   │       │   └── with_transform.go
    │   │       ├── matchers.go
    │   │       └── types/
    │   │           └── types.go
    │   ├── opencontainers/
    │   │   └── go-digest/
    │   │       ├── .mailmap
    │   │       ├── .pullapprove.yml
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── LICENSE.docs
    │   │       ├── MAINTAINERS
    │   │       ├── README.md
    │   │       ├── algorithm.go
    │   │       ├── digest.go
    │   │       ├── digester.go
    │   │       ├── doc.go
    │   │       └── verifiers.go
    │   ├── pkg/
    │   │   └── errors/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── appveyor.yml
    │   │       ├── errors.go
    │   │       ├── go113.go
    │   │       └── stack.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── prometheus/
    │   │   ├── client_golang/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── internal/
    │   │   │   │   └── github.com/
    │   │   │   │       └── golang/
    │   │   │   │           └── gddo/
    │   │   │   │               ├── LICENSE
    │   │   │   │               └── httputil/
    │   │   │   │                   ├── header/
    │   │   │   │                   │   └── header.go
    │   │   │   │                   └── negotiate.go
    │   │   │   └── prometheus/
    │   │   │       ├── .gitignore
    │   │   │       ├── README.md
    │   │   │       ├── build_info_collector.go
    │   │   │       ├── collector.go
    │   │   │       ├── collectorfunc.go
    │   │   │       ├── collectors/
    │   │   │       │   ├── collectors.go
    │   │   │       │   ├── dbstats_collector.go
    │   │   │       │   ├── expvar_collector.go
    │   │   │       │   ├── go_collector_go116.go
    │   │   │       │   ├── go_collector_latest.go
    │   │   │       │   └── process_collector.go
    │   │   │       ├── counter.go
    │   │   │       ├── desc.go
    │   │   │       ├── doc.go
    │   │   │       ├── expvar_collector.go
    │   │   │       ├── fnv.go
    │   │   │       ├── gauge.go
    │   │   │       ├── get_pid.go
    │   │   │       ├── get_pid_gopherjs.go
    │   │   │       ├── go_collector.go
    │   │   │       ├── go_collector_go116.go
    │   │   │       ├── go_collector_latest.go
    │   │   │       ├── histogram.go
    │   │   │       ├── internal/
    │   │   │       │   ├── almost_equal.go
    │   │   │       │   ├── difflib.go
    │   │   │       │   ├── go_collector_options.go
    │   │   │       │   ├── go_runtime_metrics.go
    │   │   │       │   └── metric.go
    │   │   │       ├── labels.go
    │   │   │       ├── metric.go
    │   │   │       ├── num_threads.go
    │   │   │       ├── num_threads_gopherjs.go
    │   │   │       ├── observer.go
    │   │   │       ├── process_collector.go
    │   │   │       ├── process_collector_darwin.go
    │   │   │       ├── process_collector_mem_cgo_darwin.c
    │   │   │       ├── process_collector_mem_cgo_darwin.go
    │   │   │       ├── process_collector_mem_nocgo_darwin.go
    │   │   │       ├── process_collector_not_supported.go
    │   │   │       ├── process_collector_procfsenabled.go
    │   │   │       ├── process_collector_windows.go
    │   │   │       ├── promhttp/
    │   │   │       │   ├── delegator.go
    │   │   │       │   ├── http.go
    │   │   │       │   ├── instrument_client.go
    │   │   │       │   ├── instrument_server.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   └── compression.go
    │   │   │       │   └── option.go
    │   │   │       ├── registry.go
    │   │   │       ├── summary.go
    │   │   │       ├── testutil/
    │   │   │       │   ├── lint.go
    │   │   │       │   ├── promlint/
    │   │   │       │   │   ├── problem.go
    │   │   │       │   │   ├── promlint.go
    │   │   │       │   │   ├── validation.go
    │   │   │       │   │   └── validations/
    │   │   │       │   │       ├── counter_validations.go
    │   │   │       │   │       ├── duplicate_validations.go
    │   │   │       │   │       ├── generic_name_validations.go
    │   │   │       │   │       ├── help_validations.go
    │   │   │       │   │       ├── histogram_validations.go
    │   │   │       │   │       └── units.go
    │   │   │       │   └── testutil.go
    │   │   │       ├── timer.go
    │   │   │       ├── untyped.go
    │   │   │       ├── value.go
    │   │   │       ├── vec.go
    │   │   │       ├── vnext.go
    │   │   │       └── wrap.go
    │   │   ├── client_model/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── go/
    │   │   │       └── metrics.pb.go
    │   │   ├── common/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── expfmt/
    │   │   │   │   ├── decode.go
    │   │   │   │   ├── encode.go
    │   │   │   │   ├── expfmt.go
    │   │   │   │   ├── fuzz.go
    │   │   │   │   ├── openmetrics_create.go
    │   │   │   │   ├── text_create.go
    │   │   │   │   └── text_parse.go
    │   │   │   └── model/
    │   │   │       ├── alert.go
    │   │   │       ├── fingerprinting.go
    │   │   │       ├── fnv.go
    │   │   │       ├── labels.go
    │   │   │       ├── labelset.go
    │   │   │       ├── labelset_string.go
    │   │   │       ├── metadata.go
    │   │   │       ├── metric.go
    │   │   │       ├── model.go
    │   │   │       ├── signature.go
    │   │   │       ├── silence.go
    │   │   │       ├── time.go
    │   │   │       ├── value.go
    │   │   │       ├── value_float.go
    │   │   │       ├── value_histogram.go
    │   │   │       └── value_type.go
    │   │   └── procfs/
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS.md
    │   │       ├── Makefile
    │   │       ├── Makefile.common
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── arp.go
    │   │       ├── buddyinfo.go
    │   │       ├── cmdline.go
    │   │       ├── cpuinfo.go
    │   │       ├── cpuinfo_armx.go
    │   │       ├── cpuinfo_loong64.go
    │   │       ├── cpuinfo_mipsx.go
    │   │       ├── cpuinfo_others.go
    │   │       ├── cpuinfo_ppcx.go
    │   │       ├── cpuinfo_riscvx.go
    │   │       ├── cpuinfo_s390x.go
    │   │       ├── cpuinfo_x86.go
    │   │       ├── crypto.go
    │   │       ├── doc.go
    │   │       ├── fs.go
    │   │       ├── fs_statfs_notype.go
    │   │       ├── fs_statfs_type.go
    │   │       ├── fscache.go
    │   │       ├── internal/
    │   │       │   ├── fs/
    │   │       │   │   └── fs.go
    │   │       │   └── util/
    │   │       │       ├── parse.go
    │   │       │       ├── readfile.go
    │   │       │       ├── sysreadfile.go
    │   │       │       ├── sysreadfile_compat.go
    │   │       │       └── valueparser.go
    │   │       ├── ipvs.go
    │   │       ├── kernel_hung.go
    │   │       ├── kernel_random.go
    │   │       ├── loadavg.go
    │   │       ├── mdstat.go
    │   │       ├── meminfo.go
    │   │       ├── mountinfo.go
    │   │       ├── mountstats.go
    │   │       ├── net_conntrackstat.go
    │   │       ├── net_dev.go
    │   │       ├── net_dev_snmp6.go
    │   │       ├── net_ip_socket.go
    │   │       ├── net_protocols.go
    │   │       ├── net_route.go
    │   │       ├── net_sockstat.go
    │   │       ├── net_softnet.go
    │   │       ├── net_tcp.go
    │   │       ├── net_tls_stat.go
    │   │       ├── net_udp.go
    │   │       ├── net_unix.go
    │   │       ├── net_wireless.go
    │   │       ├── net_xfrm.go
    │   │       ├── netstat.go
    │   │       ├── nfnetlink_queue.go
    │   │       ├── proc.go
    │   │       ├── proc_cgroup.go
    │   │       ├── proc_cgroups.go
    │   │       ├── proc_environ.go
    │   │       ├── proc_fdinfo.go
    │   │       ├── proc_interrupts.go
    │   │       ├── proc_io.go
    │   │       ├── proc_limits.go
    │   │       ├── proc_maps.go
    │   │       ├── proc_netstat.go
    │   │       ├── proc_ns.go
    │   │       ├── proc_psi.go
    │   │       ├── proc_smaps.go
    │   │       ├── proc_snmp.go
    │   │       ├── proc_snmp6.go
    │   │       ├── proc_stat.go
    │   │       ├── proc_statm.go
    │   │       ├── proc_status.go
    │   │       ├── proc_sys.go
    │   │       ├── schedstat.go
    │   │       ├── slab.go
    │   │       ├── softirqs.go
    │   │       ├── stat.go
    │   │       ├── swaps.go
    │   │       ├── thread.go
    │   │       ├── ttar
    │   │       ├── vm.go
    │   │       └── zoneinfo.go
    │   ├── robfig/
    │   │   └── cron/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .travis.yml
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── chain.go
    │   │           ├── constantdelay.go
    │   │           ├── cron.go
    │   │           ├── doc.go
    │   │           ├── logger.go
    │   │           ├── option.go
    │   │           ├── parser.go
    │   │           └── spec.go
    │   ├── spf13/
    │   │   ├── cobra/
    │   │   │   ├── .gitignore
    │   │   │   ├── .golangci.yml
    │   │   │   ├── .mailmap
    │   │   │   ├── CONDUCT.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE.txt
    │   │   │   ├── MAINTAINERS
    │   │   │   ├── Makefile
    │   │   │   ├── README.md
    │   │   │   ├── SECURITY.md
    │   │   │   ├── active_help.go
    │   │   │   ├── args.go
    │   │   │   ├── bash_completions.go
    │   │   │   ├── bash_completionsV2.go
    │   │   │   ├── cobra.go
    │   │   │   ├── command.go
    │   │   │   ├── command_notwin.go
    │   │   │   ├── command_win.go
    │   │   │   ├── completions.go
    │   │   │   ├── fish_completions.go
    │   │   │   ├── flag_groups.go
    │   │   │   ├── powershell_completions.go
    │   │   │   ├── shell_completions.go
    │   │   │   └── zsh_completions.go
    │   │   └── pflag/
    │   │       ├── .editorconfig
    │   │       ├── .gitignore
    │   │       ├── .golangci.yaml
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── bool.go
    │   │       ├── bool_func.go
    │   │       ├── bool_slice.go
    │   │       ├── bytes.go
    │   │       ├── count.go
    │   │       ├── duration.go
    │   │       ├── duration_slice.go
    │   │       ├── errors.go
    │   │       ├── flag.go
    │   │       ├── float32.go
    │   │       ├── float32_slice.go
    │   │       ├── float64.go
    │   │       ├── float64_slice.go
    │   │       ├── func.go
    │   │       ├── golangflag.go
    │   │       ├── int.go
    │   │       ├── int16.go
    │   │       ├── int32.go
    │   │       ├── int32_slice.go
    │   │       ├── int64.go
    │   │       ├── int64_slice.go
    │   │       ├── int8.go
    │   │       ├── int_slice.go
    │   │       ├── ip.go
    │   │       ├── ip_slice.go
    │   │       ├── ipmask.go
    │   │       ├── ipnet.go
    │   │       ├── ipnet_slice.go
    │   │       ├── string.go
    │   │       ├── string_array.go
    │   │       ├── string_slice.go
    │   │       ├── string_to_int.go
    │   │       ├── string_to_int64.go
    │   │       ├── string_to_string.go
    │   │       ├── text.go
    │   │       ├── time.go
    │   │       ├── uint.go
    │   │       ├── uint16.go
    │   │       ├── uint32.go
    │   │       ├── uint64.go
    │   │       ├── uint8.go
    │   │       └── uint_slice.go
    │   ├── stretchr/
    │   │   └── testify/
    │   │       ├── LICENSE
    │   │       ├── assert/
    │   │       │   ├── assertion_compare.go
    │   │       │   ├── assertion_format.go
    │   │       │   ├── assertion_format.go.tmpl
    │   │       │   ├── assertion_forward.go
    │   │       │   ├── assertion_forward.go.tmpl
    │   │       │   ├── assertion_order.go
    │   │       │   ├── assertions.go
    │   │       │   ├── doc.go
    │   │       │   ├── errors.go
    │   │       │   ├── forward_assertions.go
    │   │       │   ├── http_assertions.go
    │   │       │   └── yaml/
    │   │       │       ├── yaml_custom.go
    │   │       │       ├── yaml_default.go
    │   │       │       └── yaml_fail.go
    │   │       └── require/
    │   │           ├── doc.go
    │   │           ├── forward_requirements.go
    │   │           ├── require.go
    │   │           ├── require.go.tmpl
    │   │           ├── require_forward.go
    │   │           ├── require_forward.go.tmpl
    │   │           └── requirements.go
    │   ├── vishvananda/
    │   │   └── netns/
    │   │       ├── .golangci.yml
    │   │       ├── .yamllint.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── netns_linux.go
    │   │       ├── netns_others.go
    │   │       ├── nshandle_linux.go
    │   │       └── nshandle_others.go
    │   └── x448/
    │       └── float16/
    │           ├── .travis.yml
    │           ├── LICENSE
    │           ├── README.md
    │           └── float16.go
    ├── go.etcd.io/
    │   └── etcd/
    │       ├── api/
    │       │   └── v3/
    │       │       ├── LICENSE
    │       │       ├── authpb/
    │       │       │   ├── auth.pb.go
    │       │       │   └── auth.proto
    │       │       ├── etcdserverpb/
    │       │       │   ├── etcdserver.pb.go
    │       │       │   ├── etcdserver.proto
    │       │       │   ├── raft_internal.pb.go
    │       │       │   ├── raft_internal.proto
    │       │       │   ├── raft_internal_stringer.go
    │       │       │   ├── rpc.pb.go
    │       │       │   └── rpc.proto
    │       │       ├── membershippb/
    │       │       │   ├── membership.pb.go
    │       │       │   └── membership.proto
    │       │       ├── mvccpb/
    │       │       │   ├── kv.pb.go
    │       │       │   └── kv.proto
    │       │       ├── v3rpc/
    │       │       │   └── rpctypes/
    │       │       │       ├── doc.go
    │       │       │       ├── error.go
    │       │       │       ├── md.go
    │       │       │       └── metadatafields.go
    │       │       ├── version/
    │       │       │   └── version.go
    │       │       └── versionpb/
    │       │           ├── version.pb.go
    │       │           └── version.proto
    │       └── client/
    │           ├── pkg/
    │           │   └── v3/
    │           │       ├── LICENSE
    │           │       ├── fileutil/
    │           │       │   ├── dir_unix.go
    │           │       │   ├── dir_windows.go
    │           │       │   ├── doc.go
    │           │       │   ├── filereader.go
    │           │       │   ├── fileutil.go
    │           │       │   ├── lock.go
    │           │       │   ├── lock_flock.go
    │           │       │   ├── lock_linux.go
    │           │       │   ├── lock_plan9.go
    │           │       │   ├── lock_solaris.go
    │           │       │   ├── lock_unix.go
    │           │       │   ├── lock_windows.go
    │           │       │   ├── preallocate.go
    │           │       │   ├── preallocate_darwin.go
    │           │       │   ├── preallocate_unix.go
    │           │       │   ├── preallocate_unsupported.go
    │           │       │   ├── purge.go
    │           │       │   ├── read_dir.go
    │           │       │   ├── sync.go
    │           │       │   ├── sync_darwin.go
    │           │       │   └── sync_linux.go
    │           │       ├── logutil/
    │           │       │   ├── doc.go
    │           │       │   ├── log_format.go
    │           │       │   ├── log_level.go
    │           │       │   ├── zap.go
    │           │       │   └── zap_journal.go
    │           │       ├── systemd/
    │           │       │   ├── doc.go
    │           │       │   └── journal.go
    │           │       ├── tlsutil/
    │           │       │   ├── cipher_suites.go
    │           │       │   ├── doc.go
    │           │       │   ├── tlsutil.go
    │           │       │   └── versions.go
    │           │       ├── transport/
    │           │       │   ├── doc.go
    │           │       │   ├── keepalive_listener.go
    │           │       │   ├── keepalive_listener_openbsd.go
    │           │       │   ├── keepalive_listener_unix.go
    │           │       │   ├── limit_listen.go
    │           │       │   ├── listener.go
    │           │       │   ├── listener_opts.go
    │           │       │   ├── listener_tls.go
    │           │       │   ├── sockopt.go
    │           │       │   ├── sockopt_solaris.go
    │           │       │   ├── sockopt_unix.go
    │           │       │   ├── sockopt_wasm.go
    │           │       │   ├── sockopt_windows.go
    │           │       │   ├── timeout_conn.go
    │           │       │   ├── timeout_dialer.go
    │           │       │   ├── timeout_listener.go
    │           │       │   ├── timeout_transport.go
    │           │       │   ├── tls.go
    │           │       │   ├── transport.go
    │           │       │   └── unix_listener.go
    │           │       ├── types/
    │           │       │   ├── doc.go
    │           │       │   ├── id.go
    │           │       │   ├── set.go
    │           │       │   ├── slice.go
    │           │       │   ├── urls.go
    │           │       │   └── urlsmap.go
    │           │       └── verify/
    │           │           └── verify.go
    │           └── v3/
    │               ├── LICENSE
    │               ├── OWNERS
    │               ├── README.md
    │               ├── auth.go
    │               ├── client.go
    │               ├── cluster.go
    │               ├── compact_op.go
    │               ├── compare.go
    │               ├── config.go
    │               ├── credentials/
    │               │   └── credentials.go
    │               ├── ctx.go
    │               ├── doc.go
    │               ├── internal/
    │               │   ├── endpoint/
    │               │   │   └── endpoint.go
    │               │   └── resolver/
    │               │       └── resolver.go
    │               ├── kubernetes/
    │               │   ├── client.go
    │               │   └── interface.go
    │               ├── kv.go
    │               ├── lease.go
    │               ├── logger.go
    │               ├── maintenance.go
    │               ├── op.go
    │               ├── options.go
    │               ├── retry.go
    │               ├── retry_interceptor.go
    │               ├── sort.go
    │               ├── txn.go
    │               ├── utils.go
    │               └── watch.go
    ├── go.opencensus.io/
    │   ├── .gitignore
    │   ├── AUTHORS
    │   ├── CONTRIBUTING.md
    │   ├── LICENSE
    │   ├── Makefile
    │   ├── README.md
    │   ├── appveyor.yml
    │   ├── internal/
    │   │   ├── internal.go
    │   │   ├── sanitize.go
    │   │   ├── tagencoding/
    │   │   │   └── tagencoding.go
    │   │   └── traceinternals.go
    │   ├── metric/
    │   │   ├── metricdata/
    │   │   │   ├── doc.go
    │   │   │   ├── exemplar.go
    │   │   │   ├── label.go
    │   │   │   ├── metric.go
    │   │   │   ├── point.go
    │   │   │   ├── type_string.go
    │   │   │   └── unit.go
    │   │   └── metricproducer/
    │   │       ├── manager.go
    │   │       └── producer.go
    │   ├── opencensus.go
    │   ├── plugin/
    │   │   └── ochttp/
    │   │       ├── client.go
    │   │       ├── client_stats.go
    │   │       ├── doc.go
    │   │       ├── propagation/
    │   │       │   └── b3/
    │   │       │       └── b3.go
    │   │       ├── route.go
    │   │       ├── server.go
    │   │       ├── span_annotating_client_trace.go
    │   │       ├── stats.go
    │   │       ├── trace.go
    │   │       └── wrapped_body.go
    │   ├── resource/
    │   │   └── resource.go
    │   ├── stats/
    │   │   ├── doc.go
    │   │   ├── internal/
    │   │   │   └── record.go
    │   │   ├── measure.go
    │   │   ├── measure_float64.go
    │   │   ├── measure_int64.go
    │   │   ├── record.go
    │   │   ├── units.go
    │   │   └── view/
    │   │       ├── aggregation.go
    │   │       ├── aggregation_data.go
    │   │       ├── collector.go
    │   │       ├── doc.go
    │   │       ├── export.go
    │   │       ├── view.go
    │   │       ├── view_to_metric.go
    │   │       ├── worker.go
    │   │       └── worker_commands.go
    │   ├── tag/
    │   │   ├── context.go
    │   │   ├── doc.go
    │   │   ├── key.go
    │   │   ├── map.go
    │   │   ├── map_codec.go
    │   │   ├── metadata.go
    │   │   ├── profile_19.go
    │   │   ├── profile_not19.go
    │   │   └── validate.go
    │   └── trace/
    │       ├── basetypes.go
    │       ├── config.go
    │       ├── doc.go
    │       ├── evictedqueue.go
    │       ├── export.go
    │       ├── internal/
    │       │   └── internal.go
    │       ├── lrumap.go
    │       ├── propagation/
    │       │   └── propagation.go
    │       ├── sampling.go
    │       ├── spanbucket.go
    │       ├── spanstore.go
    │       ├── status_codes.go
    │       ├── trace.go
    │       ├── trace_api.go
    │       ├── trace_go11.go
    │       ├── trace_nongo11.go
    │       └── tracestate/
    │           └── tracestate.go
    ├── go.opentelemetry.io/
    │   ├── auto/
    │   │   └── sdk/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── VERSIONING.md
    │   │       ├── doc.go
    │   │       ├── internal/
    │   │       │   └── telemetry/
    │   │       │       ├── attr.go
    │   │       │       ├── doc.go
    │   │       │       ├── id.go
    │   │       │       ├── number.go
    │   │       │       ├── resource.go
    │   │       │       ├── scope.go
    │   │       │       ├── span.go
    │   │       │       ├── status.go
    │   │       │       ├── traces.go
    │   │       │       └── value.go
    │   │       ├── limit.go
    │   │       ├── span.go
    │   │       ├── tracer.go
    │   │       └── tracer_provider.go
    │   ├── contrib/
    │   │   └── instrumentation/
    │   │       ├── google.golang.org/
    │   │       │   └── grpc/
    │   │       │       └── otelgrpc/
    │   │       │           ├── LICENSE
    │   │       │           ├── config.go
    │   │       │           ├── doc.go
    │   │       │           ├── interceptor.go
    │   │       │           ├── interceptorinfo.go
    │   │       │           ├── internal/
    │   │       │           │   └── parse.go
    │   │       │           ├── metadata_supplier.go
    │   │       │           ├── stats_handler.go
    │   │       │           └── version.go
    │   │       └── net/
    │   │           └── http/
    │   │               └── otelhttp/
    │   │                   ├── LICENSE
    │   │                   ├── common.go
    │   │                   ├── config.go
    │   │                   ├── doc.go
    │   │                   ├── handler.go
    │   │                   ├── internal/
    │   │                   │   ├── request/
    │   │                   │   │   ├── body_wrapper.go
    │   │                   │   │   ├── gen.go
    │   │                   │   │   └── resp_writer_wrapper.go
    │   │                   │   └── semconv/
    │   │                   │       ├── client.go
    │   │                   │       ├── gen.go
    │   │                   │       ├── server.go
    │   │                   │       └── util.go
    │   │                   ├── labeler.go
    │   │                   ├── start_time_context.go
    │   │                   ├── transport.go
    │   │                   └── version.go
    │   ├── otel/
    │   │   ├── .clomonitor.yml
    │   │   ├── .codespellignore
    │   │   ├── .codespellrc
    │   │   ├── .gitattributes
    │   │   ├── .gitignore
    │   │   ├── .golangci.yml
    │   │   ├── .lycheeignore
    │   │   ├── .markdownlint.yaml
    │   │   ├── CHANGELOG.md
    │   │   ├── CODEOWNERS
    │   │   ├── CONTRIBUTING.md
    │   │   ├── LICENSE
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── RELEASING.md
    │   │   ├── SECURITY-INSIGHTS.yml
    │   │   ├── VERSIONING.md
    │   │   ├── attribute/
    │   │   │   ├── README.md
    │   │   │   ├── doc.go
    │   │   │   ├── encoder.go
    │   │   │   ├── filter.go
    │   │   │   ├── hash.go
    │   │   │   ├── internal/
    │   │   │   │   ├── attribute.go
    │   │   │   │   └── xxhash/
    │   │   │   │       └── xxhash.go
    │   │   │   ├── iterator.go
    │   │   │   ├── key.go
    │   │   │   ├── kv.go
    │   │   │   ├── rawhelpers.go
    │   │   │   ├── set.go
    │   │   │   ├── type_string.go
    │   │   │   └── value.go
    │   │   ├── baggage/
    │   │   │   ├── README.md
    │   │   │   ├── baggage.go
    │   │   │   ├── context.go
    │   │   │   └── doc.go
    │   │   ├── codes/
    │   │   │   ├── README.md
    │   │   │   ├── codes.go
    │   │   │   └── doc.go
    │   │   ├── dependencies.Dockerfile
    │   │   ├── doc.go
    │   │   ├── error_handler.go
    │   │   ├── exporters/
    │   │   │   └── otlp/
    │   │   │       └── otlptrace/
    │   │   │           ├── LICENSE
    │   │   │           ├── README.md
    │   │   │           ├── clients.go
    │   │   │           ├── doc.go
    │   │   │           ├── exporter.go
    │   │   │           ├── internal/
    │   │   │           │   └── tracetransform/
    │   │   │           │       ├── attribute.go
    │   │   │           │       ├── instrumentation.go
    │   │   │           │       ├── resource.go
    │   │   │           │       └── span.go
    │   │   │           ├── otlptracegrpc/
    │   │   │           │   ├── LICENSE
    │   │   │           │   ├── README.md
    │   │   │           │   ├── client.go
    │   │   │           │   ├── doc.go
    │   │   │           │   ├── exporter.go
    │   │   │           │   ├── internal/
    │   │   │           │   │   ├── counter/
    │   │   │           │   │   │   └── counter.go
    │   │   │           │   │   ├── envconfig/
    │   │   │           │   │   │   └── envconfig.go
    │   │   │           │   │   ├── gen.go
    │   │   │           │   │   ├── observ/
    │   │   │           │   │   │   ├── doc.go
    │   │   │           │   │   │   ├── instrumentation.go
    │   │   │           │   │   │   └── target.go
    │   │   │           │   │   ├── otlpconfig/
    │   │   │           │   │   │   ├── envconfig.go
    │   │   │           │   │   │   ├── options.go
    │   │   │           │   │   │   ├── optiontypes.go
    │   │   │           │   │   │   └── tls.go
    │   │   │           │   │   ├── partialsuccess.go
    │   │   │           │   │   ├── retry/
    │   │   │           │   │   │   └── retry.go
    │   │   │           │   │   ├── version.go
    │   │   │           │   │   └── x/
    │   │   │           │   │       ├── README.md
    │   │   │           │   │       ├── observ.go
    │   │   │           │   │       └── x.go
    │   │   │           │   └── options.go
    │   │   │           └── version.go
    │   │   ├── handler.go
    │   │   ├── internal/
    │   │   │   ├── baggage/
    │   │   │   │   ├── baggage.go
    │   │   │   │   └── context.go
    │   │   │   ├── errorhandler/
    │   │   │   │   └── errorhandler.go
    │   │   │   └── global/
    │   │   │       ├── handler.go
    │   │   │       ├── instruments.go
    │   │   │       ├── internal_logging.go
    │   │   │       ├── meter.go
    │   │   │       ├── propagator.go
    │   │   │       ├── state.go
    │   │   │       └── trace.go
    │   │   ├── internal_logging.go
    │   │   ├── metric/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── asyncfloat64.go
    │   │   │   ├── asyncint64.go
    │   │   │   ├── config.go
    │   │   │   ├── doc.go
    │   │   │   ├── embedded/
    │   │   │   │   ├── README.md
    │   │   │   │   └── embedded.go
    │   │   │   ├── instrument.go
    │   │   │   ├── meter.go
    │   │   │   ├── noop/
    │   │   │   │   ├── README.md
    │   │   │   │   └── noop.go
    │   │   │   ├── syncfloat64.go
    │   │   │   └── syncint64.go
    │   │   ├── metric.go
    │   │   ├── propagation/
    │   │   │   ├── README.md
    │   │   │   ├── baggage.go
    │   │   │   ├── doc.go
    │   │   │   ├── propagation.go
    │   │   │   └── trace_context.go
    │   │   ├── propagation.go
    │   │   ├── renovate.json
    │   │   ├── requirements.txt
    │   │   ├── sdk/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── instrumentation/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── library.go
    │   │   │   │   └── scope.go
    │   │   │   ├── internal/
    │   │   │   │   └── x/
    │   │   │   │       ├── README.md
    │   │   │   │       ├── features.go
    │   │   │   │       └── x.go
    │   │   │   ├── resource/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── auto.go
    │   │   │   │   ├── builtin.go
    │   │   │   │   ├── config.go
    │   │   │   │   ├── container.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── host_id.go
    │   │   │   │   ├── host_id_bsd.go
    │   │   │   │   ├── host_id_darwin.go
    │   │   │   │   ├── host_id_exec.go
    │   │   │   │   ├── host_id_linux.go
    │   │   │   │   ├── host_id_readfile.go
    │   │   │   │   ├── host_id_unsupported.go
    │   │   │   │   ├── host_id_windows.go
    │   │   │   │   ├── os.go
    │   │   │   │   ├── os_release_darwin.go
    │   │   │   │   ├── os_release_unix.go
    │   │   │   │   ├── os_unix.go
    │   │   │   │   ├── os_unsupported.go
    │   │   │   │   ├── os_windows.go
    │   │   │   │   ├── process.go
    │   │   │   │   └── resource.go
    │   │   │   ├── trace/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── batch_span_processor.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── event.go
    │   │   │   │   ├── evictedqueue.go
    │   │   │   │   ├── id_generator.go
    │   │   │   │   ├── internal/
    │   │   │   │   │   ├── env/
    │   │   │   │   │   │   └── env.go
    │   │   │   │   │   └── observ/
    │   │   │   │   │       ├── batch_span_processor.go
    │   │   │   │   │       ├── doc.go
    │   │   │   │   │       ├── simple_span_processor.go
    │   │   │   │   │       └── tracer.go
    │   │   │   │   ├── link.go
    │   │   │   │   ├── provider.go
    │   │   │   │   ├── sampler_env.go
    │   │   │   │   ├── sampling.go
    │   │   │   │   ├── simple_span_processor.go
    │   │   │   │   ├── snapshot.go
    │   │   │   │   ├── span.go
    │   │   │   │   ├── span_exporter.go
    │   │   │   │   ├── span_limits.go
    │   │   │   │   ├── span_processor.go
    │   │   │   │   └── tracer.go
    │   │   │   └── version.go
    │   │   ├── semconv/
    │   │   │   ├── internal/
    │   │   │   │   └── http.go
    │   │   │   ├── v1.12.0/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── exception.go
    │   │   │   │   ├── http.go
    │   │   │   │   ├── resource.go
    │   │   │   │   ├── schema.go
    │   │   │   │   └── trace.go
    │   │   │   ├── v1.17.0/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── event.go
    │   │   │   │   ├── exception.go
    │   │   │   │   ├── http.go
    │   │   │   │   ├── resource.go
    │   │   │   │   ├── schema.go
    │   │   │   │   └── trace.go
    │   │   │   ├── v1.37.0/
    │   │   │   │   ├── MIGRATION.md
    │   │   │   │   ├── README.md
    │   │   │   │   ├── attribute_group.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── error_type.go
    │   │   │   │   ├── exception.go
    │   │   │   │   └── schema.go
    │   │   │   └── v1.39.0/
    │   │   │       ├── MIGRATION.md
    │   │   │       ├── README.md
    │   │   │       ├── attribute_group.go
    │   │   │       ├── doc.go
    │   │   │       ├── error_type.go
    │   │   │       ├── exception.go
    │   │   │       ├── httpconv/
    │   │   │       │   └── metric.go
    │   │   │       ├── otelconv/
    │   │   │       │   └── metric.go
    │   │   │       ├── rpcconv/
    │   │   │       │   └── metric.go
    │   │   │       └── schema.go
    │   │   ├── trace/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── auto.go
    │   │   │   ├── config.go
    │   │   │   ├── context.go
    │   │   │   ├── doc.go
    │   │   │   ├── embedded/
    │   │   │   │   ├── README.md
    │   │   │   │   └── embedded.go
    │   │   │   ├── hex.go
    │   │   │   ├── internal/
    │   │   │   │   └── telemetry/
    │   │   │   │       ├── attr.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── id.go
    │   │   │   │       ├── number.go
    │   │   │   │       ├── resource.go
    │   │   │   │       ├── scope.go
    │   │   │   │       ├── span.go
    │   │   │   │       ├── status.go
    │   │   │   │       ├── traces.go
    │   │   │   │       └── value.go
    │   │   │   ├── nonrecording.go
    │   │   │   ├── noop/
    │   │   │   │   ├── README.md
    │   │   │   │   └── noop.go
    │   │   │   ├── noop.go
    │   │   │   ├── provider.go
    │   │   │   ├── span.go
    │   │   │   ├── trace.go
    │   │   │   ├── tracer.go
    │   │   │   └── tracestate.go
    │   │   ├── trace.go
    │   │   ├── verify_released_changelog.sh
    │   │   ├── version.go
    │   │   └── versions.yaml
    │   └── proto/
    │       └── otlp/
    │           ├── LICENSE
    │           ├── collector/
    │           │   └── trace/
    │           │       └── v1/
    │           │           ├── trace_service.pb.go
    │           │           ├── trace_service.pb.gw.go
    │           │           └── trace_service_grpc.pb.go
    │           ├── common/
    │           │   └── v1/
    │           │       └── common.pb.go
    │           ├── resource/
    │           │   └── v1/
    │           │       └── resource.pb.go
    │           └── trace/
    │               └── v1/
    │                   └── trace.pb.go
    ├── go.yaml.in/
    │   └── yaml/
    │       ├── v2/
    │       │   ├── .travis.yml
    │       │   ├── LICENSE
    │       │   ├── LICENSE.libyaml
    │       │   ├── NOTICE
    │       │   ├── README.md
    │       │   ├── apic.go
    │       │   ├── decode.go
    │       │   ├── emitterc.go
    │       │   ├── encode.go
    │       │   ├── parserc.go
    │       │   ├── readerc.go
    │       │   ├── resolve.go
    │       │   ├── scannerc.go
    │       │   ├── sorter.go
    │       │   ├── writerc.go
    │       │   ├── yaml.go
    │       │   ├── yamlh.go
    │       │   └── yamlprivateh.go
    │       └── v3/
    │           ├── LICENSE
    │           ├── NOTICE
    │           ├── README.md
    │           ├── apic.go
    │           ├── decode.go
    │           ├── emitterc.go
    │           ├── encode.go
    │           ├── parserc.go
    │           ├── readerc.go
    │           ├── resolve.go
    │           ├── scannerc.go
    │           ├── sorter.go
    │           ├── writerc.go
    │           ├── yaml.go
    │           ├── yamlh.go
    │           └── yamlprivateh.go
    ├── golang.org/
    │   └── x/
    │       ├── crypto/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── blowfish/
    │       │   │   ├── block.go
    │       │   │   ├── cipher.go
    │       │   │   └── const.go
    │       │   ├── chacha20/
    │       │   │   ├── chacha_arm64.go
    │       │   │   ├── chacha_arm64.s
    │       │   │   ├── chacha_generic.go
    │       │   │   ├── chacha_noasm.go
    │       │   │   ├── chacha_ppc64x.go
    │       │   │   ├── chacha_ppc64x.s
    │       │   │   ├── chacha_s390x.go
    │       │   │   ├── chacha_s390x.s
    │       │   │   └── xor.go
    │       │   ├── chacha20poly1305/
    │       │   │   ├── chacha20poly1305.go
    │       │   │   ├── chacha20poly1305_amd64.go
    │       │   │   ├── chacha20poly1305_amd64.s
    │       │   │   ├── chacha20poly1305_generic.go
    │       │   │   ├── chacha20poly1305_noasm.go
    │       │   │   ├── fips140only_compat.go
    │       │   │   ├── fips140only_go1.26.go
    │       │   │   └── xchacha20poly1305.go
    │       │   ├── cryptobyte/
    │       │   │   ├── asn1/
    │       │   │   │   └── asn1.go
    │       │   │   ├── asn1.go
    │       │   │   ├── builder.go
    │       │   │   └── string.go
    │       │   ├── curve25519/
    │       │   │   └── curve25519.go
    │       │   ├── hkdf/
    │       │   │   └── hkdf.go
    │       │   ├── internal/
    │       │   │   ├── alias/
    │       │   │   │   ├── alias.go
    │       │   │   │   └── alias_purego.go
    │       │   │   └── poly1305/
    │       │   │       ├── mac_noasm.go
    │       │   │       ├── poly1305.go
    │       │   │       ├── sum_amd64.s
    │       │   │       ├── sum_asm.go
    │       │   │       ├── sum_generic.go
    │       │   │       ├── sum_loong64.s
    │       │   │       ├── sum_ppc64x.s
    │       │   │       ├── sum_s390x.go
    │       │   │       └── sum_s390x.s
    │       │   ├── nacl/
    │       │   │   └── secretbox/
    │       │   │       └── secretbox.go
    │       │   ├── salsa20/
    │       │   │   └── salsa/
    │       │   │       ├── hsalsa20.go
    │       │   │       ├── salsa208.go
    │       │   │       ├── salsa20_amd64.go
    │       │   │       ├── salsa20_amd64.s
    │       │   │       ├── salsa20_noasm.go
    │       │   │       └── salsa20_ref.go
    │       │   └── ssh/
    │       │       ├── buffer.go
    │       │       ├── certs.go
    │       │       ├── channel.go
    │       │       ├── cipher.go
    │       │       ├── client.go
    │       │       ├── client_auth.go
    │       │       ├── common.go
    │       │       ├── connection.go
    │       │       ├── doc.go
    │       │       ├── handshake.go
    │       │       ├── internal/
    │       │       │   └── bcrypt_pbkdf/
    │       │       │       └── bcrypt_pbkdf.go
    │       │       ├── kex.go
    │       │       ├── keys.go
    │       │       ├── mac.go
    │       │       ├── messages.go
    │       │       ├── mlkem.go
    │       │       ├── mux.go
    │       │       ├── server.go
    │       │       ├── session.go
    │       │       ├── ssh_gss.go
    │       │       ├── streamlocal.go
    │       │       ├── tcpip.go
    │       │       └── transport.go
    │       ├── exp/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── slices/
    │       │       ├── slices.go
    │       │       └── sort.go
    │       ├── mod/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── internal/
    │       │   │   └── lazyregexp/
    │       │   │       └── lazyre.go
    │       │   ├── module/
    │       │   │   ├── module.go
    │       │   │   └── pseudo.go
    │       │   └── semver/
    │       │       └── semver.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── html/
    │       │   │   ├── atom/
    │       │   │   │   ├── atom.go
    │       │   │   │   └── table.go
    │       │   │   ├── charset/
    │       │   │   │   └── charset.go
    │       │   │   ├── const.go
    │       │   │   ├── doc.go
    │       │   │   ├── doctype.go
    │       │   │   ├── entity.go
    │       │   │   ├── escape.go
    │       │   │   ├── foreign.go
    │       │   │   ├── iter.go
    │       │   │   ├── node.go
    │       │   │   ├── parse.go
    │       │   │   ├── render.go
    │       │   │   └── token.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go125.go
    │       │   │   ├── config_go126.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority_rfc7540.go
    │       │   │   ├── writesched_priority_rfc9218.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   ├── socks/
    │       │   │   │   ├── client.go
    │       │   │   │   └── socks.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   ├── proxy/
    │       │   │   ├── dial.go
    │       │   │   ├── direct.go
    │       │   │   ├── per_host.go
    │       │   │   ├── proxy.go
    │       │   │   └── socks5.go
    │       │   ├── trace/
    │       │   │   ├── events.go
    │       │   │   ├── histogram.go
    │       │   │   └── trace.go
    │       │   └── websocket/
    │       │       ├── client.go
    │       │       ├── dial.go
    │       │       ├── hybi.go
    │       │       ├── server.go
    │       │       └── websocket.go
    │       ├── oauth2/
    │       │   ├── .travis.yml
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── authhandler/
    │       │   │   └── authhandler.go
    │       │   ├── deviceauth.go
    │       │   ├── google/
    │       │   │   ├── appengine.go
    │       │   │   ├── default.go
    │       │   │   ├── doc.go
    │       │   │   ├── error.go
    │       │   │   ├── externalaccount/
    │       │   │   │   ├── aws.go
    │       │   │   │   ├── basecredentials.go
    │       │   │   │   ├── executablecredsource.go
    │       │   │   │   ├── filecredsource.go
    │       │   │   │   ├── header.go
    │       │   │   │   ├── programmaticrefreshcredsource.go
    │       │   │   │   └── urlcredsource.go
    │       │   │   ├── google.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccountauthorizeduser/
    │       │   │   │   │   └── externalaccountauthorizeduser.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       ├── clientauth.go
    │       │   │   │       └── sts_exchange.go
    │       │   │   ├── jwt.go
    │       │   │   └── sdk.go
    │       │   ├── internal/
    │       │   │   ├── doc.go
    │       │   │   ├── oauth2.go
    │       │   │   ├── token.go
    │       │   │   └── transport.go
    │       │   ├── jws/
    │       │   │   └── jws.go
    │       │   ├── jwt/
    │       │   │   └── jwt.go
    │       │   ├── oauth2.go
    │       │   ├── pkce.go
    │       │   ├── token.go
    │       │   └── transport.go
    │       ├── sync/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── errgroup/
    │       │   │   └── errgroup.go
    │       │   └── singleflight/
    │       │       └── singleflight.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cpu/
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_darwin_x86_gc.s
    │       │   │   ├── byteorder.go
    │       │   │   ├── cpu.go
    │       │   │   ├── cpu_aix.go
    │       │   │   ├── cpu_arm.go
    │       │   │   ├── cpu_arm64.go
    │       │   │   ├── cpu_arm64.s
    │       │   │   ├── cpu_darwin_x86.go
    │       │   │   ├── cpu_gc_arm64.go
    │       │   │   ├── cpu_gc_s390x.go
    │       │   │   ├── cpu_gc_x86.go
    │       │   │   ├── cpu_gc_x86.s
    │       │   │   ├── cpu_gccgo_arm64.go
    │       │   │   ├── cpu_gccgo_s390x.go
    │       │   │   ├── cpu_gccgo_x86.c
    │       │   │   ├── cpu_gccgo_x86.go
    │       │   │   ├── cpu_linux.go
    │       │   │   ├── cpu_linux_arm.go
    │       │   │   ├── cpu_linux_arm64.go
    │       │   │   ├── cpu_linux_loong64.go
    │       │   │   ├── cpu_linux_mips64x.go
    │       │   │   ├── cpu_linux_noinit.go
    │       │   │   ├── cpu_linux_ppc64x.go
    │       │   │   ├── cpu_linux_riscv64.go
    │       │   │   ├── cpu_linux_s390x.go
    │       │   │   ├── cpu_loong64.go
    │       │   │   ├── cpu_loong64.s
    │       │   │   ├── cpu_mips64x.go
    │       │   │   ├── cpu_mipsx.go
    │       │   │   ├── cpu_netbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.s
    │       │   │   ├── cpu_other_arm.go
    │       │   │   ├── cpu_other_arm64.go
    │       │   │   ├── cpu_other_mips64x.go
    │       │   │   ├── cpu_other_ppc64x.go
    │       │   │   ├── cpu_other_riscv64.go
    │       │   │   ├── cpu_other_x86.go
    │       │   │   ├── cpu_ppc64x.go
    │       │   │   ├── cpu_riscv64.go
    │       │   │   ├── cpu_s390x.go
    │       │   │   ├── cpu_s390x.s
    │       │   │   ├── cpu_wasm.go
    │       │   │   ├── cpu_windows_arm64.go
    │       │   │   ├── cpu_x86.go
    │       │   │   ├── cpu_zos.go
    │       │   │   ├── cpu_zos_s390x.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── hwcap_linux.go
    │       │   │   ├── parse.go
    │       │   │   ├── proc_cpuinfo_linux.go
    │       │   │   ├── runtime_auxv.go
    │       │   │   ├── runtime_auxv_go121.go
    │       │   │   ├── syscall_aix_gccgo.go
    │       │   │   ├── syscall_aix_ppc64_gc.go
    │       │   │   └── syscall_darwin_x86_gc.go
    │       │   ├── plan9/
    │       │   │   ├── asm.s
    │       │   │   ├── asm_plan9_386.s
    │       │   │   ├── asm_plan9_amd64.s
    │       │   │   ├── asm_plan9_arm.s
    │       │   │   ├── const_plan9.go
    │       │   │   ├── dir_plan9.go
    │       │   │   ├── env_plan9.go
    │       │   │   ├── errors_plan9.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mksysnum_plan9.sh
    │       │   │   ├── pwd_plan9.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── str.go
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_plan9.go
    │       │   │   ├── zsyscall_plan9_386.go
    │       │   │   ├── zsyscall_plan9_amd64.go
    │       │   │   ├── zsyscall_plan9_arm.go
    │       │   │   └── zsysnum_plan9.go
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── registry/
    │       │       │   ├── key.go
    │       │       │   ├── mksyscall.go
    │       │       │   ├── syscall.go
    │       │       │   ├── value.go
    │       │       │   └── zsyscall_windows.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── term/
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── README.md
    │       │   ├── codereview.cfg
    │       │   ├── term.go
    │       │   ├── term_plan9.go
    │       │   ├── term_unix.go
    │       │   ├── term_unix_bsd.go
    │       │   ├── term_unix_other.go
    │       │   ├── term_unsupported.go
    │       │   ├── term_windows.go
    │       │   └── terminal.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cases/
    │       │   │   ├── cases.go
    │       │   │   ├── context.go
    │       │   │   ├── fold.go
    │       │   │   ├── icu.go
    │       │   │   ├── info.go
    │       │   │   ├── map.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables17.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── encoding/
    │       │   │   ├── charmap/
    │       │   │   │   ├── charmap.go
    │       │   │   │   └── tables.go
    │       │   │   ├── encoding.go
    │       │   │   ├── htmlindex/
    │       │   │   │   ├── htmlindex.go
    │       │   │   │   ├── map.go
    │       │   │   │   └── tables.go
    │       │   │   ├── internal/
    │       │   │   │   ├── identifier/
    │       │   │   │   │   ├── identifier.go
    │       │   │   │   │   └── mib.go
    │       │   │   │   └── internal.go
    │       │   │   ├── japanese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── eucjp.go
    │       │   │   │   ├── iso2022jp.go
    │       │   │   │   ├── shiftjis.go
    │       │   │   │   └── tables.go
    │       │   │   ├── korean/
    │       │   │   │   ├── euckr.go
    │       │   │   │   └── tables.go
    │       │   │   ├── simplifiedchinese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── gbk.go
    │       │   │   │   ├── hzgb2312.go
    │       │   │   │   └── tables.go
    │       │   │   ├── traditionalchinese/
    │       │   │   │   ├── big5.go
    │       │   │   │   └── tables.go
    │       │   │   └── unicode/
    │       │   │       ├── override.go
    │       │   │       └── unicode.go
    │       │   ├── feature/
    │       │   │   └── plural/
    │       │   │       ├── common.go
    │       │   │       ├── message.go
    │       │   │       ├── plural.go
    │       │   │       └── tables.go
    │       │   ├── internal/
    │       │   │   ├── catmsg/
    │       │   │   │   ├── catmsg.go
    │       │   │   │   ├── codec.go
    │       │   │   │   └── varint.go
    │       │   │   ├── format/
    │       │   │   │   ├── format.go
    │       │   │   │   └── parser.go
    │       │   │   ├── internal.go
    │       │   │   ├── language/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── compact/
    │       │   │   │   │   ├── compact.go
    │       │   │   │   │   ├── language.go
    │       │   │   │   │   ├── parents.go
    │       │   │   │   │   ├── tables.go
    │       │   │   │   │   └── tags.go
    │       │   │   │   ├── compact.go
    │       │   │   │   ├── compose.go
    │       │   │   │   ├── coverage.go
    │       │   │   │   ├── language.go
    │       │   │   │   ├── lookup.go
    │       │   │   │   ├── match.go
    │       │   │   │   ├── parse.go
    │       │   │   │   ├── tables.go
    │       │   │   │   └── tags.go
    │       │   │   ├── match.go
    │       │   │   ├── number/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── decimal.go
    │       │   │   │   ├── format.go
    │       │   │   │   ├── number.go
    │       │   │   │   ├── pattern.go
    │       │   │   │   ├── roundingmode_string.go
    │       │   │   │   └── tables.go
    │       │   │   ├── stringset/
    │       │   │   │   └── set.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── utf8internal/
    │       │   │       └── utf8internal.go
    │       │   ├── language/
    │       │   │   ├── coverage.go
    │       │   │   ├── doc.go
    │       │   │   ├── language.go
    │       │   │   ├── match.go
    │       │   │   ├── parse.go
    │       │   │   ├── tables.go
    │       │   │   └── tags.go
    │       │   ├── message/
    │       │   │   ├── catalog/
    │       │   │   │   ├── catalog.go
    │       │   │   │   └── dict.go
    │       │   │   ├── catalog.go
    │       │   │   ├── doc.go
    │       │   │   ├── format.go
    │       │   │   ├── message.go
    │       │   │   └── print.go
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       └── bidirule.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables17.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables17.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       ├── time/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── rate/
    │       │       ├── rate.go
    │       │       └── sometimes.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           ├── cover/
    │           │   └── profile.go
    │           ├── go/
    │           │   ├── ast/
    │           │   │   ├── astutil/
    │           │   │   │   ├── enclosing.go
    │           │   │   │   ├── imports.go
    │           │   │   │   ├── rewrite.go
    │           │   │   │   └── util.go
    │           │   │   ├── edge/
    │           │   │   │   └── edge.go
    │           │   │   └── inspector/
    │           │   │       ├── cursor.go
    │           │   │       ├── inspector.go
    │           │   │       ├── iter.go
    │           │   │       ├── typeof.go
    │           │   │       └── walk.go
    │           │   ├── gcexportdata/
    │           │   │   ├── gcexportdata.go
    │           │   │   └── importer.go
    │           │   ├── packages/
    │           │   │   ├── doc.go
    │           │   │   ├── external.go
    │           │   │   ├── golist.go
    │           │   │   ├── golist_overlay.go
    │           │   │   ├── loadmode_string.go
    │           │   │   ├── packages.go
    │           │   │   └── visit.go
    │           │   └── types/
    │           │       ├── objectpath/
    │           │       │   └── objectpath.go
    │           │       └── typeutil/
    │           │           ├── callee.go
    │           │           ├── imports.go
    │           │           ├── map.go
    │           │           ├── methodsetcache.go
    │           │           └── ui.go
    │           ├── imports/
    │           │   └── forward.go
    │           └── internal/
    │               ├── aliases/
    │               │   ├── aliases.go
    │               │   └── aliases_go122.go
    │               ├── event/
    │               │   ├── core/
    │               │   │   ├── event.go
    │               │   │   ├── export.go
    │               │   │   └── fast.go
    │               │   ├── doc.go
    │               │   ├── event.go
    │               │   ├── keys/
    │               │   │   ├── keys.go
    │               │   │   ├── standard.go
    │               │   │   └── util.go
    │               │   └── label/
    │               │       └── label.go
    │               ├── gcimporter/
    │               │   ├── bimport.go
    │               │   ├── exportdata.go
    │               │   ├── gcimporter.go
    │               │   ├── iexport.go
    │               │   ├── iimport.go
    │               │   ├── predeclared.go
    │               │   ├── support.go
    │               │   └── ureader_yes.go
    │               ├── gocommand/
    │               │   ├── invoke.go
    │               │   ├── invoke_notunix.go
    │               │   ├── invoke_unix.go
    │               │   ├── vendor.go
    │               │   └── version.go
    │               ├── gopathwalk/
    │               │   └── walk.go
    │               ├── imports/
    │               │   ├── fix.go
    │               │   ├── imports.go
    │               │   ├── mod.go
    │               │   ├── mod_cache.go
    │               │   ├── sortimports.go
    │               │   ├── source.go
    │               │   ├── source_env.go
    │               │   └── source_modindex.go
    │               ├── modindex/
    │               │   ├── directories.go
    │               │   ├── index.go
    │               │   ├── lookup.go
    │               │   ├── modindex.go
    │               │   └── symbols.go
    │               ├── packagesinternal/
    │               │   └── packages.go
    │               ├── pkgbits/
    │               │   ├── codes.go
    │               │   ├── decoder.go
    │               │   ├── doc.go
    │               │   ├── encoder.go
    │               │   ├── flags.go
    │               │   ├── reloc.go
    │               │   ├── support.go
    │               │   ├── sync.go
    │               │   ├── syncmarker_string.go
    │               │   └── version.go
    │               ├── stdlib/
    │               │   ├── deps.go
    │               │   ├── import.go
    │               │   ├── manifest.go
    │               │   └── stdlib.go
    │               ├── typeparams/
    │               │   ├── common.go
    │               │   ├── coretype.go
    │               │   ├── free.go
    │               │   ├── normalize.go
    │               │   ├── termlist.go
    │               │   └── typeterm.go
    │               ├── typesinternal/
    │               │   ├── classify_call.go
    │               │   ├── element.go
    │               │   ├── errorcode.go
    │               │   ├── errorcode_string.go
    │               │   ├── fx.go
    │               │   ├── isnamed.go
    │               │   ├── qualifier.go
    │               │   ├── recv.go
    │               │   ├── toonew.go
    │               │   ├── types.go
    │               │   ├── varkind.go
    │               │   ├── varkind_go124.go
    │               │   └── zerovalue.go
    │               └── versions/
    │                   ├── features.go
    │                   ├── gover.go
    │                   ├── types.go
    │                   └── versions.go
    ├── google.golang.org/
    │   ├── api/
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTORS
    │   │   ├── LICENSE
    │   │   ├── compute/
    │   │   │   ├── v0.alpha/
    │   │   │   │   ├── compute-api.json
    │   │   │   │   ├── compute-gen.go
    │   │   │   │   ├── compute2-gen.go
    │   │   │   │   └── compute3-gen.go
    │   │   │   ├── v0.beta/
    │   │   │   │   ├── compute-api.json
    │   │   │   │   ├── compute-gen.go
    │   │   │   │   ├── compute2-gen.go
    │   │   │   │   └── compute3-gen.go
    │   │   │   └── v1/
    │   │   │       ├── compute-api.json
    │   │   │       ├── compute-gen.go
    │   │   │       ├── compute2-gen.go
    │   │   │       └── compute3-gen.go
    │   │   ├── container/
    │   │   │   └── v1/
    │   │   │       ├── container-api.json
    │   │   │       └── container-gen.go
    │   │   ├── googleapi/
    │   │   │   ├── googleapi.go
    │   │   │   ├── transport/
    │   │   │   │   └── apikey.go
    │   │   │   └── types.go
    │   │   ├── internal/
    │   │   │   ├── cba.go
    │   │   │   ├── cert/
    │   │   │   │   ├── default_cert.go
    │   │   │   │   ├── enterprise_cert.go
    │   │   │   │   └── secureconnect_cert.go
    │   │   │   ├── conn_pool.go
    │   │   │   ├── creds.go
    │   │   │   ├── gensupport/
    │   │   │   │   ├── buffer.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── json.go
    │   │   │   │   ├── jsonfloat.go
    │   │   │   │   ├── media.go
    │   │   │   │   ├── params.go
    │   │   │   │   ├── resumable.go
    │   │   │   │   ├── retry.go
    │   │   │   │   ├── send.go
    │   │   │   │   └── version.go
    │   │   │   ├── impersonate/
    │   │   │   │   └── impersonate.go
    │   │   │   ├── s2a.go
    │   │   │   ├── settings.go
    │   │   │   ├── third_party/
    │   │   │   │   └── uritemplates/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── METADATA
    │   │   │   │       ├── uritemplates.go
    │   │   │   │       └── utils.go
    │   │   │   └── version.go
    │   │   ├── networkservices/
    │   │   │   ├── v1/
    │   │   │   │   ├── networkservices-api.json
    │   │   │   │   └── networkservices-gen.go
    │   │   │   └── v1beta1/
    │   │   │       ├── networkservices-api.json
    │   │   │       └── networkservices-gen.go
    │   │   ├── option/
    │   │   │   ├── internaloption/
    │   │   │   │   └── internaloption.go
    │   │   │   └── option.go
    │   │   ├── tpu/
    │   │   │   └── v1/
    │   │   │       ├── tpu-api.json
    │   │   │       └── tpu-gen.go
    │   │   └── transport/
    │   │       └── http/
    │   │           ├── dial.go
    │   │           └── internal/
    │   │               └── propagation/
    │   │                   └── http.go
    │   ├── genproto/
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   ├── LICENSE
    │   │       │   ├── annotations/
    │   │       │   │   ├── annotations.pb.go
    │   │       │   │   ├── client.pb.go
    │   │       │   │   ├── field_behavior.pb.go
    │   │       │   │   ├── field_info.pb.go
    │   │       │   │   ├── http.pb.go
    │   │       │   │   ├── resource.pb.go
    │   │       │   │   └── routing.pb.go
    │   │       │   ├── expr/
    │   │       │   │   └── v1alpha1/
    │   │       │   │       ├── checked.pb.go
    │   │       │   │       ├── eval.pb.go
    │   │       │   │       ├── explain.pb.go
    │   │       │   │       ├── syntax.pb.go
    │   │       │   │       └── value.pb.go
    │   │       │   ├── httpbody/
    │   │       │   │   └── httpbody.pb.go
    │   │       │   └── launch_stage.pb.go
    │   │       └── rpc/
    │   │           ├── LICENSE
    │   │           ├── code/
    │   │           │   └── code.pb.go
    │   │           ├── errdetails/
    │   │           │   └── error_details.pb.go
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── AUTHORS
    │   │   ├── CODE-OF-CONDUCT.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── GOVERNANCE.md
    │   │   ├── LICENSE
    │   │   ├── MAINTAINERS.md
    │   │   ├── Makefile
    │   │   ├── NOTICE.txt
    │   │   ├── README.md
    │   │   ├── SECURITY.md
    │   │   ├── attributes/
    │   │   │   └── attributes.go
    │   │   ├── backoff/
    │   │   │   └── backoff.go
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   ├── conn_state_evaluator.go
    │   │   │   ├── endpointsharding/
    │   │   │   │   └── endpointsharding.go
    │   │   │   ├── grpclb/
    │   │   │   │   └── state/
    │   │   │   │       └── state.go
    │   │   │   ├── pickfirst/
    │   │   │   │   ├── internal/
    │   │   │   │   │   └── internal.go
    │   │   │   │   └── pickfirst.go
    │   │   │   ├── roundrobin/
    │   │   │   │   └── roundrobin.go
    │   │   │   └── subconn.go
    │   │   ├── balancer_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── channelz/
    │   │   │   └── channelz.go
    │   │   ├── clientconn.go
    │   │   ├── codec.go
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   ├── insecure/
    │   │   │   │   └── insecure.go
    │   │   │   ├── local/
    │   │   │   │   └── local.go
    │   │   │   └── tls.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   ├── encoding_v2.go
    │   │   │   ├── gzip/
    │   │   │   │   └── gzip.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── experimental/
    │   │   │   └── stats/
    │   │   │       ├── metricregistry.go
    │   │   │       └── metrics.go
    │   │   ├── grpclog/
    │   │   │   ├── component.go
    │   │   │   ├── grpclog.go
    │   │   │   ├── internal/
    │   │   │   │   ├── grpclog.go
    │   │   │   │   ├── logger.go
    │   │   │   │   └── loggerv2.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── health/
    │   │   │   └── grpc_health_v1/
    │   │   │       ├── health.pb.go
    │   │   │       └── health_grpc.pb.go
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── balancer/
    │   │   │   │   ├── gracefulswitch/
    │   │   │   │   │   ├── config.go
    │   │   │   │   │   └── gracefulswitch.go
    │   │   │   │   └── weight/
    │   │   │   │       └── weight.go
    │   │   │   ├── balancerload/
    │   │   │   │   └── load.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   └── sink.go
    │   │   │   ├── buffer/
    │   │   │   │   └── unbounded.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── channel.go
    │   │   │   │   ├── channelmap.go
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── logging.go
    │   │   │   │   ├── server.go
    │   │   │   │   ├── socket.go
    │   │   │   │   ├── subchannel.go
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   ├── syscall_nonlinux.go
    │   │   │   │   └── trace.go
    │   │   │   ├── credentials/
    │   │   │   │   ├── credentials.go
    │   │   │   │   ├── spiffe.go
    │   │   │   │   ├── syscallconn.go
    │   │   │   │   └── util.go
    │   │   │   ├── envconfig/
    │   │   │   │   ├── envconfig.go
    │   │   │   │   ├── observability.go
    │   │   │   │   └── xds.go
    │   │   │   ├── experimental.go
    │   │   │   ├── grpclog/
    │   │   │   │   └── prefix_logger.go
    │   │   │   ├── grpcsync/
    │   │   │   │   ├── callback_serializer.go
    │   │   │   │   ├── event.go
    │   │   │   │   └── pubsub.go
    │   │   │   ├── grpcutil/
    │   │   │   │   ├── compressor.go
    │   │   │   │   ├── encode_duration.go
    │   │   │   │   ├── grpcutil.go
    │   │   │   │   ├── metadata.go
    │   │   │   │   ├── method.go
    │   │   │   │   └── regex.go
    │   │   │   ├── idle/
    │   │   │   │   └── idle.go
    │   │   │   ├── internal.go
    │   │   │   ├── mem/
    │   │   │   │   └── buffer_pool.go
    │   │   │   ├── metadata/
    │   │   │   │   └── metadata.go
    │   │   │   ├── pretty/
    │   │   │   │   └── pretty.go
    │   │   │   ├── proxyattributes/
    │   │   │   │   └── proxyattributes.go
    │   │   │   ├── resolver/
    │   │   │   │   ├── config_selector.go
    │   │   │   │   ├── delegatingresolver/
    │   │   │   │   │   └── delegatingresolver.go
    │   │   │   │   ├── dns/
    │   │   │   │   │   ├── dns_resolver.go
    │   │   │   │   │   └── internal/
    │   │   │   │   │       └── internal.go
    │   │   │   │   ├── passthrough/
    │   │   │   │   │   └── passthrough.go
    │   │   │   │   └── unix/
    │   │   │   │       └── unix.go
    │   │   │   ├── serviceconfig/
    │   │   │   │   ├── duration.go
    │   │   │   │   └── serviceconfig.go
    │   │   │   ├── stats/
    │   │   │   │   ├── labels.go
    │   │   │   │   ├── metrics_recorder_list.go
    │   │   │   │   └── stats.go
    │   │   │   ├── status/
    │   │   │   │   └── status.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   ├── tcp_keepalive_others.go
    │   │   │   ├── tcp_keepalive_unix.go
    │   │   │   ├── tcp_keepalive_windows.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── client_stream.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── logging.go
    │   │   │       ├── networktype/
    │   │   │       │   └── networktype.go
    │   │   │       ├── proxy.go
    │   │   │       ├── server_stream.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── mem/
    │   │   │   ├── buffer_pool.go
    │   │   │   ├── buffer_slice.go
    │   │   │   └── buffers.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── preloader.go
    │   │   ├── reflection/
    │   │   │   ├── README.md
    │   │   │   ├── adapt.go
    │   │   │   ├── grpc_reflection_v1/
    │   │   │   │   ├── reflection.pb.go
    │   │   │   │   └── reflection_grpc.pb.go
    │   │   │   ├── grpc_reflection_v1alpha/
    │   │   │   │   ├── reflection.pb.go
    │   │   │   │   └── reflection_grpc.pb.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── serverreflection.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── manual/
    │   │   │   │   └── manual.go
    │   │   │   ├── map.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── serviceconfig/
    │   │   │   └── serviceconfig.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   ├── metrics.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── stream_interfaces.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── trace_notrace.go
    │   │   ├── trace_withtrace.go
    │   │   └── version.go
    │   └── protobuf/
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── encoding/
    │       │   ├── protodelim/
    │       │   │   └── protodelim.go
    │       │   ├── protojson/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   ├── encode.go
    │       │   │   └── well_known_types.go
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── editiondefaults/
    │       │   │   ├── defaults.go
    │       │   │   └── editions_defaults.binpb
    │       │   ├── editionssupport/
    │       │   │   └── editions.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── json/
    │       │   │   │   ├── decode.go
    │       │   │   │   ├── decode_number.go
    │       │   │   │   ├── decode_string.go
    │       │   │   │   ├── decode_token.go
    │       │   │   │   └── encode.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   └── errors.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   ├── editions.go
    │       │   │   ├── placeholder.go
    │       │   │   └── presence.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── go_features_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── name.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── api_export_opaque.go
    │       │   │   ├── bitmap.go
    │       │   │   ├── bitmap_race.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_field_opaque.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_message_opaque.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── equal.go
    │       │   │   ├── extension.go
    │       │   │   ├── lazy.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_opaque.go
    │       │   │   ├── message_opaque_gen.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_field_gen.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── pointer_unsafe_opaque.go
    │       │   │   ├── presence.go
    │       │   │   └── validate.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── protolazy/
    │       │   │   ├── bufferreader.go
    │       │   │   ├── lazy.go
    │       │   │   └── pointer_unsafe.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   ├── wrapperopaque.go
    │       │   └── wrappers.go
    │       ├── protoadapt/
    │       │   └── convert.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   ├── editions.go
    │       │   │   └── proto.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_equal.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           ├── dynamicpb/
    │           │   ├── dynamic.go
    │           │   └── types.go
    │           ├── gofeaturespb/
    │           │   └── go_features.pb.go
    │           └── known/
    │               ├── anypb/
    │               │   └── any.pb.go
    │               ├── durationpb/
    │               │   └── duration.pb.go
    │               ├── emptypb/
    │               │   └── empty.pb.go
    │               ├── fieldmaskpb/
    │               │   └── field_mask.pb.go
    │               ├── structpb/
    │               │   └── struct.pb.go
    │               ├── timestamppb/
    │               │   └── timestamp.pb.go
    │               └── wrapperspb/
    │                   └── wrappers.pb.go
    ├── gopkg.in/
    │   ├── evanphx/
    │   │   └── json-patch.v4/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── errors.go
    │   │       ├── merge.go
    │   │       └── patch.go
    │   ├── gcfg.v1/
    │   │   ├── LICENSE
    │   │   ├── README
    │   │   ├── doc.go
    │   │   ├── errors.go
    │   │   ├── read.go
    │   │   ├── scanner/
    │   │   │   ├── errors.go
    │   │   │   └── scanner.go
    │   │   ├── set.go
    │   │   ├── token/
    │   │   │   ├── position.go
    │   │   │   ├── serialize.go
    │   │   │   └── token.go
    │   │   └── types/
    │   │       ├── bool.go
    │   │       ├── doc.go
    │   │       ├── enum.go
    │   │       ├── int.go
    │   │       └── scan.go
    │   ├── inf.v0/
    │   │   ├── LICENSE
    │   │   ├── dec.go
    │   │   └── rounder.go
    │   ├── natefinch/
    │   │   └── lumberjack.v2/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── chown.go
    │   │       ├── chown_linux.go
    │   │       └── lumberjack.go
    │   ├── warnings.v0/
    │   │   ├── LICENSE
    │   │   ├── README
    │   │   └── warnings.go
    │   ├── yaml.v2/
    │   │   ├── .travis.yml
    │   │   ├── LICENSE
    │   │   ├── LICENSE.libyaml
    │   │   ├── NOTICE
    │   │   ├── README.md
    │   │   ├── apic.go
    │   │   ├── decode.go
    │   │   ├── emitterc.go
    │   │   ├── encode.go
    │   │   ├── parserc.go
    │   │   ├── readerc.go
    │   │   ├── resolve.go
    │   │   ├── scannerc.go
    │   │   ├── sorter.go
    │   │   ├── writerc.go
    │   │   ├── yaml.go
    │   │   ├── yamlh.go
    │   │   └── yamlprivateh.go
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    ├── k8s.io/
    │   ├── api/
    │   │   ├── LICENSE
    │   │   ├── admission/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── admissionregistration/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── apidiscovery/
    │   │   │   ├── v2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v2beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── apiserverinternal/
    │   │   │   └── v1alpha1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       └── zz_generated.model_name.go
    │   │   ├── apps/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta2/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── authentication/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── authorization/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── autoscaling/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v2/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── batch/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── certificates/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── coordination/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── core/
    │   │   │   └── v1/
    │   │   │       ├── annotation_key_constants.go
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── lifecycle.go
    │   │   │       ├── objectreference.go
    │   │   │       ├── register.go
    │   │   │       ├── resource.go
    │   │   │       ├── taint.go
    │   │   │       ├── toleration.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── well_known_taints.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── discovery/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── well_known_labels.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── events/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── extensions/
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       ├── zz_generated.prerelease-lifecycle.go
    │   │   │       └── zz_generated.validations.go
    │   │   ├── flowcontrol/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta3/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── imagepolicy/
    │   │   │   └── v1alpha1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       └── zz_generated.model_name.go
    │   │   ├── networking/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── well_known_annotations.go
    │   │   │   │   ├── well_known_labels.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_annotations.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── node/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── policy/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── rbac/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── resource/
    │   │   │   ├── v1/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha3/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta2/
    │   │   │       ├── devicetaint.go
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── scheduling/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── storage/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   └── storagemigration/
    │   │       └── v1beta1/
    │   │           ├── doc.go
    │   │           ├── generated.pb.go
    │   │           ├── generated.proto
    │   │           ├── register.go
    │   │           ├── types.go
    │   │           ├── types_swagger_doc_generated.go
    │   │           ├── zz_generated.deepcopy.go
    │   │           ├── zz_generated.model_name.go
    │   │           └── zz_generated.prerelease-lifecycle.go
    │   ├── apiextensions-apiserver/
    │   │   ├── LICENSE
    │   │   └── pkg/
    │   │       ├── apis/
    │   │       │   └── apiextensions/
    │   │       │       ├── deepcopy.go
    │   │       │       ├── doc.go
    │   │       │       ├── helpers.go
    │   │       │       ├── register.go
    │   │       │       ├── types.go
    │   │       │       ├── types_jsonschema.go
    │   │       │       ├── v1/
    │   │       │       │   ├── .import-restrictions
    │   │       │       │   ├── conversion.go
    │   │       │       │   ├── deepcopy.go
    │   │       │       │   ├── defaults.go
    │   │       │       │   ├── doc.go
    │   │       │       │   ├── generated.pb.go
    │   │       │       │   ├── generated.proto
    │   │       │       │   ├── marshal.go
    │   │       │       │   ├── register.go
    │   │       │       │   ├── types.go
    │   │       │       │   ├── types_jsonschema.go
    │   │       │       │   ├── zz_generated.conversion.go
    │   │       │       │   ├── zz_generated.deepcopy.go
    │   │       │       │   ├── zz_generated.defaults.go
    │   │       │       │   ├── zz_generated.model_name.go
    │   │       │       │   └── zz_generated.prerelease-lifecycle.go
    │   │       │       ├── v1beta1/
    │   │       │       │   ├── .import-restrictions
    │   │       │       │   ├── conversion.go
    │   │       │       │   ├── deepcopy.go
    │   │       │       │   ├── defaults.go
    │   │       │       │   ├── doc.go
    │   │       │       │   ├── generated.pb.go
    │   │       │       │   ├── generated.proto
    │   │       │       │   ├── marshal.go
    │   │       │       │   ├── register.go
    │   │       │       │   ├── types.go
    │   │       │       │   ├── types_jsonschema.go
    │   │       │       │   ├── zz_generated.conversion.go
    │   │       │       │   ├── zz_generated.deepcopy.go
    │   │       │       │   ├── zz_generated.defaults.go
    │   │       │       │   ├── zz_generated.model_name.go
    │   │       │       │   └── zz_generated.prerelease-lifecycle.go
    │   │       │       └── zz_generated.deepcopy.go
    │   │       ├── client/
    │   │       │   ├── applyconfiguration/
    │   │       │   │   └── apiextensions/
    │   │       │   │       ├── v1/
    │   │       │   │       │   ├── customresourcecolumndefinition.go
    │   │       │   │       │   ├── customresourceconversion.go
    │   │       │   │       │   ├── customresourcedefinition.go
    │   │       │   │       │   ├── customresourcedefinitioncondition.go
    │   │       │   │       │   ├── customresourcedefinitionnames.go
    │   │       │   │       │   ├── customresourcedefinitionspec.go
    │   │       │   │       │   ├── customresourcedefinitionstatus.go
    │   │       │   │       │   ├── customresourcedefinitionversion.go
    │   │       │   │       │   ├── customresourcesubresources.go
    │   │       │   │       │   ├── customresourcesubresourcescale.go
    │   │       │   │       │   ├── customresourcevalidation.go
    │   │       │   │       │   ├── externaldocumentation.go
    │   │       │   │       │   ├── jsonschemaprops.go
    │   │       │   │       │   ├── selectablefield.go
    │   │       │   │       │   ├── servicereference.go
    │   │       │   │       │   ├── validationrule.go
    │   │       │   │       │   ├── webhookclientconfig.go
    │   │       │   │       │   └── webhookconversion.go
    │   │       │   │       └── v1beta1/
    │   │       │   │           ├── customresourcecolumndefinition.go
    │   │       │   │           ├── customresourceconversion.go
    │   │       │   │           ├── customresourcedefinition.go
    │   │       │   │           ├── customresourcedefinitioncondition.go
    │   │       │   │           ├── customresourcedefinitionnames.go
    │   │       │   │           ├── customresourcedefinitionspec.go
    │   │       │   │           ├── customresourcedefinitionstatus.go
    │   │       │   │           ├── customresourcedefinitionversion.go
    │   │       │   │           ├── customresourcesubresources.go
    │   │       │   │           ├── customresourcesubresourcescale.go
    │   │       │   │           ├── customresourcevalidation.go
    │   │       │   │           ├── externaldocumentation.go
    │   │       │   │           ├── jsonschemaprops.go
    │   │       │   │           ├── selectablefield.go
    │   │       │   │           ├── servicereference.go
    │   │       │   │           ├── validationrule.go
    │   │       │   │           └── webhookclientconfig.go
    │   │       │   └── clientset/
    │   │       │       └── clientset/
    │   │       │           ├── clientset.go
    │   │       │           ├── scheme/
    │   │       │           │   ├── doc.go
    │   │       │           │   └── register.go
    │   │       │           └── typed/
    │   │       │               └── apiextensions/
    │   │       │                   ├── v1/
    │   │       │                   │   ├── apiextensions_client.go
    │   │       │                   │   ├── customresourcedefinition.go
    │   │       │                   │   ├── doc.go
    │   │       │                   │   └── generated_expansion.go
    │   │       │                   └── v1beta1/
    │   │       │                       ├── apiextensions_client.go
    │   │       │                       ├── customresourcedefinition.go
    │   │       │                       ├── doc.go
    │   │       │                       └── generated_expansion.go
    │   │       └── features/
    │   │           ├── OWNERS
    │   │           └── kube_features.go
    │   ├── apimachinery/
    │   │   ├── LICENSE
    │   │   ├── pkg/
    │   │   │   ├── api/
    │   │   │   │   ├── equality/
    │   │   │   │   │   └── semantic.go
    │   │   │   │   ├── errors/
    │   │   │   │   │   ├── OWNERS
    │   │   │   │   │   ├── doc.go
    │   │   │   │   │   └── errors.go
    │   │   │   │   ├── meta/
    │   │   │   │   │   ├── OWNERS
    │   │   │   │   │   ├── conditions.go
    │   │   │   │   │   ├── doc.go
    │   │   │   │   │   ├── errors.go
    │   │   │   │   │   ├── firsthit_restmapper.go
    │   │   │   │   │   ├── help.go
    │   │   │   │   │   ├── interfaces.go
    │   │   │   │   │   ├── lazy.go
    │   │   │   │   │   ├── meta.go
    │   │   │   │   │   ├── multirestmapper.go
    │   │   │   │   │   ├── priority.go
  

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitallowed
================================================
ya29.t0k3n
"access-token": "ya29.CjWdA4GiBPTt"


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
  directory: "/"
  schedule:
    interval: "weekly"
    day: "sunday"
  labels:
  - "ok-to-test"
  - 'area/dependency'
  - 'release-note-none'
- package-ecosystem: gomod
  directories:
  - "/"
  - "/providers"
  - "/metis"
  - "/test/e2e"
  schedule:
    interval: weekly
  labels:
  - 'area/dependency'
  - 'release-note-none'
  - 'ok-to-test'
  groups:
    k8s-dependencies:
      patterns:
      - "k8s.io/*"
      - "sigs.k8s.io/*"
    workspace-deps:
      patterns:
        - "*"
      exclude-patterns:
        - "k8s.io/*"
        - "sigs.k8s.io/*"




================================================
FILE: .github/release.yml
================================================
changelog:
  exclude:
    labels:
      - ignore-for-release
    authors:
      - dependabot[bot]
  categories:
    - title: Features
      labels:
        - feature
        - enhancement
    - title: Bug Fixes
      labels:
        - bug
        - fix


================================================
FILE: .github/workflows/dependabot-sync.yml
================================================
name: Dependabot Go Work Sync

on:
  pull_request:
    paths:
      - '**/go.mod'
      - '**/go.sum'

permissions:
  contents: write

jobs:
  go-work-sync:
    runs-on: ubuntu-latest
    if: github.actor == 'dependabot[bot]'
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
        with:
          ref: ${{ github.event.pull_request.head.ref }}
          
      - name: Setup Go
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
        with:
          go-version-file: 'go.work'

      - name: Sync Go Workspace
        run: go work sync
        
      - name: Commit and Push changes
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
          git add go.work.sum
          # Only commit if there are actual changes
          git diff --quiet && git diff --staged --quiet || git commit -m "chore: update go.work.sum"
          git push

================================================
FILE: .github/workflows/release.yml
================================================
name: Create GitHub Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          fetch-depth: 0 # Important for generating release notes

      - name: Create Draft Release
        uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
        with:
          draft: true
          generate_release_notes: true


================================================
FILE: .github/workflows/tag-auth-provider-gcp.yml
================================================
name: Tag auth-provider-gcp

on:
  push:
    branches:
      - 'release-1.*'
    paths:
      - 'cmd/auth-provider-gcp/**'
      - 'go.mod'
      - 'go.sum'

jobs:
  tag-auth-provider-gcp:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
        with:
          fetch-depth: 0 # Fetch all history and tags

      - name: Configure Git User
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

      - name: Run auto-tag script
        env:
          DRY_RUN: "false"
          FORCE_BRANCH: ${{ github.ref_name }}
          COMPONENT_PREFIX: "auth-provider-gcp/"
        run: ./tools/auto-tag.sh


================================================
FILE: .github/workflows/tag-ccm.yml
================================================
name: Tag CCM

on:
  push:
    branches:
      - 'release-1.*'
    paths-ignore:
      - 'cmd/auth-provider-gcp/**'
      - 'cmd/gke-gcloud-auth-plugin/**'

jobs:
  tag-ccm:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
        with:
          fetch-depth: 0 # Fetch all history and tags

      - name: Configure Git User
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

      - name: Run auto-tag script
        env:
          DRY_RUN: "false"
          FORCE_BRANCH: ${{ github.ref_name }}
          COMPONENT_PREFIX: ""
        run: ./tools/auto-tag.sh


================================================
FILE: .github/workflows/tag-gke-gcloud-auth-plugin.yml
================================================
name: Tag gke-gcloud-auth-plugin

on:
  push:
    branches:
      - 'release-1.*'
    paths:
      - 'cmd/gke-gcloud-auth-plugin/**'
      - 'go.mod'
      - 'go.sum'

jobs:
  tag-gke-gcloud-auth-plugin:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
        with:
          fetch-depth: 0 # Fetch all history and tags

      - name: Configure Git User
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

      - name: Run auto-tag script
        env:
          DRY_RUN: "false"
          FORCE_BRANCH: ${{ github.ref_name }}
          COMPONENT_PREFIX: "gke-gcloud-auth-plugin/"
        run: ./tools/auto-tag.sh


================================================
FILE: .gitignore
================================================
MERGED_LICENSES
release/*
.go-cache/
.idea/
.vscode/
_artifacts/
_rundir/
_tmp/
/bin/
__pycache__/


================================================
FILE: .ko.yaml
================================================
defaultPlatforms:
- linux/arm64
- linux/amd64

builds:
- id: cloud-controller-manager
  dir: .
  main: cmd/cloud-controller-manager
  ldflags:
  - -X k8s.io/component-base/version/verflag.programName=cloud-controller-manager

  - -X k8s.io/component-base/version.buildDate={{.Env.BUILD_DATE}}
  - -X k8s.io/component-base/version.gitCommit={{.Env.KUBE_GIT_COMMIT}}
  - -X k8s.io/component-base/version.gitMajor={{.Env.KUBE_GIT_MAJOR}}
  - -X k8s.io/component-base/version.gitMinor={{.Env.KUBE_GIT_MINOR}}
  - -X k8s.io/component-base/version.gitTreeState={{.Env.KUBE_GIT_TREE_STATE}}
  - -X k8s.io/component-base/version.gitVersion={{.Env.KUBE_GIT_VERSION}}

  - -X k8s.io/client-go/pkg/version.buildDate={{.Env.BUILD_DATE}}
  - -X k8s.io/client-go/pkg/version.gitCommit={{.Env.KUBE_GIT_COMMIT}}
  - -X k8s.io/client-go/pkg/version.gitMajor={{.Env.KUBE_GIT_MAJOR}}
  - -X k8s.io/client-go/pkg/version.gitMinor={{.Env.KUBE_GIT_MINOR}}
  - -X k8s.io/client-go/pkg/version.gitTreeState={{.Env.KUBE_GIT_TREE_STATE}}
  - -X k8s.io/client-go/pkg/version.gitVersion={{.Env.KUBE_GIT_VERSION}}


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing Guidelines

The **kubernetes/cloud-provider-gcp** project accepts contribution via github [pull request](https://help.github.com/articles/about-pull-requests/). This document outlines the process to help get your contribution accepted. Please also read the [Kubernetes contributor guide](https://github.com/kubernetes/community/blob/master/contributors/guide/README.md).

### Sign the Contributor License Agreement
We'd love to accept your patches! Before we can accept them you need to sign Cloud Native Computing Foundation (CNCF) [CLA](https://github.com/kubernetes/community/blob/master/CLA.md).

### Reporting an issue
If you find a bug or a feature request related to cloud-provider-gcp you can create a new github issue in this repo.

### Contributing a Patch
1. Submit an issue describing your proposed change to the repo.
2. Fork the cloud-provider-gcp repo, develop and test your code changes.
3. Submit a pull request.
4. The bot will automatically assigns someone to review your PR. Check the full list of bot commands [here](https://prow.k8s.io/command-help).

### Contact
* [Slack](https://kubernetes.slack.com/messages/sig-gcp)
* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp)
* Please check the [sig-gcp community page](https://github.com/kubernetes/community/blob/master/sig-gcp/README.md) for meeting times and more details.


================================================
FILE: Dockerfile
================================================
FROM --platform=${BUILDPLATFORM} golang:1.26.0 AS builder

# golang envs
ARG TARGETARCH
ARG GOOS=linux
ENV CGO_ENABLED=0
ENV GOARCH=${TARGETARCH}

WORKDIR /go/src/app
COPY go.mod go.sum ./
COPY providers/go.mod providers/go.sum providers/
COPY vendor/ vendor/

COPY cmd/ cmd/
COPY pkg/ pkg/
COPY providers/ providers/

RUN CGO_ENABLED=0 go build -o /go/bin/cloud-controller-manager ./cmd/cloud-controller-manager

FROM registry.k8s.io/build-image/go-runner:v2.4.0-go1.25.8-bookworm.0
COPY --from=builder --chown=root:root /go/bin/cloud-controller-manager /cloud-controller-manager
CMD ["/cloud-controller-manager"]
ENTRYPOINT ["/cloud-controller-manager"]


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: Makefile
================================================
# Copyright 2025 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
LOCAL_BIN := $(PROJECT_DIR)/bin
GCP_PROJECT ?= $(shell gcloud config get-value project)

GIT_VERSION := $(shell git describe --tags --always --dirty | sed 's|.*/||')
GIT_COMMIT := $(shell git rev-parse HEAD)
BUILD_DATE := $(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
BUCKET_NAME ?= k8s-staging-cloud-provider-gcp

# Addon Versions
FLUENTD_GCP_YAML_VERSION ?= v3.2.0
FLUENTD_GCP_VERSION ?= 1.6.17
PROMETHEUS_TO_SD_PREFIX ?= custom.googleapis.com
PROMETHEUS_TO_SD_ENDPOINT ?= https://monitoring.googleapis.com/
FLUENTD_GCP_CONFIGMAP_NAME ?= fluentd-gcp-config

LDFLAGS := -ldflags="\
-X 'k8s.io/component-base/version.gitVersion=$(GIT_VERSION)' \
-X 'k8s.io/component-base/version.gitCommit=$(GIT_COMMIT)' \
-X 'k8s.io/component-base/version.buildDate=$(BUILD_DATE)' \
-s -w"

AUTH_PROVIDER_GCP := \
  auth-provider-gcp-linux-amd64 \
  auth-provider-gcp-linux-arm64 \
  auth-provider-gcp-windows-amd64

CLOUD_CONTROLLER_MANAGER := \
  cloud-controller-manager-linux-amd64 \
  cloud-controller-manager-linux-arm64

GKE_GCLOUD_AUTH_PLUGIN := \
  $(foreach platform, \
  linux-amd64 linux-arm64 linux-386 windows-amd64 windows-arm64 windows-386 darwin-amd64 darwin-arm64, \
  $(addsuffix $(platform), gke-gcloud-auth-plugin-))

##@ General

.PHONY: help
help: ## Display this help.
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[.a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)


## --------------------------------------
##@ Build
## --------------------------------------

.PHONY: all
all: clean build-all ## Clean and build all binaries.

.PHONY: clean
clean: ## Clean up release directory.
	@echo "Cleaning up..."
	@find release/ -type d -mindepth 1 -print0 | xargs -0 rm -rf

.PHONY: build-all
build-all: $(AUTH_PROVIDER_GCP) $(CLOUD_CONTROLLER_MANAGER) $(GKE_GCLOUD_AUTH_PLUGIN) ## Build all binaries.

.PHONY: cloud-controller-manager-linux-amd64 cloud-controller-manager-linux-arm64
cloud-controller-manager-linux-amd64 cloud-controller-manager-linux-arm64: cloud-controller-manager-linux-%:
	mkdir -p release/$(GIT_VERSION)/cloud-controller-manager/linux/$*
	CGO_ENABLED=0 GOOS=linux GOARCH=$* go build $(LDFLAGS) -o release/$(GIT_VERSION)/cloud-controller-manager/linux/$*/cloud-controller-manager k8s.io/cloud-provider-gcp/cmd/cloud-controller-manager

.PHONY: auth-provider-gcp-linux-amd64 auth-provider-gcp-linux-arm64
auth-provider-gcp-linux-amd64 auth-provider-gcp-linux-arm64: auth-provider-gcp-linux-%:
	mkdir -p release/$(GIT_VERSION)/auth-provider-gcp/linux/$*
	CGO_ENABLED=0 GOOS=linux GOARCH=$* go build $(LDFLAGS) -o release/$(GIT_VERSION)/auth-provider-gcp/linux/$*/auth-provider-gcp k8s.io/cloud-provider-gcp/cmd/auth-provider-gcp

.PHONY: auth-provider-gcp-windows-amd64
auth-provider-gcp-windows-amd64:
	mkdir -p release/$(GIT_VERSION)/auth-provider-gcp/windows/amd64
	CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -o release/$(GIT_VERSION)/auth-provider-gcp/windows/amd64/auth-provider-gcp.exe k8s.io/cloud-provider-gcp/cmd/auth-provider-gcp

.PHONY: gke-gcloud-auth-plugin-linux-amd64 gke-gcloud-auth-plugin-linux-arm64 gke-gcloud-auth-plugin-linux-386
gke-gcloud-auth-plugin-linux-amd64 gke-gcloud-auth-plugin-linux-arm64 gke-gcloud-auth-plugin-linux-386: gke-gcloud-auth-plugin-linux-%:
	mkdir -p release/$(GIT_VERSION)/gke-gcloud-auth-plugin/linux/$*
	CGO_ENABLED=0 GOOS=linux GOARCH=$* go build $(LDFLAGS) -o release/$(GIT_VERSION)/gke-gcloud-auth-plugin/linux/$*/gke-gcloud-auth-plugin k8s.io/cloud-provider-gcp/cmd/gke-gcloud-auth-plugin

.PHONY: gke-gcloud-auth-plugin-windows-amd64 gke-gcloud-auth-plugin-windows-arm64 gke-gcloud-auth-plugin-windows-386
gke-gcloud-auth-plugin-windows-amd64 gke-gcloud-auth-plugin-windows-arm64 gke-gcloud-auth-plugin-windows-386: gke-gcloud-auth-plugin-windows-%:
	mkdir -p release/$(GIT_VERSION)/gke-gcloud-auth-plugin/windows/$*
	CGO_ENABLED=0 GOOS=windows GOARCH=$* go build $(LDFLAGS) -o release/$(GIT_VERSION)/gke-gcloud-auth-plugin/windows/$*/gke-gcloud-auth-plugin.exe k8s.io/cloud-provider-gcp/cmd/gke-gcloud-auth-plugin

.PHONY: gke-gcloud-auth-plugin-darwin-arm64 gke-gcloud-auth-plugin-darwin-amd64
gke-gcloud-auth-plugin-darwin-arm64 gke-gcloud-auth-plugin-darwin-amd64: gke-gcloud-auth-plugin-darwin-%:
	mkdir -p release/$(GIT_VERSION)/gke-gcloud-auth-plugin/darwin/$*
	CGO_ENABLED=0 GOOS=darwin GOARCH=$* go build $(LDFLAGS) -o release/$(GIT_VERSION)/gke-gcloud-auth-plugin/darwin/$*/gke-gcloud-auth-plugin k8s.io/cloud-provider-gcp/cmd/gke-gcloud-auth-plugin


## --------------------------------------
##@ Docker
## --------------------------------------

.PHONY: publish
publish: ## Build and push cloud-controller-manager image to IMAGE_REPO.
	@./tools/push-images

.PHONY: bundle
bundle: ## Create a docker image tar bundle for cloud-controller-manager using Dockerfile.
	@echo "Building cloud-controller-manager image using Dockerfile..."
	docker build -t registry.k8s.io/cloud-controller-manager:$(GIT_VERSION) .
	@echo "Creating docker image tar for cloud-controller-manager..."
	mkdir -p release/$(GIT_VERSION)
	docker save registry.k8s.io/cloud-controller-manager:$(GIT_VERSION) > release/$(GIT_VERSION)/cloud-controller-manager.tar
	echo "$(GIT_VERSION)" > release/$(GIT_VERSION)/cloud-controller-manager.docker_tag
	@echo "Bundle created at release/$(GIT_VERSION)/cloud-controller-manager.tar"

.PHONY: clean-builder
clean-builder: ## Remove the docker buildx builder.
	@echo "Removing docker buildx builder..."
	docker buildx rm multiarch-multiplatform-builder || true
	@echo "Docker buildx builder removed."
  
.PHONY: copy-binaries-to-gcs
copy-binaries-to-gcs: build-all ## Build and copy binaries to GCS.
	gcloud storage cp --recursive release/$(GIT_VERSION) gs://$(BUCKET_NAME)/$(GIT_VERSION)

.PHONY: release-tars
release-tars: release-tars-linux-amd64 release-tars-windows-amd64 generate-all-checksums ## Build all release artifacts.

# Helper for release-tars, not intended for direct use.
.PHONY: .ensure-kube-version
.ensure-kube-version:
	@mkdir -p release/$(GIT_VERSION)
	@if [ ! -f release/$(GIT_VERSION)/kube-version.txt ]; then \
		if [ -n "$(KUBE_VERSION_OVERRIDE)" ]; then \
			echo "Using override version: $(KUBE_VERSION_OVERRIDE)"; \
			echo $(KUBE_VERSION_OVERRIDE) > release/$(GIT_VERSION)/kube-version.txt; \
		else \
			echo "Downloading stable version..."; \
			curl -sL https://dl.k8s.io/release/stable.txt > release/$(GIT_VERSION)/kube-version.txt; \
		fi; \
	fi

.PHONY: release-tars-linux-amd64
release-tars-linux-amd64: cloud-controller-manager-linux-amd64 auth-provider-gcp-linux-amd64 bundle .ensure-kube-version ## Build release artifacts for linux/amd64.
	# Download upstream tarballs
	@echo "Packing release tarballs for linux/amd64..."
	mkdir -p release/upstream-linux release/temp/server release/temp/node
	@KUBE_VERSION=$$(cat release/$(GIT_VERSION)/kube-version.txt); \
	echo "Building release for Kubernetes version: $$KUBE_VERSION"; \
	echo "Downloading upstream server tarball..."; \
	curl -L "https://dl.k8s.io/release/$$KUBE_VERSION/kubernetes-server-linux-amd64.tar.gz" -o release/upstream-linux/server.tar.gz; \
	echo "Downloading upstream node tarball..."; \
	curl -L "https://dl.k8s.io/release/$$KUBE_VERSION/kubernetes-node-linux-amd64.tar.gz" -o release/upstream-linux/node.tar.gz

	# Unpack and Inject Server
	tar xzf release/upstream-linux/server.tar.gz -C release/temp/server
	
	# Inject CCM logic
	cp release/$(GIT_VERSION)/cloud-controller-manager.tar release/temp/server/kubernetes/server/bin/
	cp release/$(GIT_VERSION)/cloud-controller-manager.docker_tag release/temp/server/kubernetes/server/bin/
	# Overwrite CCM binary if present
	cp release/$(GIT_VERSION)/cloud-controller-manager/linux/amd64/cloud-controller-manager release/temp/server/kubernetes/server/bin/
	
	# Inject Auth Provider
	cp release/$(GIT_VERSION)/auth-provider-gcp/linux/amd64/auth-provider-gcp release/temp/server/kubernetes/server/bin/

	@echo "Checking contents of release/temp/server/kubernetes/server/bin/ before repack:"
	ls -l release/temp/server/kubernetes/server/bin/

	# Repack Server
	tar -czf release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz -C release/temp/server kubernetes

	# Unpack and Inject Node
	tar xzf release/upstream-linux/node.tar.gz -C release/temp/node
	
	# Inject Auth Provider to Node (needed for kubelet credential provider)
	cp release/$(GIT_VERSION)/auth-provider-gcp/linux/amd64/auth-provider-gcp release/temp/node/kubernetes/node/bin/

	# Repack Node
	tar -czf release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz -C release/temp/node kubernetes
	
	rm -rf release/temp release/upstream-linux
	@echo "Linux amd64 release tarballs created in release/$(GIT_VERSION)/"

.PHONY: release-tars-windows-amd64
release-tars-windows-amd64: auth-provider-gcp-windows-amd64 ## Build release artifacts for windows/amd64.
	# Pack kubernetes-node-windows-amd64.tar.gz (Minimal, per existing logic)
	@echo "Packing kubernetes-node-windows-amd64.tar.gz..."
	mkdir -p release/$(GIT_VERSION)/node-windows
	cp -f release/$(GIT_VERSION)/auth-provider-gcp/windows/amd64/auth-provider-gcp.exe release/$(GIT_VERSION)/node-windows/auth-provider-gcp.exe
	tar -czf release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz \
		--transform 's|release/$(GIT_VERSION)/node-windows/auth-provider-gcp.exe|kubernetes/node/bin/auth-provider-gcp.exe|' \
		release/$(GIT_VERSION)/node-windows/auth-provider-gcp.exe
	rm -rf release/$(GIT_VERSION)/node-windows
	@echo "Windows amd64 release tarball created in release/$(GIT_VERSION)/"

.PHONY: generate-all-checksums
generate-all-checksums: release-tars-linux-amd64 release-tars-windows-amd64 ## Generate checksums for all release artifacts.
	# Final step: generate checksums for all artifacts.
	@echo "Generating Checksums for all release artifacts..."
	@if [ -f release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz ]; then \
		shasum -a 1 release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz.sha1; \
		shasum -a 256 release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-server-linux-amd64.tar.gz.sha256; \
	fi
	@if [ -f release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz ]; then \
		shasum -a 1 release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz.sha1; \
		shasum -a 256 release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-node-windows-amd64.tar.gz.sha256; \
	fi
	@if [ -f release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz ]; then \
		shasum -a 1 release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz.sha1; \
		shasum -a 256 release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz | awk '{print $$1}' > release/$(GIT_VERSION)/kubernetes-node-linux-amd64.tar.gz.sha256; \
	fi
	@echo "Release artifacts generated in release/$(GIT_VERSION)"

## --------------------------------------
##@ Test
## --------------------------------------

.PHONY: test
test: ## Run unit tests.
	go test -race ./...
	go test -race ./providers/...

## --------------------------------------
##@ Tools
## --------------------------------------

.PHONY: verify
verify: ## Run all verification scripts.
	./tools/verify-all.sh

.PHONY: update-vendor
update-vendor: ## Update vendor directory.
	./tools/update_vendor.sh

.PHONY: update-gofmt
update-gofmt: ## Update gofmt.
	./tools/update-gofmt.sh

.PHONY: update-golang
update-golang: ## Update golang version.
	./dev/tools/update-golang

.PHONY: pin-k8s-deps
pin-k8s-deps: ## Pin Kubernetes dependencies.
	./tools/pin_k8s_deps.sh

.PHONY: push-images
push-images: ## Push images to IMAGE_REPO.
	gcloud auth configure-docker
	IMAGE_REPO=$(IMAGE_REPO) IMAGE_TAG=$(IMAGE_TAG) ./tools/push-images

.PHONY: merge-licenses
merge-licenses: ## Merge licenses from vendor directory.
	./tools/merge_licenses.sh

.PHONY: run-e2e-test
run-e2e-test: ## Run e2e tests.
	./tools/run-e2e-test.sh

.PHONY: verify-up-to-date
verify-up-to-date: ## Verify that the repository is up to date.
	./tools/verify-up-to-date.sh

.PHONY: print-k8s-version
print-k8s-version: ## Print the pinned Kubernetes version.
	@if [ -f ginko-test-package-version.env ]; then cat ginko-test-package-version.env | tr -d '[:space:]'; else curl -sL https://dl.k8s.io/release/stable.txt; fi

## --------------------------------------
##@ Test Cluster E2E
## --------------------------------------

KOPS_CLUSTER_NAME ?= kops-e2e.k8s.local
GCP_LOCATION ?= us-central1
GCP_ZONES ?= $(GCP_LOCATION)-b
IMAGE_REPO ?= gcr.io/$(GCP_PROJECT)
KOPS_STATE_STORE ?= gs://kops-state-$(GCP_PROJECT)
IMAGE_TAG ?= $(shell git rev-parse --short HEAD)

# Defaults for kOps E2E tests
KOPS_FOCUS_REGEX ?= "\[Conformance\]"
KOPS_SKIP_REGEX ?= "\[Serial\]"

.PHONY: test-cluster-simple
test-cluster-simple: ## Run test cluster simple E2E test scenario.
	./e2e/scenarios/kops-simple

.PHONY: install-test-cluster-deps
install-test-cluster-deps: ## Install kubetest2 and other dependencies.
	@echo "Installing kubetest2 and plugins..."
	@mkdir -p $(LOCAL_BIN)
	@GOBIN=$(LOCAL_BIN) go install sigs.k8s.io/kubetest2@latest
	@GOBIN=$(LOCAL_BIN) go install sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest
	@TEMP_DIR=$$(mktemp -d); \
	trap 'rm -rf "$$TEMP_DIR"' EXIT; \
	git clone --depth 1 https://github.com/kubernetes/kops.git "$$TEMP_DIR"; \
	cd "$$TEMP_DIR/tests/e2e" && GOBIN=$(LOCAL_BIN) go install ./kubetest2-kops ./kubetest2-tester-kops
	@echo "Downloading latest green kOps binary..."
	@KOPS_BASE_URL=$$(curl -s https://storage.googleapis.com/k8s-staging-kops/kops/releases/markers/master/latest-ci-updown-green.txt); \
	mkdir -p $(LOCAL_BIN); \
	wget -qO $(LOCAL_BIN)/kops.tmp $${KOPS_BASE_URL}/linux/amd64/kops; \
	chmod +x $(LOCAL_BIN)/kops.tmp; \
	mv $(LOCAL_BIN)/kops.tmp $(LOCAL_BIN)/kops

.PHONY: test-cluster-tool
test-cluster-tool: $(LOCAL_BIN)/gkops ## Build the test cluster lifecycle tool.

$(LOCAL_BIN)/gkops: tools/kops/main.go tools/kops/pkg/kops/*.go
	@echo "Building kOps lifecycle tool..."
	mkdir -p $(LOCAL_BIN)
	go build -o $(LOCAL_BIN)/gkops tools/kops/main.go

.PHONY: test-cluster-setup
test-cluster-setup: install-test-cluster-deps test-cluster-tool push-images ## Setup environment for test cluster E2E.

.PHONY: test-cluster-up
test-cluster-up: test-cluster-setup ## Provision test cluster.
	PATH=$(LOCAL_BIN):$(PATH) KOPS_STATE_STORE=$(KOPS_STATE_STORE) $(LOCAL_BIN)/gkops up \
		--cluster-name=$(KOPS_CLUSTER_NAME) \
		--gcp-project=$(GCP_PROJECT) \
		--gcp-location=$(GCP_LOCATION) \
		--gcp-zones=$(GCP_ZONES) \
		--state-store=$(KOPS_STATE_STORE) \
		--image-repo=$(IMAGE_REPO) \
		--image-tag=$(IMAGE_TAG)

.PHONY: test-cluster-down
test-cluster-down: test-cluster-tool ## Tear down test cluster.
	PATH=$(LOCAL_BIN):$(PATH) KOPS_STATE_STORE=$(KOPS_STATE_STORE) $(LOCAL_BIN)/gkops down \
		--cluster-name=$(KOPS_CLUSTER_NAME) \
		--gcp-project=$(GCP_PROJECT) \
		--state-store=$(KOPS_STATE_STORE)

.PHONY: test-cluster-e2e-test
test-cluster-e2e-test: test-cluster-tool ## Run E2E tests on test cluster.
	@echo "Running E2E tests on cluster $(KOPS_CLUSTER_NAME)..."
	PATH=$(LOCAL_BIN):$(PATH) KOPS_STATE_STORE=$(KOPS_STATE_STORE) KOPS_CLUSTER_NAME= CLUSTER_NAME= $(LOCAL_BIN)/kubetest2 kops \
		-v=2 \
		--cloud-provider=gce \
		--cluster-name=$(KOPS_CLUSTER_NAME) \
		--kops-binary-path=$(LOCAL_BIN)/kops \
		--gcp-project=$(GCP_PROJECT) \
		--admin-access=$(ADMIN_ACCESS) \
		--test=kops \
		--kubernetes-version=$(K8S_VERSION) \
		-- \
		--parallel=30 \
		--test-package-version="${K8S_VERSION}" \
		--skip-regex="$(KOPS_SKIP_REGEX)" \
		--focus-regex="$(KOPS_FOCUS_REGEX)"



================================================
FILE: OWNERS
================================================
# See the OWNERS docs at https://go.k8s.io/owners

approvers:
- sig-cloud-provider-leads
- aojea
- bowei
- cheftako
- hdp617
- LogicalShark
- mmamczur
- SergeyKanzhelev
- vinayakankugoyal
- YifeiZhuang
emeritus_approvers:
- bentheelder
- dnardo
- jprzychodzen
- nicksardo
reviewers:
- sig-cloud-provider-leads
- justinsb
- seans3


================================================
FILE: OWNERS_ALIASES
================================================
# See the OWNERS docs: https://git.k8s.io/community/docs/devel/owners.md

aliases:
  sig-cloud-provider-leads:
    - bridgetkromhout
    - cheftako
    - elmiko
    - joelspeed


================================================
FILE: README.md
================================================
# cloud-provider-gcp

[![Go Report Card](https://goreportcard.com/badge/k8s.io/cloud-provider-gcp)](https://goreportcard.com/report/k8s.io/cloud-provider-gcp)
[![GitHub stars](https://img.shields.io/github/stars/kubernetes/cloud-provider-gcp.svg)](https://github.com/kubernetes/cloud-provider-gcp/stargazers)
[![Contributions](https://img.shields.io/badge/contributions-welcome-orange.svg)](https://github.com/kubernetes/cloud-provider-gcp/blob/master/CONTRIBUTING.md)
[![License](https://img.shields.io/github/license/kubernetes/cloud-provider-gcp)](https://github.com/kubernetes/cloud-provider-gcp/blob/master/LICENSE)
[![Release tag](https://img.shields.io/github/v/tag/kubernetes/cloud-provider-gcp)](https://github.com/kubernetes/cloud-provider-gcp/tags)

## Introduction

This repository implements the [cloud provider](https://github.com/kubernetes/cloud-provider) interface for [Google Cloud Platform (GCP)](https://cloud.google.com/).
It provides components for Kubernetes clusters running on GCP and is maintained primarily by the Kubernetes team at Google.

To get started with the GCP CCM, see the **[kOps Quickstart](docs/kops-quickstart.md)**.

For local development, use `make help` to see all available commands.

## Components

This repository contains the following components, located in `cmd/`:

*   **Cloud Controller Manager (`cloud-controller-manager`)**: The GCP [Cloud Controller Manager (CCM)](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) is responsible for running cloud-provider-dependent controllers (e.g. node health, routing, load balancing, etc.) for Kubernetes clusters running in GCP.
*   **GCP Auth Provider (`auth-provider-gcp`)**: A GCP [Container Runtime Interface (CRI)](https://kubernetes.io/docs/concepts/containers/cri/) plugin for fetching credentials for kubelet to pull images from [Google Container Registry (GCR)](https://cloud.google.com/container-registry) and [Artifact Registry (AR)](https://cloud.google.com/artifact-registry) when needed for pods.
*   **GKE Auth Plugin (`gke-gcloud-auth-plugin`)**: A client-go credential plugin that provides Google Cloud access tokens to `kubectl` and other Kubernetes clients for authenticating to [GKE clusters](https://cloud.google.com/kubernetes-engine), e.g. in `gcloud container clusters get-credentials`.

## Testing

This repository includes several testing commands you can run locally during development:

*   **`make test`**: Runs the standard Go unit tests.
*   **`make verify`**: Runs all verification scripts (format, lint, etc.).
*   **`make run-e2e-test`**: Runs the E2E test suite on a provisional [kOps](https://kops.sigs.k8s.io/) cluster.

## Publishing cloud-controller-manager image

Create an [Artifact Registry repository](https://docs.cloud.google.com/artifact-registry/docs/docker/store-docker-container-images) for the CCM image.

Then use `make publish` to build and push the `cloud-controller-manager` Docker image. For example, the following command will build and push the image to `us-central1-docker.pkg.dev/my-project/my-repo/cloud-controller-manager:v0`.
Change the location, project, and repo names to match yours.

```sh
LOCATION=us-central1 PROJECT=my-project REPO=my-repo
gcloud auth configure-docker ${LOCATION}-docker.pkg.dev
IMAGE_REPO=${LOCATION}-docker.pkg.dev/${PROJECT}/${REPO} IMAGE_TAG=v0 make publish
```

If `IMAGE_REPO` is not set, the script will exit with an error. If `IMAGE_TAG` is not set, it defaults to a unique value combining the current git commit SHA and the build date.

### Docker Commands

**Note:** To push images to Google Artifact Registry, you must first authenticate Docker by running the following command:
`gcloud auth configure-docker ${LOCATION}-docker.pkg.dev`

*   **`make publish`**: Builds the `cloud-controller-manager` Docker image (including multi-architecture support) and pushes it to the container registry specified by the `IMAGE_REPO` environment variable.

*   **`make bundle`**: Builds the `cloud-controller-manager` Docker image and saves it as a `.tar` file locally, along with creating a `.docker_tag` file. This is useful for offline distribution or loading.

*   **`make clean-builder`**: Removes the `docker buildx` builder used for multi-platform Docker builds. This command is useful to reset the builder environment if the builder encounters an error or becomes corrupted. It can also be used to free up resources when the builder is no longer needed.


## Cross-compiling

Platform-specific release tarballs can be built using the following commands.

To build all release artifacts for all platforms, run:
```sh
make release-tars
```

This command builds the release tarball for Windows (`kubernetes-node-windows-amd64.tar.gz`):

```sh
make release-tars-windows-amd64
```

This command builds the release tarballs for Linux (`kubernetes-server-linux-amd64.tar.gz` and `kubernetes-node-linux-amd64.tar.gz`):

```sh
make release-tars-linux-amd64
```


## Dependency management

Dependencies are managed using [Go modules](https://github.com/golang/go/wiki/Modules) (`go mod` subcommands).


### Working within GOPATH

If you work within `GOPATH`, `go mod` will error out unless you do one of:

- move repo outside of GOPATH (it should "just work")
- set env var `GO111MODULE=on`

### Add a new dependency

```sh
go get github.com/new/dependency && make update-vendor
```

### Update an existing dependency

```sh
go get -u github.com/existing/dependency && make update-vendor
```

### Update all dependencies

```sh
go get -u && make update-vendor
```

Note that this most likely won't work due to cross-dependency issues or repos
not implementing modules correctly.

================================================
FILE: SECURITY_CONTACTS
================================================
# Defined below are the security contacts for this repo.
#
# They are the contact point for the Product Security Committee to reach out
# to for triaging and handling of incoming issues.
#
# The below names agree to abide by the
# [Embargo Policy](https://git.k8s.io/security/private-distributors-list.md#embargo-policy)
# and will be removed and replaced if they violate that agreement.
#
# DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE
# INSTRUCTIONS AT https://kubernetes.io/security/

mikedanese
samueldavidson


================================================
FILE: cloudbuild.yaml
================================================
# See https://cloud.google.com/cloud-build/docs/build-config
# For more information about Image pushing refer to https://github.com/kubernetes/test-infra/blob/master/config/jobs/image-pushing/README.md
timeout: 3600s
options:
  substitution_option: ALLOW_LOOSE
  machineType: E2_HIGHCPU_32
steps:
  - name: "gcr.io/cloud-builders/docker"
    env:
      - IMAGE_REPO=${_IMAGE_REPO}
      - IMAGE_TAG=${_PULL_BASE_REF}
      - CI=1
      - BUILDX_NO_DEFAULT_ATTESTATIONS=1
    entrypoint: tools/push-images
  - name: gcr.io/k8s-staging-test-infra/gcb-docker-gcloud:latest
    entrypoint: make
    args:
      - copy-binaries-to-gcs
substitutions:
  _PULL_BASE_REF: "master"
  _GIT_TAG: "12345"
  _IMAGE_REPO: "gcr.io/k8s-staging-cloud-provider-gcp"
tags:
  - "cloud-provider-gcp"
  - ${_GIT_TAG}


================================================
FILE: cmd/auth-provider-gcp/OWNERS
================================================
# See the OWNERS docs at https://go.k8s.io/owners

approvers:
- ahmedtd
- dangerontheranger

reviewers:
- ahmedtd
- cici37
- dangerontheranger
- jprzychodzen


================================================
FILE: cmd/auth-provider-gcp/app/getcredentials.go
================================================
/*
Copyright 2020 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package app

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"

	"github.com/spf13/cobra"

	utilnet "k8s.io/apimachinery/pkg/util/net"
	"k8s.io/cloud-provider-gcp/cmd/auth-provider-gcp/provider"
	"k8s.io/cloud-provider-gcp/pkg/credentialconfig"
	klog "k8s.io/klog/v2"
	credentialproviderapi "k8s.io/kubelet/pkg/apis/credentialprovider/v1"
)

const (
	gcrAuthFlow             = "gcr"
	dockerConfigAuthFlow    = "dockercfg"
	dockerConfigURLAuthFlow = "dockercfg-url"
)

// CredentialOptions contains a representation of the options passed to the credential provider.
type CredentialOptions struct {
	AuthFlow string
}

// AuthFlowFlagError represents an error that occurred during flag validation.
type AuthFlowFlagError struct {
	flagValue string
}

// Error implements error.Error.
func (a *AuthFlowFlagError) Error() string {
	return fmt.Sprintf("invalid value %q for authFlow (must be one of %q, %q, or %q)", a.flagValue, gcrAuthFlow, dockerConfigAuthFlow, dockerConfigURLAuthFlow)
}

// Is implements the Is function that errors.Is checks for.
func (a *AuthFlowFlagError) Is(err error) bool {
	_, ok := err.(*AuthFlowFlagError)
	return ok
}

// AuthFlowTypeError represents an indication that an unrecognized auth flow was passed.
type AuthFlowTypeError struct {
	requestedFlow string
}

// Error implements error.Error.
func (p *AuthFlowTypeError) Error() string {
	return fmt.Sprintf("unrecognized auth flow %q", p.requestedFlow)
}

// Is implements the Is function that errors.Is checks for.
func (p *AuthFlowTypeError) Is(err error) bool {
	_, ok := err.(*AuthFlowTypeError)
	return ok
}

// NewGetCredentialsCommand returns a cobra command that retrieves auth credentials after validating flags.
func NewGetCredentialsCommand() (*cobra.Command, error) {
	var options CredentialOptions
	cmd := &cobra.Command{
		Use:   "get-credentials",
		Short: "Get authentication credentials",
		RunE: func(cmd *cobra.Command, args []string) error {
			return getCredentials(options.AuthFlow)
		},
	}
	defineFlags(cmd, &options)
	if err := validateFlags(&options); err != nil {
		return nil, err
	}
	return cmd, nil
}

func providerFromFlow(flow string) (credentialconfig.DockerConfigProvider, error) {
	transport := utilnet.SetTransportDefaults(&http.Transport{})
	switch flow {
	case gcrAuthFlow:
		return provider.MakeRegistryProvider(transport), nil
	case dockerConfigAuthFlow:
		return provider.MakeDockerConfigProvider(transport), nil
	case dockerConfigURLAuthFlow:
		return provider.MakeDockerConfigURLProvider(transport), nil
	default:
		return nil, &AuthFlowTypeError{requestedFlow: flow}
	}
}

func getCredentials(authFlow string) error {
	klog.V(2).Infof("get-credentials (authFlow %s)", authFlow)
	authProvider, err := providerFromFlow(authFlow)
	if err != nil {
		return err
	}
	unparsedRequest, err := io.ReadAll(os.Stdin)
	if err != nil {
		return err
	}
	var authRequest credentialproviderapi.CredentialProviderRequest
	err = json.Unmarshal(unparsedRequest, &authRequest)
	if err != nil {
		return fmt.Errorf("error unmarshaling auth credential request: %w", err)
	}
	authCredentials, err := provider.GetResponse(authRequest.Image, authProvider)
	if err != nil {
		return fmt.Errorf("error getting authentication response from provider: %w", err)
	}
	jsonResponse, err := json.Marshal(authCredentials)
	if err != nil {
		// The error from json.Marshal is intentionally not included so as to not leak credentials into the logs
		return fmt.Errorf("error marshaling credentials")
	}
	// Emit authentication response for kubelet to consume
	fmt.Println(string(jsonResponse))
	return nil
}

func defineFlags(credCmd *cobra.Command, options *CredentialOptions) {
	credCmd.Flags().StringVarP(&options.AuthFlow, "authFlow", "a", gcrAuthFlow, fmt.Sprintf("authentication flow (valid values are %q, %q, and %q)", gcrAuthFlow, dockerConfigAuthFlow, dockerConfigURLAuthFlow))
}

func validateFlags(options *CredentialOptions) error {
	if options.AuthFlow != gcrAuthFlow && options.AuthFlow != dockerConfigAuthFlow && options.AuthFlow != dockerConfigURLAuthFlow {
		return &AuthFlowFlagError{flagValue: options.AuthFlow}
	}
	return nil
}


================================================
FILE: cmd/auth-provider-gcp/app/getcredentials_test.go
================================================
/*
Copyright 2020 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package app

import (
	"errors"
	"reflect"
	"strings"
	"testing"
)

func TestValidateAuthFlow(t *testing.T) {
	type FlagResult struct {
		Name  string
		Flow  string
		Error error
	}
	tests := []FlagResult{
		{Name: "validate gcr auth flow", Flow: gcrAuthFlow},
		{Name: "validate docker-cfg auth flow option", Flow: dockerConfigAuthFlow},
		{Name: "validate docker-cfg-url auth flow option", Flow: dockerConfigURLAuthFlow},
		{Name: "bad auth flow option", Flow: "bad-flow", Error: &AuthFlowFlagError{flagValue: "bad-flow"}},
		{Name: "empty auth flow option", Flow: "", Error: &AuthFlowFlagError{flagValue: ""}},
		{Name: "case-sensitive auth flow", Flow: "Gcrauthflow", Error: &AuthFlowFlagError{flagValue: "Gcrauthflow"}},
	}
	for _, tc := range tests {
		t.Run(tc.Name, func(t *testing.T) {
			err := validateFlags(&CredentialOptions{AuthFlow: tc.Flow})
			if tc.Error != nil {
				if err == nil {
					t.Fatalf("with flow %q did not get expected error %q", tc.Flow, err)
				}
				if !errors.Is(err, tc.Error) {
					t.Fatalf("with flow %q got unexpected error type %q (expected %q)", tc.Flow, reflect.TypeOf(err), reflect.TypeOf(tc.Error))
				}
				return
			}
			if err != nil {
				t.Fatalf("with flow %q unexpected error %q", tc.Flow, err)
			}
		})
	}
}

func TestProviderFromFlow(t *testing.T) {
	type ProviderResult struct {
		Name  string
		Flow  string
		Type  string
		Error error
	}
	tests := []ProviderResult{
		{Name: "gcr auth provider selection", Flow: gcrAuthFlow, Type: "ContainerRegistryProvider"},
		{Name: "docker-cfg auth provider selection", Flow: dockerConfigAuthFlow, Type: "DockerConfigKeyProvider"},
		{Name: "docker-cfg-url auth provider selection", Flow: dockerConfigURLAuthFlow, Type: "DockerConfigURLKeyProvider"},
		{Name: "non-existent auth provider request", Flow: "bad-flow", Type: "", Error: &AuthFlowTypeError{requestedFlow: "bad-flow"}},
		{Name: "empty auth provider request", Flow: "", Type: "", Error: &AuthFlowTypeError{requestedFlow: ""}},
	}
	for _, tc := range tests {
		t.Run(tc.Name, func(t *testing.T) {
			provider, err := providerFromFlow(tc.Flow)
			if tc.Error != nil {
				if err == nil {
					t.Fatalf("with flow %q did not get expected error %q", tc.Flow, err)
				}
				if !errors.Is(err, tc.Error) {
					t.Fatalf("with flow %q got unexpected error type %q (expected %q)", tc.Flow, reflect.TypeOf(err), reflect.TypeOf(tc.Error))
				}
				return
			}
			if err != nil {
				t.Fatalf("with flow %q unexpected error %q", tc.Flow, err)
			}
			providerType := reflect.TypeOf(provider).String()
			if providerType != "*gcpcredential."+tc.Type {
				t.Errorf("with flow %q unexpected provider type %q", tc.Flow, providerType)
			}
		})
	}
}

func TestFlagError(t *testing.T) {
	type FlagErrorTest struct {
		Name            string
		Options         CredentialOptions
		ExpectedError   AuthFlowFlagError
		MessageContains string
	}
	tests := []FlagErrorTest{
		{Name: "errors.Is true for different flagValues", Options: CredentialOptions{AuthFlow: "bad-flow"}, ExpectedError: AuthFlowFlagError{flagValue: "other-bad-flow"}},
		{Name: "error message contains rejected value", Options: CredentialOptions{AuthFlow: "bad-flow"}, ExpectedError: AuthFlowFlagError{flagValue: "bad-flow"}, MessageContains: "bad-flow"},
	}
	for _, tc := range tests {
		t.Run(tc.Name, func(t *testing.T) {
			err := validateFlags(&tc.Options)
			if !errors.Is(err, &tc.ExpectedError) {
				t.Fatalf("did not get expected error %q (got %q instead", &tc.ExpectedError, err)
			}
			if !strings.Contains(err.Error(), tc.MessageContains) {
				t.Fatalf("%q missing from error message %q", tc.MessageContains, err.Error())
			}
		})
	}
}

func TestFlowError(t *testing.T) {
	type FlowErrorTest struct {
		Name            string
		Flow            string
		ExpectedError   AuthFlowTypeError
		MessageContains string
	}
	tests := []FlowErrorTest{
		{Name: "errors.Is true for different requestedFlows", Flow: "bad-provider", ExpectedError: AuthFlowTypeError{requestedFlow: "other-bad-provider"}},
		{Name: "error message contains rejected value", Flow: "bad-provider", ExpectedError: AuthFlowTypeError{requestedFlow: "bad-provider"}, MessageContains: "bad-provider"},
	}
	for _, tc := range tests {
		t.Run(tc.Name, func(t *testing.T) {
			_, err := providerFromFlow(tc.Flow)
			if !errors.Is(err, &tc.ExpectedError) {
				t.Fatalf("did not get expected error %q (got %q instead", &tc.ExpectedError, err)
			}
			if !strings.Contains(err.Error(), tc.MessageContains) {
				t.Fatalf("%q missing from error message %q", tc.MessageContains, err.Error())
			}
		})
	}
}


================================================
FILE: cmd/auth-provider-gcp/main.go
================================================
/*
Copyright 2020 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"flag"
	"os"

	"github.com/spf13/cobra"
	"github.com/spf13/pflag"
	"k8s.io/cloud-provider-gcp/cmd/auth-provider-gcp/app"
	klog "k8s.io/klog/v2"
)

func main() {
	defer klog.Flush()
	rootCmd := &cobra.Command{
		Use:   "auth-provider-gcp",
		Short: "GCP CRI authentication plugin",
	}
	credCmd, err := app.NewGetCredentialsCommand()
	if err != nil {
		klog.Errorf("%s", err.Error())
		os.Exit(1)
	}
	rootCmd.AddCommand(credCmd)
	klog.InitFlags(nil)
	// Opt into the new klog behavior so that -stderrthreshold is honored even
	// when -logtostderr=true (the default).
	// Ref: kubernetes/klog#212, kubernetes/klog#432
	flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck
	flag.Set("stderrthreshold", "INFO")                   //nolint:errcheck
	flag.Parse()
	pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
	if err := rootCmd.Execute(); err != nil {
		klog.Errorf("%s", err.Error())
		os.Exit(1)
	}
}


================================================
FILE: cmd/auth-provider-gcp/provider/provider.go
================================================
/*
Copyright 2020 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package provider

import (
	"fmt"
	"net/http"
	"os"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/cloud-provider-gcp/pkg/credentialconfig"
	"k8s.io/cloud-provider-gcp/pkg/gcpcredential"
	credentialproviderapi "k8s.io/kubelet/pkg/apis/credentialprovider/v1"
)

const (
	cacheImage                = "image"
	cacheRegistry             = "registry"
	cacheGlobal               = "global"
	cacheDurationKey          = "KUBE_SIDECAR_CACHE_DURATION"
	cacheTypeKey              = "KUBE_SIDECAR_CACHE_TYPE"
	metadataHTTPClientTimeout = time.Second * 10
	apiKind                   = "CredentialProviderResponse"
	apiVersion                = "credentialprovider.kubelet.k8s.io/v1"
)

// MakeRegistryProvider returns a ContainerRegistryProvider with the given transport.
func MakeRegistryProvider(transport *http.Transport) *gcpcredential.ContainerRegistryProvider {
	httpClient := makeHTTPClient(transport)
	provider := &gcpcredential.ContainerRegistryProvider{
		MetadataProvider:     gcpcredential.MetadataProvider{Client: httpClient},
		UseRegistryFromImage: true,
	}
	return provider
}

// MakeDockerConfigProvider returns a DockerConfigKeyProvider with the given transport.
func MakeDockerConfigProvider(transport *http.Transport) *gcpcredential.DockerConfigKeyProvider {
	httpClient := makeHTTPClient(transport)
	provider := &gcpcredential.DockerConfigKeyProvider{
		MetadataProvider: gcpcredential.MetadataProvider{Client: httpClient},
	}
	return provider
}

// MakeDockerConfigURLProvider returns a DockerConfigURLKeyProvider with the given transport.
func MakeDockerConfigURLProvider(transport *http.Transport) *gcpcredential.DockerConfigURLKeyProvider {
	httpClient := makeHTTPClient(transport)
	provider := &gcpcredential.DockerConfigURLKeyProvider{
		MetadataProvider: gcpcredential.MetadataProvider{Client: httpClient},
	}
	return provider
}

func makeHTTPClient(transport *http.Transport) *http.Client {
	return &http.Client{
		Transport: transport,
		Timeout:   metadataHTTPClientTimeout,
	}
}

func getCacheDuration() (time.Duration, error) {
	unparsedCacheDuration := os.Getenv(cacheDurationKey)
	if unparsedCacheDuration == "" {
		// a value of 0 for the cache duration will result in the credentials not being cached
		// at all, which is equivalent to what the in-tree provider does; since the
		// KUBE_SIDECAR_CACHE_DURATION environment variable is not set by default,
		// backwards compatibility is maintained by default
		return 0, nil
	}
	cacheDuration, err := time.ParseDuration(unparsedCacheDuration)
	if err != nil {
		return 0, err
	}
	return cacheDuration, nil
}

func getCacheKeyType() (credentialproviderapi.PluginCacheKeyType, error) {
	keyType := os.Getenv(cacheTypeKey)
	if keyType == "" {
		return credentialproviderapi.ImagePluginCacheKeyType, nil
	}
	switch keyType {
	case cacheImage:
		return credentialproviderapi.ImagePluginCacheKeyType, nil
	case cacheRegistry:
		return credentialproviderapi.RegistryPluginCacheKeyType, nil
	case cacheGlobal:
		return credentialproviderapi.GlobalPluginCacheKeyType, nil
	default:
		var nilKeyType credentialproviderapi.PluginCacheKeyType = ""
		return nilKeyType, fmt.Errorf("Unknown cache key %q", keyType)
	}
}

// GetResponse queries the given provider for credentials.
func GetResponse(image string, provider credentialconfig.DockerConfigProvider) (*credentialproviderapi.CredentialProviderResponse, error) {
	cfg := provider.Provide(image)
	response := &credentialproviderapi.CredentialProviderResponse{Auth: make(map[string]credentialproviderapi.AuthConfig)}
	for url, dockerConfig := range cfg {
		response.Auth[url] = credentialproviderapi.AuthConfig{Username: dockerConfig.Username, Password: dockerConfig.Password}
	}
	cacheDuration, err := getCacheDuration()
	if err != nil {
		return nil, err
	}
	response.CacheDuration = &metav1.Duration{Duration: cacheDuration}
	response.TypeMeta.Kind = apiKind
	response.TypeMeta.APIVersion = apiVersion
	cacheKey, err := getCacheKeyType()
	if err != nil {
		return nil, err
	}
	response.CacheKeyType = cacheKey
	return response, nil
}


================================================
FILE: cmd/auth-provider-gcp/provider/provider_test.go
================================================
/*
Copyright 2020 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package provider

import (
	"encoding/base64"
	"encoding/json"
	"fmt"
	"net/http"
	"net/http/httptest"
	"net/url"
	"strings"
	"testing"

	utilnet "k8s.io/apimachinery/pkg/util/net"
	"k8s.io/cloud-provider-gcp/pkg/gcpcredential"
	credentialproviderapi "k8s.io/kubelet/pkg/apis/credentialprovider/v1"
)

const (
	dummyToken       = "ya26.lots-of-indiscernible-garbage"
	email            = "1234@project.gserviceaccount.com"
	expectedUsername = "_token"
	expectedCacheKey = credentialproviderapi.ImagePluginCacheKeyType
	dummyImage       = "registry.k8s.io/pause"
)

func hasURL(url string, response *credentialproviderapi.CredentialProviderResponse) bool {
	_, ok := response.Auth[url]
	return ok
}

func TestContainerRegistry(t *testing.T) {
	registryURL := strings.Split(dummyImage, "/")[0]
	// Taken from from pkg/credentialprovider/gcp/metadata_test.go in kubernetes/kubernetes
	gcpRegistryURL := "container.cloud.google.com"
	token := &gcpcredential.TokenBlob{AccessToken: dummyToken} // Fake value for testing.
	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		defaultPrefix := "/computeMetadata/v1/instance/service-accounts/default/"
		// Only serve the URL key and the value endpoint
		switch r.URL.Path {
		case defaultPrefix + "scopes":
			w.WriteHeader(http.StatusOK)
			w.Header().Set("Content-Type", "application/json")
			fmt.Fprintf(w, `["%s.read_write"]`, gcpcredential.StorageScopePrefix)
		case defaultPrefix + "email":
			w.WriteHeader(http.StatusOK)
			fmt.Fprint(w, email)
		case defaultPrefix + "token":
			w.WriteHeader(http.StatusOK)
			w.Header().Set("Content-Type", "application/json")
			bytes, err := json.Marshal(token)
			if err != nil {
				t.Fatalf("unexpected error: %v", err)
			}
			fmt.Fprintln(w, string(bytes))
		case "/computeMetadata/v1/instance/service-accounts/":
			w.WriteHeader(http.StatusOK)
			fmt.Fprintln(w, "default/\ncustom")
		default:
			http.Error(w, "", http.StatusNotFound)
		}
	}))
	defer server.Close()
	// Make a transport that reroutes all traffic to the example server
	transport := utilnet.SetTransportDefaults(&http.Transport{
		Proxy: func(req *http.Request) (*url.URL, error) {
			return url.Parse(server.URL + req.URL.Path)
		},
	})
	provider := MakeRegistryProvider(transport)
	response, err := GetResponse(dummyImage, provider)
	if err != nil {
		t.Fatalf("Unexpected error while getting response: %s", err.Error())
	}

	if !hasURL(registryURL, response) || !hasURL(gcpRegistryURL, response) {
		if !hasURL(registryURL, response) {
			t.Errorf("URL %s expected in response, not found (response: %s)", registryURL, response.Auth)
		}
		if !hasURL(gcpRegistryURL, response) {
			t.Errorf("URL %s expected in response, not found (response: %s)", gcpRegistryURL, response.Auth)
		}
	}
	if expectedCacheKey != response.CacheKeyType {
		t.Errorf("Expected %s as cache key (found %s instead)", expectedCacheKey, response.CacheKeyType)
	}
	for _, auth := range response.Auth {
		if expectedUsername != auth.Username {
			t.Errorf("Expected username %s not found (username: %s)", expectedUsername, auth.Username)
		}
		if dummyToken != auth.Password {
			t.Errorf("Expected password %s not found (password: %s)", dummyToken, auth.Password)
		}
	}
}

func TestConfigProvider(t *testing.T) {
	// Taken from from pkg/credentialprovider/gcp/metadata_test.go in kubernetes/kubernetes
	registryURL := "hello.kubernetes.io"
	email := "foo@bar.baz"
	username := "foo"
	password := "bar" // Fake value for testing.
	auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", username, password)))
	sampleDockerConfig := fmt.Sprintf(`{
   "https://%s": {
     "email": %q,
     "auth": %q
   }
}`, registryURL, email, auth)

	const probeEndpoint = "/computeMetadata/v1/"
	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// Only serve the one metadata key.
		if probeEndpoint == r.URL.Path {
			w.WriteHeader(http.StatusOK)
		} else if strings.HasSuffix(gcpcredential.DockerConfigKey, r.URL.Path) {
			w.WriteHeader(http.StatusOK)
			w.Header().Set("Content-Type", "application/json")
			fmt.Fprintln(w, sampleDockerConfig)
		} else {
			http.Error(w, "", http.StatusNotFound)
		}
	}))
	defer server.Close()

	// Make a transport that reroutes all traffic to the example server
	transport := utilnet.SetTransportDefaults(&http.Transport{
		Proxy: func(req *http.Request) (*url.URL, error) {
			return url.Parse(server.URL + req.URL.Path)
		},
	})
	provider := MakeDockerConfigProvider(transport)
	response, err := GetResponse(dummyImage, provider)
	if err != nil {
		t.Fatalf("Unexpected error while getting response: %s", err.Error())
	}
	if expectedCacheKey != response.CacheKeyType {
		t.Errorf("Expected %s as cache key (found %s instead)", expectedCacheKey, response.CacheKeyType)
	}
	for _, auth := range response.Auth {
		if username != auth.Username {
			t.Errorf("Expected username %s not found (username: %s)", username, auth.Username)
		}
		if password != auth.Password {
			t.Errorf("Expected password %s not found (password: %s)", password, auth.Password)
		}
	}
}

func TestConfigURLProvider(t *testing.T) {
	// Taken from from pkg/credentialprovider/gcp/metadata_test.go in kubernetes/kubernetes
	registryURL := "hello.kubernetes.io"
	email := "foo@bar.baz"
	username := "foo"
	password := "bar" // Fake value for testing.
	auth := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", username, password)))
	sampleDockerConfig := fmt.Sprintf(`{
   "https://%s": {
     "email": %q,
     "auth": %q
   }
}`, registryURL, email, auth)
	const probeEndpoint = "/computeMetadata/v1/"
	const valueEndpoint = "/my/value"
	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// Only serve the URL key and the value endpoint
		if probeEndpoint == r.URL.Path {
			w.WriteHeader(http.StatusOK)
		} else if valueEndpoint == r.URL.Path {
			w.WriteHeader(http.StatusOK)
			w.Header().Set("Content-Type", "application/json")
			fmt.Fprintln(w, sampleDockerConfig)
		} else if strings.HasSuffix(gcpcredential.DockerConfigURLKey, r.URL.Path) {
			w.WriteHeader(http.StatusOK)
			w.Header().Set("Content-Type", "application/text")
			fmt.Fprint(w, "http://foo.bar.com"+valueEndpoint)
		} else {
			http.Error(w, "", http.StatusNotFound)
		}
	}))
	defer server.Close()
	// Make a transport that reroutes all traffic to the example server
	transport := utilnet.SetTransportDefaults(&http.Transport{
		Proxy: func(req *http.Request) (*url.URL, error) {
			return url.Parse(server.URL + req.URL.Path)
		},
	})

	provider := MakeDockerConfigURLProvider(transport)
	response, err := GetResponse(dummyImage, provider)
	if err != nil {
		t.Fatalf("Unexpected error while getting response: %s", err.Error())
	}
	if expectedCacheKey != response.CacheKeyType {
		t.Errorf("Expected %s as cache key (found %s instead)", expectedCacheKey, response.CacheKeyType)
	}
	for _, auth := range response.Auth {
		if username != auth.Username {
			t.Errorf("Expected username %s not found (username: %s)", username, auth.Username)
		}
		if password != auth.Password {
			t.Errorf("Expected password %s not found (password: %s)", password, auth.Password)
		}
	}
}


================================================
FILE: cmd/cloud-controller-manager/OWNERS
================================================
# See the OWNERS docs at https://go.k8s.io/owners

approvers:
- aojea
- bowei
- justinsb

reviewers:
- aojea
- bowei
- cici37
- jprzychodzen
- justinsb


================================================
FILE: cmd/cloud-controller-manager/gkenetworkparamsetcontroller.go
================================================
package main

import (
	"context"
	"fmt"
	"net"
	"time"

	networkclientset "github.com/GoogleCloudPlatform/gke-networking-api/client/network/clientset/versioned"
	networkinformers "github.com/GoogleCloudPlatform/gke-networking-api/client/network/informers/externalversions"
	cloudprovider "k8s.io/cloud-provider"
	gkenetworkparamsetcontroller "k8s.io/cloud-provider-gcp/pkg/controller/gkenetworkparamset"
	nodeipam "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam"
	"k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/ipam"
	"k8s.io/cloud-provider-gcp/providers/gce"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	genericcontrollermanager "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
)

const jsonContentType = "application/json"

func startGkeNetworkParamSetControllerWrapper(initCtx app.ControllerInitContext, config *cloudcontrollerconfig.CompletedConfig, c cloudprovider.Interface) app.InitFunc {
	return func(ctx context.Context, controllerCtx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) {
		return startGkeNetworkParamsController(config, controllerCtx, c)
	}
}

func startGkeNetworkParamsController(ccmConfig *cloudcontrollerconfig.CompletedConfig, controllerCtx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (controller.Interface, bool, error) {

	gceCloud, ok := cloud.(*gce.Cloud)
	if !ok {
		err := fmt.Errorf("GkeNetworkParamsController does not support %v provider", cloud.ProviderName())
		return nil, false, err
	}

	kubeConfig := ccmConfig.Complete().Kubeconfig
	kubeConfig.ContentType = jsonContentType //required to serialize GKENetworkParamSet to json

	networkClient, err := networkclientset.NewForConfig(kubeConfig)
	if err != nil {
		return nil, false, err
	}

	// the CloudAllocator needs cluster cidrs for default GNP
	clusterCIDRs := []*net.IPNet{}
	if ipam.CIDRAllocatorType(ccmConfig.ComponentConfig.KubeCloudShared.CIDRAllocatorType) == ipam.CloudAllocatorType {
		clusterCIDRs, err = validClusterCIDR(ccmConfig.ComponentConfig.KubeCloudShared.ClusterCIDR)
		if err != nil {
			return nil, false, err
		}
	}

	nwInfFactory := networkinformers.NewSharedInformerFactory(networkClient, 30*time.Second)
	nwInformer := nwInfFactory.Networking().V1().Networks()
	gnpInformer := nwInfFactory.Networking().V1().GKENetworkParamSets()

	gkeNetworkParamsetController := gkenetworkparamsetcontroller.NewGKENetworkParamSetController(
		ccmConfig.SharedInformers.Core().V1().Nodes(),
		networkClient,
		gnpInformer,
		nwInformer,
		gceCloud,
		nwInfFactory,
		clusterCIDRs,
	)

	go gkeNetworkParamsetController.Run(1, controllerCtx.Stop, controllerCtx.ControllerManagerMetrics)
	return nil, true, nil
}

// validClusterCIDR process CIDR form config and validates the cluster CIDR
// with stack type and returns a list of typed cidrs and error
func validClusterCIDR(clusterCIDRFromFlag string) ([]*net.IPNet, error) {
	// failure: bad cidrs in config
	clusterCIDRs, dualStack, err := nodeipam.ProcessCIDRs(clusterCIDRFromFlag)
	if err != nil {
		return nil, err
	}

	// failure: more than one cidr but they are not configured as dual stack
	if len(clusterCIDRs) > 1 && !dualStack {
		return nil, fmt.Errorf("len of ClusterCIDRs==%v and they are not configured as dual stack (at least one from each IPFamily", len(clusterCIDRs))
	}

	// failure: more than cidrs is not allowed even with dual stack
	if len(clusterCIDRs) > 2 {
		return nil, fmt.Errorf("len of clusters is:%v > more than max allowed of 2", len(clusterCIDRs))
	}
	return clusterCIDRs, nil
}


================================================
FILE: cmd/cloud-controller-manager/gkeservicecontroller.go
================================================
package main

import (
	"context"

	utilfeature "k8s.io/apiserver/pkg/util/feature"
	cloudprovider "k8s.io/cloud-provider"
	gkeservicecontroller "k8s.io/cloud-provider-gcp/pkg/controller/service"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	controllermanagerapp "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
	"k8s.io/klog/v2"
)

// startGkeServiceControllerWrapper is used to take cloud config as input and start the GKE service controller
func startGkeServiceControllerWrapper(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
	return func(ctx context.Context, controllerContext controllermanagerapp.ControllerContext) (controller.Interface, bool, error) {
		return startGkeServiceController(ctx, initContext, controllerContext, completedConfig, cloud)
	}
}

func startGkeServiceController(ctx context.Context, initContext app.ControllerInitContext, controlexContext controllermanagerapp.ControllerContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) (controller.Interface, bool, error) {
	// Start the service controller
	serviceController, err := gkeservicecontroller.New(
		cloud,
		completedConfig.ClientBuilder.ClientOrDie(initContext.ClientName),
		completedConfig.SharedInformers.Core().V1().Services(),
		completedConfig.SharedInformers.Core().V1().Nodes(),
		completedConfig.ComponentConfig.KubeCloudShared.ClusterName,
		utilfeature.DefaultFeatureGate,
	)
	if err != nil {
		// This error shouldn't fail. It lives like this as a legacy.
		klog.Errorf("Failed to start service controller: %v", err)
		return nil, false, nil
	}

	go serviceController.Run(ctx, int(completedConfig.ComponentConfig.ServiceController.ConcurrentServiceSyncs), controlexContext.ControllerManagerMetrics)

	return nil, true, nil
}


================================================
FILE: cmd/cloud-controller-manager/gkeservicecontroller_test.go
================================================
package main

import (
	"testing"

	v1 "k8s.io/api/core/v1"
	gkeservicecontroller "k8s.io/cloud-provider-gcp/pkg/controller/service"
)

// TestWantsLoadBalancer verifies that the forked and modified WantsLoadBalancer
// function in k8s.io/cloud-provider-gcp/pkg/controller/service has the correct
// logic. This test acts as a safeguard to prevent future updates from
// overwriting the custom logic. It ensures that the controller correctly
// processes services with GKE-specific legacy LoadBalancerClasses and,
// just as importantly, ignores services that have no LoadBalancerClass set
// or have a class that is not managed by this controller.
func TestWantsLoadBalancer(t *testing.T) {
	gkeLegacyExternalClass := "networking.gke.io/l4-regional-external-legacy"
	gkeLegacyInternalClass := "networking.gke.io/l4-regional-internal-legacy"
	otherClass := "some-other-class"

	testCases := []struct {
		name    string
		service *v1.Service
		want    bool
	}{
		{
			name: "service is not of type LoadBalancer",
			service: &v1.Service{
				Spec: v1.ServiceSpec{
					Type: v1.ServiceTypeClusterIP,
				},
			},
			want: false,
		},
		{
			name: "service is of type LoadBalancer with no loadBalancerClass",
			service: &v1.Service{
				Spec: v1.ServiceSpec{
					Type: v1.ServiceTypeLoadBalancer,
				},
			},
			want: false,
		},
		{
			name: "service is of type LoadBalancer with GKE legacy external loadBalancerClass",
			service: &v1.Service{
				Spec: v1.ServiceSpec{
					Type:              v1.ServiceTypeLoadBalancer,
					LoadBalancerClass: &gkeLegacyExternalClass,
				},
			},
			want: true,
		},
		{
			name: "service is of type LoadBalancer with GKE legacy internal loadBalancerClass",
			service: &v1.Service{
				Spec: v1.ServiceSpec{
					Type:              v1.ServiceTypeLoadBalancer,
					LoadBalancerClass: &gkeLegacyInternalClass,
				},
			},
			want: true,
		},
		{
			name: "service is of type LoadBalancer with other loadBalancerClass",
			service: &v1.Service{
				Spec: v1.ServiceSpec{
					Type:              v1.ServiceTypeLoadBalancer,
					LoadBalancerClass: &otherClass,
				},
			},
			want: false,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			if got := gkeservicecontroller.WantsLoadBalancer(tc.service); got != tc.want {
				t.Errorf("WantsLoadBalancer() = %v, want %v", got, tc.want)
			}
		})
	}
}


================================================
FILE: cmd/cloud-controller-manager/gketenantcontrollermanager.go
================================================
/*
Copyright 2026 The Kubernetes Authors.
*/
package main

import (
	"context"
	"strings"

	v1 "github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/apis/providerconfig/v1"
	"github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/framework"
	providerconfigcr "github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/providerconfigcr"
	networkclientset "github.com/GoogleCloudPlatform/gke-networking-api/client/network/clientset/versioned"
	networkinformers "github.com/GoogleCloudPlatform/gke-networking-api/client/network/informers/externalversions"
	topologyclientset "github.com/GoogleCloudPlatform/gke-networking-api/client/nodetopology/clientset/versioned"
	"k8s.io/client-go/dynamic"
	"k8s.io/client-go/rest"
	cloudprovider "k8s.io/cloud-provider"
	nodeipamcontrolleroptions "k8s.io/cloud-provider-gcp/cmd/cloud-controller-manager/options"
	"k8s.io/cloud-provider-gcp/pkg/controller/gketenantcontrollers"
	"k8s.io/cloud-provider-gcp/pkg/controller/gketenantcontrollers/utils"
	nodeipamconfig "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/config"
	utilnode "k8s.io/cloud-provider-gcp/pkg/util/node"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	controllermanagerapp "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
	"k8s.io/klog/v2"

	"k8s.io/cloud-provider-gcp/pkg/controller/nodeipam"
	"k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/ipam"
	"k8s.io/cloud-provider/controllers/node"
	"k8s.io/cloud-provider/controllers/nodelifecycle"
)

type gkeTenantControllerManagerConfig struct {
	ctx               context.Context
	initContext       app.ControllerInitContext
	controllerContext controllermanagerapp.ControllerContext
	completedConfig   *cloudcontrollerconfig.CompletedConfig
	cloud             cloudprovider.Interface
	nodeIPAMConfig    nodeipamconfig.NodeIPAMControllerConfiguration
}

// startGKETenantControllerManagerWrapper is used to take cloud config as input and start the GKE TenantControllerManager controller
func startGKETenantControllerManagerWrapper(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface, nodeIPAMControllerOptions nodeipamcontrolleroptions.NodeIPAMControllerOptions) app.InitFunc {
	return func(ctx context.Context, controllerContext controllermanagerapp.ControllerContext) (controller.Interface, bool, error) {
		mgrCfg := gkeTenantControllerManagerConfig{
			ctx:               ctx,
			initContext:       initContext,
			controllerContext: controllerContext,
			completedConfig:   completedConfig,
			cloud:             cloud,
			nodeIPAMConfig:    *nodeIPAMControllerOptions.NodeIPAMControllerConfiguration,
		}
		c, _, started, err := startGKETenantControllerManager(mgrCfg)
		return c, started, err
	}
}

func startGKETenantControllerManager(mgrCfg gkeTenantControllerManagerConfig) (controller.Interface, *gketenantcontrollers.ControllersStarter, bool, error) {
	if !enableGKETenantController {
		klog.Infof("GKE Tenant Controller Manager is disabled (enable with --enable-gke-tenant-controller)")
		return nil, nil, false, nil
	}

	clientConfig := rest.CopyConfig(mgrCfg.completedConfig.Kubeconfig)
	clientConfig.ContentType = "application/json" // required to serialize CRDs to json

	// Create network clients and informers
	networkClient, err := networkclientset.NewForConfig(clientConfig)
	if err != nil {
		klog.Errorf("Failed to create network client: %v", err)
		return nil, nil, false, err
	}
	networkInformerFactory := networkinformers.NewSharedInformerFactory(networkClient, 0)
	networkInformer := networkInformerFactory.Networking().V1().Networks()
	gnpInformer := networkInformerFactory.Networking().V1().GKENetworkParamSets()

	// Create topology client
	nodeTopologyClient, err := topologyclientset.NewForConfig(clientConfig)
	if err != nil {
		klog.Errorf("Failed to create topology client: %v", err)
		return nil, nil, false, err
	}

	// Eagerly request the main Node informer so the SharedInformerFactory starts it.
	// All informers that are needed by all of the controllers that will be started
	// on a per provider config need to be started here. This is different from the
	// other case because CCM will only run tenant controller manager, so the factory
	// is started before all the other controllers are initialized.
	_ = mgrCfg.controllerContext.InformerFactory.Core().V1().Nodes().Informer()

	// Create dynamic client for framework
	dynamicClient, err := dynamic.NewForConfig(clientConfig)
	if err != nil {
		klog.Errorf("Failed to create dynamic client: %v", err)
		return nil, nil, false, err
	}

	// Create dynamic informer for ProviderConfig using framework
	providerConfigInformer := providerconfigcr.NewInformer(dynamicClient, 0)

	// Define controllers with filtered informers and tenant scoped cloud
	controllers := map[string]gketenantcontrollers.ControllerStartFunc{
		"node-controller": func(cfg *gketenantcontrollers.ControllerConfig) error {
			klog.Infof("Creating OSS Cloud Node Controller for %s...", cfg.ProviderConfig.Name)
			// Wrap the informer to filter nodes
			filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: cfg.NodeInformer}
			nodeController, err := node.NewCloudNodeController(
				filteringInformer,
				cfg.KubeClient,
				cfg.Cloud,
				mgrCfg.completedConfig.ComponentConfig.NodeStatusUpdateFrequency.Duration,
				mgrCfg.completedConfig.ComponentConfig.NodeController.ConcurrentNodeSyncs,
				mgrCfg.completedConfig.ComponentConfig.NodeController.ConcurrentNodeStatusUpdates,
			)
			if err != nil {
				return err
			}
			klog.Infof("Starting OSS Cloud Node Controller for %s", cfg.ProviderConfig.Name)
			// nodeController.Run blocks until the context is cancelled, unlike the IPAM controller
			// which requires explicit blocking.
			nodeController.Run(cfg.Context.Done(), cfg.ControllerContext.ControllerManagerMetrics)
			return nil
		},
		"node-ipam-controller": func(cfg *gketenantcontrollers.ControllerConfig) error {
			klog.Infof("Starting Node IPAM Controller for %s...", cfg.ProviderConfig.Name)
			cidrs := getCIDRsFromProviderConfig(cfg.ProviderConfig)

			// Disable MultiSubnetCluster for tenant controllers to prevent them from
			// overwriting the global "default" NodeTopology CR with tenant-specific subnets.
			// We only enable this feature if the current controller belongs to the supervisor.
			tenantNodeIPAMConfig := mgrCfg.nodeIPAMConfig
			if !utils.IsSupervisor(cfg.ProviderConfig) {
				tenantNodeIPAMConfig.EnableMultiSubnetCluster = false
			}

			// Wrap the informer to filter nodes
			filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: cfg.NodeInformer}

			_, started, err := nodeipam.StartNodeIpamController(
				cfg.Context,
				filteringInformer,
				cfg.KubeClient,
				cfg.Cloud,
				cidrs,
				// Shared configuration (AllocateNodeCIDRs, ServiceCIDR, NodeCIDRMaskSize) is safe to reuse
				// because it defines cluster-wide constraints rather than tenant-specific state.
				// This ensures:
				// 1. Consistent IPAM behavior (e.g., node mask sizes) across all tenants.
				// 2. Prevention of CIDR conflicts (e.g., preventing PodCIDRs from overlapping
				//    with the globally reserved ServiceCIDR).
				mgrCfg.completedConfig.ComponentConfig.KubeCloudShared.AllocateNodeCIDRs,
				mgrCfg.nodeIPAMConfig.ServiceCIDR,
				mgrCfg.nodeIPAMConfig.SecondaryServiceCIDR,
				tenantNodeIPAMConfig,
				networkInformer,
				gnpInformer,
				nodeTopologyClient,
				ipam.CIDRAllocatorType(mgrCfg.completedConfig.ComponentConfig.KubeCloudShared.CIDRAllocatorType),
				cfg.ControllerContext.ControllerManagerMetrics,
			)
			if err != nil {
				return err
			}
			if !started {
				klog.Infof("Node IPAM Controller not started (disabled in config) for %s", cfg.ProviderConfig.Name)
			} else {
				klog.Infof("Node IPAM Controller started with ClusterCIDR: %s for %s", cidrs, cfg.ProviderConfig.Name)
			}
			// StartNodeIpamController spawns a goroutine internally (cidrAllocator.Run), so we must
			// explicitly block here to prevent the controller starter function from returning early.
			<-cfg.Context.Done()
			klog.Infof("Node IPAM Controller stopped for %s", cfg.ProviderConfig.Name)
			return nil
		},
		"node-lifecycle-controller": func(cfg *gketenantcontrollers.ControllerConfig) error {
			klog.Infof("Creating Node Lifecycle Controller for %s...", cfg.ProviderConfig.Name)
			nodeMonitorPeriod := mgrCfg.completedConfig.ComponentConfig.KubeCloudShared.NodeMonitorPeriod.Duration
			// Wrap the informer to filter nodes
			filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: cfg.NodeInformer}
			lifecycleController, err := nodelifecycle.NewCloudNodeLifecycleController(
				filteringInformer,
				cfg.KubeClient,
				cfg.Cloud,
				nodeMonitorPeriod,
			)
			if err != nil {
				return err
			}
			klog.Infof("Starting Node Lifecycle Controller for %s...", cfg.ProviderConfig.Name)
			// lifecycleController.Run blocks until the context is cancelled, unlike the IPAM controller
			// which requires explicit blocking.
			lifecycleController.Run(cfg.Context, cfg.ControllerContext.ControllerManagerMetrics)
			return nil
		},
	}

	// Create the starter
	starter := gketenantcontrollers.NewControllersStarter(
		mgrCfg.completedConfig.ClientBuilder,
		mgrCfg.completedConfig.ClientBuilder.ClientOrDie(mgrCfg.initContext.ClientName),
		dynamicClient,
		mgrCfg.controllerContext.InformerFactory,
		mgrCfg.completedConfig,
		mgrCfg.controllerContext,
		controllers,
	)

	const multiProjectCCMFinalizer = "multiproject.networking.gke.io/ccm-cleanup"
	// Create the framework controller
	mgr := framework.New(
		dynamicClient,
		providerConfigInformer,
		multiProjectCCMFinalizer,
		starter,
		mgrCfg.ctx.Done(),
	)

	// Start network informers only if multinetworking is enabled
	if mgrCfg.nodeIPAMConfig.EnableMultiNetworking {
		networkInformerFactory.Start(mgrCfg.ctx.Done())
	}
	// Start provider config informer
	go providerConfigInformer.Run(mgrCfg.ctx.Done())

	// Run the manager
	go mgr.Run()

	return nil, starter, true, nil
}

// getCIDRsFromProviderConfig returns a comma-separated list of CIDRs from the given ProviderConfig.
func getCIDRsFromProviderConfig(pc *v1.ProviderConfig) string {
	var cidrs []string
	for _, podRange := range pc.Spec.NetworkConfig.SubnetInfo.PodRanges {
		cidrs = append(cidrs, podRange.CIDR)
	}

	return strings.Join(cidrs, ",")
}


================================================
FILE: cmd/cloud-controller-manager/gketenantcontrollermanager_test.go
================================================
package main

import (
	"context"
	"testing"
	"time"

	v1 "github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/apis/providerconfig/v1"
	"github.com/stretchr/testify/assert"
	"k8s.io/client-go/informers"
	"k8s.io/client-go/kubernetes/fake"
	"k8s.io/client-go/rest"
	nodeipamconfig "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/config"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	genericcontrollermanager "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/pkg/clientbuilder"
)

func TestStartGKETenantControllerManager(t *testing.T) {
	originalEnableProviderConfigController := enableGKETenantController
	defer func() {
		enableGKETenantController = originalEnableProviderConfigController
	}()

	testCases := []struct {
		desc            string
		enable          bool
		wantRun         bool
		wantControllers []string
	}{
		{
			desc:    "disabled",
			enable:  false,
			wantRun: false,
		},
		{
			desc:    "enabled",
			enable:  true,
			wantRun: true,
			wantControllers: []string{
				"node-controller",
				"node-ipam-controller",
				"node-lifecycle-controller",
			},
		},
	}

	for _, tc := range testCases {
		t.Run(tc.desc, func(t *testing.T) {
			enableGKETenantController = tc.enable

			ctx, cancel := context.WithCancel(context.Background())
			defer cancel()

			kubeClient := fake.NewSimpleClientset()
			informerFactory := informers.NewSharedInformerFactory(kubeClient, time.Second)

			initContext := app.ControllerInitContext{
				ClientName: "test-client",
			}

			controllerContext := genericcontrollermanager.ControllerContext{
				InformerFactory: informerFactory,
			}

			ccmConfig := &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{
					Host: "https://example.com",
				},
			}
			ccmConfig.ClientBuilder = clientbuilder.SimpleControllerClientBuilder{
				ClientConfig: ccmConfig.Kubeconfig,
			}
			completedConfig := ccmConfig.Complete()

			cloud := &fakeCloudProvider{}
			nodeIPAMConfig := nodeipamconfig.NodeIPAMControllerConfiguration{}

			_, starter, started, err := startGKETenantControllerManager(gkeTenantControllerManagerConfig{
				ctx:               ctx,
				initContext:       initContext,
				controllerContext: controllerContext,
				completedConfig:   completedConfig,
				cloud:             cloud,
				nodeIPAMConfig:    nodeIPAMConfig,
			})

			if err != nil {
				t.Fatalf("startGKETenantControllerManager failed: %v", err)
			}

			if started != tc.wantRun {
				t.Errorf("startGKETenantControllerManager started = %v, want %v", started, tc.wantRun)
			}

			if tc.wantRun {
				if starter == nil {
					t.Fatal("starter is nil")
				}
				gotControllers := starter.ControllerNames()
				if len(gotControllers) != len(tc.wantControllers) {
					t.Errorf("starter.ControllerNames() = %v, want %v", gotControllers, tc.wantControllers)
				} else {
					for i, name := range gotControllers {
						if name != tc.wantControllers[i] {
							t.Errorf("starter.ControllerNames()[%d] = %s, want %s", i, name, tc.wantControllers[i])
						}
					}
				}
			}
		})
	}
}

func TestGetClusterCIDRsFromProviderConfig(t *testing.T) {
	tests := []struct {
		name          string
		pc            *v1.ProviderConfig
		expectedCIDRs string
	}{
		{
			name: "Single Pod Range",
			pc: &v1.ProviderConfig{
				Spec: v1.ProviderConfigSpec{
					NetworkConfig: v1.ProviderNetworkConfig{
						SubnetInfo: v1.ProviderConfigSubnetInfo{
							PodRanges: []v1.ProviderConfigSecondaryRange{
								{CIDR: "10.100.0.0/16"},
							},
						},
					},
				},
			},
			expectedCIDRs: "10.100.0.0/16",
		},
		{
			name: "Multiple Pod Ranges",
			pc: &v1.ProviderConfig{
				Spec: v1.ProviderConfigSpec{
					NetworkConfig: v1.ProviderNetworkConfig{
						SubnetInfo: v1.ProviderConfigSubnetInfo{
							PodRanges: []v1.ProviderConfigSecondaryRange{
								{CIDR: "10.100.0.0/16"},
								{CIDR: "fd00::/64"},
							},
						},
					},
				},
			},
			expectedCIDRs: "10.100.0.0/16,fd00::/64",
		},
	}

	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			cidrs := getCIDRsFromProviderConfig(tc.pc)
			assert.Equal(t, tc.expectedCIDRs, cidrs)
		})
	}
}


================================================
FILE: cmd/cloud-controller-manager/main.go
================================================
/*
Copyright 2016 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// The external controller manager is responsible for running controller loops that
// are cloud provider dependent. It uses the API to listen to new events on resources.

package main

import (
	"os"

	"github.com/spf13/pflag"
	"k8s.io/apimachinery/pkg/util/wait"
	cloudprovider "k8s.io/cloud-provider"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	"k8s.io/cloud-provider/names"
	"k8s.io/cloud-provider/options"
	cliflag "k8s.io/component-base/cli/flag"
	"k8s.io/component-base/logs"
	_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugins
	_ "k8s.io/component-base/metrics/prometheus/version"  // for version metric registration
	"k8s.io/klog/v2"
	kcmnames "k8s.io/kubernetes/cmd/kube-controller-manager/names"

	"k8s.io/cloud-provider-gcp/providers/gce"
	_ "k8s.io/cloud-provider-gcp/providers/gce"
)

const (
	gkeServiceLBControllerName      = "gke-service-lb-controller"
	gkeServiceControllerClientName  = "gke-service-controller"
	gkeServiceAlias                 = "gke-service"
	gkeTenantControllerManagerName  = "gke-tenant-controller-manager"
	gkeTenantControllerClientName   = "gke-tenant-controller-manager"
	gkeTenantControllerManagerAlias = "gke-tenant"
)

var (
	// enableMultiProject is bound to a command-line flag. When true, it enables the
	// projectFromNodeProviderID option of the GCE cloud provider, instructing it to
	// use the project specified in the Node's providerID for GCE API calls.
	//
	// This flag should only be enabled when the Node's providerID can be fully
	// trusted.
	//
	// Flag binding occurs in main()
	enableMultiProject bool

	// enableRBSDefaultForGCEL4NetLB is bound to a command-line flag. It enables
	// the option to default L4 NetLB to RBS, only controlling NetLB services with
	// LoadBalancerClass
	enableRBSDefaultForL4NetLB bool

	// enableL4LBAnnotations is bound to a command-line flag. It enables
	// the controller to write annotations related to the provisioned resources
	// for L4 Load Balancers services
	enableL4LBAnnotations bool

	// enableL4DenyFirewall creates and manages an additional deny firewall rule
	// at priority 1000 and moves the node and healthcheck firewall rule to priority 999.
	enableL4DenyFirewall bool

	// enableL4DenyFirewallRollbackCleanup enable cleanup codepath of the deny firewalls for rollback.
	// The reason for it not being enabled by default is the additional GCE API calls that are made
	// for checking if the deny firewalls exist/deletion which will eat up the quota unnecessarily.
	enableL4DenyFirewallRollbackCleanup bool

	// enableGKETenantController enables the gke-tenant-controller-manager.
	enableGKETenantController bool
)

func main() {
	pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)

	ccmOptions, err := options.NewCloudControllerManagerOptions()
	if err != nil {
		klog.Fatalf("unable to initialize command options: %v", err)
	}

	controllerInitializers := app.DefaultInitFuncConstructors

	fss := cliflag.NamedFlagSets{}

	cloudProviderFS := fss.FlagSet("GCE Cloud Provider")
	cloudProviderFS.BoolVar(&enableMultiProject, "enable-multi-project", false, "Enables project selection from Node providerID for GCE API calls. CAUTION: Only enable if Node providerID is configured by a trusted source.")
	cloudProviderFS.BoolVar(&enableRBSDefaultForL4NetLB, "enable-rbs-default-l4-netlb", false, "Enables RBS defaulting for GCE L4 NetLB")
	cloudProviderFS.BoolVar(&enableL4LBAnnotations, "enable-l4-lb-annotations", false, "Enables Annotations for GCE L4 LB Services")
	cloudProviderFS.BoolVar(&enableL4DenyFirewall, "enable-l4-deny-firewall", false, "Enable creation and updates of Deny VPC Firewall Rules for L4 external load balancers. Requires --enable-pinhole and --enable-l4-deny-firewall-rollback-cleanup to be true.")
	cloudProviderFS.BoolVar(&enableL4DenyFirewallRollbackCleanup, "enable-l4-deny-firewall-rollback-cleanup", false, "Enable cleanup codepath of the deny firewalls for rollback. The reason for it not being enabled by default is the additional GCE API calls that are made for checking if the deny firewalls exist/deletion which will eat up the quota unnecessarily.")
	cloudProviderFS.BoolVar(&enableGKETenantController, "enable-gke-tenant-controller", false, "Enables the GKE Tenant Controller Manager for Multi-Tenancy.")

	// add new controllers and initializers
	nodeIpamController := nodeIPAMController{}
	nodeIpamController.nodeIPAMControllerOptions.NodeIPAMControllerConfiguration = &nodeIpamController.nodeIPAMControllerConfiguration
	nodeIpamController.nodeIPAMControllerOptions.AddFlags(fss.FlagSet("nodeipam controller"))
	controllerInitializers[kcmnames.NodeIpamController] = app.ControllerInitFuncConstructor{
		Constructor: nodeIpamController.startNodeIpamControllerWrapper,
	}

	controllerInitializers[names.CloudNodeController] = app.ControllerInitFuncConstructor{
		InitContext: app.ControllerInitContext{
			ClientName: "node-controller",
		},
		Constructor: startCloudNodeControllerWrapper,
	}

	controllerInitializers[names.CloudNodeLifecycleController] = app.ControllerInitFuncConstructor{
		InitContext: app.ControllerInitContext{
			ClientName: "node-controller",
		},
		Constructor: startCloudNodeLifecycleControllerWrapper,
	}

	controllerInitializers["gkenetworkparamset"] = app.ControllerInitFuncConstructor{
		Constructor: startGkeNetworkParamSetControllerWrapper,
	}

	controllerInitializers[gkeServiceLBControllerName] = app.ControllerInitFuncConstructor{
		InitContext: app.ControllerInitContext{
			ClientName: gkeServiceControllerClientName,
		},
		Constructor: startGkeServiceControllerWrapper,
	}

	controllerInitializers[gkeTenantControllerManagerName] = app.ControllerInitFuncConstructor{
		InitContext: app.ControllerInitContext{
			ClientName: gkeTenantControllerClientName,
		},
		Constructor: func(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
			return startGKETenantControllerManagerWrapper(initContext, completedConfig, cloud, nodeIpamController.nodeIPAMControllerOptions)
		},
	}

	// add controllers disabled by default
	app.ControllersDisabledByDefault.Insert("gkenetworkparamset")
	app.ControllersDisabledByDefault.Insert(gkeServiceLBControllerName)
	app.ControllersDisabledByDefault.Insert(gkeTenantControllerManagerName)

	aliasMap := names.CCMControllerAliases()
	aliasMap["nodeipam"] = kcmnames.NodeIpamController
	aliasMap[gkeServiceAlias] = gkeServiceLBControllerName
	aliasMap[gkeTenantControllerManagerAlias] = gkeTenantControllerManagerName

	command := app.NewCloudControllerManagerCommand(ccmOptions, cloudInitializer, controllerInitializers, aliasMap, fss, wait.NeverStop)

	logs.InitLogs()
	defer logs.FlushLogs()

	if err := command.Execute(); err != nil {
		os.Exit(1)
	}
}

func cloudInitializer(config *cloudcontrollerconfig.CompletedConfig) cloudprovider.Interface {
	cloudConfig := config.ComponentConfig.KubeCloudShared.CloudProvider

	// initialize cloud provider with the cloud provider name and config file provided
	cloud, err := cloudprovider.InitCloudProvider(cloudConfig.Name, cloudConfig.CloudConfigFile)
	if err != nil {
		klog.Fatalf("Cloud provider with name: %v and configFile: %v could not be initialized: %v", cloudConfig.Name, cloudConfig.CloudConfigFile, err)
	}
	if cloud == nil {
		klog.Fatalf("Cloud provider with name: %v and configFile: %v is nil", cloudConfig.Name, cloudConfig.CloudConfigFile)
	}

	if !cloud.HasClusterID() {
		if config.ComponentConfig.KubeCloudShared.AllowUntaggedCloud {
			klog.Warning("detected a cluster without a ClusterID.  A ClusterID will be required in the future.  Please tag your cluster to avoid any future issues")
		} else {
			klog.Fatalf("no ClusterID found.  A ClusterID is required for the cloud provider to function properly.  This check can be bypassed by setting the allow-untagged-cloud option")
		}
	}

	if !enableGKETenantController && enableMultiProject {
		gceCloud, ok := (cloud).(*gce.Cloud)
		if !ok {
			// Fail-fast: If enableMultiProject is set, the cloud provider MUST be GCE.
			// A non-GCE provider indicates a misconfiguration.
			// Ideally, we never expect this to be executed.
			klog.Fatalf("multi-project mode requires GCE cloud provider, but got %T", cloud)
		}
		gceCloud.SetProjectFromNodeProviderID(true)
	}

	if enableRBSDefaultForL4NetLB {
		gceCloud, ok := (cloud).(*gce.Cloud)
		if !ok {
			// Fail-fast: If enableRBSDefaultForL4NetLB is set, the cloud
			// provider MUST be GCE.
			klog.Fatalf("enable-rbs-default-l4-netlb requires GCE cloud provider, but got %T", cloud)
		}
		gceCloud.SetEnableRBSDefaultForL4NetLB(true)
	}

	if enableL4LBAnnotations {
		gceCloud, ok := (cloud).(*gce.Cloud)
		if !ok {
			// Fail-fast: If enableL4LBAnnotations is set, the cloud
			// provider MUST be GCE.
			klog.Fatalf("enable-l4-lb-annotations requires GCE cloud provider, but got %T", cloud)
		}
		gceCloud.SetEnableL4LBAnnotations(true)
	}

	if enableL4DenyFirewall || enableL4DenyFirewallRollbackCleanup {
		gceCloud, ok := (cloud).(*gce.Cloud)
		if !ok {
			klog.Fatalf("enable-l4-deny-firewall and enable-l4-deny-firewall-rollback-cleanup require GCE cloud provider, but got %T", cloud)
		}
		if enableL4DenyFirewall && !enableL4DenyFirewallRollbackCleanup {
			klog.Fatal("enable-l4-deny-firewall requires enable-l4-deny-firewall-rollback-cleanup to be true")
		}
		gceCloud.SetEnableL4DenyFirewallRule(enableL4DenyFirewall, enableL4DenyFirewallRollbackCleanup)
	}

	return cloud
}


================================================
FILE: cmd/cloud-controller-manager/nodecontroller.go
================================================
/*
Copyright 2026 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"context"

	cloudprovider "k8s.io/cloud-provider"
	utilnode "k8s.io/cloud-provider-gcp/pkg/util/node"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	"k8s.io/cloud-provider/controllers/node"
	controllermanagerapp "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
	"k8s.io/klog/v2"
)

func startCloudNodeControllerWrapper(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
	return func(ctx context.Context, controllerContext controllermanagerapp.ControllerContext) (controller.Interface, bool, error) {
		return startCloudNodeController(ctx, initContext, controllerContext, completedConfig, cloud)
	}
}

func startCloudNodeController(ctx context.Context, initContext app.ControllerInitContext, controllerContext controllermanagerapp.ControllerContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) (controller.Interface, bool, error) {
	// Wrap the informer to filter nodes
	filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: completedConfig.SharedInformers.Core().V1().Nodes()}

	// Start the CloudNodeController
	nodeController, err := node.NewCloudNodeController(
		filteringInformer,
		// cloud node controller uses existing cluster role from node-controller
		completedConfig.ClientBuilder.ClientOrDie(initContext.ClientName),
		cloud,
		completedConfig.ComponentConfig.NodeStatusUpdateFrequency.Duration,
		completedConfig.ComponentConfig.NodeController.ConcurrentNodeSyncs,
		completedConfig.ComponentConfig.NodeController.ConcurrentNodeStatusUpdates,
	)
	if err != nil {
		klog.Warningf("failed to start cloud node controller: %s", err)
		return nil, false, nil
	}

	go nodeController.Run(ctx.Done(), controllerContext.ControllerManagerMetrics)

	return nil, true, nil
}


================================================
FILE: cmd/cloud-controller-manager/nodeipamcontroller.go
================================================
/*
Copyright 2018 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"context"
	"time"

	networkclientset "github.com/GoogleCloudPlatform/gke-networking-api/client/network/clientset/versioned"
	networkinformers "github.com/GoogleCloudPlatform/gke-networking-api/client/network/informers/externalversions"
	nodetopologyclientset "github.com/GoogleCloudPlatform/gke-networking-api/client/nodetopology/clientset/versioned"
	"k8s.io/apimachinery/pkg/util/wait"
	cloudprovider "k8s.io/cloud-provider"
	nodeipamcontrolleroptions "k8s.io/cloud-provider-gcp/cmd/cloud-controller-manager/options"
	nodeipamcontroller "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam"
	nodeipamconfig "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/config"
	"k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/ipam"
	utilnode "k8s.io/cloud-provider-gcp/pkg/util/node"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	genericcontrollermanager "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
	"k8s.io/klog/v2"
)

type nodeIPAMController struct {
	nodeIPAMControllerConfiguration nodeipamconfig.NodeIPAMControllerConfiguration
	nodeIPAMControllerOptions       nodeipamcontrolleroptions.NodeIPAMControllerOptions
}

func (nodeIpamController *nodeIPAMController) startNodeIpamControllerWrapper(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
	errors := nodeIpamController.nodeIPAMControllerOptions.Validate()
	if len(errors) > 0 {
		klog.Fatal("NodeIPAM controller values are not properly set.")
	}
	nodeIpamController.nodeIPAMControllerOptions.ApplyTo(&nodeIpamController.nodeIPAMControllerConfiguration)

	return func(ctx context.Context, controllerContext genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) {
		return startNodeIpamController(completedConfig, nodeIpamController.nodeIPAMControllerConfiguration, controllerContext, cloud)
	}
}

func startNodeIpamController(ccmConfig *cloudcontrollerconfig.CompletedConfig, nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration, ctx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (controller.Interface, bool, error) {
	kubeConfig := ccmConfig.Complete().Kubeconfig
	kubeConfig.ContentType = "application/json" // required to serialize Networks to json

	networkClient, err := networkclientset.NewForConfig(kubeConfig)
	if err != nil {
		return nil, false, err
	}
	nodeTopologyClient, err := nodetopologyclientset.NewForConfig(kubeConfig)
	if err != nil {
		return nil, false, err
	}

	nwInfFactory := networkinformers.NewSharedInformerFactory(networkClient, 30*time.Second)
	nwInformer := nwInfFactory.Networking().V1().Networks()
	gnpInformer := nwInfFactory.Networking().V1().GKENetworkParamSets()

	// Wrap the informer to filter nodes
	filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: ccmConfig.SharedInformers.Core().V1().Nodes()}

	ctrl, started, err := nodeipamcontroller.StartNodeIpamController(
		wait.ContextForChannel(ctx.Stop),
		filteringInformer,
		ccmConfig.ClientBuilder.ClientOrDie("node-controller"),
		cloud,
		ccmConfig.ComponentConfig.KubeCloudShared.ClusterCIDR,
		ccmConfig.ComponentConfig.KubeCloudShared.AllocateNodeCIDRs,
		nodeIPAMConfig.ServiceCIDR,
		nodeIPAMConfig.SecondaryServiceCIDR,
		nodeIPAMConfig,
		nwInformer,
		gnpInformer,
		nodeTopologyClient,
		ipam.CIDRAllocatorType(ccmConfig.ComponentConfig.KubeCloudShared.CIDRAllocatorType),
		ctx.ControllerManagerMetrics,
	)

	if err != nil {
		return nil, false, err
	}

	// TODO: Add a flag to control to start this informer specific to required GKE functionality
	go nwInfFactory.Start(ctx.Stop)

	return ctrl, started, nil
}


================================================
FILE: cmd/cloud-controller-manager/nodeipamcontroller_test.go
================================================
package main

import (
	"testing"

	"k8s.io/client-go/informers"
	k8sfake "k8s.io/client-go/kubernetes/fake"
	"k8s.io/client-go/rest"
	cloudprovider "k8s.io/cloud-provider"
	nodeipamconfig "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/config"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	"k8s.io/cloud-provider/config"
	genericcontrollermanager "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/pkg/clientbuilder"
)

type fakeCloudProvider struct{}

// Implements cloudprovider.Interface.
var _ cloudprovider.Interface = &fakeCloudProvider{}

func (f *fakeCloudProvider) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) {
}

func (f *fakeCloudProvider) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
	return nil, false
}

func (f *fakeCloudProvider) Instances() (cloudprovider.Instances, bool) {
	return nil, false
}

func (f *fakeCloudProvider) InstancesV2() (cloudprovider.InstancesV2, bool) {
	return nil, false
}

func (f *fakeCloudProvider) Zones() (cloudprovider.Zones, bool) {
	return nil, false
}

func (f *fakeCloudProvider) Clusters() (cloudprovider.Clusters, bool) {
	return nil, false
}

func (f *fakeCloudProvider) Routes() (cloudprovider.Routes, bool) {
	return nil, false
}

func (f *fakeCloudProvider) ProviderName() string {
	return "fake"
}

func (f *fakeCloudProvider) HasClusterID() bool {
	return false
}

func TestStartNodeIpamController(t *testing.T) {
	testCases := []struct {
		desc           string
		ccmConfig      *cloudcontrollerconfig.Config
		nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration
		wantErr        bool
	}{
		{
			desc: "Allocate node CIDRs disabled",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: false,
					},
				},
			},
			wantErr: true,
		},
		{
			desc: "Unparseable cluster CIDRs",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "invalid",
					},
				},
			},
			wantErr: true,
		},
		{
			desc: "Multiple same stack type cluster CIDRs - ipv4",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16,10.1.0.0/16",
					},
				},
			},
			wantErr: true,
		},
		{
			desc: "Multiple same stack type cluster CIDRs - ipv6",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "2001:db8::/112,2001:db9::/112",
					},
				},
			},
			wantErr: true,
		},
		{
			desc: "More than 2 cluster CIDRs",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16,10.1.0.0/16,10.2.0.0/16",
					},
				},
			},
			wantErr: true,
		},
		{
			desc: "Primary and secondary service CIDR same stack type - ipv4",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16",
					},
				},
			},
			nodeIPAMConfig: nodeipamconfig.NodeIPAMControllerConfiguration{
				ServiceCIDR:          "10.0.0.0/16",
				SecondaryServiceCIDR: "10.1.0.0/16",
			},
			wantErr: true,
		},
		{
			desc: "Primary and secondary service CIDR same stack type - ipv6",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16",
					},
				},
			},
			nodeIPAMConfig: nodeipamconfig.NodeIPAMControllerConfiguration{
				ServiceCIDR:          "2001:db8::/112",
				SecondaryServiceCIDR: "2001:db9::/112",
			},
			wantErr: true,
		},
		{
			desc: "NodeCIDRMaskSize used with a dual stack cluster",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16,2001:aa::/112",
					},
				},
			},
			nodeIPAMConfig: nodeipamconfig.NodeIPAMControllerConfiguration{
				NodeCIDRMaskSize: 10,
			},
			wantErr: true,
		},
		{
			desc: "NodeCIDRMaskSize and NodeCIDRMaskSizeIPv4 used together",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16",
					},
				},
			},
			nodeIPAMConfig: nodeipamconfig.NodeIPAMControllerConfiguration{
				NodeCIDRMaskSize:     10,
				NodeCIDRMaskSizeIPv4: 4,
			},
			wantErr: true,
		},
		{
			desc: "NodeCIDRMaskSize and NodeCIDRMaskSizeIPv6 used together",
			ccmConfig: &cloudcontrollerconfig.Config{
				Kubeconfig: &rest.Config{},
				ComponentConfig: config.CloudControllerManagerConfiguration{
					KubeCloudShared: config.KubeCloudSharedConfiguration{
						AllocateNodeCIDRs: true,
						ClusterCIDR:       "10.0.0.0/16",
					},
				},
			},
			nodeIPAMConfig: nodeipamconfig.NodeIPAMControllerConfiguration{
				NodeCIDRMaskSize:     10,
				NodeCIDRMaskSizeIPv6: 4,
			},
			wantErr: true,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.desc, func(t *testing.T) {
			ctx := genericcontrollermanager.ControllerContext{}

			// Fix up the config for test
			tc.ccmConfig.ClientBuilder = clientbuilder.SimpleControllerClientBuilder{
				ClientConfig: tc.ccmConfig.Kubeconfig,
			}
			client := k8sfake.NewSimpleClientset()
			tc.ccmConfig.SharedInformers = informers.NewSharedInformerFactory(client, 0)

			_, _, err := startNodeIpamController(tc.ccmConfig.Complete(), tc.nodeIPAMConfig, ctx, &fakeCloudProvider{})

			if err == nil && tc.wantErr {
				t.Fatalf("startNodeIpamController succeeded, want error")
			}
			if err != nil && !tc.wantErr {
				t.Fatalf("startNodeIpamController(): %v", err)
			}
		})
	}
}


================================================
FILE: cmd/cloud-controller-manager/nodelifecyclecontroller.go
================================================
/*
Copyright 2026 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"context"

	cloudprovider "k8s.io/cloud-provider"
	utilnode "k8s.io/cloud-provider-gcp/pkg/util/node"
	"k8s.io/cloud-provider/app"
	cloudcontrollerconfig "k8s.io/cloud-provider/app/config"
	"k8s.io/cloud-provider/controllers/nodelifecycle"
	controllermanagerapp "k8s.io/controller-manager/app"
	"k8s.io/controller-manager/controller"
	"k8s.io/klog/v2"
)

func startCloudNodeLifecycleControllerWrapper(initContext app.ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) app.InitFunc {
	return func(ctx context.Context, controllerContext controllermanagerapp.ControllerContext) (controller.Interface, bool, error) {
		return startCloudNodeLifecycleController(ctx, initContext, controllerContext, completedConfig, cloud)
	}
}

func startCloudNodeLifecycleController(ctx context.Context, initContext app.ControllerInitContext, controllerContext controllermanagerapp.ControllerContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) (controller.Interface, bool, error) {
	// Wrap the informer to filter nodes
	filteringInformer := &utilnode.GKEFilteringNodeInformer{NodeInformer: completedConfig.SharedInformers.Core().V1().Nodes()}

	// Start the cloudNodeLifecycleController
	cloudNodeLifecycleController, err := nodelifecycle.NewCloudNodeLifecycleController(
		filteringInformer,
		// cloud node lifecycle controller uses existing cluster role from node-controller
		completedConfig.ClientBuilder.ClientOrDie(initContext.ClientName),
		cloud,
		completedConfig.ComponentConfig.KubeCloudShared.NodeMonitorPeriod.Duration,
	)
	if err != nil {
		klog.Warningf("failed to start cloud node lifecycle controller: %s", err)
		return nil, false, nil
	}

	go cloudNodeLifecycleController.Run(ctx, controllerContext.ControllerManagerMetrics)

	return nil, true, nil
}


================================================
FILE: cmd/cloud-controller-manager/nodelifecyclecontroller_test.go
================================================
/*
Copyright 2026 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package main

import (
	"context"
	"testing"
	"time"

	v1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/informers"
	"k8s.io/client-go/kubernetes/fake"
	cloudprovider "k8s.io/cloud-provider"
	"k8s.io/cloud-provider-gcp/pkg/util/node"
	"k8s.io/cloud-provider/controllers/nodelifecycle"
)

type mockInstances struct {
	cloudprovider.Instances
	existsCalled map[string]bool
}

func (m *mockInstances) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
	if m.existsCalled == nil {
		m.existsCalled = make(map[string]bool)
	}
	m.existsCalled[providerID] = true
	return true, nil
}

func (m *mockInstances) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
	return false, nil
}

type mockCloud struct {
	cloudprovider.Interface
	instances *mockInstances
}

func (m *mockCloud) Instances() (cloudprovider.Instances, bool) {
	return m.instances, true
}

func (m *mockCloud) InstancesV2() (cloudprovider.InstancesV2, bool) {
	return nil, false
}

func TestMonitorNodes_FilterLabel(t *testing.T) {
	fakeClient := fake.NewSimpleClientset()
	informerFactory := informers.NewSharedInformerFactory(fakeClient, 0)
	nodeInformer := informerFactory.Core().V1().Nodes()

	managedNode := &v1.Node{
		ObjectMeta: metav1.ObjectMeta{Name: "managed-node"},
		Spec:       v1.NodeSpec{ProviderID: "gce://project/zone/managed-node"},
		Status:     v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionFalse}}},
	}
	unmanagedNode := &v1.Node{
		ObjectMeta: metav1.ObjectMeta{
			Name:   "unmanaged-node",
			Labels: map[string]string{node.GKEUnmanagedNodeLabelKey: node.GKEUnmanagedNodeLabelValue},
		},
		Spec:   v1.NodeSpec{ProviderID: "gce://project/zone/unmanaged-node"},
		Status: v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionFalse}}},
	}
	labeledManagedNode := &v1.Node{
		ObjectMeta: metav1.ObjectMeta{
			Name:   "labeled-managed-node",
			Labels: map[string]string{node.GKEUnmanagedNodeLabelKey: "false"},
		},
		Spec:   v1.NodeSpec{ProviderID: "gce://project/zone/labeled-managed-node"},
		Status: v1.NodeStatus{Conditions: []v1.NodeCondition{{Type: v1.NodeReady, Status: v1.ConditionFalse}}},
	}

	nodeInformer.Informer().GetStore().Add(managedNode)
	nodeInformer.Informer().GetStore().Add(unmanagedNode)
	nodeInformer.Informer().GetStore().Add(labeledManagedNode)

	mockInst := &mockInstances{existsCalled: make(map[string]bool)}
	mockCl := &mockCloud{instances: mockInst}

	// Wrap the informer to filter nodes
	filteringInformer := &node.GKEFilteringNodeInformer{NodeInformer: nodeInformer}

	c, err := nodelifecycle.NewCloudNodeLifecycleController(filteringInformer, fakeClient, mockCl, 5*time.Minute)
	if err != nil {
		t.Fatalf("failed to create controller: %v", err)
	}

	c.MonitorNodes(context.Background())

	if !mockInst.existsCalled[managedNode.Spec.ProviderID] {
		t.Errorf("expected InstanceExistsByProviderID to be called for managed node, but it wasn't")
	}
	if !mockInst.existsCalled[labeledManagedNode.Spec.ProviderID] {
		t.Errorf("expected InstanceExistsByProviderID to be called for labeled managed node (false), but it wasn't")
	}
	if mockInst.existsCalled[unmanagedNode.Spec.ProviderID] {
		t.Errorf("expected InstanceExistsByProviderID NOT to be called for unmanaged node, but it was")
	}
}


================================================
FILE: cmd/cloud-controller-manager/options/nodeipamcontroller.go
================================================
/*
Copyright 2018 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package options

import (
	"fmt"
	"strings"

	"github.com/spf13/pflag"

	nodeipamconfig "k8s.io/cloud-provider-gcp/pkg/controller/nodeipam/config"
)

// NodeIPAMControllerOptions holds the NodeIpamController options.
type NodeIPAMControllerOptions struct {
	*nodeipamconfig.NodeIPAMControllerConfiguration
}

// AddFlags adds flags related to NodeIpamController for controller manager to the specified FlagSet.
func (o *NodeIPAMControllerOptions) AddFlags(fs *pflag.FlagSet) {
	if o == nil {
		return
	}
	fs.StringVar(&o.ServiceCIDR, "service-cluster-ip-range", o.ServiceCIDR, "CIDR Range for Services in cluster. Requires --allocate-node-cidrs to be true")
	fs.Int32Var(&o.NodeCIDRMaskSize, "node-cidr-mask-size", o.NodeCIDRMaskSize, "Mask size for node cidr in cluster. Default is 24 for IPv4 and 64 for IPv6.")
	fs.Int32Var(&o.NodeCIDRMaskSizeIPv4, "node-cidr-mask-size-ipv4", o.NodeCIDRMaskSizeIPv4, "Mask size for IPv4 node cidr in dual-stack cluster. Default is 24.")
	fs.Int32Var(&o.NodeCIDRMaskSizeIPv6, "node-cidr-mask-size-ipv6", o.NodeCIDRMaskSizeIPv6, "Mask size for IPv6 node cidr in dual-stack cluster. Default is 64.")
	fs.BoolVar(&o.EnableMultiSubnetCluster, "enable-multi-subnet-cluster", o.EnableMultiSubnetCluster, "Enabled multi-subnet cluster feature. This enables generating updated nodeTopology custom resource. ")
	fs.BoolVar(&o.EnableMultiNetworking, "enable-multi-networking", o.EnableMultiNetworking, "Enabled multi-networking related logics such as multi-networking IPAM.")
}

// ApplyTo fills up NodeIpamController config with options.
func (o *NodeIPAMControllerOptions) ApplyTo(cfg *nodeipamconfig.NodeIPAMControllerConfiguration) error {
	if o == nil {
		return nil
	}

	// split the cidrs list and assign primary and secondary
	serviceCIDRList := strings.Split(o.ServiceCIDR, ",")
	if len(serviceCIDRList) > 0 {
		cfg.ServiceCIDR = serviceCIDRList[0]
	}
	if len(serviceCIDRList) > 1 {
		cfg.SecondaryServiceCIDR = serviceCIDRList[1]
	}

	cfg.NodeCIDRMaskSize = o.NodeCIDRMaskSize
	cfg.NodeCIDRMaskSizeIPv4 = o.NodeCIDRMaskSizeIPv4
	cfg.NodeCIDRMaskSizeIPv6 = o.NodeCIDRMaskSizeIPv6
	cfg.EnableMultiSubnetCluster = o.EnableMultiSubnetCluster
	cfg.EnableMultiNetworking = o.EnableMultiNetworking

	return nil
}

// Validate checks validation of NodeIPAMControllerOptions.
func (o *NodeIPAMControllerOptions) Validate() []error {
	if o == nil {
		return nil
	}
	errs := make([]error, 0)

	serviceCIDRList := strings.Split(o.ServiceCIDR, ",")
	if len(serviceCIDRList) > 2 {
		errs = append(errs, fmt.Errorf("--service-cluster-ip-range can not contain more than two entries"))
	}

	return errs
}


================================================
FILE: cmd/gke-gcloud-auth-plugin/OWNERS
================================================
# See the OWNERS docs at https://go.k8s.io/owners

approvers:
- ahmedtd
- zshihang

reviewers:
- ahmedtd
- jprzychodzen
- zshihang


================================================
FILE: cmd/gke-gcloud-auth-plugin/cred.go
================================================
// Package cred prints an ExecCredential object to stdout. The ExecCredential
// object is filled with an access_token either from gcloud or from application
// default credentials. This is defined by Client-go Credential plugins:
// https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
// This library can be used with GKE Clusters for use with kubectl and custom
// k8s clients.
package main

import (
	"bytes"
	"encoding/json"
	"flag"
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
	"time"

	"github.com/natefinch/atomic"
	"github.com/spf13/pflag"
	"golang.org/x/oauth2/google"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	clientauthv1b1 "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
	"k8s.io/client-go/tools/clientcmd"
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
	"k8s.io/component-base/version/verflag"
	"k8s.io/klog/v2"
)

const (
	// cacheFileName is the file which stores the access tokens. This file is
	// co-located with kubeconfig file. This file is deleted by get-credentials
	// code in "gcloud container clusters" upon every invocation and is recreated
	// by gke-gcloud-auth-plugin.
	cacheFileName = "gke_gcloud_auth_plugin_cache"

	// active_config is file name of file that holds current gcloud config name and
	// is located at 'gcloud info | grep "User Config Directory"'
	activeConfig = "active_config"

	// applicableOnlyForEdgeCloud is a message to place in the description of flags that
	// are only applied with --use_edge_cloud enabled.
	applicableOnlyForEdgeCloud = "(only applicable when '--use_edge_cloud' is enabled)"
	requiredForEdgeCloud       = "(mandatory when using --use_edge_cloud, optional otherwise)"

	// cloudsdkAuthAccessEnvVar is an env variable honored by gcloud tool. If this
	// env variable is set to a value, that value is propagated by gcloud as an
	// access token
	cloudsdkAuthAccessEnvVar = "CLOUDSDK_AUTH_ACCESS_TOKEN"
)

// cache is the struct that gets cached in the cache file in json format.
// {
//
//	"current_context": "gke_user-gke-dev_us-central1_autopilot-cluster-11",
//	"access_token": "ya29.A0ARrdaM8WL....G0xYXGIQNPi5WvHe07ia4Gs",
//	"token_expiry": "2022-01-27T08:27:52Z"
//	"extra_args": "--account=exampleAccount"
//
// }
// The current_context helps us cache tokens by context(cluster) similar to how
// this was done for Authprovider in kubeconfig.
type cache struct {
	// CurrentContext refers to which context the token was last retrieved for. If
	// currentContext in kubeconfig is changed, the current cached access token is invalidated.
	CurrentContext string `json:"current_context"`
	// AccessToken is gcloud access token
	AccessToken string `json:"access_token"`
	// TokenExpiry is gcloud access token's expiry.
	TokenExpiry string `json:"token_expiry"`
	// ExtraArgs refers to the args used when generating the token.
	// These args could allow the user to set get tokens for non-default accounts, projects, etc.
	ExtraArgs string `json:"extra_args"`
}

// plugin holds data to be passed around (eg: useApplicationDefaultCredentials)
// as well as methods that may needs to be mocked in test scenarios.
type plugin struct {
	k8sStartingConfig func() (*clientcmdapi.Config, error)
	readFile          func(filename string) ([]byte, error)
	writeCacheFile    func(content string) error
	getCacheFilePath  func() string
	timeNow           func() time.Time
	tokenProvider     tokenProvider
}

func newPlugin(tokenProvider tokenProvider) *plugin {
	return &plugin{
		k8sStartingConfig: k8sStartingConfig,
		readFile:          readFile,
		writeCacheFile:    writeCacheFile,
		getCacheFilePath:  getCacheFilePath,
		timeNow:           timeNow,
		tokenProvider:     tokenProvider,
	}
}

var (
	useApplicationDefaultCredentials = pflag.Bool("use_application_default_credentials", false, "Output is an ExecCredential filled with application default credentials.")
	useEdgeCloud                     = pflag.Bool("use_edge_cloud", false, "Output is an ExecCredential for an Edge Cloud cluster.")
	project                          = pflag.String("project", "", fmt.Sprintf("Parent project of the Cluster %s.", requiredForEdgeCloud))
	account                          = pflag.String("account", "", "Optional account to use for gcloud config command")
	location                         = pflag.String("location", "", fmt.Sprintf("Location of the Cluster %s.", applicableOnlyForEdgeCloud))
	cluster                          = pflag.String("cluster", "", fmt.Sprintf("Name of the Cluster %s.", applicableOnlyForEdgeCloud))
	impersonateServiceAccount        = pflag.String("impersonate_service_account", "", "Impersonate a service account to retrieve tokens for the Cluster.")
)

func main() {
	klog.InitFlags(nil)
	// Opt into the new klog behavior so that -stderrthreshold is honored even
	// when -logtostderr=true (the default).
	// Ref: kubernetes/klog#212, kubernetes/klog#432
	flag.Set("legacy_stderr_threshold_behavior", "false") //nolint:errcheck
	flag.Set("stderrthreshold", "INFO")                   //nolint:errcheck
	defer klog.Flush()
	pflag.CommandLine.AddGoFlagSet(flag.CommandLine) // this is required to setup klog flags
	pflag.Parse()

	verflag.PrintAndExitIfRequested()

	var tokenProvider tokenProvider = nil
	if *useEdgeCloud {
		if *project == "" || *location == "" || *cluster == "" {
			klog.Exit(fmt.Errorf("for --use_edge_cloud: --project, --location and --cluster are required"))
		}

		tokenProvider = &gcloudEdgeCloudTokenProvider{
			project:                   *project,
			location:                  *location,
			clusterName:               *cluster,
			impersonateServiceAccount: *impersonateServiceAccount,
			getTokenRaw:               getGcloudEdgeCloudTokenRaw,
		}
	} else if *useApplicationDefaultCredentials {
		tokenProvider = &defaultCredentialsTokenProvider{
			googleDefaultTokenSource: google.DefaultTokenSource,
		}
	} else {
		tokenProvider = &gcloudTokenProvider{
			readGcloudConfigRaw:       readGcloudConfigRaw,
			readFile:                  readFile,
			account:                   *account,
			project:                   *project,
			impersonateServiceAccount: *impersonateServiceAccount,
		}
	}

	if err := PrintCred(&tokenProvider); err != nil {
		klog.Exit(fmt.Errorf("print credential failed with error: %w", err))
	}
}

// PrintCred prints ExecCredential to stdout to be consumed by kubectl to connect to GKE Clusters
// {
//
//	"kind": "ExecCredential",
//	"apiVersion": "client.authentication.k8s.io/v1beta1",
//	"spec": {
//	    "interactive": false
//	},
//	"status": {
//	    "expirationTimestamp": "2022-01-27T07:10:46Z",
//	    "token": "ya29.A0ARrda.......0jDi8weH-36jJNru6Ps"
//	}
//
// }
func PrintCred(tokenProvider *tokenProvider) error {
	p := newPlugin(*tokenProvider)

	ec, err := p.execCredential()
	if err != nil {
		return err
	}

	ecStr, err := formatToJSON(ec)
	if err != nil {
		return err
	}

	if _, err := fmt.Print(ecStr); err != nil {
		return fmt.Errorf("unable to write ExecCredential to stdout: %w", err)
	}

	return nil
}

// execCredential return an object of type ExecCredential which
// holds a bearer token to authenticate to GKE.
func (p *plugin) execCredential() (*clientauthv1b1.ExecCredential, error) {
	token, expiry, err := p.accessToken()
	if err != nil {
		return nil, err
	}

	ec := &clientauthv1b1.ExecCredential{
		TypeMeta: metav1.TypeMeta{
			Kind:       "ExecCredential",
			APIVersion: "client.authentication.k8s.io/v1beta1",
		},
		Status: &clientauthv1b1.ExecCredentialStatus{
			Token: token,
		},
	}

	/*
		This is how an ExecCredential with nil metav1.Time gets printed
				{
				    "kind": "ExecCredential",
				    "apiVersion": "client.authentication.k8s.io/v1beta1",
				    "spec": {
				        "interactive": false
				    },
				    "status": {
				        "token": "ya29.test_token"
				    }
				}

		If ExpirationTimeStamp is set to an empty metav1.Time, it gets printed as "null"
			  {
				    "kind": "ExecCredential",
				    "apiVersion": "client.authentication.k8s.io/v1beta1",
				    "spec": {
				        "interactive": false
				    },
				    "status": {
				        "expirationTimestamp": null,
				        "token": "ya29.test_token"
				    }
				}
		Hence, the expiration timestamp is set only if it is non-zero
	*/
	if !expiry.IsZero() {
		ec.Status.ExpirationTimestamp = expiry
	}

	return ec, nil
}

// accessToken returns a cached token if a valid token exists. If no valid token exists,
// it gets a new access token by invoking the token provider, and follows the providers
// policy on caching the new token.
func (p *plugin) accessToken() (string, *metav1.Time, error) {
	useCache := p.tokenProvider.useCache()

	if useCache {
		if token, expiry, err := p.getCachedGcloudAccessToken(); err != nil {
			// log and ignore error; move on to getting a new token from gcloud
			klog.V(4).Infof("Getting cached access token failed with error: %v", err)
		} else {
			// return valid token
			return token, expiry, nil
		}
	}

	token, expiry, err := p.tokenProvider.token()
	if err != nil {
		return "", nil, fmt.Errorf("Failed to retrieve access token:: %w", err)
	}

	if useCache && !expiry.IsZero() {
		if err := p.writeGcloudAccessTokenToCache(token, *expiry); err != nil {
			// log and ignore error as writing to cache is best effort
			klog.V(4).Infof("Failed to write gcloud access token to cache with error: %v", err)
		}
	}

	return token, &metav1.Time{Time: *expiry}, nil
}

func (p *plugin) writeGcloudAccessTokenToCache(accessToken string, expiry time.Time) error {
	startingConfig, err := p.k8sStartingConfig()
	if err != nil {
		return fmt.Errorf("error getting starting config: %w", err)
	}

	// Format the []string of extra args to a single string because marshalling []string is finicky.
	// Since this just acts as a key for the cache we dont need to keep it formatted for executing
	extraArgs := p.tokenProvider.getExtraArgs()
	extraArgsString := strings.Join(extraArgs, " ")

	c := cache{
		CurrentContext: startingConfig.CurrentContext,
		AccessToken:    accessToken,
		TokenExpiry:    expiry.Format(time.RFC3339Nano),
		ExtraArgs:      extraArgsString,
	}

	formatted, err := formatToJSON(c)
	if err != nil {
		return err
	}

	return p.writeCacheFile(formatted)
}

func (p *plugin) getCachedGcloudAccessToken() (string, *metav1.Time, error) {
	cacheFilePath := p.getCacheFilePath()
	content, err := p.readFile(cacheFilePath)
	if err != nil {
		return "", nil, err
	}
	var c cache
	if err = json.Unmarshal(content, &c); err != nil {
		return "", nil, fmt.Errorf("cache file unmarshal resulted in error: %w", err)
	}

	if c.AccessToken == "" {
		return "", nil, fmt.Errorf("cached token is empty")
	}

	expiryTimeStamp, err := time.Parse(time.RFC3339Nano, c.TokenExpiry)
	if err != nil {
		return "", nil, fmt.Errorf("error parsing timestamp %s, %w", c.TokenExpiry, err)
	}

	// Check if the cached token is valid for 10 secs (this check comes from oauth2 token.Valid())
	if p.timeNow().After(expiryTimeStamp.Add(-10 * time.Second)) {
		return "", nil, fmt.Errorf("cached token is expiring in 10 seconds")
	}

	startingConfig, err := p.k8sStartingConfig()
	if err != nil {
		return "", nil, fmt.Errorf("error retrieving starting config: %w", err)
	}
	// If current context is not the same as what the cached access token was
	// generated for, then consider the current access token invalid.
	if c.CurrentContext != startingConfig.CurrentContext {
		return "", nil, fmt.Errorf("cache is invalid as the k8s starting config changed")
	}

	// If the args passed when generating this token differ from those passed
	// when the cached token was created, the cached token is invalid
	if c.ExtraArgs != strings.Join(p.tokenProvider.getExtraArgs(), " ") {
		return "", nil, fmt.Errorf("cache is invalid as the passed in args have changed")
	}

	return c.AccessToken, &metav1.Time{Time: expiryTimeStamp}, nil
}

func k8sStartingConfig() (*clientcmdapi.Config, error) {
	po := clientcmd.NewDefaultPathOptions()
	return po.GetStartingConfig()
}

func writeCacheFile(content string) error {
	cacheFilePath := getCacheFilePath()
	// File is atomically created with 0600 - the same permissions as ~/.kube/config file.
	// ls ~/.kube/ -al
	// -rw-------  1 username primarygroup 2836 Jan 27 08:00 config
	// -rw-------  1 username primarygroup  327 Jan 27 08:00 gke_gcloud_auth_plugin_cache
	//
	// However if the file already exists, WriteFile honors the existing permissions.
	// If the file exists we check we have permission to set permissions.
	// We force the file permissions to 0600 after the file is written to be safe.
	if _, err := os.Stat(cacheFilePath); err == nil { // File exists
		err = os.Chmod(cacheFilePath, 0600)
		if err != nil {
			return err
		}
	}
	err := atomic.WriteFile(cacheFilePath, strings.NewReader(content))
	if err != nil {
		return err
	}
	return os.Chmod(cacheFilePath, 0600)
}

func getCacheFilePath() string {
	po := clientcmd.NewDefaultPathOptions()
	kubeconfig := po.GetDefaultFilename()
	dir := filepath.Dir(kubeconfig)
	cacheFilePath := filepath.Join(dir, cacheFileName)
	return cacheFilePath
}

func executeCommand(name string, arg ...string) ([]byte, error) {
	cmd := exec.Command(name, arg...)
	var stdoutBuffer bytes.Buffer
	var stderrBuffer bytes.Buffer
	cmd.Stdout = &stdoutBuffer
	cmd.Stderr = &stderrBuffer
	err := cmd.Run()
	if err != nil {
		return nil, fmt.Errorf("failure while executing %s, with args %v: %w (err: %s)", name, arg, err, stderrBuffer.String())
	}
	return stdoutBuffer.Bytes(), nil
}

func readFile(filename string) ([]byte, error) {
	return os.ReadFile(filename)
}

func timeNow() time.Time {
	return time.Now()
}

func formatToJSON(i interface{}) (string, error) {
	s, err := json.MarshalIndent(i, "", "    ")
	if err != nil {
		return "", err
	}
	return string(s), nil
}


================================================
FILE: cmd/gke-gcloud-auth-plugin/cred_test.go
================================================
package main

import (
	"context"
	"fmt"
	"path"
	"testing"
	"time"

	"github.com/google/go-cmp/cmp"
	"golang.org/x/oauth2"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	clientauthv1b1 "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)

type mockTokenSource struct{}

func (*mockTokenSource) Token() (*oauth2.Token, error) {
	return &oauth2.Token{
		TokenType:   "bearer",
		AccessToken: "default_access_token",
		Expiry:      time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC),
	}, nil
}

var (
	activeUserConfig              = "default"
	fakeConfigDefault             = `[core]\naccount = username@google.com\nproject = username-gke-dev\n\n[container]\nuse_application_default_credentials = false\ncluster = username-cluster\n\n[compute]\nzone = us-central1-c\n\n`
	fakeAccount                   = "fakeAccount"
	fakeProject                   = "fakeProject"
	fakeImpersonateServiceAccount = "fakeServiceAccount"

	baseCacheFile = `
{
    "current_context": "%s",
    "access_token": "%s",
    "token_expiry": "%s",
	"extra_args": "%s"
}
`
	invalidCacheFile   = "invalid_cache_file"
	fakeCurrentContext = "gke_user-gke-dev_us-east1-b_cluster-1"
	cachedAccessToken  = "ya29.cached_token"

	validCacheFile = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"")

	validCacheFileWithExtraArgs = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		fmt.Sprintf("--project=%s --account=%s", fakeProject, fakeAccount))

	validCacheFileWithImpersonateServiceAccount = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"--impersonate-service-account="+fakeImpersonateServiceAccount)

	cacheFileWithTokenExpired = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"")

	cachedFileAccessTokenIsEmpty = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		"",
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"")

	cachedFileExpiryTimestampIsMalformed = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		"bad time stamp",
		"")

	cachedFileClusterContextChanged = fmt.Sprintf(baseCacheFile,
		"old cluster context",
		cachedAccessToken,
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"")

	cachedFileWithBadExtraArgs = fmt.Sprintf(baseCacheFile,
		fakeCurrentContext,
		cachedAccessToken,
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"FakeArgs")

	baseCacheFileWithAuthzToken = `{
    "current_context": "gke_user-gke-dev_us-east1-b_cluster-1",
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": ""
}`
	cachedFileAutzTokenPathChanged = baseCacheFileWithAuthzToken //fmt.Sprintf(baseCacheFileWithAuthzToken, "old_Path", "")
	cachedFileAutzTokenChanged     = baseCacheFileWithAuthzToken //fmt.Sprintf(baseCacheFileWithAuthzToken, "auth-token-test-file", "old-authz-t0k3n")

	wantCacheFile = `{
    "current_context": "gke_user-gke-dev_us-east1-b_cluster-1",
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": ""
}`

	wantCacheFileWithExtraArgs = `{
    "current_context": "gke_user-gke-dev_us-east1-b_cluster-1",
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": "--project=` + fakeProject + ` --account=` + fakeAccount + `"
}`

	wantCacheFileImpersonateServiceAccount = `{
    "current_context": "gke_user-gke-dev_us-east1-b_cluster-1",
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": "--impersonate-service-account=` + fakeImpersonateServiceAccount + `"
}`

	wantCacheFileWithAuthzToken = `{
    "current_context": "gke_user-gke-dev_us-east1-b_cluster-1",
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": ""
}`

	// Edge cloud test helpers
	fakeEdgeCloudLocation = "us-central-fake"
	fakeEdgeCloudCluster  = "fake-edge-cloud-cluster"
	kubeCtlStartingConfig = fakeCurrentContext

	validEdgeCloudCacheFile = fmt.Sprintf(baseCacheFile,
		kubeCtlStartingConfig,
		"EdgeCloud_CachedAccessToken",
		time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"fake-edge-cloud-cluster --project= --location=us-central-fake --format=json",
	)

	expiredEdgeCloudCacheFile = fmt.Sprintf(baseCacheFile,
		kubeCtlStartingConfig,
		"EdgeCloud_CachedAccessToken",
		time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC).Format(time.RFC3339Nano),
		"fake-edge-cloud-cluster --project= --location=us-central-fake --format=json",
	)

	wantEdgeCloudCacheFile = fmt.Sprintf(`{
    "current_context": "%s",
    "access_token": "EdgeCloud_NewAccessToken",
    "token_expiry": "2022-01-01T00:00:00Z",
    "extra_args": "fake-edge-cloud-cluster --project=%s --location=us-central-fake --format=json"
}`, kubeCtlStartingConfig, fakeProject)
)

func TestExecCredential(t *testing.T) {
	newYears := time.Date(2022, 1, 1, 0, 0, 0, 0, time.UTC)
	cacheFilesWrittenBySubtest := make(map[string]string)

	testCases := []struct {
		testName       string
		p              *plugin
		wantToken      *clientauthv1b1.ExecCredential
		wantCacheFile  string
		wantGcloudArgs []string
	}{
		{
			testName: "ApplicationDefaultCredentialsSetToTrue",
			p: &plugin{
				k8sStartingConfig: nil, // this code should be unreachable when ADC is set to true,
				getCacheFilePath:  nil, // this code should be unreachable when ADC is set to true,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				writeCacheFile:    nil, // this code should be unreachable when ADC is set to true
				tokenProvider: &defaultCredentialsTokenProvider{
					googleDefaultTokenSource: fakeDefaultTokenSource,
				},
			},
			wantToken: fakeExecCredential("default_access_token", &metav1.Time{Time: newYears}),
		},
		{
			testName: "NewGcloudAccessToken",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
			wantGcloudArgs: []string{
				"config",
				"config-helper",
				"--format=json",
			},
		},
		{
			testName: "NewGcloudAccessTokenWithExtraArgs",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
					account:             fakeAccount,
					project:             fakeProject,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFileWithExtraArgs,
			wantGcloudArgs: []string{
				"config",
				"config-helper",
				"--format=json",
				"--project=" + fakeProject,
				"--account=" + fakeAccount,
			},
		},
		{
			testName: "NewGcloudAccessTokenWithImpersonateServiceAccount",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw:       fakeGcloudConfigOutput,
					readFile:                  fakeReadFile,
					impersonateServiceAccount: fakeImpersonateServiceAccount,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFileImpersonateServiceAccount,
			wantGcloudArgs: []string{
				"config",
				"config-helper",
				"--format=json",
				"--impersonate-service-account=" + fakeImpersonateServiceAccount,
			},
		},
		{
			testName: "GetK8sStartingConfigFails",
			p: &plugin{
				k8sStartingConfig: func() (*clientcmdapi.Config, error) {
					return nil, fmt.Errorf("error reading starting config")
				},
				getCacheFilePath: fakeGetCacheFilePath,
				readFile:         fakeReadFile,
				timeNow:          fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken: fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
		},
		{
			testName: "CachedFileIsValid",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(validCacheFile), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: nil, // Code should be unreachable in this test
					readFile:            nil, // Code should be unreachable in this test
				},
			},
			wantToken: fakeExecCredential("ya29.cached_token", &metav1.Time{Time: time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC)}),
		},
		{
			testName: "CachedFileIsValidExtraArgs",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(validCacheFileWithExtraArgs), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: nil, // Code should be unreachable in this test
					readFile:            nil, // Code should be unreachable in this test
					project:             fakeProject,
					account:             fakeAccount,
				},
			},
			wantToken: fakeExecCredential("ya29.cached_token", &metav1.Time{Time: time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC)}),
		},
		{
			testName: "CachedFileIsValidImpersonateServiceAccount",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(validCacheFileWithImpersonateServiceAccount), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw:       nil, // Code should be unreachable in this test
					readFile:                  nil, // Code should be unreachable in this test
					impersonateServiceAccount: fakeImpersonateServiceAccount,
				},
			},
			wantToken: fakeExecCredential("ya29.cached_token", &metav1.Time{Time: time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC)}),
		},
		{
			testName: "cachedFileIsNotPresent",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(""), fmt.Errorf("file not found")
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "cachedFileIsMalformed",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte("cache_file_is_malformed"), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "cachedFileExpiryTimestampIsMalformed",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileExpiryTimestampIsMalformed), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "cachedFileAccessTokenIsEmpty",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileAccessTokenIsEmpty), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "cachedFileClusterContextChanged",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileClusterContextChanged), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "cachedFileExtraArgsChanged",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileWithBadExtraArgs), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFile,
		},
		{
			testName: "CachingFailsSafely",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				writeCacheFile:    func(content string) error { return fmt.Errorf("error writing cache file") },
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: "",
		},
		{
			testName: "GcloudAccessTokenWithAuthorizationToken",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigWithAuthzTokenOutput,
					readFile: func(filename string) ([]byte, error) {
						switch filename {
						case "/usr/local/google/home/username/.config/gcloud/active_config":
							return []byte("username-inspect-k8s"), nil
						case "/Users/username/.config/gcloud/active_config":
							return []byte("username-inspect-k8s"), nil
						case "/usr/local/google/home/username/.config/gcloud/configurations/fakeConfigDefault":
							return []byte(""), nil
						case "auth-token-test-file":
							return []byte("authz-t0k3n"), nil
						default:
							return fakeReadFile(filename)
						}
					},
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFileWithAuthzToken,
		},
		{
			testName: "GcloudAccessTokenFromAccessTokenFile",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigWithAccessTokenFileOutput,
					readFile:            fakeReadFile,
				},
			},
			wantToken:     fakeExecCredential("ya29.token_from_file", nil),
			wantCacheFile: "",
		},
		{
			testName: "CachedFileWithAuthzTokenFilePathChanged",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileAutzTokenPathChanged), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigWithAuthzTokenOutput,
					readFile: func(filename string) ([]byte, error) {
						switch filename {
						case "auth-token-test-file":
							return []byte("authz-t0k3n"), nil
						default:
							return fakeReadFile(filename)
						}
					},
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFileWithAuthzToken,
		},
		{
			testName: "CachedFileWithAuthzTokenChanged",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(cachedFileAutzTokenChanged), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudTokenProvider{
					readGcloudConfigRaw: fakeGcloudConfigWithAuthzTokenOutput,
					readFile: func(filename string) ([]byte, error) {
						switch filename {
						case "auth-token-test-file":
							return []byte("authz-t0k3n"), nil
						default:
							return fakeReadFile(filename)
						}
					},
				},
			},
			wantToken:     fakeExecCredential("ya29.gcloud_t0k3n", &metav1.Time{Time: newYears}),
			wantCacheFile: wantCacheFileWithAuthzToken,
		},
		{
			testName: "EdgeCloudExpectsCachedTokenWhenValidCacheExists",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(validEdgeCloudCacheFile), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudEdgeCloudTokenProvider{
					location:    fakeEdgeCloudLocation,
					clusterName: fakeEdgeCloudCluster,
					getTokenRaw: nil, // Code should be unreachable in this test
				},
			},
			wantToken: fakeExecCredential("EdgeCloud_CachedAccessToken", &metav1.Time{Time: time.Date(2022, 1, 3, 0, 0, 0, 0, time.UTC)}),
		},
		{
			testName: "EdgeCloudExpectsNewTokenWhenNoCacheExists",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile:          fakeReadFile,
				timeNow:           fakeTimeNow,
				tokenProvider: &gcloudEdgeCloudTokenProvider{
					location:    fakeEdgeCloudLocation,
					clusterName: fakeEdgeCloudCluster,
					project:     fakeProject,
					getTokenRaw: fakeEdgeCloudTokenOutput,
				},
			},
			wantToken:     fakeExecCredential("EdgeCloud_NewAccessToken", &metav1.Time{Time: newYears}),
			wantCacheFile: wantEdgeCloudCacheFile,
			wantGcloudArgs: []string{
				"edge-cloud",
				"container",
				"clusters",
				"print-access-token",
				"fake-edge-cloud-cluster",
				"--project=" + fakeProject,
				"--location=us-central-fake",
				"--format=json",
			},
		},
		{
			testName: "EdgeCloudExpectsNewTokenWhenCacheFileExpires",
			p: &plugin{
				k8sStartingConfig: fakeK8sStartingConfig,
				getCacheFilePath:  fakeGetCacheFilePath,
				readFile: func(filename string) ([]byte, error) {
					switch filename {
					case fakeGetCacheFilePath():
						return []byte(expiredEdgeCloudCacheFile), nil
					default:
						return fakeReadFile(filename)
					}
				},
				timeNow: fakeTimeNow,
				tokenProvider: &gcloudEdgeCloudTokenProvider{
					location:    fakeEdgeCloudLocation,
					clusterName: fakeEdgeCloudCluster,
					project:     fakeProject,
					getTokenRaw: fakeEdgeCloudTokenOutput,
				},
			},
			wantToken:     fakeExecCredential("EdgeCloud_NewAccessToken", &metav1.Time{Time: newYears}),
			wantCacheFile: wantEdgeCloudCacheFile,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.testName, func(t *testing.T) {
			// Setup cache file writer func for subtest
			tc.p.writeCacheFile = func(content string) error {
				cacheFilesWrittenBySubtest[tc.testName] = content
				return nil
			}

			// Run
			ec, err := tc.p.execCredential()
			if err != nil {
				t.Fatalf("err should be nil: %v", err)
			}

			if diff := cmp.Diff(tc.wantToken, ec); diff != "" {
				t.Errorf("execCredential() returned unexpected diff (-want +got): %s", diff)
			}

			if tc.wantCacheFile != "" {
				gotCacheFile, present := cacheFilesWrittenBySubtest[tc.testName]
				if !present {
					t.Fatalf("Cache file is expected for subtest %s", tc.testName)
				}
				if diff := cmp.Diff(tc.wantCacheFile, gotCacheFile); diff != "" {
					t.Errorf("unexpected cachefile write (-want +got): %s", diff)
				}
			}

			if tc.wantGcloudArgs != nil {
				if diff := cmp.Diff(tc.wantGcloudArgs, tc.p.tokenProvider.getGcloudArgs()); diff != "" {
					t.Errorf("unexpected gcloud args (-want +got): %s", diff)
				}
			}
		})
	}
}

func TestCloudsdkBasedGcloudAccessToken(t *testing.T) {
	p := &plugin{
		k8sStartingConfig: nil,
		getCacheFilePath:  nil,
		readFile:          nil,
		timeNow:           nil,
		tokenProvider: &gcloudTokenProvider{
			readGcloudConfigRaw: nil,
			readFile:            nil,
		},
	}

	tokenForEnvVar := "gcloud_token_in_env_var"
	t.Setenv(cloudsdkAuthAccessEnvVar, tokenForEnvVar)

	ec, err := p.execCredential()
	if err != nil {
		t.Fatalf("err should be nil")
	}

	t.Setenv(cloudsdkAuthAccessEnvVar, "")

	if diff := cmp.Diff(ec.Status.Token, tokenForEnvVar); diff != "" {
		t.Errorf("unexpected token (-want +got): %s", diff)
	}

	if ec.Status.ExpirationTimestamp != nil {
		t.Errorf("unexpected expiration time stamp: %v", ec.Status.ExpirationTimestamp)
	}
}

func fakeDefaultTokenSource(ctx context.Context, scope ...string) (oauth2.TokenSource, error) {
	return &mockTokenSource{}, nil
}

func fakeGcloudConfigOutput(extraArgs []string) ([]byte, error) {
	fakeOutput := `{
  "configuration": {
    "active_configuration": "default",
    "properties": {
      "compute": {
        "zone": "us-central1-c"
      },
      "container": {
        "cluster": "user-cluster",
        "use_application_default_credentials": "false"
      },
      "core": {
        "account": "user@company.com",
        "disable_usage_reporting": "False",
        "project": "user-gke-dev"
      }
    }
  },
    "credential": {
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z"
  },
  "sentinels": {
    "config_sentinel": "/usr/local/google/home/user/.config/gcloud/config_sentinel"
  }
}`
	return []byte(fakeOutput), nil
}

func fakeGcloudConfigWithAuthzTokenOutput(extraArgs []string) ([]byte, error) {
	return []byte(`
{
  "configuration": {
    "active_configuration": "inspect-username-k8s",
    "properties": {
      "auth": {
        "authorization_token_file": "auth-token-test-file"
      }
    }
  },
  "credential": {
    "access_token": "ya29.gcloud_t0k3n",
    "token_expiry": "2022-01-01T00:00:00Z"
  }
}
`), nil
}

func fakeGcloudConfigWithAccessTokenFileOutput(extraArgs []string) ([]byte, error) {
	return []byte(`
{
  "configuration": {
    "active_configuration": "default",
    "properties": {
      "auth": {
        "access_token_file": "/usr/local/google/home/username/Desktop/gcloud_test_token"
      },
      "compute": {
        "zone": "us-central1-c"
      },
      "container": {
        "cluster": "username-cluster",
        "use_application_default_credentials": "false"
      },
      "core": {
        "account": "username@google.com",
        "disable_usage_reporting": "False",
        "project": "username-gke-dev"
      }
    }
  },
  "credential": {
    "access_token": "ya29.token_from_file",
    "id_token": null,
    "token_expiry": null
  },
  "sentinels": {
    "config_sentinel": "/usr/local/google/home/username/.config/gcloud/config_sentinel"
  }
}
`), nil
}

func fakeReadFile(filename string) ([]byte, error) {
	m := make(map[string]string)

	m[path.Join("/home/username/.kube", cacheFileName)] = cacheFileWithTokenExpired
	m[path.Join("/Users/username/.config/gcloud", activeConfig)] = activeUserConfig
	m["/Users/username/.config/gcloud/configurations/fakeConfigDefault"] = fakeConfigDefault

	file, present := m[filename]
	if !present {
		return []byte(""), fmt.Errorf("filename %s was not found", filename)
	}
	return []byte(file), nil
}

func fakeGetCacheFilePath() string {
	return path.Join("/home/username/.kube", cacheFileName)
}

func fakeK8sStartingConfig() (*clientcmdapi.Config, error) {
	return &clientcmdapi.Config{
		Kind:        "Config",
		APIVersion:  "v1",
		Preferences: clientcmdapi.Preferences{},
		Clusters:    nil,
		AuthInfos: map[string]*clientcmdapi.AuthInfo{
			"gke_user-gke-dev_us-east1-b_cluster-1": {
				Exec: &clientcmdapi.ExecConfig{
					Env: nil,
				},
			},
		},
		Contexts: map[string]*clientcmdapi.Context{
			"gke_user-gke-dev_us-east1-b_cluster-1": {
				Cluster:  "gke_user-gke-dev_us-east1-b_cluster-1",
				AuthInfo: "gke_user-gke-dev_us-east1-b_cluster-1",
			},
		},
		CurrentContext: "gke_user-gke-dev_us-east1-b_cluster-1",
		Extensions:     nil,
	}, nil
}

func fakeExecCredential(token string, expiry *metav1.Time) *clientauthv1b1.ExecCredential {
	return &clientauthv1b1.ExecCredential{
		TypeMeta: metav1.TypeMeta{
			Kind:       "ExecCredential",
			APIVersion: "client.authentication.k8s.io/v1beta1",
		},
		Status: &clientauthv1b1.ExecCredentialStatus{
			Token:               token,
			ExpirationTimestamp: expiry,
		},
	}
}

func fakeTimeNow() time.Time {
	return time.Date(2022, 1, 2, 0, 0, 0, 0, time.UTC)
}

func fakeEdgeCloudTokenOutput(extraArgs []string) ([]byte, error) {
	return []byte(`
	{
		"accessToken": "EdgeCloud_NewAccessToken",
		"expireTime": "2022-01-01T00:00:00Z"
	  }
`), nil
}


================================================
FILE: cmd/gke-gcloud-auth-plugin/default_credentials_token_provider.go
================================================
package main

import (
	"context"
	"fmt"
	"time"

	"golang.org/x/oauth2"
	"k8s.io/client-go/util/retry"
)

var (
	// defaultScopes:
	// - cloud-platform is the base scope to authenticate to GCP.
	// - userinfo.email is used to authenticate to GKE APIs with gserviceaccount
	//   email instead of numeric uniqueID.
	defaultScopes = []string{
		"https://www.googleapis.com/auth/cloud-platform",
		"https://www.googleapis.com/auth/userinfo.email"}
)

// defaultCredentialsTokenProvider provides default credential tokens.
type defaultCredentialsTokenProvider struct {
	googleDefaultTokenSource func(ctx context.Context, scope ...string) (oauth2.TokenSource, error)
}

func (p *defaultCredentialsTokenProvider) token() (string, *time.Time, error) {
	var tok *oauth2.Token

	// Retries (max 4 retries with approx delay 10*ms+jitter setup) help get around occasional network glitches
	err := retry.OnError(retry.DefaultBackoff, func(err error) bool { return true }, func() error {
		ts, err := p.googleDefaultTokenSource(context.Background(), defaultScopes...)
		if err != nil {
			return fmt.Errorf("cannot construct google default token source: %w", err)
		}

		tok, err = ts.Token()
		if err != nil {
			return fmt.Errorf("cannot retrieve default token from google default token source: %w", err)
		}

		return nil
	})
	if err != nil {
		return "", nil, fmt.Errorf("getting google default token failed after multiple retries: %w", err)
	}

	return tok.AccessToken, &tok.Expiry, nil
}

func (p *defaultCredentialsTokenProvider) useCache() bool { return false }

func (p *defaultCredentialsTokenProvider) getExtraArgs() []string { return []string{} }

func (p *defaultCredentialsTokenProvider) getGcloudArgs() []string { return []string{} }


================================================
FILE: cmd/gke-gcloud-auth-plugin/gcloud_edge_cloud_token_provider.go
================================================
package main

import (
	"encoding/json"
	"fmt"
	"time"
)

// gcloudEdgeCloudTokenProvider provides gcloud edge-cloud tokens.
type gcloudEdgeCloudTokenProvider struct {
	project                   string
	location                  string
	clusterName               string
	impersonateServiceAccount string
	getTokenRaw               func(args []string) ([]byte, error)
}

// gcloudEdgeCloudToken holds types unmarshaled from the edge cloud access token in json format
type gcloudEdgeCloudToken struct {
	AccessToken string    `json:"accessToken"`
	TokenExpiry time.Time `json:"expireTime"`
}

func (p *gcloudEdgeCloudTokenProvider) token() (string, *time.Time, error) {
	gcloudArgs := p.getGcloudArgs()
	edgeCloudTokenBytes, err := p.getTokenRaw(gcloudArgs)
	if err != nil {
		return "", nil, err
	}

	var tok gcloudEdgeCloudToken
	if err := json.Unmarshal(edgeCloudTokenBytes, &tok); err != nil {
		return "", nil, fmt.Errorf("error parsing gcloud output: %w", err)
	}

	return tok.AccessToken, &tok.TokenExpiry, nil
}

func (p *gcloudEdgeCloudTokenProvider) useCache() bool { return true }

func (p *gcloudEdgeCloudTokenProvider) getExtraArgs() []string {
	args := []string{p.clusterName, fmt.Sprintf("--project=%s", p.project), fmt.Sprintf("--location=%s", p.location), "--format=json"}
	if p.impersonateServiceAccount != "" {
		args = append(args, fmt.Sprintf("--impersonate-service-account=%s", p.impersonateServiceAccount))
	}
	return args
}

func (p *gcloudEdgeCloudTokenProvider) getGcloudArgs() []string {
	args := []string{"edge-cloud", "container", "clusters", "print-access-token"}
	args = append(args, p.getExtraArgs()...)
	return args
}

func getGcloudEdgeCloudTokenRaw(args []string) ([]byte, error) {
	return executeCommand("gcloud", args...)
}


================================================
FILE: cmd/gke-gcloud-auth-plugin/gcloud_token_provider.go
================================================
package main

import (
	"encoding/json"
	"fmt"
	"os"
	"time"

	"k8s.io/klog/v2"
)

// gcloudConfiguration holds types unmarshaled from gcloud config in json format
type gcloudConfiguration struct {
	Credential struct {
		AccessToken string    `json:"access_token"`
		TokenExpiry time.Time `json:"token_expiry"`
	} `json:"credential"`
	Configuration struct {
		Properties struct {
			Auth struct {
				AuthorizationTokenFile string `json:"authorization_token_file"`
			} `json:"auth"`
		} `json:"properties"`
	} `json:"configuration"`
}

// gcloudTokenProvider provides gcloud OAth 2.0 tokens.
type gcloudTokenProvider struct {
	readGcloudConfigRaw       func(args []string) ([]byte, error)
	readFile                  func(filename string) ([]byte, error)
	account                   string
	project                   string
	impersonateServiceAccount string
}

// readGcloudConfig returns an object which represents gcloud config output
func (p *gcloudTokenProvider) readGcloudConfig(extraArgs []string) (*gcloudConfiguration, error) {
	gcloudConfigBytes, err := p.readGcloudConfigRaw(extraArgs)
	if err != nil {
		return nil, err
	}
	var gc gcloudConfiguration
	if err := json.Unmarshal(gcloudConfigBytes, &gc); err != nil {
		return nil, fmt.Errorf("error parsing gcloud output: %w", err)
	}

	return &gc, nil
}

func (p *gcloudTokenProvider) token() (string, *time.Time, error) {
	cloudsdkAuthAccessToken := os.Getenv(cloudsdkAuthAccessEnvVar)
	if cloudsdkAuthAccessToken != "" {
		klog.V(4).Infof("Returning token from Environment Variable CLOUDSDK_AUTH_ACCESS_TOKEN as it is populated")
		return cloudsdkAuthAccessToken, &time.Time{}, nil
	}
	gcloudArgs := p.getGcloudArgs()
	gc, err := p.readGcloudConfig(gcloudArgs)
	if err != nil {
		return "", nil, err
	}

	if gc.Credential.AccessToken == "" {
		return "", nil, fmt.Errorf("gcloud config config-helper returned an empty access token")
	}

	return gc.Credential.AccessToken, &gc.Credential.TokenExpiry, nil
}

func (p *gcloudTokenProvider) useCache() bool {
	cloudsdkAuthAccessToken := os.Getenv(cloudsdkAuthAccessEnvVar)
	if cloudsdkAuthAccessToken != "" {
		klog.V(4).Infof("cache is not being used as %s is populated", cloudsdkAuthAccessEnvVar)
		return false
	}
	return true
}

func (p *gcloudTokenProvider) getExtraArgs() []string {
	extraArgs := make([]string, 0, 3)
	if p.project != "" {
		extraArgs = append(extraArgs, fmt.Sprintf("--project=%s", p.project))
	}
	if p.account != "" {
		extraArgs = append(extraArgs, fmt.Sprintf("--account=%s", p.account))
	}
	if p.impersonateServiceAccount != "" {
		extraArgs = append(extraArgs, fmt.Sprintf("--impersonate-service-account=%s", p.impersonateServiceAccount))
	}
	return extraArgs
}

func (p *gcloudTokenProvider) getGcloudArgs() []string {
	args := []string{
		"config",
		"config-helper",
		"--format=json",
	}
	args = append(args, p.getExtraArgs()...)
	return args
}

func readGcloudConfigRaw(args []string) ([]byte, error) {
	klog.V(4).Infof("Executing gcloud command with args: %v", args)
	return executeCommand("gcloud", args...)
}


================================================
FILE: cmd/gke-gcloud-auth-plugin/token_provider.go
================================================
package main

import (
	"time"
)

type tokenProvider interface {
	// token returns a new token, and the expiry of that token
	token() (token string, expiry *time.Time, err error)
	// useCache returns whether or not tokens from this providers should be cached
	useCache() bool
	// extraArgs returns all of the extra arguments passed along when getting the token
	getExtraArgs() []string
	// getGcloudArgs command args gets all of the arguments passed to gcloud for getting the token
	getGcloudArgs() []string
}


================================================
FILE: code-of-conduct.md
================================================
# Kubernetes Community Code of Conduct

Please refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/community/code-of-conduct.md)


================================================
FILE: deploy/cloud-controller-manager.manifest
================================================
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
  "name":"cloud-controller-manager",
  "namespace": "kube-system",
  "annotations": {
    "scheduler.alpha.kubernetes.io/critical-pod": ""
  },
  "labels": {
    "tier": "control-plane",
    "component": "cloud-controller-manager"
  }
},
"spec":{
"securityContext": {
  {{runAsUser}}
  {{runAsGroup}}
  {{supplementalGroups}}
  "seccompProfile": {
      "type": "RuntimeDefault"
  }
},
"priorityClass": "system-node-critical",
"hostNetwork": true,
"containers":[
    {
    "name": "cloud-controller-manager",
    "image": "{{pillar['kube_docker_registry']}}/cloud-controller-manager:{{pillar['cloud-controller-manager_docker_tag']}}",
    "resources": {
      "requests": {
        "cpu": "{{cpurequest}}"
      }
    },
    "args": [
      "--log-file=/var/log/cloud-controller-manager.log",
      "--also-stdout=false",
      "--redirect-stderr=true",
      "/cloud-controller-manager",
      {{params}}
    ],
    {{container_env}}
    "livenessProbe": {
      "httpGet": {
        "host": "127.0.0.1",
        "port": 10258,
        "scheme": "HTTPS",
        "path": "/healthz"
      },
      "initialDelaySeconds": 15,
      "timeoutSeconds": 15
    },
    "volumeMounts": [
        {{cloud_config_mount}}
        {{additional_cloud_config_mount}}
        {{pv_recycler_mount}}
        { "name": "srvkube",
        "mountPath": "/etc/srv/kubernetes",
        "readOnly": true},
        {{flexvolume_hostpath_mount}}
        { "name": "logfile",
        "mountPath": "/var/log/cloud-controller-manager.log",
        "readOnly": false},
        { "name": "etcssl",
        "mountPath": "/etc/ssl",
        "readOnly": true},
        { "name": "usrsharecacerts",
        "mountPath": "/usr/share/ca-certificates",
        "readOnly": true},
        { "name": "varssl",
        "mountPath": "/var/ssl",
        "readOnly": true},
        { "name": "etcopenssl",
        "mountPath": "/etc/openssl",
        "readOnly": true},
        { "name": "etcpki",
        "mountPath": "/etc/pki",
        "readOnly": true}
      ]
    }
],
"volumes":[
  {{cloud_config_volume}}
  {{additional_cloud_config_volume}}
  {{pv_recycler_volume}}
  { "name": "srvkube",
    "hostPath": {
        "path": "/etc/srv/kubernetes"}
  },
  {{flexvolume_hostpath}}
  { "name": "logfile",
    "hostPath": {
        "path": "/var/log/cloud-controller-manager.log",
        "type": "FileOrCreate"}
  },
  { "name": "etcssl",
    "hostPath": {
        "path": "/etc/ssl"}
  },
  { "name": "usrsharecacerts",
    "hostPath": {
        "path": "/usr/share/ca-certificates"}
  },
  { "name": "varssl",
    "hostPath": {
        "path": "/var/ssl"}
  },
  { "name": "etcopenssl",
    "hostPath": {
        "path": "/etc/openssl"}
  },
  { "name": "etcpki",
    "hostPath": {
        "path": "/etc/pki"}
  }
]
}}


================================================
FILE: deploy/cloud-node-controller-binding.yaml
================================================
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system::leader-locking-cloud-controller-manager
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: system::leader-locking-cloud-controller-manager
subjects:
- kind: ServiceAccount
  name: cloud-controller-manager
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:cloud-controller-manager
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:cloud-controller-manager
subjects:
- kind: User
  apiGroup: rbac.authorization.k8s.io
  name: system:cloud-controller-manager
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:controller:cloud-node-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:controller:cloud-node-controller
subjects:
- kind: ServiceAccount
  name: cloud-node-controller
  namespace: kube-system



================================================
FILE: deploy/cloud-node-controller-role.yaml
================================================
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:cloud-controller-manager
rules:
- apiGroups:
  - networking.gke.io
  resources:
  - network
  verbs:
  - get
- apiGroups:
  - networking.gke.io
  resources:
  - network/status
  - gkenetworkparamset
  - gkenetworkparamset/status
  verbs:
  - update
  - get
- apiGroups:
  - ""
  - events.k8s.io
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - create
- apiGroups:
  - coordination.k8s.io
  resourceNames:
  - cloud-controller-manager
  resources:
  - leases
  verbs:
  - get
  - update
- apiGroups:
  - ""
  resources:
  - endpoints
  - serviceaccounts
  verbs:
  - create
  - get
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - create
  - delete
  - get
  - update
- apiGroups:
  - "authentication.k8s.io"
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts/token
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system::leader-locking-cloud-controller-manager
  namespace: kube-system
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  resourceNames:
  - cloud-controller-manager
  verbs:
  - get
  - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:controller:cloud-node-controller
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - update
  - delete
  - patch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - get
  - list
  - update
  - delete
  - patch

- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - list
  - delete
- apiGroups:
  - ""
  resources:
  - pods/status
  verbs:
  - list
  - delete



================================================
FILE: deploy/packages/default/kustomization.yaml
================================================
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - manifest.yaml


================================================
FILE: deploy/packages/default/manifest.yaml
================================================
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cloud-controller-manager
  namespace: kube-system
  labels:
    component: cloud-controller-manager
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
spec:
  selector:
    matchLabels:
      component: cloud-controller-manager
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        tier: control-plane
        component: cloud-controller-manager
    spec:
      nodeSelector: null
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/control-plane
                operator: Exists
            - matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
      tolerations:
      - key: node.cloudprovider.kubernetes.io/uninitialized
        value: "true"
        effect: NoSchedule
      - key: node.kubernetes.io/not-ready
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: node-role.kubernetes.io/control-plane
        effect: NoSchedule
      serviceAccountName: cloud-controller-manager
      containers:
      - name: cloud-controller-manager
        image: k8scloudprovidergcp/cloud-controller-manager:latest
        imagePullPolicy: IfNotPresent
        # ko puts it somewhere else... command: ['/usr/local/bin/cloud-controller-manager']
        args: [] # args must be replaced by tooling
        env:
        - name: KUBERNETES_SERVICE_HOST
          value: "127.0.0.1"
        livenessProbe:
          failureThreshold: 3
          httpGet:
            host: 127.0.0.1
            path: /healthz
            port: 10258
            scheme: HTTPS
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        resources:
          requests:
            cpu: "200m"
        volumeMounts:
        - mountPath: /etc/kubernetes/cloud.config
          name: cloudconfig
          readOnly: true
      hostNetwork: true
      priorityClassName: system-cluster-critical
      volumes:
      - hostPath:
          path: /etc/kubernetes/cloud.config
          type: ""
        name: cloudconfig
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cloud-controller-manager
  namespace: kube-system
  labels:
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cloud-controller-manager:apiserver-authentication-reader
  namespace: kube-system
  labels:
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- apiGroup: ""
  kind: ServiceAccount
  name: cloud-controller-manager
  namespace: kube-system
---

# https://github.com/kubernetes/cloud-provider-gcp/blob/master/deploy/cloud-node-controller-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:cloud-controller-manager
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
rules:
- apiGroups:
  - ""
  - events.k8s.io
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - create
  - get
  - list
  - watch
  - update
- apiGroups:
  - coordination.k8s.io
  resourceNames:
  - cloud-controller-manager
  resources:
  - leases
  verbs:
  - get
  - update
- apiGroups:
  - ""
  resources:
  - endpoints
  - serviceaccounts
  - services
  verbs:
  - create
  - get
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - update
  - patch # until #393 lands
- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes/status
  - services/status
  verbs:
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - create
  - delete
  - get
  - update
- apiGroups:
  - "authentication.k8s.io"
  resources:
  - tokenreviews
  verbs:
  - create
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts/token
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: system::leader-locking-cloud-controller-manager
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
rules:
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  resourceNames:
  - cloud-controller-manager
  verbs:
  - get
  - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:controller:cloud-node-controller
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - update
  - delete
  - patch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - get
  - list
  - update
  - delete
  - patch

- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - list
  - delete
- apiGroups:
  - ""
  resources:
  - pods/status
  verbs:
  - list
  - delete
---

# https://github.com/kubernetes/cloud-provider-gcp/blob/master/deploy/cloud-node-controller-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: system::leader-locking-cloud-controller-manager
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: system::leader-locking-cloud-controller-manager
subjects:
- kind: ServiceAccount
  name: cloud-controller-manager
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:cloud-controller-manager
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:cloud-controller-manager
subjects:
- kind: ServiceAccount
  apiGroup: ""
  name: cloud-controller-manager
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:controller:cloud-node-controller
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:controller:cloud-node-controller
subjects:
- kind: ServiceAccount
  name: cloud-node-controller
  namespace: kube-system
---

# https://github.com/kubernetes/cloud-provider-gcp/blob/master/deploy/pvl-controller-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:controller:pvl-controller
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    addon.kops.k8s.io/name: gcp-cloud-controller.addons.k8s.io
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - persistentvolumeclaims
  - persistentvolumes
  verbs:
  - list
  - watch


================================================
FILE: deploy/pvl-controller-role.yaml
================================================
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:controller:pvl-controller
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
  - update
- apiGroups:
  - ""
  resources:
  - persistentvolumeclaims
  - persistentvolumes
  verbs:
  - list
  - watch



================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-conformance-latest-with-gcepd.sh
================================================
#!/bin/bash

# TODO: Use published release tars for cloud-provider-gcp if/once they exist
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

REPO_ROOT=$GOPATH/src/k8s.io/cloud-provider-gcp
cd
export GO111MODULE=on

go install sigs.k8s.io/kubetest2@latest
go install sigs.k8s.io/kubetest2/kubetest2-gce@latest
go install sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest
if [[ -f "${REPO_ROOT}/ginko-test-package-version.env" ]]; then
  export TEST_PACKAGE_VERSION=$(cat "${REPO_ROOT}/ginko-test-package-version.env")
  echo "TEST_PACKAGE_VERSION set to ${TEST_PACKAGE_VERSION}"
else
  export TEST_PACKAGE_VERSION="v1.25.0"
  echo "TEST_PACKAGE_VERSION - Falling back to v1.25.0"
fi
kubetest2 gce -v 2 --repo-root $REPO_ROOT --build --up --down --test=ginkgo --master-size e2-standard-2  -- --test-package-version="${TEST_PACKAGE_VERSION}" --focus-regex='\[Conformance\]' --test-args=--enabled-volume-drivers=gcepd


================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-conformance-latest.sh
================================================
#!/bin/bash

# TODO: Use published release tars for cloud-provider-gcp if/once they exist
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

REPO_ROOT=$GOPATH/src/k8s.io/cloud-provider-gcp
cd
export GO111MODULE=on

go install sigs.k8s.io/kubetest2@latest
go install sigs.k8s.io/kubetest2/kubetest2-gce@latest
go install sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest
if [[ -f "${REPO_ROOT}/ginko-test-package-version.env" ]]; then
  export TEST_PACKAGE_VERSION=$(cat "${REPO_ROOT}/ginko-test-package-version.env")
  echo "TEST_PACKAGE_VERSION set to ${TEST_PACKAGE_VERSION}"
else
  export TEST_PACKAGE_VERSION="v1.25.0"
  echo "TEST_PACKAGE_VERSION - Falling back to v1.25.0"
fi
kubetest2 gce -v 2 --repo-root $REPO_ROOT --build --up --down --test=ginkgo --master-size e2-standard-2  -- --test-package-version="${TEST_PACKAGE_VERSION}" --focus-regex='\[Conformance\]'


================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-kops.sh
================================================
#!/bin/bash

# Copyright 2026 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

cd $GOPATH/src/cloud-provider-gcp
e2e/add-kubernetes-to-workspace.sh

export KOPS_FOCUS_REGEX="" # Run all non-skipped tests
export KOPS_SKIP_REGEX='\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]'
export CLUSTER_NAME="kops-e2e-latest.k8s.local"

e2e/scenarios/kops-simple


================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-with-gcepd.sh
================================================
#!/bin/bash

# TODO: Use published release tars for cloud-provider-gcp if/once they exist
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

REPO_ROOT=$GOPATH/src/k8s.io/cloud-provider-gcp
cd
export GO111MODULE=on

go install sigs.k8s.io/kubetest2@latest
go install sigs.k8s.io/kubetest2/kubetest2-gce@latest
go install sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest
if [[ -f "${REPO_ROOT}/ginko-test-package-version.env" ]]; then
  export TEST_PACKAGE_VERSION=$(cat "${REPO_ROOT}/ginko-test-package-version.env")
  echo "TEST_PACKAGE_VERSION set to ${TEST_PACKAGE_VERSION}"
else
  export TEST_PACKAGE_VERSION="v1.25.0"
  echo "TEST_PACKAGE_VERSION - Falling back to v1.25.0"
fi
kubetest2 gce -v 2 --repo-root $REPO_ROOT --build --up --down --test=ginkgo --node-size e2-standard-4 --master-size e2-standard-8 -- --test-package-version="${TEST_PACKAGE_VERSION}" --parallel=30 --test-args='--minStartupPods=8 --enabled-volume-drivers=gcepd' --skip-regex='\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]'


================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-with-kubernetes-master.sh
================================================
#!/bin/bash

# TODO: Use published release tars for cloud-provider-gcp if/once they exist
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

REPO_ROOT=$GOPATH/src/k8s.io/cloud-provider-gcp
cd
export GO111MODULE=on

go install sigs.k8s.io/kubetest2@latest
go install sigs.k8s.io/kubetest2/kubetest2-gce@latest
go install sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest
if [[ -f "${REPO_ROOT}/ginko-test-package-version.env" ]]; then
  export TEST_PACKAGE_VERSION=$(cat "${REPO_ROOT}/ginko-test-package-version.env")
  echo "TEST_PACKAGE_VERSION set to ${TEST_PACKAGE_VERSION}"
else
  export TEST_PACKAGE_VERSION="v1.25.0"
  echo "TEST_PACKAGE_VERSION - Falling back to v1.25.0"
fi
cd $GOPATH/src/k8s.io/cloud-provider-gcp
e2e/add-kubernetes-to-workspace.sh
kubetest2 gce -v 2 --repo-root $REPO_ROOT --build --up --down --test=ginkgo --node-size e2-standard-4 --master-size e2-standard-8 -- --test-package-version="${TEST_PACKAGE_VERSION}" --parallel=30 --test-args='--minStartupPods=8' --skip-regex='\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]'


================================================
FILE: dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest.sh
=============
Download .txt
Showing preview only (560K chars total). Download the full file or copy to clipboard to get everything.
gitextract__43othww/

├── .gitallowed
├── .github/
│   ├── dependabot.yml
│   ├── release.yml
│   └── workflows/
│       ├── dependabot-sync.yml
│       ├── release.yml
│       ├── tag-auth-provider-gcp.yml
│       ├── tag-ccm.yml
│       └── tag-gke-gcloud-auth-plugin.yml
├── .gitignore
├── .ko.yaml
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── SECURITY_CONTACTS
├── cloudbuild.yaml
├── cmd/
│   ├── auth-provider-gcp/
│   │   ├── OWNERS
│   │   ├── app/
│   │   │   ├── getcredentials.go
│   │   │   └── getcredentials_test.go
│   │   ├── main.go
│   │   └── provider/
│   │       ├── provider.go
│   │       └── provider_test.go
│   ├── cloud-controller-manager/
│   │   ├── OWNERS
│   │   ├── gkenetworkparamsetcontroller.go
│   │   ├── gkeservicecontroller.go
│   │   ├── gkeservicecontroller_test.go
│   │   ├── gketenantcontrollermanager.go
│   │   ├── gketenantcontrollermanager_test.go
│   │   ├── main.go
│   │   ├── nodecontroller.go
│   │   ├── nodeipamcontroller.go
│   │   ├── nodeipamcontroller_test.go
│   │   ├── nodelifecyclecontroller.go
│   │   ├── nodelifecyclecontroller_test.go
│   │   └── options/
│   │       └── nodeipamcontroller.go
│   └── gke-gcloud-auth-plugin/
│       ├── OWNERS
│       ├── cred.go
│       ├── cred_test.go
│       ├── default_credentials_token_provider.go
│       ├── gcloud_edge_cloud_token_provider.go
│       ├── gcloud_token_provider.go
│       └── token_provider.go
├── code-of-conduct.md
├── deploy/
│   ├── cloud-controller-manager.manifest
│   ├── cloud-node-controller-binding.yaml
│   ├── cloud-node-controller-role.yaml
│   ├── packages/
│   │   └── default/
│   │       ├── kustomization.yaml
│   │       └── manifest.yaml
│   └── pvl-controller-role.yaml
├── dev/
│   └── ci/
│       ├── periodics/
│       │   ├── ci-cloud-provider-gcp-conformance-latest-with-gcepd.sh
│       │   ├── ci-cloud-provider-gcp-conformance-latest.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-kops.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-with-gcepd.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest-with-kubernetes-master.sh
│       │   ├── ci-cloud-provider-gcp-e2e-latest.sh
│       │   └── ci-cloud-provider-gcp-e2e-scenario-kops-simple.sh
│       └── presubmits/
│           └── cloud-provider-gcp-tests
├── docs/
│   ├── RELEASE.md
│   └── kops-quickstart.md
├── e2e/
│   ├── add-kubernetes-to-workspace.sh
│   └── scenarios/
│       └── kops-simple
├── ginko-test-package-version.env
├── go.mod
├── go.sum
├── go.work
├── go.work.sum
├── metis/
│   ├── Dockerfile
│   ├── Makefile
│   ├── api/
│   │   └── adaptiveipam/
│   │       └── v1/
│   │           ├── adaptiveipam.pb.go
│   │           ├── adaptiveipam.proto
│   │           └── adaptiveipam_grpc.pb.go
│   ├── cmd/
│   │   ├── cni.go
│   │   ├── daemon.go
│   │   ├── daemonoptions.go
│   │   └── main.go
│   ├── go.mod
│   ├── go.sum
│   ├── install-plugin.sh
│   ├── pkg/
│   │   ├── cni/
│   │   │   ├── config.go
│   │   │   ├── config_test.go
│   │   │   ├── handlers.go
│   │   │   ├── handlers_test.go
│   │   │   ├── plugin.go
│   │   │   └── types.go
│   │   ├── consts.go
│   │   ├── daemon/
│   │   │   ├── daemon.go
│   │   │   ├── daemon_server.go
│   │   │   ├── daemon_server_test.go
│   │   │   └── daemon_test.go
│   │   └── store/
│   │       ├── schema.sql
│   │       ├── store.go
│   │       └── store_test.go
│   └── test/
│       └── cni_conformance_test.go
├── pkg/
│   ├── controller/
│   │   ├── gkenetworkparamset/
│   │   │   ├── gkenetworkparamset_controller.go
│   │   │   ├── gkenetworkparamset_controller_test.go
│   │   │   ├── gkenetworkparamset_metrics.go
│   │   │   └── gnpcontroller_validations.go
│   │   ├── gketenantcontrollers/
│   │   │   ├── README.md
│   │   │   ├── cloud.go
│   │   │   ├── cloud_test.go
│   │   │   ├── starter.go
│   │   │   ├── starter_test.go
│   │   │   └── utils/
│   │   │       ├── helpers.go
│   │   │       └── helpers_test.go
│   │   ├── nodeipam/
│   │   │   ├── OWNERS
│   │   │   ├── config/
│   │   │   │   ├── doc.go
│   │   │   │   ├── types.go
│   │   │   │   ├── v1alpha1/
│   │   │   │   │   ├── conversion.go
│   │   │   │   │   ├── defaults.go
│   │   │   │   │   ├── doc.go
│   │   │   │   │   ├── register.go
│   │   │   │   │   ├── zz_generated.conversion.go
│   │   │   │   │   └── zz_generated.deepcopy.go
│   │   │   │   └── zz_generated.deepcopy.go
│   │   │   ├── doc.go
│   │   │   ├── ipam/
│   │   │   │   ├── adapter.go
│   │   │   │   ├── cidr_allocator.go
│   │   │   │   ├── cidrset/
│   │   │   │   │   ├── cidr_set.go
│   │   │   │   │   ├── cidr_set_test.go
│   │   │   │   │   └── metrics.go
│   │   │   │   ├── cloud_cidr_allocator.go
│   │   │   │   ├── cloud_cidr_allocator_metrics.go
│   │   │   │   ├── cloud_cidr_allocator_nolegacyproviders.go
│   │   │   │   ├── cloud_cidr_allocator_test.go
│   │   │   │   ├── controller_legacyprovider.go
│   │   │   │   ├── controller_test.go
│   │   │   │   ├── doc.go
│   │   │   │   ├── multinetwork_cloud_cidr_allocator.go
│   │   │   │   ├── multinetwork_cloud_cidr_allocator_test.go
│   │   │   │   ├── node_topology_syncer.go
│   │   │   │   ├── node_topology_syncer_test.go
│   │   │   │   ├── range_allocator.go
│   │   │   │   ├── range_allocator_test.go
│   │   │   │   ├── sync/
│   │   │   │   │   ├── sync.go
│   │   │   │   │   └── sync_test.go
│   │   │   │   ├── task_queue.go
│   │   │   │   ├── task_queue_test.go
│   │   │   │   ├── test/
│   │   │   │   │   └── utils.go
│   │   │   │   ├── timeout.go
│   │   │   │   └── timeout_test.go
│   │   │   ├── legacyprovider.go
│   │   │   ├── node_ipam_controller.go
│   │   │   ├── node_ipam_controller_test.go
│   │   │   ├── nolegacyprovider.go
│   │   │   └── starter.go
│   │   ├── service/
│   │   │   ├── OWNERS
│   │   │   ├── README.md
│   │   │   ├── controller.go
│   │   │   ├── controller_gke.go
│   │   │   ├── doc.go
│   │   │   └── metrics.go
│   │   └── testutil/
│   │       └── test_utils.go
│   ├── controllermetrics/
│   │   └── controllermetrics.go
│   ├── credentialconfig/
│   │   ├── README.md
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── provider.go
│   │   └── provider_test.go
│   ├── gcpcredential/
│   │   ├── README.md
│   │   └── gcpcredential.go
│   └── util/
│       ├── controller_utils.go
│       ├── node/
│       │   ├── node.go
│       │   └── node_test.go
│       └── taints/
│           ├── taints.go
│           └── taints_test.go
├── providers/
│   ├── LICENSE
│   ├── README.md
│   ├── gce/
│   │   ├── OWNERS
│   │   ├── doc.go
│   │   ├── gce.go
│   │   ├── gce_address_manager.go
│   │   ├── gce_address_manager_test.go
│   │   ├── gce_addresses.go
│   │   ├── gce_alpha.go
│   │   ├── gce_annotations.go
│   │   ├── gce_annotations_test.go
│   │   ├── gce_backendservice.go
│   │   ├── gce_cert.go
│   │   ├── gce_clusterid.go
│   │   ├── gce_clusters.go
│   │   ├── gce_disks.go
│   │   ├── gce_disks_test.go
│   │   ├── gce_fake.go
│   │   ├── gce_firewall.go
│   │   ├── gce_forwardingrule.go
│   │   ├── gce_healthchecks.go
│   │   ├── gce_instancegroup.go
│   │   ├── gce_instances.go
│   │   ├── gce_instances_test.go
│   │   ├── gce_interfaces.go
│   │   ├── gce_loadbalancer.go
│   │   ├── gce_loadbalancer_external.go
│   │   ├── gce_loadbalancer_external_deny_test.go
│   │   ├── gce_loadbalancer_external_test.go
│   │   ├── gce_loadbalancer_internal.go
│   │   ├── gce_loadbalancer_internal_test.go
│   │   ├── gce_loadbalancer_metrics.go
│   │   ├── gce_loadbalancer_metrics_test.go
│   │   ├── gce_loadbalancer_naming.go
│   │   ├── gce_loadbalancer_naming_test.go
│   │   ├── gce_loadbalancer_test.go
│   │   ├── gce_loadbalancer_utils_test.go
│   │   ├── gce_networkendpointgroup.go
│   │   ├── gce_networks.go
│   │   ├── gce_routes.go
│   │   ├── gce_securitypolicy.go
│   │   ├── gce_subnetworks.go
│   │   ├── gce_targetpool.go
│   │   ├── gce_targetproxy.go
│   │   ├── gce_test.go
│   │   ├── gce_tpu.go
│   │   ├── gce_urlmap.go
│   │   ├── gce_util.go
│   │   ├── gce_util_test.go
│   │   ├── gce_zones.go
│   │   ├── gcpcredential/
│   │   │   ├── credentialutil.go
│   │   │   ├── gcpcredential.go
│   │   │   ├── registry_marshal.go
│   │   │   └── registry_marshal_test.go
│   │   ├── metrics.go
│   │   ├── metrics_test.go
│   │   ├── support.go
│   │   └── token_source.go
│   ├── go.mod
│   └── go.sum
├── test/
│   ├── OWNERS
│   ├── boskos.sh
│   ├── e2e/
│   │   ├── firewall.go
│   │   ├── gce.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── loadbalancer.go
│   │   ├── network_tiers.go
│   │   └── suite_test.go
│   └── e2e.sh
├── tools/
│   ├── .golint_failures
│   ├── auto-tag.sh
│   ├── common
│   ├── coverage/
│   │   └── golang_coverage.sh
│   ├── kops/
│   │   ├── main.go
│   │   └── pkg/
│   │       └── kops/
│   │           ├── config.go
│   │           ├── default_template.go
│   │           ├── gcp.go
│   │           ├── kops_test.go
│   │           ├── lifecycle.go
│   │           └── template.go
│   ├── lib/
│   │   └── util.sh
│   ├── merge_licenses.sh
│   ├── pin_k8s_deps.sh
│   ├── push-images
│   ├── run-e2e-test.sh
│   ├── sha256_generator.sh
│   ├── tools.go
│   ├── update-gofmt.sh
│   ├── update-golang
│   ├── update-proto.sh
│   ├── update_vendor.sh
│   ├── verify-all.sh
│   ├── verify-gofmt.sh
│   ├── verify-golint.sh
│   ├── verify-govet.sh
│   ├── verify-k8s-version.sh
│   ├── verify-up-to-date.sh
│   ├── verify-vendor.sh
│   └── version.sh
└── vendor/
    ├── cel.dev/
    │   └── expr/
    │       ├── .bazelversion
    │       ├── .gitattributes
    │       ├── .gitignore
    │       ├── BUILD.bazel
    │       ├── CODE_OF_CONDUCT.md
    │       ├── CONTRIBUTING.md
    │       ├── GOVERNANCE.md
    │       ├── LICENSE
    │       ├── MAINTAINERS.md
    │       ├── MODULE.bazel
    │       ├── README.md
    │       ├── WORKSPACE
    │       ├── WORKSPACE.bzlmod
    │       ├── checked.pb.go
    │       ├── cloudbuild.yaml
    │       ├── eval.pb.go
    │       ├── explain.pb.go
    │       ├── regen_go_proto.sh
    │       ├── regen_go_proto_canonical_protos.sh
    │       ├── syntax.pb.go
    │       └── value.pb.go
    ├── cloud.google.com/
    │   └── go/
    │       ├── auth/
    │       │   ├── CHANGES.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── auth.go
    │       │   ├── credentials/
    │       │   │   ├── compute.go
    │       │   │   ├── detect.go
    │       │   │   ├── doc.go
    │       │   │   ├── filetypes.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccount/
    │       │   │   │   │   ├── aws_provider.go
    │       │   │   │   │   ├── executable_provider.go
    │       │   │   │   │   ├── externalaccount.go
    │       │   │   │   │   ├── file_provider.go
    │       │   │   │   │   ├── info.go
    │       │   │   │   │   ├── programmatic_provider.go
    │       │   │   │   │   ├── url_provider.go
    │       │   │   │   │   └── x509_provider.go
    │       │   │   │   ├── externalaccountuser/
    │       │   │   │   │   └── externalaccountuser.go
    │       │   │   │   ├── gdch/
    │       │   │   │   │   └── gdch.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       └── sts_exchange.go
    │       │   │   └── selfsignedjwt.go
    │       │   ├── httptransport/
    │       │   │   ├── httptransport.go
    │       │   │   ├── trace.go
    │       │   │   └── transport.go
    │       │   ├── internal/
    │       │   │   ├── credsfile/
    │       │   │   │   ├── credsfile.go
    │       │   │   │   ├── filetype.go
    │       │   │   │   └── parse.go
    │       │   │   ├── internal.go
    │       │   │   ├── jwt/
    │       │   │   │   └── jwt.go
    │       │   │   └── transport/
    │       │   │       ├── cba.go
    │       │   │       ├── cert/
    │       │   │       │   ├── default_cert.go
    │       │   │       │   ├── enterprise_cert.go
    │       │   │       │   ├── secureconnect_cert.go
    │       │   │       │   └── workload_cert.go
    │       │   │       ├── s2a.go
    │       │   │       └── transport.go
    │       │   ├── oauth2adapt/
    │       │   │   ├── CHANGES.md
    │       │   │   ├── LICENSE
    │       │   │   └── oauth2adapt.go
    │       │   └── threelegged.go
    │       └── compute/
    │           └── metadata/
    │               ├── CHANGES.md
    │               ├── LICENSE
    │               ├── README.md
    │               ├── log.go
    │               ├── metadata.go
    │               ├── retry.go
    │               ├── retry_linux.go
    │               ├── syscheck.go
    │               ├── syscheck_linux.go
    │               └── syscheck_windows.go
    ├── github.com/
    │   ├── Azure/
    │   │   └── go-ansiterm/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── constants.go
    │   │       ├── context.go
    │   │       ├── csi_entry_state.go
    │   │       ├── csi_param_state.go
    │   │       ├── escape_intermediate_state.go
    │   │       ├── escape_state.go
    │   │       ├── event_handler.go
    │   │       ├── ground_state.go
    │   │       ├── osc_string_state.go
    │   │       ├── parser.go
    │   │       ├── parser_action_helpers.go
    │   │       ├── parser_actions.go
    │   │       ├── states.go
    │   │       ├── utilities.go
    │   │       └── winterm/
    │   │           ├── ansi.go
    │   │           ├── api.go
    │   │           ├── attr_translation.go
    │   │           ├── cursor_helpers.go
    │   │           ├── erase_helpers.go
    │   │           ├── scroll_helper.go
    │   │           ├── utilities.go
    │   │           └── win_event_handler.go
    │   ├── GoogleCloudPlatform/
    │   │   ├── gke-enterprise-mt/
    │   │   │   ├── LICENSE
    │   │   │   └── pkg/
    │   │   │       ├── apis/
    │   │   │       │   └── providerconfig/
    │   │   │       │       └── v1/
    │   │   │       │           ├── doc.go
    │   │   │       │           ├── groupversion_info.go
    │   │   │       │           ├── register.go
    │   │   │       │           ├── types.go
    │   │   │       │           ├── zz_generated.deepcopy.go
    │   │   │       │           └── zz_generated.openapi.go
    │   │   │       ├── filtered/
    │   │   │       │   ├── filteredcache.go
    │   │   │       │   ├── filteredfactory.go
    │   │   │       │   ├── filteredinformer.go
    │   │   │       │   └── helpers.go
    │   │   │       ├── framework/
    │   │   │       │   ├── controller.go
    │   │   │       │   ├── controller_map.go
    │   │   │       │   ├── manager.go
    │   │   │       │   ├── mtcontext/
    │   │   │       │   │   └── mtcontext.go
    │   │   │       │   └── taskqueue/
    │   │   │       │       └── taskqueue.go
    │   │   │       └── providerconfigcr/
    │   │   │           ├── finalizer.go
    │   │   │           ├── informer.go
    │   │   │           └── providerconfig.go
    │   │   ├── gke-networking-api/
    │   │   │   ├── LICENSE
    │   │   │   ├── apis/
    │   │   │   │   ├── network/
    │   │   │   │   │   └── v1/
    │   │   │   │   │       ├── annotations.go
    │   │   │   │   │       ├── doc.go
    │   │   │   │   │       ├── gkenetworkparamset_types.go
    │   │   │   │   │       ├── network.go
    │   │   │   │   │       ├── network_types.go
    │   │   │   │   │       ├── networkinterface_types.go
    │   │   │   │   │       ├── subnetwork_types.go
    │   │   │   │   │       ├── zz_generated.deepcopy.go
    │   │   │   │   │       └── zz_generated.register.go
    │   │   │   │   └── nodetopology/
    │   │   │   │       └── v1/
    │   │   │   │           ├── BUILD
    │   │   │   │           ├── doc.go
    │   │   │   │           ├── types.go
    │   │   │   │           ├── zz_generated.deepcopy.go
    │   │   │   │           ├── zz_generated.openapi.go
    │   │   │   │           └── zz_generated.register.go
    │   │   │   └── client/
    │   │   │       ├── network/
    │   │   │       │   ├── clientset/
    │   │   │       │   │   └── versioned/
    │   │   │       │   │       ├── clientset.go
    │   │   │       │   │       ├── fake/
    │   │   │       │   │       │   ├── clientset_generated.go
    │   │   │       │   │       │   ├── doc.go
    │   │   │       │   │       │   └── register.go
    │   │   │       │   │       ├── scheme/
    │   │   │       │   │       │   ├── doc.go
    │   │   │       │   │       │   └── register.go
    │   │   │       │   │       └── typed/
    │   │   │       │   │           └── network/
    │   │   │       │   │               └── v1/
    │   │   │       │   │                   ├── doc.go
    │   │   │       │   │                   ├── fake/
    │   │   │       │   │                   │   ├── doc.go
    │   │   │       │   │                   │   ├── fake_gkenetworkparamset.go
    │   │   │       │   │                   │   ├── fake_network.go
    │   │   │       │   │                   │   ├── fake_network_client.go
    │   │   │       │   │                   │   ├── fake_networkinterface.go
    │   │   │       │   │                   │   └── fake_subnetwork.go
    │   │   │       │   │                   ├── generated_expansion.go
    │   │   │       │   │                   ├── gkenetworkparamset.go
    │   │   │       │   │                   ├── network.go
    │   │   │       │   │                   ├── network_client.go
    │   │   │       │   │                   ├── networkinterface.go
    │   │   │       │   │                   └── subnetwork.go
    │   │   │       │   ├── informers/
    │   │   │       │   │   └── externalversions/
    │   │   │       │   │       ├── factory.go
    │   │   │       │   │       ├── generic.go
    │   │   │       │   │       ├── internalinterfaces/
    │   │   │       │   │       │   └── factory_interfaces.go
    │   │   │       │   │       └── network/
    │   │   │       │   │           ├── interface.go
    │   │   │       │   │           └── v1/
    │   │   │       │   │               ├── gkenetworkparamset.go
    │   │   │       │   │               ├── interface.go
    │   │   │       │   │               ├── network.go
    │   │   │       │   │               ├── networkinterface.go
    │   │   │       │   │               └── subnetwork.go
    │   │   │       │   └── listers/
    │   │   │       │       └── network/
    │   │   │       │           └── v1/
    │   │   │       │               ├── expansion_generated.go
    │   │   │       │               ├── gkenetworkparamset.go
    │   │   │       │               ├── network.go
    │   │   │       │               ├── networkinterface.go
    │   │   │       │               └── subnetwork.go
    │   │   │       └── nodetopology/
    │   │   │           └── clientset/
    │   │   │               └── versioned/
    │   │   │                   ├── clientset.go
    │   │   │                   ├── fake/
    │   │   │                   │   ├── clientset_generated.go
    │   │   │                   │   ├── doc.go
    │   │   │                   │   └── register.go
    │   │   │                   ├── scheme/
    │   │   │                   │   ├── doc.go
    │   │   │                   │   └── register.go
    │   │   │                   └── typed/
    │   │   │                       └── nodetopology/
    │   │   │                           └── v1/
    │   │   │                               ├── doc.go
    │   │   │                               ├── fake/
    │   │   │                               │   ├── doc.go
    │   │   │                               │   ├── fake_nodetopology.go
    │   │   │                               │   └── fake_nodetopology_client.go
    │   │   │                               ├── generated_expansion.go
    │   │   │                               ├── nodetopology.go
    │   │   │                               └── nodetopology_client.go
    │   │   └── k8s-cloud-provider/
    │   │       ├── LICENSE
    │   │       └── pkg/
    │   │           └── cloud/
    │   │               ├── constants.go
    │   │               ├── context.go
    │   │               ├── doc.go
    │   │               ├── filter/
    │   │               │   └── filter.go
    │   │               ├── gce_projects.go
    │   │               ├── gen.go
    │   │               ├── meta/
    │   │               │   ├── compute_services.go
    │   │               │   ├── doc.go
    │   │               │   ├── key.go
    │   │               │   ├── meta.go
    │   │               │   ├── method.go
    │   │               │   ├── network_services.go
    │   │               │   └── service.go
    │   │               ├── mock/
    │   │               │   └── mock.go
    │   │               ├── observe.go
    │   │               ├── op.go
    │   │               ├── op_networkservices.go
    │   │               ├── option.go
    │   │               ├── project.go
    │   │               ├── ratelimit.go
    │   │               ├── service.go
    │   │               └── utils.go
    │   ├── Masterminds/
    │   │   └── semver/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .golangci.yml
    │   │           ├── CHANGELOG.md
    │   │           ├── LICENSE.txt
    │   │           ├── Makefile
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── collection.go
    │   │           ├── constraints.go
    │   │           ├── doc.go
    │   │           └── version.go
    │   ├── NYTimes/
    │   │   └── gziphandler/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── gzip.go
    │   │       └── gzip_go18.go
    │   ├── antlr4-go/
    │   │   └── antlr/
    │   │       └── v4/
    │   │           ├── .gitignore
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── antlrdoc.go
    │   │           ├── atn.go
    │   │           ├── atn_config.go
    │   │           ├── atn_config_set.go
    │   │           ├── atn_deserialization_options.go
    │   │           ├── atn_deserializer.go
    │   │           ├── atn_simulator.go
    │   │           ├── atn_state.go
    │   │           ├── atn_type.go
    │   │           ├── char_stream.go
    │   │           ├── common_token_factory.go
    │   │           ├── common_token_stream.go
    │   │           ├── comparators.go
    │   │           ├── configuration.go
    │   │           ├── dfa.go
    │   │           ├── dfa_serializer.go
    │   │           ├── dfa_state.go
    │   │           ├── diagnostic_error_listener.go
    │   │           ├── error_listener.go
    │   │           ├── error_strategy.go
    │   │           ├── errors.go
    │   │           ├── file_stream.go
    │   │           ├── input_stream.go
    │   │           ├── int_stream.go
    │   │           ├── interval_set.go
    │   │           ├── jcollect.go
    │   │           ├── lexer.go
    │   │           ├── lexer_action.go
    │   │           ├── lexer_action_executor.go
    │   │           ├── lexer_atn_simulator.go
    │   │           ├── ll1_analyzer.go
    │   │           ├── mutex.go
    │   │           ├── mutex_nomutex.go
    │   │           ├── nostatistics.go
    │   │           ├── parser.go
    │   │           ├── parser_atn_simulator.go
    │   │           ├── parser_rule_context.go
    │   │           ├── prediction_context.go
    │   │           ├── prediction_context_cache.go
    │   │           ├── prediction_mode.go
    │   │           ├── recognizer.go
    │   │           ├── rule_context.go
    │   │           ├── semantic_context.go
    │   │           ├── statistics.go
    │   │           ├── stats_data.go
    │   │           ├── token.go
    │   │           ├── token_source.go
    │   │           ├── token_stream.go
    │   │           ├── tokenstream_rewriter.go
    │   │           ├── trace_listener.go
    │   │           ├── transition.go
    │   │           ├── tree.go
    │   │           ├── trees.go
    │   │           └── utils.go
    │   ├── beorn7/
    │   │   └── perks/
    │   │       ├── LICENSE
    │   │       └── quantile/
    │   │           ├── exampledata.txt
    │   │           └── stream.go
    │   ├── blang/
    │   │   └── semver/
    │   │       └── v4/
    │   │           ├── LICENSE
    │   │           ├── json.go
    │   │           ├── range.go
    │   │           ├── semver.go
    │   │           ├── sort.go
    │   │           └── sql.go
    │   ├── cenkalti/
    │   │   └── backoff/
    │   │       └── v5/
    │   │           ├── .gitignore
    │   │           ├── CHANGELOG.md
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── backoff.go
    │   │           ├── error.go
    │   │           ├── exponential.go
    │   │           ├── retry.go
    │   │           ├── ticker.go
    │   │           └── timer.go
    │   ├── cespare/
    │   │   └── xxhash/
    │   │       └── v2/
    │   │           ├── LICENSE.txt
    │   │           ├── README.md
    │   │           ├── testall.sh
    │   │           ├── xxhash.go
    │   │           ├── xxhash_amd64.s
    │   │           ├── xxhash_arm64.s
    │   │           ├── xxhash_asm.go
    │   │           ├── xxhash_other.go
    │   │           ├── xxhash_safe.go
    │   │           └── xxhash_unsafe.go
    │   ├── containernetworking/
    │   │   └── cni/
    │   │       ├── LICENSE
    │   │       ├── libcni/
    │   │       │   ├── api.go
    │   │       │   └── conf.go
    │   │       └── pkg/
    │   │           ├── invoke/
    │   │           │   ├── args.go
    │   │           │   ├── delegate.go
    │   │           │   ├── exec.go
    │   │           │   ├── find.go
    │   │           │   ├── os_unix.go
    │   │           │   ├── os_windows.go
    │   │           │   └── raw_exec.go
    │   │           ├── ns/
    │   │           │   ├── ns_darwin.go
    │   │           │   ├── ns_linux.go
    │   │           │   └── ns_windows.go
    │   │           ├── skel/
    │   │           │   └── skel.go
    │   │           ├── types/
    │   │           │   ├── 020/
    │   │           │   │   └── types.go
    │   │           │   ├── 040/
    │   │           │   │   └── types.go
    │   │           │   ├── 100/
    │   │           │   │   └── types.go
    │   │           │   ├── args.go
    │   │           │   ├── create/
    │   │           │   │   └── create.go
    │   │           │   ├── internal/
    │   │           │   │   ├── convert.go
    │   │           │   │   └── create.go
    │   │           │   └── types.go
    │   │           ├── utils/
    │   │           │   └── utils.go
    │   │           └── version/
    │   │               ├── conf.go
    │   │               ├── plugin.go
    │   │               ├── reconcile.go
    │   │               └── version.go
    │   ├── coreos/
    │   │   ├── go-semver/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── semver/
    │   │   │       ├── semver.go
    │   │   │       └── sort.go
    │   │   └── go-systemd/
    │   │       └── v22/
    │   │           ├── LICENSE
    │   │           ├── NOTICE
    │   │           ├── daemon/
    │   │           │   ├── sdnotify.go
    │   │           │   ├── sdnotify_other.go
    │   │           │   ├── sdnotify_unix.go
    │   │           │   └── watchdog.go
    │   │           └── journal/
    │   │               ├── journal.go
    │   │               ├── journal_unix.go
    │   │               └── journal_windows.go
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── distribution/
    │   │   └── reference/
    │   │       ├── .gitattributes
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE-OF-CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── GOVERNANCE.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── helpers.go
    │   │       ├── normalize.go
    │   │       ├── reference.go
    │   │       ├── regexp.go
    │   │       └── sort.go
    │   ├── emicklei/
    │   │   └── go-restful/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .goconvey
    │   │           ├── CHANGES.md
    │   │           ├── LICENSE
    │   │           ├── Makefile
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── Srcfile
    │   │           ├── bench_test.sh
    │   │           ├── compress.go
    │   │           ├── compressor_cache.go
    │   │           ├── compressor_pools.go
    │   │           ├── compressors.go
    │   │           ├── constants.go
    │   │           ├── container.go
    │   │           ├── cors_filter.go
    │   │           ├── coverage.sh
    │   │           ├── curly.go
    │   │           ├── curly_route.go
    │   │           ├── custom_verb.go
    │   │           ├── doc.go
    │   │           ├── entity_accessors.go
    │   │           ├── extensions.go
    │   │           ├── filter.go
    │   │           ├── filter_adapter.go
    │   │           ├── jsr311.go
    │   │           ├── log/
    │   │           │   └── log.go
    │   │           ├── logger.go
    │   │           ├── mime.go
    │   │           ├── options_filter.go
    │   │           ├── parameter.go
    │   │           ├── path_expression.go
    │   │           ├── path_processor.go
    │   │           ├── request.go
    │   │           ├── response.go
    │   │           ├── route.go
    │   │           ├── route_builder.go
    │   │           ├── route_reader.go
    │   │           ├── router.go
    │   │           ├── service_error.go
    │   │           ├── web_service.go
    │   │           └── web_service_container.go
    │   ├── evanphx/
    │   │   └── json-patch/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── errors.go
    │   │       ├── merge.go
    │   │       └── patch.go
    │   ├── fatih/
    │   │   └── color/
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── color.go
    │   │       ├── color_windows.go
    │   │       └── doc.go
    │   ├── felixge/
    │   │   └── httpsnoop/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.txt
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── capture_metrics.go
    │   │       ├── docs.go
    │   │       ├── wrap_generated_gteq_1.8.go
    │   │       └── wrap_generated_lt_1.8.go
    │   ├── fsnotify/
    │   │   └── fsnotify/
    │   │       ├── .cirrus.yml
    │   │       ├── .gitignore
    │   │       ├── .mailmap
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── backend_fen.go
    │   │       ├── backend_inotify.go
    │   │       ├── backend_kqueue.go
    │   │       ├── backend_other.go
    │   │       ├── backend_windows.go
    │   │       ├── fsnotify.go
    │   │       ├── internal/
    │   │       │   ├── darwin.go
    │   │       │   ├── debug_darwin.go
    │   │       │   ├── debug_dragonfly.go
    │   │       │   ├── debug_freebsd.go
    │   │       │   ├── debug_kqueue.go
    │   │       │   ├── debug_linux.go
    │   │       │   ├── debug_netbsd.go
    │   │       │   ├── debug_openbsd.go
    │   │       │   ├── debug_solaris.go
    │   │       │   ├── debug_windows.go
    │   │       │   ├── freebsd.go
    │   │       │   ├── internal.go
    │   │       │   ├── unix.go
    │   │       │   ├── unix2.go
    │   │       │   └── windows.go
    │   │       ├── shared.go
    │   │       ├── staticcheck.conf
    │   │       ├── system_bsd.go
    │   │       └── system_darwin.go
    │   ├── fxamacker/
    │   │   └── cbor/
    │   │       └── v2/
    │   │           ├── .gitignore
    │   │           ├── .golangci.yml
    │   │           ├── CODE_OF_CONDUCT.md
    │   │           ├── CONTRIBUTING.md
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── bytestring.go
    │   │           ├── cache.go
    │   │           ├── common.go
    │   │           ├── decode.go
    │   │           ├── diagnose.go
    │   │           ├── doc.go
    │   │           ├── encode.go
    │   │           ├── encode_map.go
    │   │           ├── omitzero_go124.go
    │   │           ├── omitzero_pre_go124.go
    │   │           ├── simplevalue.go
    │   │           ├── stream.go
    │   │           ├── structfields.go
    │   │           ├── tag.go
    │   │           └── valid.go
    │   ├── go-logr/
    │   │   ├── logr/
    │   │   │   ├── .golangci.yaml
    │   │   │   ├── CHANGELOG.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── SECURITY.md
    │   │   │   ├── context.go
    │   │   │   ├── context_noslog.go
    │   │   │   ├── context_slog.go
    │   │   │   ├── discard.go
    │   │   │   ├── funcr/
    │   │   │   │   ├── funcr.go
    │   │   │   │   └── slogsink.go
    │   │   │   ├── logr.go
    │   │   │   ├── sloghandler.go
    │   │   │   ├── slogr.go
    │   │   │   └── slogsink.go
    │   │   └── stdr/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       └── stdr.go
    │   ├── go-openapi/
    │   │   ├── jsonpointer/
    │   │   │   ├── .editorconfig
    │   │   │   ├── .gitignore
    │   │   │   ├── .golangci.yml
    │   │   │   ├── CODE_OF_CONDUCT.md
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── pointer.go
    │   │   └── jsonreference/
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── internal/
    │   │       │   └── normalize_url.go
    │   │       └── reference.go
    │   ├── gobuffalo/
    │   │   └── flect/
    │   │       ├── .gitignore
    │   │       ├── .gometalinter.json
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── SHOULDERS.md
    │   │       ├── acronyms.go
    │   │       ├── camelize.go
    │   │       ├── capitalize.go
    │   │       ├── custom_data.go
    │   │       ├── dasherize.go
    │   │       ├── flect.go
    │   │       ├── humanize.go
    │   │       ├── ident.go
    │   │       ├── lower_upper.go
    │   │       ├── ordinalize.go
    │   │       ├── pascalize.go
    │   │       ├── plural_rules.go
    │   │       ├── pluralize.go
    │   │       ├── rule.go
    │   │       ├── singular_rules.go
    │   │       ├── singularize.go
    │   │       ├── titleize.go
    │   │       ├── underscore.go
    │   │       └── version.go
    │   ├── gogo/
    │   │   └── protobuf/
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── gogoproto/
    │   │       │   ├── Makefile
    │   │       │   ├── doc.go
    │   │       │   ├── gogo.pb.go
    │   │       │   ├── gogo.pb.golden
    │   │       │   ├── gogo.proto
    │   │       │   └── helper.go
    │   │       ├── proto/
    │   │       │   ├── Makefile
    │   │       │   ├── clone.go
    │   │       │   ├── custom_gogo.go
    │   │       │   ├── decode.go
    │   │       │   ├── deprecated.go
    │   │       │   ├── discard.go
    │   │       │   ├── duration.go
    │   │       │   ├── duration_gogo.go
    │   │       │   ├── encode.go
    │   │       │   ├── encode_gogo.go
    │   │       │   ├── equal.go
    │   │       │   ├── extensions.go
    │   │       │   ├── extensions_gogo.go
    │   │       │   ├── lib.go
    │   │       │   ├── lib_gogo.go
    │   │       │   ├── message_set.go
    │   │       │   ├── pointer_reflect.go
    │   │       │   ├── pointer_reflect_gogo.go
    │   │       │   ├── pointer_unsafe.go
    │   │       │   ├── pointer_unsafe_gogo.go
    │   │       │   ├── properties.go
    │   │       │   ├── properties_gogo.go
    │   │       │   ├── skip_gogo.go
    │   │       │   ├── table_marshal.go
    │   │       │   ├── table_marshal_gogo.go
    │   │       │   ├── table_merge.go
    │   │       │   ├── table_unmarshal.go
    │   │       │   ├── table_unmarshal_gogo.go
    │   │       │   ├── text.go
    │   │       │   ├── text_gogo.go
    │   │       │   ├── text_parser.go
    │   │       │   ├── timestamp.go
    │   │       │   ├── timestamp_gogo.go
    │   │       │   ├── wrappers.go
    │   │       │   └── wrappers_gogo.go
    │   │       └── protoc-gen-gogo/
    │   │           └── descriptor/
    │   │               ├── Makefile
    │   │               ├── descriptor.go
    │   │               ├── descriptor.pb.go
    │   │               ├── descriptor_gostring.gen.go
    │   │               └── helper.go
    │   ├── golang/
    │   │   ├── groupcache/
    │   │   │   ├── LICENSE
    │   │   │   └── lru/
    │   │   │       └── lru.go
    │   │   └── protobuf/
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       └── proto/
    │   │           ├── buffer.go
    │   │           ├── defaults.go
    │   │           ├── deprecated.go
    │   │           ├── discard.go
    │   │           ├── extensions.go
    │   │           ├── properties.go
    │   │           ├── proto.go
    │   │           ├── registry.go
    │   │           ├── text_decode.go
    │   │           ├── text_encode.go
    │   │           ├── wire.go
    │   │           └── wrappers.go
    │   ├── google/
    │   │   ├── cel-go/
    │   │   │   ├── LICENSE
    │   │   │   ├── cel/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── cel.go
    │   │   │   │   ├── decls.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── folding.go
    │   │   │   │   ├── inlining.go
    │   │   │   │   ├── io.go
    │   │   │   │   ├── library.go
    │   │   │   │   ├── macro.go
    │   │   │   │   ├── optimizer.go
    │   │   │   │   ├── options.go
    │   │   │   │   ├── program.go
    │   │   │   │   ├── prompt.go
    │   │   │   │   ├── templates/
    │   │   │   │   │   └── authoring.tmpl
    │   │   │   │   └── validator.go
    │   │   │   ├── checker/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── checker.go
    │   │   │   │   ├── cost.go
    │   │   │   │   ├── decls/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── decls.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── errors.go
    │   │   │   │   ├── format.go
    │   │   │   │   ├── mapping.go
    │   │   │   │   ├── options.go
    │   │   │   │   ├── printer.go
    │   │   │   │   ├── scopes.go
    │   │   │   │   └── types.go
    │   │   │   ├── common/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── ast/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   ├── ast.go
    │   │   │   │   │   ├── conversion.go
    │   │   │   │   │   ├── expr.go
    │   │   │   │   │   ├── factory.go
    │   │   │   │   │   └── navigable.go
    │   │   │   │   ├── containers/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── container.go
    │   │   │   │   ├── cost.go
    │   │   │   │   ├── debug/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── debug.go
    │   │   │   │   ├── decls/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── decls.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── env/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── env.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── errors.go
    │   │   │   │   ├── functions/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── functions.go
    │   │   │   │   ├── location.go
    │   │   │   │   ├── operators/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── operators.go
    │   │   │   │   ├── overloads/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── overloads.go
    │   │   │   │   ├── runes/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── buffer.go
    │   │   │   │   ├── source.go
    │   │   │   │   ├── stdlib/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── standard.go
    │   │   │   │   └── types/
    │   │   │   │       ├── BUILD.bazel
    │   │   │   │       ├── any_value.go
    │   │   │   │       ├── bool.go
    │   │   │   │       ├── bytes.go
    │   │   │   │       ├── compare.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── double.go
    │   │   │   │       ├── duration.go
    │   │   │   │       ├── err.go
    │   │   │   │       ├── format.go
    │   │   │   │       ├── int.go
    │   │   │   │       ├── iterator.go
    │   │   │   │       ├── json_value.go
    │   │   │   │       ├── list.go
    │   │   │   │       ├── map.go
    │   │   │   │       ├── null.go
    │   │   │   │       ├── object.go
    │   │   │   │       ├── optional.go
    │   │   │   │       ├── overflow.go
    │   │   │   │       ├── pb/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── checked.go
    │   │   │   │       │   ├── enum.go
    │   │   │   │       │   ├── equal.go
    │   │   │   │       │   ├── file.go
    │   │   │   │       │   ├── pb.go
    │   │   │   │       │   └── type.go
    │   │   │   │       ├── provider.go
    │   │   │   │       ├── ref/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── provider.go
    │   │   │   │       │   └── reference.go
    │   │   │   │       ├── string.go
    │   │   │   │       ├── timestamp.go
    │   │   │   │       ├── traits/
    │   │   │   │       │   ├── BUILD.bazel
    │   │   │   │       │   ├── comparer.go
    │   │   │   │       │   ├── container.go
    │   │   │   │       │   ├── field_tester.go
    │   │   │   │       │   ├── indexer.go
    │   │   │   │       │   ├── iterator.go
    │   │   │   │       │   ├── lister.go
    │   │   │   │       │   ├── mapper.go
    │   │   │   │       │   ├── matcher.go
    │   │   │   │       │   ├── math.go
    │   │   │   │       │   ├── receiver.go
    │   │   │   │       │   ├── sizer.go
    │   │   │   │       │   ├── traits.go
    │   │   │   │       │   └── zeroer.go
    │   │   │   │       ├── types.go
    │   │   │   │       ├── uint.go
    │   │   │   │       ├── unknown.go
    │   │   │   │       └── util.go
    │   │   │   ├── ext/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── README.md
    │   │   │   │   ├── bindings.go
    │   │   │   │   ├── comprehensions.go
    │   │   │   │   ├── encoders.go
    │   │   │   │   ├── extension_option_factory.go
    │   │   │   │   ├── formatting.go
    │   │   │   │   ├── formatting_v2.go
    │   │   │   │   ├── guards.go
    │   │   │   │   ├── lists.go
    │   │   │   │   ├── math.go
    │   │   │   │   ├── native.go
    │   │   │   │   ├── protos.go
    │   │   │   │   ├── regex.go
    │   │   │   │   ├── sets.go
    │   │   │   │   └── strings.go
    │   │   │   ├── interpreter/
    │   │   │   │   ├── BUILD.bazel
    │   │   │   │   ├── activation.go
    │   │   │   │   ├── attribute_patterns.go
    │   │   │   │   ├── attributes.go
    │   │   │   │   ├── decorators.go
    │   │   │   │   ├── dispatcher.go
    │   │   │   │   ├── evalstate.go
    │   │   │   │   ├── functions/
    │   │   │   │   │   ├── BUILD.bazel
    │   │   │   │   │   └── functions.go
    │   │   │   │   ├── interpretable.go
    │   │   │   │   ├── interpreter.go
    │   │   │   │   ├── optimizations.go
    │   │   │   │   ├── planner.go
    │   │   │   │   ├── prune.go
    │   │   │   │   └── runtimecost.go
    │   │   │   └── parser/
    │   │   │       ├── BUILD.bazel
    │   │   │       ├── errors.go
    │   │   │       ├── gen/
    │   │   │       │   ├── BUILD.bazel
    │   │   │       │   ├── CEL.g4
    │   │   │       │   ├── CEL.interp
    │   │   │       │   ├── CEL.tokens
    │   │   │       │   ├── CELLexer.interp
    │   │   │       │   ├── CELLexer.tokens
    │   │   │       │   ├── cel_base_listener.go
    │   │   │       │   ├── cel_base_visitor.go
    │   │   │       │   ├── cel_lexer.go
    │   │   │       │   ├── cel_listener.go
    │   │   │       │   ├── cel_parser.go
    │   │   │       │   ├── cel_visitor.go
    │   │   │       │   ├── doc.go
    │   │   │       │   └── generate.sh
    │   │   │       ├── helper.go
    │   │   │       ├── input.go
    │   │   │       ├── macro.go
    │   │   │       ├── options.go
    │   │   │       ├── parser.go
    │   │   │       ├── unescape.go
    │   │   │       └── unparser.go
    │   │   ├── gnostic-models/
    │   │   │   ├── LICENSE
    │   │   │   ├── compiler/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── context.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── extensions.go
    │   │   │   │   ├── helpers.go
    │   │   │   │   ├── main.go
    │   │   │   │   └── reader.go
    │   │   │   ├── extensions/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── extension.pb.go
    │   │   │   │   ├── extension.proto
    │   │   │   │   └── extensions.go
    │   │   │   ├── jsonschema/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── base.go
    │   │   │   │   ├── display.go
    │   │   │   │   ├── models.go
    │   │   │   │   ├── operations.go
    │   │   │   │   ├── reader.go
    │   │   │   │   ├── schema.json
    │   │   │   │   └── writer.go
    │   │   │   ├── openapiv2/
    │   │   │   │   ├── OpenAPIv2.go
    │   │   │   │   ├── OpenAPIv2.pb.go
    │   │   │   │   ├── OpenAPIv2.proto
    │   │   │   │   ├── README.md
    │   │   │   │   ├── document.go
    │   │   │   │   └── openapi-2.0.json
    │   │   │   └── openapiv3/
    │   │   │       ├── OpenAPIv3.go
    │   │   │       ├── OpenAPIv3.pb.go
    │   │   │       ├── OpenAPIv3.proto
    │   │   │       ├── README.md
    │   │   │       ├── annotations.pb.go
    │   │   │       ├── annotations.proto
    │   │   │       └── document.go
    │   │   ├── go-cmp/
    │   │   │   ├── LICENSE
    │   │   │   └── cmp/
    │   │   │       ├── cmpopts/
    │   │   │       │   ├── equate.go
    │   │   │       │   ├── ignore.go
    │   │   │       │   ├── sort.go
    │   │   │       │   ├── struct_filter.go
    │   │   │       │   └── xform.go
    │   │   │       ├── compare.go
    │   │   │       ├── export.go
    │   │   │       ├── internal/
    │   │   │       │   ├── diff/
    │   │   │       │   │   ├── debug_disable.go
    │   │   │       │   │   ├── debug_enable.go
    │   │   │       │   │   └── diff.go
    │   │   │       │   ├── flags/
    │   │   │       │   │   └── flags.go
    │   │   │       │   ├── function/
    │   │   │       │   │   └── func.go
    │   │   │       │   └── value/
    │   │   │       │       ├── name.go
    │   │   │       │       ├── pointer.go
    │   │   │       │       └── sort.go
    │   │   │       ├── options.go
    │   │   │       ├── path.go
    │   │   │       ├── report.go
    │   │   │       ├── report_compare.go
    │   │   │       ├── report_references.go
    │   │   │       ├── report_reflect.go
    │   │   │       ├── report_slices.go
    │   │   │       ├── report_text.go
    │   │   │       └── report_value.go
    │   │   ├── pprof/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   └── profile/
    │   │   │       ├── encode.go
    │   │   │       ├── filter.go
    │   │   │       ├── index.go
    │   │   │       ├── legacy_java_profile.go
    │   │   │       ├── legacy_profile.go
    │   │   │       ├── merge.go
    │   │   │       ├── profile.go
    │   │   │       ├── proto.go
    │   │   │       └── prune.go
    │   │   ├── s2a-go/
    │   │   │   ├── .gitignore
    │   │   │   ├── CODE_OF_CONDUCT.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE.md
    │   │   │   ├── README.md
    │   │   │   ├── fallback/
    │   │   │   │   └── s2a_fallback.go
    │   │   │   ├── internal/
    │   │   │   │   ├── authinfo/
    │   │   │   │   │   └── authinfo.go
    │   │   │   │   ├── handshaker/
    │   │   │   │   │   ├── handshaker.go
    │   │   │   │   │   └── service/
    │   │   │   │   │       └── service.go
    │   │   │   │   ├── proto/
    │   │   │   │   │   ├── common_go_proto/
    │   │   │   │   │   │   └── common.pb.go
    │   │   │   │   │   ├── s2a_context_go_proto/
    │   │   │   │   │   │   └── s2a_context.pb.go
    │   │   │   │   │   ├── s2a_go_proto/
    │   │   │   │   │   │   ├── s2a.pb.go
    │   │   │   │   │   │   └── s2a_grpc.pb.go
    │   │   │   │   │   └── v2/
    │   │   │   │   │       ├── common_go_proto/
    │   │   │   │   │       │   └── common.pb.go
    │   │   │   │   │       ├── s2a_context_go_proto/
    │   │   │   │   │       │   └── s2a_context.pb.go
    │   │   │   │   │       └── s2a_go_proto/
    │   │   │   │   │           ├── s2a.pb.go
    │   │   │   │   │           └── s2a_grpc.pb.go
    │   │   │   │   ├── record/
    │   │   │   │   │   ├── internal/
    │   │   │   │   │   │   ├── aeadcrypter/
    │   │   │   │   │   │   │   ├── aeadcrypter.go
    │   │   │   │   │   │   │   ├── aesgcm.go
    │   │   │   │   │   │   │   ├── chachapoly.go
    │   │   │   │   │   │   │   └── common.go
    │   │   │   │   │   │   └── halfconn/
    │   │   │   │   │   │       ├── ciphersuite.go
    │   │   │   │   │   │       ├── counter.go
    │   │   │   │   │   │       ├── expander.go
    │   │   │   │   │   │       └── halfconn.go
    │   │   │   │   │   ├── record.go
    │   │   │   │   │   └── ticketsender.go
    │   │   │   │   ├── tokenmanager/
    │   │   │   │   │   └── tokenmanager.go
    │   │   │   │   └── v2/
    │   │   │   │       ├── README.md
    │   │   │   │       ├── certverifier/
    │   │   │   │       │   └── certverifier.go
    │   │   │   │       ├── remotesigner/
    │   │   │   │       │   └── remotesigner.go
    │   │   │   │       ├── s2av2.go
    │   │   │   │       └── tlsconfigstore/
    │   │   │   │           └── tlsconfigstore.go
    │   │   │   ├── retry/
    │   │   │   │   └── retry.go
    │   │   │   ├── s2a.go
    │   │   │   ├── s2a_options.go
    │   │   │   ├── s2a_utils.go
    │   │   │   └── stream/
    │   │   │       └── s2a_stream.go
    │   │   └── uuid/
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── node_js.go
    │   │       ├── node_net.go
    │   │       ├── null.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       ├── version4.go
    │   │       ├── version6.go
    │   │       └── version7.go
    │   ├── googleapis/
    │   │   ├── enterprise-certificate-proxy/
    │   │   │   ├── LICENSE
    │   │   │   └── client/
    │   │   │       ├── client.go
    │   │   │       └── util/
    │   │   │           └── util.go
    │   │   └── gax-go/
    │   │       └── v2/
    │   │           ├── .release-please-manifest.json
    │   │           ├── CHANGES.md
    │   │           ├── LICENSE
    │   │           ├── apierror/
    │   │           │   ├── apierror.go
    │   │           │   └── internal/
    │   │           │       └── proto/
    │   │           │           ├── README.md
    │   │           │           ├── custom_error.pb.go
    │   │           │           ├── custom_error.proto
    │   │           │           ├── error.pb.go
    │   │           │           └── error.proto
    │   │           ├── call_option.go
    │   │           ├── callctx/
    │   │           │   └── callctx.go
    │   │           ├── content_type.go
    │   │           ├── gax.go
    │   │           ├── header.go
    │   │           ├── internal/
    │   │           │   └── version.go
    │   │           ├── invoke.go
    │   │           ├── proto_json_stream.go
    │   │           └── release-please-config.json
    │   ├── gorilla/
    │   │   └── websocket/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── client.go
    │   │       ├── compression.go
    │   │       ├── conn.go
    │   │       ├── doc.go
    │   │       ├── join.go
    │   │       ├── json.go
    │   │       ├── mask.go
    │   │       ├── mask_safe.go
    │   │       ├── prepared.go
    │   │       ├── proxy.go
    │   │       ├── server.go
    │   │       └── util.go
    │   ├── grpc-ecosystem/
    │   │   ├── go-grpc-middleware/
    │   │   │   ├── providers/
    │   │   │   │   └── prometheus/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── client_metrics.go
    │   │   │   │       ├── client_options.go
    │   │   │   │       ├── constants.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── options.go
    │   │   │   │       ├── reporter.go
    │   │   │   │       ├── server_metrics.go
    │   │   │   │       └── server_options.go
    │   │   │   └── v2/
    │   │   │       ├── COPYRIGHT
    │   │   │       ├── LICENSE
    │   │   │       └── interceptors/
    │   │   │           ├── callmeta.go
    │   │   │           ├── client.go
    │   │   │           ├── doc.go
    │   │   │           ├── reporter.go
    │   │   │           └── server.go
    │   │   └── grpc-gateway/
    │   │       └── v2/
    │   │           ├── LICENSE
    │   │           ├── internal/
    │   │           │   └── httprule/
    │   │           │       ├── BUILD.bazel
    │   │           │       ├── compile.go
    │   │           │       ├── fuzz.go
    │   │           │       ├── parse.go
    │   │           │       └── types.go
    │   │           ├── protoc-gen-openapiv2/
    │   │           │   └── options/
    │   │           │       ├── BUILD.bazel
    │   │           │       ├── annotations.pb.go
    │   │           │       ├── annotations.proto
    │   │           │       ├── annotations_protoopaque.pb.go
    │   │           │       ├── buf.gen.yaml
    │   │           │       ├── openapiv2.pb.go
    │   │           │       ├── openapiv2.proto
    │   │           │       └── openapiv2_protoopaque.pb.go
    │   │           ├── runtime/
    │   │           │   ├── BUILD.bazel
    │   │           │   ├── context.go
    │   │           │   ├── convert.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── fieldmask.go
    │   │           │   ├── handler.go
    │   │           │   ├── marshal_httpbodyproto.go
    │   │           │   ├── marshal_json.go
    │   │           │   ├── marshal_jsonpb.go
    │   │           │   ├── marshal_proto.go
    │   │           │   ├── marshaler.go
    │   │           │   ├── marshaler_registry.go
    │   │           │   ├── mux.go
    │   │           │   ├── pattern.go
    │   │           │   ├── proto2_convert.go
    │   │           │   └── query.go
    │   │           └── utilities/
    │   │               ├── BUILD.bazel
    │   │               ├── doc.go
    │   │               ├── pattern.go
    │   │               ├── readerfactory.go
    │   │               ├── string_array_flag.go
    │   │               └── trie.go
    │   ├── hashicorp/
    │   │   ├── errwrap/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── errwrap.go
    │   │   └── go-multierror/
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── append.go
    │   │       ├── flatten.go
    │   │       ├── format.go
    │   │       ├── group.go
    │   │       ├── multierror.go
    │   │       ├── prefix.go
    │   │       └── sort.go
    │   ├── inconshreveable/
    │   │   └── mousetrap/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── trap_others.go
    │   │       └── trap_windows.go
    │   ├── josharian/
    │   │   └── intern/
    │   │       ├── README.md
    │   │       ├── intern.go
    │   │       └── license.md
    │   ├── kylelemons/
    │   │   └── godebug/
    │   │       ├── LICENSE
    │   │       └── diff/
    │   │           └── diff.go
    │   ├── mailru/
    │   │   └── easyjson/
    │   │       ├── LICENSE
    │   │       ├── buffer/
    │   │       │   └── pool.go
    │   │       ├── jlexer/
    │   │       │   ├── bytestostr.go
    │   │       │   ├── bytestostr_nounsafe.go
    │   │       │   ├── error.go
    │   │       │   └── lexer.go
    │   │       └── jwriter/
    │   │           └── writer.go
    │   ├── mattn/
    │   │   ├── go-colorable/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── colorable_appengine.go
    │   │   │   ├── colorable_others.go
    │   │   │   ├── colorable_windows.go
    │   │   │   ├── go.test.sh
    │   │   │   └── noncolorable.go
    │   │   ├── go-isatty/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── doc.go
    │   │   │   ├── go.test.sh
    │   │   │   ├── isatty_bsd.go
    │   │   │   ├── isatty_others.go
    │   │   │   ├── isatty_plan9.go
    │   │   │   ├── isatty_solaris.go
    │   │   │   ├── isatty_tcgets.go
    │   │   │   └── isatty_windows.go
    │   │   └── go-sqlite3/
    │   │       ├── .codecov.yml
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── backup.go
    │   │       ├── callback.go
    │   │       ├── convert.go
    │   │       ├── doc.go
    │   │       ├── error.go
    │   │       ├── sqlite3-binding.c
    │   │       ├── sqlite3-binding.h
    │   │       ├── sqlite3.go
    │   │       ├── sqlite3_context.go
    │   │       ├── sqlite3_func_crypt.go
    │   │       ├── sqlite3_libsqlite3.go
    │   │       ├── sqlite3_load_extension.go
    │   │       ├── sqlite3_load_extension_omit.go
    │   │       ├── sqlite3_opt_allow_uri_authority.go
    │   │       ├── sqlite3_opt_app_armor.go
    │   │       ├── sqlite3_opt_column_metadata.go
    │   │       ├── sqlite3_opt_foreign_keys.go
    │   │       ├── sqlite3_opt_fts5.go
    │   │       ├── sqlite3_opt_icu.go
    │   │       ├── sqlite3_opt_introspect.go
    │   │       ├── sqlite3_opt_math_functions.go
    │   │       ├── sqlite3_opt_os_trace.go
    │   │       ├── sqlite3_opt_percentile.go
    │   │       ├── sqlite3_opt_preupdate.go
    │   │       ├── sqlite3_opt_preupdate_hook.go
    │   │       ├── sqlite3_opt_preupdate_omit.go
    │   │       ├── sqlite3_opt_secure_delete.go
    │   │       ├── sqlite3_opt_secure_delete_fast.go
    │   │       ├── sqlite3_opt_serialize.go
    │   │       ├── sqlite3_opt_serialize_omit.go
    │   │       ├── sqlite3_opt_stat4.go
    │   │       ├── sqlite3_opt_unlock_notify.c
    │   │       ├── sqlite3_opt_unlock_notify.go
    │   │       ├── sqlite3_opt_userauth.go
    │   │       ├── sqlite3_opt_userauth_omit.go
    │   │       ├── sqlite3_opt_vacuum_full.go
    │   │       ├── sqlite3_opt_vacuum_incr.go
    │   │       ├── sqlite3_opt_vtable.go
    │   │       ├── sqlite3_other.go
    │   │       ├── sqlite3_solaris.go
    │   │       ├── sqlite3_sql.go
    │   │       ├── sqlite3_trace.go
    │   │       ├── sqlite3_type.go
    │   │       ├── sqlite3_usleep_windows.go
    │   │       ├── sqlite3_windows.go
    │   │       ├── sqlite3ext.h
    │   │       └── static_mock.go
    │   ├── moby/
    │   │   └── spdystream/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       ├── connection.go
    │   │       ├── handlers.go
    │   │       ├── priority.go
    │   │       ├── spdy/
    │   │       │   ├── LICENSE
    │   │       │   ├── PATENTS
    │   │       │   ├── dictionary.go
    │   │       │   ├── options.go
    │   │       │   ├── read.go
    │   │       │   ├── types.go
    │   │       │   └── write.go
    │   │       ├── stream.go
    │   │       └── utils.go
    │   ├── modern-go/
    │   │   └── concurrent/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── executor.go
    │   │       ├── go_above_19.go
    │   │       ├── go_below_19.go
    │   │       ├── log.go
    │   │       ├── test.sh
    │   │       └── unbounded_executor.go
    │   ├── munnerz/
    │   │   └── goautoneg/
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.txt
    │   │       └── autoneg.go
    │   ├── natefinch/
    │   │   └── atomic/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── atomic.go
    │   │       ├── file_unix.go
    │   │       ├── file_windows.go
    │   │       └── zfile_windows.go
    │   ├── onsi/
    │   │   ├── ginkgo/
    │   │   │   └── v2/
    │   │   │       ├── .gitignore
    │   │   │       ├── CHANGELOG.md
    │   │   │       ├── CONTRIBUTING.md
    │   │   │       ├── LICENSE
    │   │   │       ├── Makefile
    │   │   │       ├── README.md
    │   │   │       ├── RELEASING.md
    │   │   │       ├── config/
    │   │   │       │   └── deprecated.go
    │   │   │       ├── core_dsl.go
    │   │   │       ├── decorator_dsl.go
    │   │   │       ├── deprecated_dsl.go
    │   │   │       ├── formatter/
    │   │   │       │   ├── colorable_others.go
    │   │   │       │   ├── colorable_windows.go
    │   │   │       │   └── formatter.go
    │   │   │       ├── ginkgo/
    │   │   │       │   ├── automaxprocs/
    │   │   │       │   │   ├── README.md
    │   │   │       │   │   ├── automaxprocs.go
    │   │   │       │   │   ├── cgroup.go
    │   │   │       │   │   ├── cgroups.go
    │   │   │       │   │   ├── cgroups2.go
    │   │   │       │   │   ├── cpu_quota_linux.go
    │   │   │       │   │   ├── cpu_quota_unsupported.go
    │   │   │       │   │   ├── errors.go
    │   │   │       │   │   ├── mountpoint.go
    │   │   │       │   │   ├── runtime.go
    │   │   │       │   │   └── subsys.go
    │   │   │       │   ├── automaxprocs.go
    │   │   │       │   ├── build/
    │   │   │       │   │   └── build_command.go
    │   │   │       │   ├── command/
    │   │   │       │   │   ├── abort.go
    │   │   │       │   │   ├── command.go
    │   │   │       │   │   └── program.go
    │   │   │       │   ├── generators/
    │   │   │       │   │   ├── boostrap_templates.go
    │   │   │       │   │   ├── bootstrap_command.go
    │   │   │       │   │   ├── generate_command.go
    │   │   │       │   │   ├── generate_templates.go
    │   │   │       │   │   └── generators_common.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── compile.go
    │   │   │       │   │   ├── gocovmerge.go
    │   │   │       │   │   ├── profiles_and_reports.go
    │   │   │       │   │   ├── run.go
    │   │   │       │   │   ├── test_suite.go
    │   │   │       │   │   ├── utils.go
    │   │   │       │   │   └── verify_version.go
    │   │   │       │   ├── labels/
    │   │   │       │   │   └── labels_command.go
    │   │   │       │   ├── main.go
    │   │   │       │   ├── outline/
    │   │   │       │   │   ├── ginkgo.go
    │   │   │       │   │   ├── import.go
    │   │   │       │   │   ├── outline.go
    │   │   │       │   │   └── outline_command.go
    │   │   │       │   ├── run/
    │   │   │       │   │   └── run_command.go
    │   │   │       │   ├── unfocus/
    │   │   │       │   │   └── unfocus_command.go
    │   │   │       │   └── watch/
    │   │   │       │       ├── delta.go
    │   │   │       │       ├── delta_tracker.go
    │   │   │       │       ├── dependencies.go
    │   │   │       │       ├── package_hash.go
    │   │   │       │       ├── package_hashes.go
    │   │   │       │       ├── suite.go
    │   │   │       │       └── watch_command.go
    │   │   │       ├── ginkgo_cli_dependencies.go
    │   │   │       ├── ginkgo_t_dsl.go
    │   │   │       ├── internal/
    │   │   │       │   ├── around_node.go
    │   │   │       │   ├── counter.go
    │   │   │       │   ├── failer.go
    │   │   │       │   ├── focus.go
    │   │   │       │   ├── global/
    │   │   │       │   │   └── init.go
    │   │   │       │   ├── group.go
    │   │   │       │   ├── interrupt_handler/
    │   │   │       │   │   ├── interrupt_handler.go
    │   │   │       │   │   ├── sigquit_swallower_unix.go
    │   │   │       │   │   └── sigquit_swallower_windows.go
    │   │   │       │   ├── node.go
    │   │   │       │   ├── ordering.go
    │   │   │       │   ├── output_interceptor.go
    │   │   │       │   ├── output_interceptor_unix.go
    │   │   │       │   ├── output_interceptor_wasm.go
    │   │   │       │   ├── output_interceptor_win.go
    │   │   │       │   ├── parallel_support/
    │   │   │       │   │   ├── client_server.go
    │   │   │       │   │   ├── http_client.go
    │   │   │       │   │   ├── http_server.go
    │   │   │       │   │   ├── rpc_client.go
    │   │   │       │   │   ├── rpc_server.go
    │   │   │       │   │   └── server_handler.go
    │   │   │       │   ├── progress_report.go
    │   │   │       │   ├── progress_report_bsd.go
    │   │   │       │   ├── progress_report_unix.go
    │   │   │       │   ├── progress_report_wasm.go
    │   │   │       │   ├── progress_report_win.go
    │   │   │       │   ├── progress_reporter_manager.go
    │   │   │       │   ├── report_entry.go
    │   │   │       │   ├── reporters/
    │   │   │       │   │   ├── gojson.go
    │   │   │       │   │   ├── gojson_event_writer.go
    │   │   │       │   │   └── gojson_reporter.go
    │   │   │       │   ├── spec.go
    │   │   │       │   ├── spec_context.go
    │   │   │       │   ├── suite.go
    │   │   │       │   ├── testingtproxy/
    │   │   │       │   │   └── testing_t_proxy.go
    │   │   │       │   ├── tree.go
    │   │   │       │   └── writer.go
    │   │   │       ├── reporters/
    │   │   │       │   ├── default_reporter.go
    │   │   │       │   ├── deprecated_reporter.go
    │   │   │       │   ├── gojson_report.go
    │   │   │       │   ├── json_report.go
    │   │   │       │   ├── junit_report.go
    │   │   │       │   ├── reporter.go
    │   │   │       │   └── teamcity_report.go
    │   │   │       ├── reporting_dsl.go
    │   │   │       ├── table_dsl.go
    │   │   │       └── types/
    │   │   │           ├── around_node.go
    │   │   │           ├── code_location.go
    │   │   │           ├── config.go
    │   │   │           ├── deprecated_types.go
    │   │   │           ├── deprecation_support.go
    │   │   │           ├── enum_support.go
    │   │   │           ├── errors.go
    │   │   │           ├── file_filter.go
    │   │   │           ├── flags.go
    │   │   │           ├── label_filter.go
    │   │   │           ├── report_entry.go
    │   │   │           ├── semver_filter.go
    │   │   │           ├── types.go
    │   │   │           └── version.go
    │   │   └── gomega/
    │   │       ├── .gitignore
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── RELEASING.md
    │   │       ├── format/
    │   │       │   └── format.go
    │   │       ├── gcustom/
    │   │       │   └── make_matcher.go
    │   │       ├── gomega_dsl.go
    │   │       ├── internal/
    │   │       │   ├── assertion.go
    │   │       │   ├── async_assertion.go
    │   │       │   ├── duration_bundle.go
    │   │       │   ├── gomega.go
    │   │       │   ├── gutil/
    │   │       │   │   ├── post_ioutil.go
    │   │       │   │   └── using_ioutil.go
    │   │       │   ├── polling_signal_error.go
    │   │       │   └── vetoptdesc.go
    │   │       ├── matchers/
    │   │       │   ├── and.go
    │   │       │   ├── assignable_to_type_of_matcher.go
    │   │       │   ├── attributes_slice.go
    │   │       │   ├── be_a_directory.go
    │   │       │   ├── be_a_regular_file.go
    │   │       │   ├── be_an_existing_file.go
    │   │       │   ├── be_closed_matcher.go
    │   │       │   ├── be_comparable_to_matcher.go
    │   │       │   ├── be_element_of_matcher.go
    │   │       │   ├── be_empty_matcher.go
    │   │       │   ├── be_equivalent_to_matcher.go
    │   │       │   ├── be_false_matcher.go
    │   │       │   ├── be_identical_to.go
    │   │       │   ├── be_key_of_matcher.go
    │   │       │   ├── be_nil_matcher.go
    │   │       │   ├── be_numerically_matcher.go
    │   │       │   ├── be_sent_matcher.go
    │   │       │   ├── be_temporally_matcher.go
    │   │       │   ├── be_true_matcher.go
    │   │       │   ├── be_zero_matcher.go
    │   │       │   ├── consist_of.go
    │   │       │   ├── contain_element_matcher.go
    │   │       │   ├── contain_elements_matcher.go
    │   │       │   ├── contain_substring_matcher.go
    │   │       │   ├── equal_matcher.go
    │   │       │   ├── have_cap_matcher.go
    │   │       │   ├── have_each_matcher.go
    │   │       │   ├── have_exact_elements.go
    │   │       │   ├── have_existing_field_matcher.go
    │   │       │   ├── have_field.go
    │   │       │   ├── have_http_body_matcher.go
    │   │       │   ├── have_http_header_with_value_matcher.go
    │   │       │   ├── have_http_status_matcher.go
    │   │       │   ├── have_key_matcher.go
    │   │       │   ├── have_key_with_value_matcher.go
    │   │       │   ├── have_len_matcher.go
    │   │       │   ├── have_occurred_matcher.go
    │   │       │   ├── have_prefix_matcher.go
    │   │       │   ├── have_suffix_matcher.go
    │   │       │   ├── have_value.go
    │   │       │   ├── internal/
    │   │       │   │   └── miter/
    │   │       │   │       ├── type_support_iter.go
    │   │       │   │       └── type_support_noiter.go
    │   │       │   ├── match_error_matcher.go
    │   │       │   ├── match_error_strictly_matcher.go
    │   │       │   ├── match_json_matcher.go
    │   │       │   ├── match_regexp_matcher.go
    │   │       │   ├── match_xml_matcher.go
    │   │       │   ├── match_yaml_matcher.go
    │   │       │   ├── not.go
    │   │       │   ├── or.go
    │   │       │   ├── panic_matcher.go
    │   │       │   ├── receive_matcher.go
    │   │       │   ├── satisfy_matcher.go
    │   │       │   ├── semi_structured_data_support.go
    │   │       │   ├── succeed_matcher.go
    │   │       │   ├── support/
    │   │       │   │   └── goraph/
    │   │       │   │       ├── bipartitegraph/
    │   │       │   │       │   ├── bipartitegraph.go
    │   │       │   │       │   └── bipartitegraphmatching.go
    │   │       │   │       ├── edge/
    │   │       │   │       │   └── edge.go
    │   │       │   │       ├── node/
    │   │       │   │       │   └── node.go
    │   │       │   │       └── util/
    │   │       │   │           └── util.go
    │   │       │   ├── type_support.go
    │   │       │   └── with_transform.go
    │   │       ├── matchers.go
    │   │       └── types/
    │   │           └── types.go
    │   ├── opencontainers/
    │   │   └── go-digest/
    │   │       ├── .mailmap
    │   │       ├── .pullapprove.yml
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── LICENSE.docs
    │   │       ├── MAINTAINERS
    │   │       ├── README.md
    │   │       ├── algorithm.go
    │   │       ├── digest.go
    │   │       ├── digester.go
    │   │       ├── doc.go
    │   │       └── verifiers.go
    │   ├── pkg/
    │   │   └── errors/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── appveyor.yml
    │   │       ├── errors.go
    │   │       ├── go113.go
    │   │       └── stack.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── prometheus/
    │   │   ├── client_golang/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── internal/
    │   │   │   │   └── github.com/
    │   │   │   │       └── golang/
    │   │   │   │           └── gddo/
    │   │   │   │               ├── LICENSE
    │   │   │   │               └── httputil/
    │   │   │   │                   ├── header/
    │   │   │   │                   │   └── header.go
    │   │   │   │                   └── negotiate.go
    │   │   │   └── prometheus/
    │   │   │       ├── .gitignore
    │   │   │       ├── README.md
    │   │   │       ├── build_info_collector.go
    │   │   │       ├── collector.go
    │   │   │       ├── collectorfunc.go
    │   │   │       ├── collectors/
    │   │   │       │   ├── collectors.go
    │   │   │       │   ├── dbstats_collector.go
    │   │   │       │   ├── expvar_collector.go
    │   │   │       │   ├── go_collector_go116.go
    │   │   │       │   ├── go_collector_latest.go
    │   │   │       │   └── process_collector.go
    │   │   │       ├── counter.go
    │   │   │       ├── desc.go
    │   │   │       ├── doc.go
    │   │   │       ├── expvar_collector.go
    │   │   │       ├── fnv.go
    │   │   │       ├── gauge.go
    │   │   │       ├── get_pid.go
    │   │   │       ├── get_pid_gopherjs.go
    │   │   │       ├── go_collector.go
    │   │   │       ├── go_collector_go116.go
    │   │   │       ├── go_collector_latest.go
    │   │   │       ├── histogram.go
    │   │   │       ├── internal/
    │   │   │       │   ├── almost_equal.go
    │   │   │       │   ├── difflib.go
    │   │   │       │   ├── go_collector_options.go
    │   │   │       │   ├── go_runtime_metrics.go
    │   │   │       │   └── metric.go
    │   │   │       ├── labels.go
    │   │   │       ├── metric.go
    │   │   │       ├── num_threads.go
    │   │   │       ├── num_threads_gopherjs.go
    │   │   │       ├── observer.go
    │   │   │       ├── process_collector.go
    │   │   │       ├── process_collector_darwin.go
    │   │   │       ├── process_collector_mem_cgo_darwin.c
    │   │   │       ├── process_collector_mem_cgo_darwin.go
    │   │   │       ├── process_collector_mem_nocgo_darwin.go
    │   │   │       ├── process_collector_not_supported.go
    │   │   │       ├── process_collector_procfsenabled.go
    │   │   │       ├── process_collector_windows.go
    │   │   │       ├── promhttp/
    │   │   │       │   ├── delegator.go
    │   │   │       │   ├── http.go
    │   │   │       │   ├── instrument_client.go
    │   │   │       │   ├── instrument_server.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   └── compression.go
    │   │   │       │   └── option.go
    │   │   │       ├── registry.go
    │   │   │       ├── summary.go
    │   │   │       ├── testutil/
    │   │   │       │   ├── lint.go
    │   │   │       │   ├── promlint/
    │   │   │       │   │   ├── problem.go
    │   │   │       │   │   ├── promlint.go
    │   │   │       │   │   ├── validation.go
    │   │   │       │   │   └── validations/
    │   │   │       │   │       ├── counter_validations.go
    │   │   │       │   │       ├── duplicate_validations.go
    │   │   │       │   │       ├── generic_name_validations.go
    │   │   │       │   │       ├── help_validations.go
    │   │   │       │   │       ├── histogram_validations.go
    │   │   │       │   │       └── units.go
    │   │   │       │   └── testutil.go
    │   │   │       ├── timer.go
    │   │   │       ├── untyped.go
    │   │   │       ├── value.go
    │   │   │       ├── vec.go
    │   │   │       ├── vnext.go
    │   │   │       └── wrap.go
    │   │   ├── client_model/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── go/
    │   │   │       └── metrics.pb.go
    │   │   ├── common/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── expfmt/
    │   │   │   │   ├── decode.go
    │   │   │   │   ├── encode.go
    │   │   │   │   ├── expfmt.go
    │   │   │   │   ├── fuzz.go
    │   │   │   │   ├── openmetrics_create.go
    │   │   │   │   ├── text_create.go
    │   │   │   │   └── text_parse.go
    │   │   │   └── model/
    │   │   │       ├── alert.go
    │   │   │       ├── fingerprinting.go
    │   │   │       ├── fnv.go
    │   │   │       ├── labels.go
    │   │   │       ├── labelset.go
    │   │   │       ├── labelset_string.go
    │   │   │       ├── metadata.go
    │   │   │       ├── metric.go
    │   │   │       ├── model.go
    │   │   │       ├── signature.go
    │   │   │       ├── silence.go
    │   │   │       ├── time.go
    │   │   │       ├── value.go
    │   │   │       ├── value_float.go
    │   │   │       ├── value_histogram.go
    │   │   │       └── value_type.go
    │   │   └── procfs/
    │   │       ├── .gitignore
    │   │       ├── .golangci.yml
    │   │       ├── CODE_OF_CONDUCT.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── MAINTAINERS.md
    │   │       ├── Makefile
    │   │       ├── Makefile.common
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── arp.go
    │   │       ├── buddyinfo.go
    │   │       ├── cmdline.go
    │   │       ├── cpuinfo.go
    │   │       ├── cpuinfo_armx.go
    │   │       ├── cpuinfo_loong64.go
    │   │       ├── cpuinfo_mipsx.go
    │   │       ├── cpuinfo_others.go
    │   │       ├── cpuinfo_ppcx.go
    │   │       ├── cpuinfo_riscvx.go
    │   │       ├── cpuinfo_s390x.go
    │   │       ├── cpuinfo_x86.go
    │   │       ├── crypto.go
    │   │       ├── doc.go
    │   │       ├── fs.go
    │   │       ├── fs_statfs_notype.go
    │   │       ├── fs_statfs_type.go
    │   │       ├── fscache.go
    │   │       ├── internal/
    │   │       │   ├── fs/
    │   │       │   │   └── fs.go
    │   │       │   └── util/
    │   │       │       ├── parse.go
    │   │       │       ├── readfile.go
    │   │       │       ├── sysreadfile.go
    │   │       │       ├── sysreadfile_compat.go
    │   │       │       └── valueparser.go
    │   │       ├── ipvs.go
    │   │       ├── kernel_hung.go
    │   │       ├── kernel_random.go
    │   │       ├── loadavg.go
    │   │       ├── mdstat.go
    │   │       ├── meminfo.go
    │   │       ├── mountinfo.go
    │   │       ├── mountstats.go
    │   │       ├── net_conntrackstat.go
    │   │       ├── net_dev.go
    │   │       ├── net_dev_snmp6.go
    │   │       ├── net_ip_socket.go
    │   │       ├── net_protocols.go
    │   │       ├── net_route.go
    │   │       ├── net_sockstat.go
    │   │       ├── net_softnet.go
    │   │       ├── net_tcp.go
    │   │       ├── net_tls_stat.go
    │   │       ├── net_udp.go
    │   │       ├── net_unix.go
    │   │       ├── net_wireless.go
    │   │       ├── net_xfrm.go
    │   │       ├── netstat.go
    │   │       ├── nfnetlink_queue.go
    │   │       ├── proc.go
    │   │       ├── proc_cgroup.go
    │   │       ├── proc_cgroups.go
    │   │       ├── proc_environ.go
    │   │       ├── proc_fdinfo.go
    │   │       ├── proc_interrupts.go
    │   │       ├── proc_io.go
    │   │       ├── proc_limits.go
    │   │       ├── proc_maps.go
    │   │       ├── proc_netstat.go
    │   │       ├── proc_ns.go
    │   │       ├── proc_psi.go
    │   │       ├── proc_smaps.go
    │   │       ├── proc_snmp.go
    │   │       ├── proc_snmp6.go
    │   │       ├── proc_stat.go
    │   │       ├── proc_statm.go
    │   │       ├── proc_status.go
    │   │       ├── proc_sys.go
    │   │       ├── schedstat.go
    │   │       ├── slab.go
    │   │       ├── softirqs.go
    │   │       ├── stat.go
    │   │       ├── swaps.go
    │   │       ├── thread.go
    │   │       ├── ttar
    │   │       ├── vm.go
    │   │       └── zoneinfo.go
    │   ├── robfig/
    │   │   └── cron/
    │   │       └── v3/
    │   │           ├── .gitignore
    │   │           ├── .travis.yml
    │   │           ├── LICENSE
    │   │           ├── README.md
    │   │           ├── chain.go
    │   │           ├── constantdelay.go
    │   │           ├── cron.go
    │   │           ├── doc.go
    │   │           ├── logger.go
    │   │           ├── option.go
    │   │           ├── parser.go
    │   │           └── spec.go
    │   ├── spf13/
    │   │   ├── cobra/
    │   │   │   ├── .gitignore
    │   │   │   ├── .golangci.yml
    │   │   │   ├── .mailmap
    │   │   │   ├── CONDUCT.md
    │   │   │   ├── CONTRIBUTING.md
    │   │   │   ├── LICENSE.txt
    │   │   │   ├── MAINTAINERS
    │   │   │   ├── Makefile
    │   │   │   ├── README.md
    │   │   │   ├── SECURITY.md
    │   │   │   ├── active_help.go
    │   │   │   ├── args.go
    │   │   │   ├── bash_completions.go
    │   │   │   ├── bash_completionsV2.go
    │   │   │   ├── cobra.go
    │   │   │   ├── command.go
    │   │   │   ├── command_notwin.go
    │   │   │   ├── command_win.go
    │   │   │   ├── completions.go
    │   │   │   ├── fish_completions.go
    │   │   │   ├── flag_groups.go
    │   │   │   ├── powershell_completions.go
    │   │   │   ├── shell_completions.go
    │   │   │   └── zsh_completions.go
    │   │   └── pflag/
    │   │       ├── .editorconfig
    │   │       ├── .gitignore
    │   │       ├── .golangci.yaml
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── bool.go
    │   │       ├── bool_func.go
    │   │       ├── bool_slice.go
    │   │       ├── bytes.go
    │   │       ├── count.go
    │   │       ├── duration.go
    │   │       ├── duration_slice.go
    │   │       ├── errors.go
    │   │       ├── flag.go
    │   │       ├── float32.go
    │   │       ├── float32_slice.go
    │   │       ├── float64.go
    │   │       ├── float64_slice.go
    │   │       ├── func.go
    │   │       ├── golangflag.go
    │   │       ├── int.go
    │   │       ├── int16.go
    │   │       ├── int32.go
    │   │       ├── int32_slice.go
    │   │       ├── int64.go
    │   │       ├── int64_slice.go
    │   │       ├── int8.go
    │   │       ├── int_slice.go
    │   │       ├── ip.go
    │   │       ├── ip_slice.go
    │   │       ├── ipmask.go
    │   │       ├── ipnet.go
    │   │       ├── ipnet_slice.go
    │   │       ├── string.go
    │   │       ├── string_array.go
    │   │       ├── string_slice.go
    │   │       ├── string_to_int.go
    │   │       ├── string_to_int64.go
    │   │       ├── string_to_string.go
    │   │       ├── text.go
    │   │       ├── time.go
    │   │       ├── uint.go
    │   │       ├── uint16.go
    │   │       ├── uint32.go
    │   │       ├── uint64.go
    │   │       ├── uint8.go
    │   │       └── uint_slice.go
    │   ├── stretchr/
    │   │   └── testify/
    │   │       ├── LICENSE
    │   │       ├── assert/
    │   │       │   ├── assertion_compare.go
    │   │       │   ├── assertion_format.go
    │   │       │   ├── assertion_format.go.tmpl
    │   │       │   ├── assertion_forward.go
    │   │       │   ├── assertion_forward.go.tmpl
    │   │       │   ├── assertion_order.go
    │   │       │   ├── assertions.go
    │   │       │   ├── doc.go
    │   │       │   ├── errors.go
    │   │       │   ├── forward_assertions.go
    │   │       │   ├── http_assertions.go
    │   │       │   └── yaml/
    │   │       │       ├── yaml_custom.go
    │   │       │       ├── yaml_default.go
    │   │       │       └── yaml_fail.go
    │   │       └── require/
    │   │           ├── doc.go
    │   │           ├── forward_requirements.go
    │   │           ├── require.go
    │   │           ├── require.go.tmpl
    │   │           ├── require_forward.go
    │   │           ├── require_forward.go.tmpl
    │   │           └── requirements.go
    │   ├── vishvananda/
    │   │   └── netns/
    │   │       ├── .golangci.yml
    │   │       ├── .yamllint.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── netns_linux.go
    │   │       ├── netns_others.go
    │   │       ├── nshandle_linux.go
    │   │       └── nshandle_others.go
    │   └── x448/
    │       └── float16/
    │           ├── .travis.yml
    │           ├── LICENSE
    │           ├── README.md
    │           └── float16.go
    ├── go.etcd.io/
    │   └── etcd/
    │       ├── api/
    │       │   └── v3/
    │       │       ├── LICENSE
    │       │       ├── authpb/
    │       │       │   ├── auth.pb.go
    │       │       │   └── auth.proto
    │       │       ├── etcdserverpb/
    │       │       │   ├── etcdserver.pb.go
    │       │       │   ├── etcdserver.proto
    │       │       │   ├── raft_internal.pb.go
    │       │       │   ├── raft_internal.proto
    │       │       │   ├── raft_internal_stringer.go
    │       │       │   ├── rpc.pb.go
    │       │       │   └── rpc.proto
    │       │       ├── membershippb/
    │       │       │   ├── membership.pb.go
    │       │       │   └── membership.proto
    │       │       ├── mvccpb/
    │       │       │   ├── kv.pb.go
    │       │       │   └── kv.proto
    │       │       ├── v3rpc/
    │       │       │   └── rpctypes/
    │       │       │       ├── doc.go
    │       │       │       ├── error.go
    │       │       │       ├── md.go
    │       │       │       └── metadatafields.go
    │       │       ├── version/
    │       │       │   └── version.go
    │       │       └── versionpb/
    │       │           ├── version.pb.go
    │       │           └── version.proto
    │       └── client/
    │           ├── pkg/
    │           │   └── v3/
    │           │       ├── LICENSE
    │           │       ├── fileutil/
    │           │       │   ├── dir_unix.go
    │           │       │   ├── dir_windows.go
    │           │       │   ├── doc.go
    │           │       │   ├── filereader.go
    │           │       │   ├── fileutil.go
    │           │       │   ├── lock.go
    │           │       │   ├── lock_flock.go
    │           │       │   ├── lock_linux.go
    │           │       │   ├── lock_plan9.go
    │           │       │   ├── lock_solaris.go
    │           │       │   ├── lock_unix.go
    │           │       │   ├── lock_windows.go
    │           │       │   ├── preallocate.go
    │           │       │   ├── preallocate_darwin.go
    │           │       │   ├── preallocate_unix.go
    │           │       │   ├── preallocate_unsupported.go
    │           │       │   ├── purge.go
    │           │       │   ├── read_dir.go
    │           │       │   ├── sync.go
    │           │       │   ├── sync_darwin.go
    │           │       │   └── sync_linux.go
    │           │       ├── logutil/
    │           │       │   ├── doc.go
    │           │       │   ├── log_format.go
    │           │       │   ├── log_level.go
    │           │       │   ├── zap.go
    │           │       │   └── zap_journal.go
    │           │       ├── systemd/
    │           │       │   ├── doc.go
    │           │       │   └── journal.go
    │           │       ├── tlsutil/
    │           │       │   ├── cipher_suites.go
    │           │       │   ├── doc.go
    │           │       │   ├── tlsutil.go
    │           │       │   └── versions.go
    │           │       ├── transport/
    │           │       │   ├── doc.go
    │           │       │   ├── keepalive_listener.go
    │           │       │   ├── keepalive_listener_openbsd.go
    │           │       │   ├── keepalive_listener_unix.go
    │           │       │   ├── limit_listen.go
    │           │       │   ├── listener.go
    │           │       │   ├── listener_opts.go
    │           │       │   ├── listener_tls.go
    │           │       │   ├── sockopt.go
    │           │       │   ├── sockopt_solaris.go
    │           │       │   ├── sockopt_unix.go
    │           │       │   ├── sockopt_wasm.go
    │           │       │   ├── sockopt_windows.go
    │           │       │   ├── timeout_conn.go
    │           │       │   ├── timeout_dialer.go
    │           │       │   ├── timeout_listener.go
    │           │       │   ├── timeout_transport.go
    │           │       │   ├── tls.go
    │           │       │   ├── transport.go
    │           │       │   └── unix_listener.go
    │           │       ├── types/
    │           │       │   ├── doc.go
    │           │       │   ├── id.go
    │           │       │   ├── set.go
    │           │       │   ├── slice.go
    │           │       │   ├── urls.go
    │           │       │   └── urlsmap.go
    │           │       └── verify/
    │           │           └── verify.go
    │           └── v3/
    │               ├── LICENSE
    │               ├── OWNERS
    │               ├── README.md
    │               ├── auth.go
    │               ├── client.go
    │               ├── cluster.go
    │               ├── compact_op.go
    │               ├── compare.go
    │               ├── config.go
    │               ├── credentials/
    │               │   └── credentials.go
    │               ├── ctx.go
    │               ├── doc.go
    │               ├── internal/
    │               │   ├── endpoint/
    │               │   │   └── endpoint.go
    │               │   └── resolver/
    │               │       └── resolver.go
    │               ├── kubernetes/
    │               │   ├── client.go
    │               │   └── interface.go
    │               ├── kv.go
    │               ├── lease.go
    │               ├── logger.go
    │               ├── maintenance.go
    │               ├── op.go
    │               ├── options.go
    │               ├── retry.go
    │               ├── retry_interceptor.go
    │               ├── sort.go
    │               ├── txn.go
    │               ├── utils.go
    │               └── watch.go
    ├── go.opencensus.io/
    │   ├── .gitignore
    │   ├── AUTHORS
    │   ├── CONTRIBUTING.md
    │   ├── LICENSE
    │   ├── Makefile
    │   ├── README.md
    │   ├── appveyor.yml
    │   ├── internal/
    │   │   ├── internal.go
    │   │   ├── sanitize.go
    │   │   ├── tagencoding/
    │   │   │   └── tagencoding.go
    │   │   └── traceinternals.go
    │   ├── metric/
    │   │   ├── metricdata/
    │   │   │   ├── doc.go
    │   │   │   ├── exemplar.go
    │   │   │   ├── label.go
    │   │   │   ├── metric.go
    │   │   │   ├── point.go
    │   │   │   ├── type_string.go
    │   │   │   └── unit.go
    │   │   └── metricproducer/
    │   │       ├── manager.go
    │   │       └── producer.go
    │   ├── opencensus.go
    │   ├── plugin/
    │   │   └── ochttp/
    │   │       ├── client.go
    │   │       ├── client_stats.go
    │   │       ├── doc.go
    │   │       ├── propagation/
    │   │       │   └── b3/
    │   │       │       └── b3.go
    │   │       ├── route.go
    │   │       ├── server.go
    │   │       ├── span_annotating_client_trace.go
    │   │       ├── stats.go
    │   │       ├── trace.go
    │   │       └── wrapped_body.go
    │   ├── resource/
    │   │   └── resource.go
    │   ├── stats/
    │   │   ├── doc.go
    │   │   ├── internal/
    │   │   │   └── record.go
    │   │   ├── measure.go
    │   │   ├── measure_float64.go
    │   │   ├── measure_int64.go
    │   │   ├── record.go
    │   │   ├── units.go
    │   │   └── view/
    │   │       ├── aggregation.go
    │   │       ├── aggregation_data.go
    │   │       ├── collector.go
    │   │       ├── doc.go
    │   │       ├── export.go
    │   │       ├── view.go
    │   │       ├── view_to_metric.go
    │   │       ├── worker.go
    │   │       └── worker_commands.go
    │   ├── tag/
    │   │   ├── context.go
    │   │   ├── doc.go
    │   │   ├── key.go
    │   │   ├── map.go
    │   │   ├── map_codec.go
    │   │   ├── metadata.go
    │   │   ├── profile_19.go
    │   │   ├── profile_not19.go
    │   │   └── validate.go
    │   └── trace/
    │       ├── basetypes.go
    │       ├── config.go
    │       ├── doc.go
    │       ├── evictedqueue.go
    │       ├── export.go
    │       ├── internal/
    │       │   └── internal.go
    │       ├── lrumap.go
    │       ├── propagation/
    │       │   └── propagation.go
    │       ├── sampling.go
    │       ├── spanbucket.go
    │       ├── spanstore.go
    │       ├── status_codes.go
    │       ├── trace.go
    │       ├── trace_api.go
    │       ├── trace_go11.go
    │       ├── trace_nongo11.go
    │       └── tracestate/
    │           └── tracestate.go
    ├── go.opentelemetry.io/
    │   ├── auto/
    │   │   └── sdk/
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── VERSIONING.md
    │   │       ├── doc.go
    │   │       ├── internal/
    │   │       │   └── telemetry/
    │   │       │       ├── attr.go
    │   │       │       ├── doc.go
    │   │       │       ├── id.go
    │   │       │       ├── number.go
    │   │       │       ├── resource.go
    │   │       │       ├── scope.go
    │   │       │       ├── span.go
    │   │       │       ├── status.go
    │   │       │       ├── traces.go
    │   │       │       └── value.go
    │   │       ├── limit.go
    │   │       ├── span.go
    │   │       ├── tracer.go
    │   │       └── tracer_provider.go
    │   ├── contrib/
    │   │   └── instrumentation/
    │   │       ├── google.golang.org/
    │   │       │   └── grpc/
    │   │       │       └── otelgrpc/
    │   │       │           ├── LICENSE
    │   │       │           ├── config.go
    │   │       │           ├── doc.go
    │   │       │           ├── interceptor.go
    │   │       │           ├── interceptorinfo.go
    │   │       │           ├── internal/
    │   │       │           │   └── parse.go
    │   │       │           ├── metadata_supplier.go
    │   │       │           ├── stats_handler.go
    │   │       │           └── version.go
    │   │       └── net/
    │   │           └── http/
    │   │               └── otelhttp/
    │   │                   ├── LICENSE
    │   │                   ├── common.go
    │   │                   ├── config.go
    │   │                   ├── doc.go
    │   │                   ├── handler.go
    │   │                   ├── internal/
    │   │                   │   ├── request/
    │   │                   │   │   ├── body_wrapper.go
    │   │                   │   │   ├── gen.go
    │   │                   │   │   └── resp_writer_wrapper.go
    │   │                   │   └── semconv/
    │   │                   │       ├── client.go
    │   │                   │       ├── gen.go
    │   │                   │       ├── server.go
    │   │                   │       └── util.go
    │   │                   ├── labeler.go
    │   │                   ├── start_time_context.go
    │   │                   ├── transport.go
    │   │                   └── version.go
    │   ├── otel/
    │   │   ├── .clomonitor.yml
    │   │   ├── .codespellignore
    │   │   ├── .codespellrc
    │   │   ├── .gitattributes
    │   │   ├── .gitignore
    │   │   ├── .golangci.yml
    │   │   ├── .lycheeignore
    │   │   ├── .markdownlint.yaml
    │   │   ├── CHANGELOG.md
    │   │   ├── CODEOWNERS
    │   │   ├── CONTRIBUTING.md
    │   │   ├── LICENSE
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── RELEASING.md
    │   │   ├── SECURITY-INSIGHTS.yml
    │   │   ├── VERSIONING.md
    │   │   ├── attribute/
    │   │   │   ├── README.md
    │   │   │   ├── doc.go
    │   │   │   ├── encoder.go
    │   │   │   ├── filter.go
    │   │   │   ├── hash.go
    │   │   │   ├── internal/
    │   │   │   │   ├── attribute.go
    │   │   │   │   └── xxhash/
    │   │   │   │       └── xxhash.go
    │   │   │   ├── iterator.go
    │   │   │   ├── key.go
    │   │   │   ├── kv.go
    │   │   │   ├── rawhelpers.go
    │   │   │   ├── set.go
    │   │   │   ├── type_string.go
    │   │   │   └── value.go
    │   │   ├── baggage/
    │   │   │   ├── README.md
    │   │   │   ├── baggage.go
    │   │   │   ├── context.go
    │   │   │   └── doc.go
    │   │   ├── codes/
    │   │   │   ├── README.md
    │   │   │   ├── codes.go
    │   │   │   └── doc.go
    │   │   ├── dependencies.Dockerfile
    │   │   ├── doc.go
    │   │   ├── error_handler.go
    │   │   ├── exporters/
    │   │   │   └── otlp/
    │   │   │       └── otlptrace/
    │   │   │           ├── LICENSE
    │   │   │           ├── README.md
    │   │   │           ├── clients.go
    │   │   │           ├── doc.go
    │   │   │           ├── exporter.go
    │   │   │           ├── internal/
    │   │   │           │   └── tracetransform/
    │   │   │           │       ├── attribute.go
    │   │   │           │       ├── instrumentation.go
    │   │   │           │       ├── resource.go
    │   │   │           │       └── span.go
    │   │   │           ├── otlptracegrpc/
    │   │   │           │   ├── LICENSE
    │   │   │           │   ├── README.md
    │   │   │           │   ├── client.go
    │   │   │           │   ├── doc.go
    │   │   │           │   ├── exporter.go
    │   │   │           │   ├── internal/
    │   │   │           │   │   ├── counter/
    │   │   │           │   │   │   └── counter.go
    │   │   │           │   │   ├── envconfig/
    │   │   │           │   │   │   └── envconfig.go
    │   │   │           │   │   ├── gen.go
    │   │   │           │   │   ├── observ/
    │   │   │           │   │   │   ├── doc.go
    │   │   │           │   │   │   ├── instrumentation.go
    │   │   │           │   │   │   └── target.go
    │   │   │           │   │   ├── otlpconfig/
    │   │   │           │   │   │   ├── envconfig.go
    │   │   │           │   │   │   ├── options.go
    │   │   │           │   │   │   ├── optiontypes.go
    │   │   │           │   │   │   └── tls.go
    │   │   │           │   │   ├── partialsuccess.go
    │   │   │           │   │   ├── retry/
    │   │   │           │   │   │   └── retry.go
    │   │   │           │   │   ├── version.go
    │   │   │           │   │   └── x/
    │   │   │           │   │       ├── README.md
    │   │   │           │   │       ├── observ.go
    │   │   │           │   │       └── x.go
    │   │   │           │   └── options.go
    │   │   │           └── version.go
    │   │   ├── handler.go
    │   │   ├── internal/
    │   │   │   ├── baggage/
    │   │   │   │   ├── baggage.go
    │   │   │   │   └── context.go
    │   │   │   ├── errorhandler/
    │   │   │   │   └── errorhandler.go
    │   │   │   └── global/
    │   │   │       ├── handler.go
    │   │   │       ├── instruments.go
    │   │   │       ├── internal_logging.go
    │   │   │       ├── meter.go
    │   │   │       ├── propagator.go
    │   │   │       ├── state.go
    │   │   │       └── trace.go
    │   │   ├── internal_logging.go
    │   │   ├── metric/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── asyncfloat64.go
    │   │   │   ├── asyncint64.go
    │   │   │   ├── config.go
    │   │   │   ├── doc.go
    │   │   │   ├── embedded/
    │   │   │   │   ├── README.md
    │   │   │   │   └── embedded.go
    │   │   │   ├── instrument.go
    │   │   │   ├── meter.go
    │   │   │   ├── noop/
    │   │   │   │   ├── README.md
    │   │   │   │   └── noop.go
    │   │   │   ├── syncfloat64.go
    │   │   │   └── syncint64.go
    │   │   ├── metric.go
    │   │   ├── propagation/
    │   │   │   ├── README.md
    │   │   │   ├── baggage.go
    │   │   │   ├── doc.go
    │   │   │   ├── propagation.go
    │   │   │   └── trace_context.go
    │   │   ├── propagation.go
    │   │   ├── renovate.json
    │   │   ├── requirements.txt
    │   │   ├── sdk/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── instrumentation/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── library.go
    │   │   │   │   └── scope.go
    │   │   │   ├── internal/
    │   │   │   │   └── x/
    │   │   │   │       ├── README.md
    │   │   │   │       ├── features.go
    │   │   │   │       └── x.go
    │   │   │   ├── resource/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── auto.go
    │   │   │   │   ├── builtin.go
    │   │   │   │   ├── config.go
    │   │   │   │   ├── container.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── env.go
    │   │   │   │   ├── host_id.go
    │   │   │   │   ├── host_id_bsd.go
    │   │   │   │   ├── host_id_darwin.go
    │   │   │   │   ├── host_id_exec.go
    │   │   │   │   ├── host_id_linux.go
    │   │   │   │   ├── host_id_readfile.go
    │   │   │   │   ├── host_id_unsupported.go
    │   │   │   │   ├── host_id_windows.go
    │   │   │   │   ├── os.go
    │   │   │   │   ├── os_release_darwin.go
    │   │   │   │   ├── os_release_unix.go
    │   │   │   │   ├── os_unix.go
    │   │   │   │   ├── os_unsupported.go
    │   │   │   │   ├── os_windows.go
    │   │   │   │   ├── process.go
    │   │   │   │   └── resource.go
    │   │   │   ├── trace/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── batch_span_processor.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── event.go
    │   │   │   │   ├── evictedqueue.go
    │   │   │   │   ├── id_generator.go
    │   │   │   │   ├── internal/
    │   │   │   │   │   ├── env/
    │   │   │   │   │   │   └── env.go
    │   │   │   │   │   └── observ/
    │   │   │   │   │       ├── batch_span_processor.go
    │   │   │   │   │       ├── doc.go
    │   │   │   │   │       ├── simple_span_processor.go
    │   │   │   │   │       └── tracer.go
    │   │   │   │   ├── link.go
    │   │   │   │   ├── provider.go
    │   │   │   │   ├── sampler_env.go
    │   │   │   │   ├── sampling.go
    │   │   │   │   ├── simple_span_processor.go
    │   │   │   │   ├── snapshot.go
    │   │   │   │   ├── span.go
    │   │   │   │   ├── span_exporter.go
    │   │   │   │   ├── span_limits.go
    │   │   │   │   ├── span_processor.go
    │   │   │   │   └── tracer.go
    │   │   │   └── version.go
    │   │   ├── semconv/
    │   │   │   ├── internal/
    │   │   │   │   └── http.go
    │   │   │   ├── v1.12.0/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── exception.go
    │   │   │   │   ├── http.go
    │   │   │   │   ├── resource.go
    │   │   │   │   ├── schema.go
    │   │   │   │   └── trace.go
    │   │   │   ├── v1.17.0/
    │   │   │   │   ├── README.md
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── event.go
    │   │   │   │   ├── exception.go
    │   │   │   │   ├── http.go
    │   │   │   │   ├── resource.go
    │   │   │   │   ├── schema.go
    │   │   │   │   └── trace.go
    │   │   │   ├── v1.37.0/
    │   │   │   │   ├── MIGRATION.md
    │   │   │   │   ├── README.md
    │   │   │   │   ├── attribute_group.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── error_type.go
    │   │   │   │   ├── exception.go
    │   │   │   │   └── schema.go
    │   │   │   └── v1.39.0/
    │   │   │       ├── MIGRATION.md
    │   │   │       ├── README.md
    │   │   │       ├── attribute_group.go
    │   │   │       ├── doc.go
    │   │   │       ├── error_type.go
    │   │   │       ├── exception.go
    │   │   │       ├── httpconv/
    │   │   │       │   └── metric.go
    │   │   │       ├── otelconv/
    │   │   │       │   └── metric.go
    │   │   │       ├── rpcconv/
    │   │   │       │   └── metric.go
    │   │   │       └── schema.go
    │   │   ├── trace/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── auto.go
    │   │   │   ├── config.go
    │   │   │   ├── context.go
    │   │   │   ├── doc.go
    │   │   │   ├── embedded/
    │   │   │   │   ├── README.md
    │   │   │   │   └── embedded.go
    │   │   │   ├── hex.go
    │   │   │   ├── internal/
    │   │   │   │   └── telemetry/
    │   │   │   │       ├── attr.go
    │   │   │   │       ├── doc.go
    │   │   │   │       ├── id.go
    │   │   │   │       ├── number.go
    │   │   │   │       ├── resource.go
    │   │   │   │       ├── scope.go
    │   │   │   │       ├── span.go
    │   │   │   │       ├── status.go
    │   │   │   │       ├── traces.go
    │   │   │   │       └── value.go
    │   │   │   ├── nonrecording.go
    │   │   │   ├── noop/
    │   │   │   │   ├── README.md
    │   │   │   │   └── noop.go
    │   │   │   ├── noop.go
    │   │   │   ├── provider.go
    │   │   │   ├── span.go
    │   │   │   ├── trace.go
    │   │   │   ├── tracer.go
    │   │   │   └── tracestate.go
    │   │   ├── trace.go
    │   │   ├── verify_released_changelog.sh
    │   │   ├── version.go
    │   │   └── versions.yaml
    │   └── proto/
    │       └── otlp/
    │           ├── LICENSE
    │           ├── collector/
    │           │   └── trace/
    │           │       └── v1/
    │           │           ├── trace_service.pb.go
    │           │           ├── trace_service.pb.gw.go
    │           │           └── trace_service_grpc.pb.go
    │           ├── common/
    │           │   └── v1/
    │           │       └── common.pb.go
    │           ├── resource/
    │           │   └── v1/
    │           │       └── resource.pb.go
    │           └── trace/
    │               └── v1/
    │                   └── trace.pb.go
    ├── go.yaml.in/
    │   └── yaml/
    │       ├── v2/
    │       │   ├── .travis.yml
    │       │   ├── LICENSE
    │       │   ├── LICENSE.libyaml
    │       │   ├── NOTICE
    │       │   ├── README.md
    │       │   ├── apic.go
    │       │   ├── decode.go
    │       │   ├── emitterc.go
    │       │   ├── encode.go
    │       │   ├── parserc.go
    │       │   ├── readerc.go
    │       │   ├── resolve.go
    │       │   ├── scannerc.go
    │       │   ├── sorter.go
    │       │   ├── writerc.go
    │       │   ├── yaml.go
    │       │   ├── yamlh.go
    │       │   └── yamlprivateh.go
    │       └── v3/
    │           ├── LICENSE
    │           ├── NOTICE
    │           ├── README.md
    │           ├── apic.go
    │           ├── decode.go
    │           ├── emitterc.go
    │           ├── encode.go
    │           ├── parserc.go
    │           ├── readerc.go
    │           ├── resolve.go
    │           ├── scannerc.go
    │           ├── sorter.go
    │           ├── writerc.go
    │           ├── yaml.go
    │           ├── yamlh.go
    │           └── yamlprivateh.go
    ├── golang.org/
    │   └── x/
    │       ├── crypto/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── blowfish/
    │       │   │   ├── block.go
    │       │   │   ├── cipher.go
    │       │   │   └── const.go
    │       │   ├── chacha20/
    │       │   │   ├── chacha_arm64.go
    │       │   │   ├── chacha_arm64.s
    │       │   │   ├── chacha_generic.go
    │       │   │   ├── chacha_noasm.go
    │       │   │   ├── chacha_ppc64x.go
    │       │   │   ├── chacha_ppc64x.s
    │       │   │   ├── chacha_s390x.go
    │       │   │   ├── chacha_s390x.s
    │       │   │   └── xor.go
    │       │   ├── chacha20poly1305/
    │       │   │   ├── chacha20poly1305.go
    │       │   │   ├── chacha20poly1305_amd64.go
    │       │   │   ├── chacha20poly1305_amd64.s
    │       │   │   ├── chacha20poly1305_generic.go
    │       │   │   ├── chacha20poly1305_noasm.go
    │       │   │   ├── fips140only_compat.go
    │       │   │   ├── fips140only_go1.26.go
    │       │   │   └── xchacha20poly1305.go
    │       │   ├── cryptobyte/
    │       │   │   ├── asn1/
    │       │   │   │   └── asn1.go
    │       │   │   ├── asn1.go
    │       │   │   ├── builder.go
    │       │   │   └── string.go
    │       │   ├── curve25519/
    │       │   │   └── curve25519.go
    │       │   ├── hkdf/
    │       │   │   └── hkdf.go
    │       │   ├── internal/
    │       │   │   ├── alias/
    │       │   │   │   ├── alias.go
    │       │   │   │   └── alias_purego.go
    │       │   │   └── poly1305/
    │       │   │       ├── mac_noasm.go
    │       │   │       ├── poly1305.go
    │       │   │       ├── sum_amd64.s
    │       │   │       ├── sum_asm.go
    │       │   │       ├── sum_generic.go
    │       │   │       ├── sum_loong64.s
    │       │   │       ├── sum_ppc64x.s
    │       │   │       ├── sum_s390x.go
    │       │   │       └── sum_s390x.s
    │       │   ├── nacl/
    │       │   │   └── secretbox/
    │       │   │       └── secretbox.go
    │       │   ├── salsa20/
    │       │   │   └── salsa/
    │       │   │       ├── hsalsa20.go
    │       │   │       ├── salsa208.go
    │       │   │       ├── salsa20_amd64.go
    │       │   │       ├── salsa20_amd64.s
    │       │   │       ├── salsa20_noasm.go
    │       │   │       └── salsa20_ref.go
    │       │   └── ssh/
    │       │       ├── buffer.go
    │       │       ├── certs.go
    │       │       ├── channel.go
    │       │       ├── cipher.go
    │       │       ├── client.go
    │       │       ├── client_auth.go
    │       │       ├── common.go
    │       │       ├── connection.go
    │       │       ├── doc.go
    │       │       ├── handshake.go
    │       │       ├── internal/
    │       │       │   └── bcrypt_pbkdf/
    │       │       │       └── bcrypt_pbkdf.go
    │       │       ├── kex.go
    │       │       ├── keys.go
    │       │       ├── mac.go
    │       │       ├── messages.go
    │       │       ├── mlkem.go
    │       │       ├── mux.go
    │       │       ├── server.go
    │       │       ├── session.go
    │       │       ├── ssh_gss.go
    │       │       ├── streamlocal.go
    │       │       ├── tcpip.go
    │       │       └── transport.go
    │       ├── exp/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── slices/
    │       │       ├── slices.go
    │       │       └── sort.go
    │       ├── mod/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── internal/
    │       │   │   └── lazyregexp/
    │       │   │       └── lazyre.go
    │       │   ├── module/
    │       │   │   ├── module.go
    │       │   │   └── pseudo.go
    │       │   └── semver/
    │       │       └── semver.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── html/
    │       │   │   ├── atom/
    │       │   │   │   ├── atom.go
    │       │   │   │   └── table.go
    │       │   │   ├── charset/
    │       │   │   │   └── charset.go
    │       │   │   ├── const.go
    │       │   │   ├── doc.go
    │       │   │   ├── doctype.go
    │       │   │   ├── entity.go
    │       │   │   ├── escape.go
    │       │   │   ├── foreign.go
    │       │   │   ├── iter.go
    │       │   │   ├── node.go
    │       │   │   ├── parse.go
    │       │   │   ├── render.go
    │       │   │   └── token.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go125.go
    │       │   │   ├── config_go126.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority_rfc7540.go
    │       │   │   ├── writesched_priority_rfc9218.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   ├── socks/
    │       │   │   │   ├── client.go
    │       │   │   │   └── socks.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   ├── proxy/
    │       │   │   ├── dial.go
    │       │   │   ├── direct.go
    │       │   │   ├── per_host.go
    │       │   │   ├── proxy.go
    │       │   │   └── socks5.go
    │       │   ├── trace/
    │       │   │   ├── events.go
    │       │   │   ├── histogram.go
    │       │   │   └── trace.go
    │       │   └── websocket/
    │       │       ├── client.go
    │       │       ├── dial.go
    │       │       ├── hybi.go
    │       │       ├── server.go
    │       │       └── websocket.go
    │       ├── oauth2/
    │       │   ├── .travis.yml
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── authhandler/
    │       │   │   └── authhandler.go
    │       │   ├── deviceauth.go
    │       │   ├── google/
    │       │   │   ├── appengine.go
    │       │   │   ├── default.go
    │       │   │   ├── doc.go
    │       │   │   ├── error.go
    │       │   │   ├── externalaccount/
    │       │   │   │   ├── aws.go
    │       │   │   │   ├── basecredentials.go
    │       │   │   │   ├── executablecredsource.go
    │       │   │   │   ├── filecredsource.go
    │       │   │   │   ├── header.go
    │       │   │   │   ├── programmaticrefreshcredsource.go
    │       │   │   │   └── urlcredsource.go
    │       │   │   ├── google.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccountauthorizeduser/
    │       │   │   │   │   └── externalaccountauthorizeduser.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       ├── clientauth.go
    │       │   │   │       └── sts_exchange.go
    │       │   │   ├── jwt.go
    │       │   │   └── sdk.go
    │       │   ├── internal/
    │       │   │   ├── doc.go
    │       │   │   ├── oauth2.go
    │       │   │   ├── token.go
    │       │   │   └── transport.go
    │       │   ├── jws/
    │       │   │   └── jws.go
    │       │   ├── jwt/
    │       │   │   └── jwt.go
    │       │   ├── oauth2.go
    │       │   ├── pkce.go
    │       │   ├── token.go
    │       │   └── transport.go
    │       ├── sync/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── errgroup/
    │       │   │   └── errgroup.go
    │       │   └── singleflight/
    │       │       └── singleflight.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cpu/
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_darwin_x86_gc.s
    │       │   │   ├── byteorder.go
    │       │   │   ├── cpu.go
    │       │   │   ├── cpu_aix.go
    │       │   │   ├── cpu_arm.go
    │       │   │   ├── cpu_arm64.go
    │       │   │   ├── cpu_arm64.s
    │       │   │   ├── cpu_darwin_x86.go
    │       │   │   ├── cpu_gc_arm64.go
    │       │   │   ├── cpu_gc_s390x.go
    │       │   │   ├── cpu_gc_x86.go
    │       │   │   ├── cpu_gc_x86.s
    │       │   │   ├── cpu_gccgo_arm64.go
    │       │   │   ├── cpu_gccgo_s390x.go
    │       │   │   ├── cpu_gccgo_x86.c
    │       │   │   ├── cpu_gccgo_x86.go
    │       │   │   ├── cpu_linux.go
    │       │   │   ├── cpu_linux_arm.go
    │       │   │   ├── cpu_linux_arm64.go
    │       │   │   ├── cpu_linux_loong64.go
    │       │   │   ├── cpu_linux_mips64x.go
    │       │   │   ├── cpu_linux_noinit.go
    │       │   │   ├── cpu_linux_ppc64x.go
    │       │   │   ├── cpu_linux_riscv64.go
    │       │   │   ├── cpu_linux_s390x.go
    │       │   │   ├── cpu_loong64.go
    │       │   │   ├── cpu_loong64.s
    │       │   │   ├── cpu_mips64x.go
    │       │   │   ├── cpu_mipsx.go
    │       │   │   ├── cpu_netbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.s
    │       │   │   ├── cpu_other_arm.go
    │       │   │   ├── cpu_other_arm64.go
    │       │   │   ├── cpu_other_mips64x.go
    │       │   │   ├── cpu_other_ppc64x.go
    │       │   │   ├── cpu_other_riscv64.go
    │       │   │   ├── cpu_other_x86.go
    │       │   │   ├── cpu_ppc64x.go
    │       │   │   ├── cpu_riscv64.go
    │       │   │   ├── cpu_s390x.go
    │       │   │   ├── cpu_s390x.s
    │       │   │   ├── cpu_wasm.go
    │       │   │   ├── cpu_windows_arm64.go
    │       │   │   ├── cpu_x86.go
    │       │   │   ├── cpu_zos.go
    │       │   │   ├── cpu_zos_s390x.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── hwcap_linux.go
    │       │   │   ├── parse.go
    │       │   │   ├── proc_cpuinfo_linux.go
    │       │   │   ├── runtime_auxv.go
    │       │   │   ├── runtime_auxv_go121.go
    │       │   │   ├── syscall_aix_gccgo.go
    │       │   │   ├── syscall_aix_ppc64_gc.go
    │       │   │   └── syscall_darwin_x86_gc.go
    │       │   ├── plan9/
    │       │   │   ├── asm.s
    │       │   │   ├── asm_plan9_386.s
    │       │   │   ├── asm_plan9_amd64.s
    │       │   │   ├── asm_plan9_arm.s
    │       │   │   ├── const_plan9.go
    │       │   │   ├── dir_plan9.go
    │       │   │   ├── env_plan9.go
    │       │   │   ├── errors_plan9.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mksysnum_plan9.sh
    │       │   │   ├── pwd_plan9.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── str.go
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_plan9.go
    │       │   │   ├── zsyscall_plan9_386.go
    │       │   │   ├── zsyscall_plan9_amd64.go
    │       │   │   ├── zsyscall_plan9_arm.go
    │       │   │   └── zsysnum_plan9.go
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── registry/
    │       │       │   ├── key.go
    │       │       │   ├── mksyscall.go
    │       │       │   ├── syscall.go
    │       │       │   ├── value.go
    │       │       │   └── zsyscall_windows.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── term/
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── README.md
    │       │   ├── codereview.cfg
    │       │   ├── term.go
    │       │   ├── term_plan9.go
    │       │   ├── term_unix.go
    │       │   ├── term_unix_bsd.go
    │       │   ├── term_unix_other.go
    │       │   ├── term_unsupported.go
    │       │   ├── term_windows.go
    │       │   └── terminal.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cases/
    │       │   │   ├── cases.go
    │       │   │   ├── context.go
    │       │   │   ├── fold.go
    │       │   │   ├── icu.go
    │       │   │   ├── info.go
    │       │   │   ├── map.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables17.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── encoding/
    │       │   │   ├── charmap/
    │       │   │   │   ├── charmap.go
    │       │   │   │   └── tables.go
    │       │   │   ├── encoding.go
    │       │   │   ├── htmlindex/
    │       │   │   │   ├── htmlindex.go
    │       │   │   │   ├── map.go
    │       │   │   │   └── tables.go
    │       │   │   ├── internal/
    │       │   │   │   ├── identifier/
    │       │   │   │   │   ├── identifier.go
    │       │   │   │   │   └── mib.go
    │       │   │   │   └── internal.go
    │       │   │   ├── japanese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── eucjp.go
    │       │   │   │   ├── iso2022jp.go
    │       │   │   │   ├── shiftjis.go
    │       │   │   │   └── tables.go
    │       │   │   ├── korean/
    │       │   │   │   ├── euckr.go
    │       │   │   │   └── tables.go
    │       │   │   ├── simplifiedchinese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── gbk.go
    │       │   │   │   ├── hzgb2312.go
    │       │   │   │   └── tables.go
    │       │   │   ├── traditionalchinese/
    │       │   │   │   ├── big5.go
    │       │   │   │   └── tables.go
    │       │   │   └── unicode/
    │       │   │       ├── override.go
    │       │   │       └── unicode.go
    │       │   ├── feature/
    │       │   │   └── plural/
    │       │   │       ├── common.go
    │       │   │       ├── message.go
    │       │   │       ├── plural.go
    │       │   │       └── tables.go
    │       │   ├── internal/
    │       │   │   ├── catmsg/
    │       │   │   │   ├── catmsg.go
    │       │   │   │   ├── codec.go
    │       │   │   │   └── varint.go
    │       │   │   ├── format/
    │       │   │   │   ├── format.go
    │       │   │   │   └── parser.go
    │       │   │   ├── internal.go
    │       │   │   ├── language/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── compact/
    │       │   │   │   │   ├── compact.go
    │       │   │   │   │   ├── language.go
    │       │   │   │   │   ├── parents.go
    │       │   │   │   │   ├── tables.go
    │       │   │   │   │   └── tags.go
    │       │   │   │   ├── compact.go
    │       │   │   │   ├── compose.go
    │       │   │   │   ├── coverage.go
    │       │   │   │   ├── language.go
    │       │   │   │   ├── lookup.go
    │       │   │   │   ├── match.go
    │       │   │   │   ├── parse.go
    │       │   │   │   ├── tables.go
    │       │   │   │   └── tags.go
    │       │   │   ├── match.go
    │       │   │   ├── number/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── decimal.go
    │       │   │   │   ├── format.go
    │       │   │   │   ├── number.go
    │       │   │   │   ├── pattern.go
    │       │   │   │   ├── roundingmode_string.go
    │       │   │   │   └── tables.go
    │       │   │   ├── stringset/
    │       │   │   │   └── set.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── utf8internal/
    │       │   │       └── utf8internal.go
    │       │   ├── language/
    │       │   │   ├── coverage.go
    │       │   │   ├── doc.go
    │       │   │   ├── language.go
    │       │   │   ├── match.go
    │       │   │   ├── parse.go
    │       │   │   ├── tables.go
    │       │   │   └── tags.go
    │       │   ├── message/
    │       │   │   ├── catalog/
    │       │   │   │   ├── catalog.go
    │       │   │   │   └── dict.go
    │       │   │   ├── catalog.go
    │       │   │   ├── doc.go
    │       │   │   ├── format.go
    │       │   │   ├── message.go
    │       │   │   └── print.go
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       └── bidirule.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables17.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables17.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       ├── time/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── rate/
    │       │       ├── rate.go
    │       │       └── sometimes.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           ├── cover/
    │           │   └── profile.go
    │           ├── go/
    │           │   ├── ast/
    │           │   │   ├── astutil/
    │           │   │   │   ├── enclosing.go
    │           │   │   │   ├── imports.go
    │           │   │   │   ├── rewrite.go
    │           │   │   │   └── util.go
    │           │   │   ├── edge/
    │           │   │   │   └── edge.go
    │           │   │   └── inspector/
    │           │   │       ├── cursor.go
    │           │   │       ├── inspector.go
    │           │   │       ├── iter.go
    │           │   │       ├── typeof.go
    │           │   │       └── walk.go
    │           │   ├── gcexportdata/
    │           │   │   ├── gcexportdata.go
    │           │   │   └── importer.go
    │           │   ├── packages/
    │           │   │   ├── doc.go
    │           │   │   ├── external.go
    │           │   │   ├── golist.go
    │           │   │   ├── golist_overlay.go
    │           │   │   ├── loadmode_string.go
    │           │   │   ├── packages.go
    │           │   │   └── visit.go
    │           │   └── types/
    │           │       ├── objectpath/
    │           │       │   └── objectpath.go
    │           │       └── typeutil/
    │           │           ├── callee.go
    │           │           ├── imports.go
    │           │           ├── map.go
    │           │           ├── methodsetcache.go
    │           │           └── ui.go
    │           ├── imports/
    │           │   └── forward.go
    │           └── internal/
    │               ├── aliases/
    │               │   ├── aliases.go
    │               │   └── aliases_go122.go
    │               ├── event/
    │               │   ├── core/
    │               │   │   ├── event.go
    │               │   │   ├── export.go
    │               │   │   └── fast.go
    │               │   ├── doc.go
    │               │   ├── event.go
    │               │   ├── keys/
    │               │   │   ├── keys.go
    │               │   │   ├── standard.go
    │               │   │   └── util.go
    │               │   └── label/
    │               │       └── label.go
    │               ├── gcimporter/
    │               │   ├── bimport.go
    │               │   ├── exportdata.go
    │               │   ├── gcimporter.go
    │               │   ├── iexport.go
    │               │   ├── iimport.go
    │               │   ├── predeclared.go
    │               │   ├── support.go
    │               │   └── ureader_yes.go
    │               ├── gocommand/
    │               │   ├── invoke.go
    │               │   ├── invoke_notunix.go
    │               │   ├── invoke_unix.go
    │               │   ├── vendor.go
    │               │   └── version.go
    │               ├── gopathwalk/
    │               │   └── walk.go
    │               ├── imports/
    │               │   ├── fix.go
    │               │   ├── imports.go
    │               │   ├── mod.go
    │               │   ├── mod_cache.go
    │               │   ├── sortimports.go
    │               │   ├── source.go
    │               │   ├── source_env.go
    │               │   └── source_modindex.go
    │               ├── modindex/
    │               │   ├── directories.go
    │               │   ├── index.go
    │               │   ├── lookup.go
    │               │   ├── modindex.go
    │               │   └── symbols.go
    │               ├── packagesinternal/
    │               │   └── packages.go
    │               ├── pkgbits/
    │               │   ├── codes.go
    │               │   ├── decoder.go
    │               │   ├── doc.go
    │               │   ├── encoder.go
    │               │   ├── flags.go
    │               │   ├── reloc.go
    │               │   ├── support.go
    │               │   ├── sync.go
    │               │   ├── syncmarker_string.go
    │               │   └── version.go
    │               ├── stdlib/
    │               │   ├── deps.go
    │               │   ├── import.go
    │               │   ├── manifest.go
    │               │   └── stdlib.go
    │               ├── typeparams/
    │               │   ├── common.go
    │               │   ├── coretype.go
    │               │   ├── free.go
    │               │   ├── normalize.go
    │               │   ├── termlist.go
    │               │   └── typeterm.go
    │               ├── typesinternal/
    │               │   ├── classify_call.go
    │               │   ├── element.go
    │               │   ├── errorcode.go
    │               │   ├── errorcode_string.go
    │               │   ├── fx.go
    │               │   ├── isnamed.go
    │               │   ├── qualifier.go
    │               │   ├── recv.go
    │               │   ├── toonew.go
    │               │   ├── types.go
    │               │   ├── varkind.go
    │               │   ├── varkind_go124.go
    │               │   └── zerovalue.go
    │               └── versions/
    │                   ├── features.go
    │                   ├── gover.go
    │                   ├── types.go
    │                   └── versions.go
    ├── google.golang.org/
    │   ├── api/
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTORS
    │   │   ├── LICENSE
    │   │   ├── compute/
    │   │   │   ├── v0.alpha/
    │   │   │   │   ├── compute-api.json
    │   │   │   │   ├── compute-gen.go
    │   │   │   │   ├── compute2-gen.go
    │   │   │   │   └── compute3-gen.go
    │   │   │   ├── v0.beta/
    │   │   │   │   ├── compute-api.json
    │   │   │   │   ├── compute-gen.go
    │   │   │   │   ├── compute2-gen.go
    │   │   │   │   └── compute3-gen.go
    │   │   │   └── v1/
    │   │   │       ├── compute-api.json
    │   │   │       ├── compute-gen.go
    │   │   │       ├── compute2-gen.go
    │   │   │       └── compute3-gen.go
    │   │   ├── container/
    │   │   │   └── v1/
    │   │   │       ├── container-api.json
    │   │   │       └── container-gen.go
    │   │   ├── googleapi/
    │   │   │   ├── googleapi.go
    │   │   │   ├── transport/
    │   │   │   │   └── apikey.go
    │   │   │   └── types.go
    │   │   ├── internal/
    │   │   │   ├── cba.go
    │   │   │   ├── cert/
    │   │   │   │   ├── default_cert.go
    │   │   │   │   ├── enterprise_cert.go
    │   │   │   │   └── secureconnect_cert.go
    │   │   │   ├── conn_pool.go
    │   │   │   ├── creds.go
    │   │   │   ├── gensupport/
    │   │   │   │   ├── buffer.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── error.go
    │   │   │   │   ├── json.go
    │   │   │   │   ├── jsonfloat.go
    │   │   │   │   ├── media.go
    │   │   │   │   ├── params.go
    │   │   │   │   ├── resumable.go
    │   │   │   │   ├── retry.go
    │   │   │   │   ├── send.go
    │   │   │   │   └── version.go
    │   │   │   ├── impersonate/
    │   │   │   │   └── impersonate.go
    │   │   │   ├── s2a.go
    │   │   │   ├── settings.go
    │   │   │   ├── third_party/
    │   │   │   │   └── uritemplates/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── METADATA
    │   │   │   │       ├── uritemplates.go
    │   │   │   │       └── utils.go
    │   │   │   └── version.go
    │   │   ├── networkservices/
    │   │   │   ├── v1/
    │   │   │   │   ├── networkservices-api.json
    │   │   │   │   └── networkservices-gen.go
    │   │   │   └── v1beta1/
    │   │   │       ├── networkservices-api.json
    │   │   │       └── networkservices-gen.go
    │   │   ├── option/
    │   │   │   ├── internaloption/
    │   │   │   │   └── internaloption.go
    │   │   │   └── option.go
    │   │   ├── tpu/
    │   │   │   └── v1/
    │   │   │       ├── tpu-api.json
    │   │   │       └── tpu-gen.go
    │   │   └── transport/
    │   │       └── http/
    │   │           ├── dial.go
    │   │           └── internal/
    │   │               └── propagation/
    │   │                   └── http.go
    │   ├── genproto/
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   ├── LICENSE
    │   │       │   ├── annotations/
    │   │       │   │   ├── annotations.pb.go
    │   │       │   │   ├── client.pb.go
    │   │       │   │   ├── field_behavior.pb.go
    │   │       │   │   ├── field_info.pb.go
    │   │       │   │   ├── http.pb.go
    │   │       │   │   ├── resource.pb.go
    │   │       │   │   └── routing.pb.go
    │   │       │   ├── expr/
    │   │       │   │   └── v1alpha1/
    │   │       │   │       ├── checked.pb.go
    │   │       │   │       ├── eval.pb.go
    │   │       │   │       ├── explain.pb.go
    │   │       │   │       ├── syntax.pb.go
    │   │       │   │       └── value.pb.go
    │   │       │   ├── httpbody/
    │   │       │   │   └── httpbody.pb.go
    │   │       │   └── launch_stage.pb.go
    │   │       └── rpc/
    │   │           ├── LICENSE
    │   │           ├── code/
    │   │           │   └── code.pb.go
    │   │           ├── errdetails/
    │   │           │   └── error_details.pb.go
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── AUTHORS
    │   │   ├── CODE-OF-CONDUCT.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── GOVERNANCE.md
    │   │   ├── LICENSE
    │   │   ├── MAINTAINERS.md
    │   │   ├── Makefile
    │   │   ├── NOTICE.txt
    │   │   ├── README.md
    │   │   ├── SECURITY.md
    │   │   ├── attributes/
    │   │   │   └── attributes.go
    │   │   ├── backoff/
    │   │   │   └── backoff.go
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   ├── conn_state_evaluator.go
    │   │   │   ├── endpointsharding/
    │   │   │   │   └── endpointsharding.go
    │   │   │   ├── grpclb/
    │   │   │   │   └── state/
    │   │   │   │       └── state.go
    │   │   │   ├── pickfirst/
    │   │   │   │   ├── internal/
    │   │   │   │   │   └── internal.go
    │   │   │   │   └── pickfirst.go
    │   │   │   ├── roundrobin/
    │   │   │   │   └── roundrobin.go
    │   │   │   └── subconn.go
    │   │   ├── balancer_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── channelz/
    │   │   │   └── channelz.go
    │   │   ├── clientconn.go
    │   │   ├── codec.go
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   ├── insecure/
    │   │   │   │   └── insecure.go
    │   │   │   ├── local/
    │   │   │   │   └── local.go
    │   │   │   └── tls.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   ├── encoding_v2.go
    │   │   │   ├── gzip/
    │   │   │   │   └── gzip.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── experimental/
    │   │   │   └── stats/
    │   │   │       ├── metricregistry.go
    │   │   │       └── metrics.go
    │   │   ├── grpclog/
    │   │   │   ├── component.go
    │   │   │   ├── grpclog.go
    │   │   │   ├── internal/
    │   │   │   │   ├── grpclog.go
    │   │   │   │   ├── logger.go
    │   │   │   │   └── loggerv2.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── health/
    │   │   │   └── grpc_health_v1/
    │   │   │       ├── health.pb.go
    │   │   │       └── health_grpc.pb.go
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── balancer/
    │   │   │   │   ├── gracefulswitch/
    │   │   │   │   │   ├── config.go
    │   │   │   │   │   └── gracefulswitch.go
    │   │   │   │   └── weight/
    │   │   │   │       └── weight.go
    │   │   │   ├── balancerload/
    │   │   │   │   └── load.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   └── sink.go
    │   │   │   ├── buffer/
    │   │   │   │   └── unbounded.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── channel.go
    │   │   │   │   ├── channelmap.go
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── logging.go
    │   │   │   │   ├── server.go
    │   │   │   │   ├── socket.go
    │   │   │   │   ├── subchannel.go
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   ├── syscall_nonlinux.go
    │   │   │   │   └── trace.go
    │   │   │   ├── credentials/
    │   │   │   │   ├── credentials.go
    │   │   │   │   ├── spiffe.go
    │   │   │   │   ├── syscallconn.go
    │   │   │   │   └── util.go
    │   │   │   ├── envconfig/
    │   │   │   │   ├── envconfig.go
    │   │   │   │   ├── observability.go
    │   │   │   │   └── xds.go
    │   │   │   ├── experimental.go
    │   │   │   ├── grpclog/
    │   │   │   │   └── prefix_logger.go
    │   │   │   ├── grpcsync/
    │   │   │   │   ├── callback_serializer.go
    │   │   │   │   ├── event.go
    │   │   │   │   └── pubsub.go
    │   │   │   ├── grpcutil/
    │   │   │   │   ├── compressor.go
    │   │   │   │   ├── encode_duration.go
    │   │   │   │   ├── grpcutil.go
    │   │   │   │   ├── metadata.go
    │   │   │   │   ├── method.go
    │   │   │   │   └── regex.go
    │   │   │   ├── idle/
    │   │   │   │   └── idle.go
    │   │   │   ├── internal.go
    │   │   │   ├── mem/
    │   │   │   │   └── buffer_pool.go
    │   │   │   ├── metadata/
    │   │   │   │   └── metadata.go
    │   │   │   ├── pretty/
    │   │   │   │   └── pretty.go
    │   │   │   ├── proxyattributes/
    │   │   │   │   └── proxyattributes.go
    │   │   │   ├── resolver/
    │   │   │   │   ├── config_selector.go
    │   │   │   │   ├── delegatingresolver/
    │   │   │   │   │   └── delegatingresolver.go
    │   │   │   │   ├── dns/
    │   │   │   │   │   ├── dns_resolver.go
    │   │   │   │   │   └── internal/
    │   │   │   │   │       └── internal.go
    │   │   │   │   ├── passthrough/
    │   │   │   │   │   └── passthrough.go
    │   │   │   │   └── unix/
    │   │   │   │       └── unix.go
    │   │   │   ├── serviceconfig/
    │   │   │   │   ├── duration.go
    │   │   │   │   └── serviceconfig.go
    │   │   │   ├── stats/
    │   │   │   │   ├── labels.go
    │   │   │   │   ├── metrics_recorder_list.go
    │   │   │   │   └── stats.go
    │   │   │   ├── status/
    │   │   │   │   └── status.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   ├── tcp_keepalive_others.go
    │   │   │   ├── tcp_keepalive_unix.go
    │   │   │   ├── tcp_keepalive_windows.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── client_stream.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── logging.go
    │   │   │       ├── networktype/
    │   │   │       │   └── networktype.go
    │   │   │       ├── proxy.go
    │   │   │       ├── server_stream.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── mem/
    │   │   │   ├── buffer_pool.go
    │   │   │   ├── buffer_slice.go
    │   │   │   └── buffers.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── preloader.go
    │   │   ├── reflection/
    │   │   │   ├── README.md
    │   │   │   ├── adapt.go
    │   │   │   ├── grpc_reflection_v1/
    │   │   │   │   ├── reflection.pb.go
    │   │   │   │   └── reflection_grpc.pb.go
    │   │   │   ├── grpc_reflection_v1alpha/
    │   │   │   │   ├── reflection.pb.go
    │   │   │   │   └── reflection_grpc.pb.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── serverreflection.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── manual/
    │   │   │   │   └── manual.go
    │   │   │   ├── map.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── serviceconfig/
    │   │   │   └── serviceconfig.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   ├── metrics.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── stream_interfaces.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── trace_notrace.go
    │   │   ├── trace_withtrace.go
    │   │   └── version.go
    │   └── protobuf/
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── encoding/
    │       │   ├── protodelim/
    │       │   │   └── protodelim.go
    │       │   ├── protojson/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   ├── encode.go
    │       │   │   └── well_known_types.go
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── editiondefaults/
    │       │   │   ├── defaults.go
    │       │   │   └── editions_defaults.binpb
    │       │   ├── editionssupport/
    │       │   │   └── editions.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── json/
    │       │   │   │   ├── decode.go
    │       │   │   │   ├── decode_number.go
    │       │   │   │   ├── decode_string.go
    │       │   │   │   ├── decode_token.go
    │       │   │   │   └── encode.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   └── errors.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   ├── editions.go
    │       │   │   ├── placeholder.go
    │       │   │   └── presence.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── go_features_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── name.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── api_export_opaque.go
    │       │   │   ├── bitmap.go
    │       │   │   ├── bitmap_race.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_field_opaque.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_message_opaque.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── equal.go
    │       │   │   ├── extension.go
    │       │   │   ├── lazy.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_opaque.go
    │       │   │   ├── message_opaque_gen.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_field_gen.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── pointer_unsafe_opaque.go
    │       │   │   ├── presence.go
    │       │   │   └── validate.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── protolazy/
    │       │   │   ├── bufferreader.go
    │       │   │   ├── lazy.go
    │       │   │   └── pointer_unsafe.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   ├── wrapperopaque.go
    │       │   └── wrappers.go
    │       ├── protoadapt/
    │       │   └── convert.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   ├── editions.go
    │       │   │   └── proto.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_equal.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           ├── dynamicpb/
    │           │   ├── dynamic.go
    │           │   └── types.go
    │           ├── gofeaturespb/
    │           │   └── go_features.pb.go
    │           └── known/
    │               ├── anypb/
    │               │   └── any.pb.go
    │               ├── durationpb/
    │               │   └── duration.pb.go
    │               ├── emptypb/
    │               │   └── empty.pb.go
    │               ├── fieldmaskpb/
    │               │   └── field_mask.pb.go
    │               ├── structpb/
    │               │   └── struct.pb.go
    │               ├── timestamppb/
    │               │   └── timestamp.pb.go
    │               └── wrapperspb/
    │                   └── wrappers.pb.go
    ├── gopkg.in/
    │   ├── evanphx/
    │   │   └── json-patch.v4/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── errors.go
    │   │       ├── merge.go
    │   │       └── patch.go
    │   ├── gcfg.v1/
    │   │   ├── LICENSE
    │   │   ├── README
    │   │   ├── doc.go
    │   │   ├── errors.go
    │   │   ├── read.go
    │   │   ├── scanner/
    │   │   │   ├── errors.go
    │   │   │   └── scanner.go
    │   │   ├── set.go
    │   │   ├── token/
    │   │   │   ├── position.go
    │   │   │   ├── serialize.go
    │   │   │   └── token.go
    │   │   └── types/
    │   │       ├── bool.go
    │   │       ├── doc.go
    │   │       ├── enum.go
    │   │       ├── int.go
    │   │       └── scan.go
    │   ├── inf.v0/
    │   │   ├── LICENSE
    │   │   ├── dec.go
    │   │   └── rounder.go
    │   ├── natefinch/
    │   │   └── lumberjack.v2/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── chown.go
    │   │       ├── chown_linux.go
    │   │       └── lumberjack.go
    │   ├── warnings.v0/
    │   │   ├── LICENSE
    │   │   ├── README
    │   │   └── warnings.go
    │   ├── yaml.v2/
    │   │   ├── .travis.yml
    │   │   ├── LICENSE
    │   │   ├── LICENSE.libyaml
    │   │   ├── NOTICE
    │   │   ├── README.md
    │   │   ├── apic.go
    │   │   ├── decode.go
    │   │   ├── emitterc.go
    │   │   ├── encode.go
    │   │   ├── parserc.go
    │   │   ├── readerc.go
    │   │   ├── resolve.go
    │   │   ├── scannerc.go
    │   │   ├── sorter.go
    │   │   ├── writerc.go
    │   │   ├── yaml.go
    │   │   ├── yamlh.go
    │   │   └── yamlprivateh.go
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    ├── k8s.io/
    │   ├── api/
    │   │   ├── LICENSE
    │   │   ├── admission/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── admissionregistration/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── apidiscovery/
    │   │   │   ├── v2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v2beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── apiserverinternal/
    │   │   │   └── v1alpha1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       └── zz_generated.model_name.go
    │   │   ├── apps/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta2/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── authentication/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── authorization/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── autoscaling/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v2/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── batch/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── certificates/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── coordination/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── core/
    │   │   │   └── v1/
    │   │   │       ├── annotation_key_constants.go
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── lifecycle.go
    │   │   │       ├── objectreference.go
    │   │   │       ├── register.go
    │   │   │       ├── resource.go
    │   │   │       ├── taint.go
    │   │   │       ├── toleration.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── well_known_taints.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── discovery/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── well_known_labels.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── events/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── extensions/
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       ├── zz_generated.prerelease-lifecycle.go
    │   │   │       └── zz_generated.validations.go
    │   │   ├── flowcontrol/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta3/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── imagepolicy/
    │   │   │   └── v1alpha1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       └── zz_generated.model_name.go
    │   │   ├── networking/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── well_known_annotations.go
    │   │   │   │   ├── well_known_labels.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── well_known_annotations.go
    │   │   │       ├── well_known_labels.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── node/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── policy/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── rbac/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── resource/
    │   │   │   ├── v1/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha3/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1beta1/
    │   │   │   │   ├── devicetaint.go
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta2/
    │   │   │       ├── devicetaint.go
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── scheduling/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha2/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   └── zz_generated.model_name.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   ├── storage/
    │   │   │   ├── v1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   ├── v1alpha1/
    │   │   │   │   ├── doc.go
    │   │   │   │   ├── generated.pb.go
    │   │   │   │   ├── generated.proto
    │   │   │   │   ├── register.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_swagger_doc_generated.go
    │   │   │   │   ├── zz_generated.deepcopy.go
    │   │   │   │   ├── zz_generated.model_name.go
    │   │   │   │   └── zz_generated.prerelease-lifecycle.go
    │   │   │   └── v1beta1/
    │   │   │       ├── doc.go
    │   │   │       ├── generated.pb.go
    │   │   │       ├── generated.proto
    │   │   │       ├── register.go
    │   │   │       ├── types.go
    │   │   │       ├── types_swagger_doc_generated.go
    │   │   │       ├── zz_generated.deepcopy.go
    │   │   │       ├── zz_generated.model_name.go
    │   │   │       └── zz_generated.prerelease-lifecycle.go
    │   │   └── storagemigration/
    │   │       └── v1beta1/
    │   │           ├── doc.go
    │   │           ├── generated.pb.go
    │   │           ├── generated.proto
    │   │           ├── register.go
    │   │           ├── types.go
    │   │           ├── types_swagger_doc_generated.go
    │   │           ├── zz_generated.deepcopy.go
    │   │           ├── zz_generated.model_name.go
    │   │           └── zz_generated.prerelease-lifecycle.go
    │   ├── apiextensions-apiserver/
    │   │   ├── LICENSE
    │   │   └── pkg/
    │   │       ├── apis/
    │   │       │   └── apiextensions/
    │   │       │       ├── deepcopy.go
    │   │       │       ├── doc.go
    │   │       │       ├── helpers.go
    │   │       │       ├── register.go
    │   │       │       ├── types.go
    │   │       │       ├── types_jsonschema.go
    │   │       │       ├── v1/
    │   │       │       │   ├── .import-restrictions
    │   │       │       │   ├── conversion.go
    │   │       │       │   ├── deepcopy.go
    │   │       │       │   ├── defaults.go
    │   │       │       │   ├── doc.go
    │   │       │       │   ├── generated.pb.go
    │   │       │       │   ├── generated.proto
    │   │       │       │   ├── marshal.go
    │   │       │       │   ├── register.go
    │   │       │       │   ├── types.go
    │   │       │       │   ├── types_jsonschema.go
    │   │       │       │   ├── zz_generated.conversion.go
    │   │       │       │   ├── zz_generated.deepcopy.go
    │   │       │       │   ├── zz_generated.defaults.go
    │   │       │       │   ├── zz_generated.model_name.go
    │   │       │       │   └── zz_generated.prerelease-lifecycle.go
    │   │       │       ├── v1beta1/
    │   │       │       │   ├── .import-restrictions
    │   │       │       │   ├── conversion.go
    │   │       │       │   ├── deepcopy.go
    │   │       │       │   ├── defaults.go
    │   │       │       │   ├── doc.go
    │   │       │       │   ├── generated.pb.go
    │   │       │       │   ├── generated.proto
    │   │       │       │   ├── marshal.go
    │   │       │       │   ├── register.go
    │   │       │       │   ├── types.go
    │   │       │       │   ├── types_jsonschema.go
    │   │       │       │   ├── zz_generated.conversion.go
    │   │       │       │   ├── zz_generated.deepcopy.go
    │   │       │       │   ├── zz_generated.defaults.go
    │   │       │       │   ├── zz_generated.model_name.go
    │   │       │       │   └── zz_generated.prerelease-lifecycle.go
    │   │       │       └── zz_generated.deepcopy.go
    │   │       ├── client/
    │   │       │   ├── applyconfiguration/
    │   │       │   │   └── apiextensions/
    │   │       │   │       ├── v1/
    │   │       │   │       │   ├── customresourcecolumndefinition.go
    │   │       │   │       │   ├── customresourceconversion.go
    │   │       │   │       │   ├── customresourcedefinition.go
    │   │       │   │       │   ├── customresourcedefinitioncondition.go
    │   │       │   │       │   ├── customresourcedefinitionnames.go
    │   │       │   │       │   ├── customresourcedefinitionspec.go
    │   │       │   │       │   ├── customresourcedefinitionstatus.go
    │   │       │   │       │   ├── customresourcedefinitionversion.go
    │   │       │   │       │   ├── customresourcesubresources.go
    │   │       │   │       │   ├── customresourcesubresourcescale.go
    │   │       │   │       │   ├── customresourcevalidation.go
    │   │       │   │       │   ├── externaldocumentation.go
    │   │       │   │       │   ├── jsonschemaprops.go
    │   │       │   │       │   ├── selectablefield.go
    │   │       │   │       │   ├── servicereference.go
    │   │       │   │       │   ├── validationrule.go
    │   │       │   │       │   ├── webhookclientconfig.go
    │   │       │   │       │   └── webhookconversion.go
    │   │       │   │       └── v1beta1/
    │   │       │   │           ├── customresourcecolumndefinition.go
    │   │       │   │           ├── customresourceconversion.go
    │   │       │   │           ├── customresourcedefinition.go
    │   │       │   │           ├── customresourcedefinitioncondition.go
    │   │       │   │           ├── customresourcedefinitionnames.go
    │   │       │   │           ├── customresourcedefinitionspec.go
    │   │       │   │           ├── customresourcedefinitionstatus.go
    │   │       │   │           ├── customresourcedefinitionversion.go
    │   │       │   │           ├── customresourcesubresources.go
    │   │       │   │           ├── customresourcesubresourcescale.go
    │   │       │   │           ├── customresourcevalidation.go
    │   │       │   │           ├── externaldocumentation.go
    │   │       │   │           ├── jsonschemaprops.go
    │   │       │   │           ├── selectablefield.go
    │   │       │   │           ├── servicereference.go
    │   │       │   │           ├── validationrule.go
    │   │       │   │           └── webhookclientconfig.go
    │   │       │   └── clientset/
    │   │       │       └── clientset/
    │   │       │           ├── clientset.go
    │   │       │           ├── scheme/
    │   │       │           │   ├── doc.go
    │   │       │           │   └── register.go
    │   │       │           └── typed/
    │   │       │               └── apiextensions/
    │   │       │                   ├── v1/
    │   │       │                   │   ├── apiextensions_client.go
    │   │       │                   │   ├── customresourcedefinition.go
    │   │       │                   │   ├── doc.go
    │   │       │                   │   └── generated_expansion.go
    │   │       │                   └── v1beta1/
    │   │       │                       ├── apiextensions_client.go
    │   │       │                       ├── customresourcedefinition.go
    │   │       │                       ├── doc.go
    │   │       │                       └── generated_expansion.go
    │   │       └── features/
    │   │           ├── OWNERS
    │   │           └── kube_features.go
    │   ├── apimachinery/
    │   │   ├── LICENSE
    │   │   ├── pkg/
    │   │   │   ├── api/
    │   │   │   │   ├── equality/
    │   │   │   │   │   └── semantic.go
    │   │   │   │   ├── errors/
    │   │   │   │   │   ├── OWNERS
    │   │   │   │   │   ├── doc.go
    │   │   │   │   │   └── errors.go
    │   │   │   │   ├── meta/
    │   │   │   │   │   ├── OWNERS
    │   │   │   │   │   ├── conditions.go
    │   │   │   │   │   ├── doc.go
    │   │   │   │   │   ├── errors.go
    │   │   │   │   │   ├── firsthit_restmapper.go
    │   │   │   │   │   ├── help.go
    │   │   │   │   │   ├── interfaces.go
    │   │   │   │   │   ├── lazy.go
    │   │   │   │   │   ├── meta.go
    │   │   │   │   │   ├── multirestmapper.go
    │   │   │   │   │   ├── priority.go
    │   │   │   │   │   ├── restmapper.go
    │   │   │   │   │   └── testrestmapper/
    │   │   │   │   │       └── test_restmapper.g
Copy disabled (too large) Download .txt
Showing preview only (18,300K chars total). Download the full file to get everything.
SYMBOL INDEX (202754 symbols across 3105 files)

FILE: cmd/auth-provider-gcp/app/getcredentials.go
  constant gcrAuthFlow (line 36) | gcrAuthFlow             = "gcr"
  constant dockerConfigAuthFlow (line 37) | dockerConfigAuthFlow    = "dockercfg"
  constant dockerConfigURLAuthFlow (line 38) | dockerConfigURLAuthFlow = "dockercfg-url"
  type CredentialOptions (line 42) | type CredentialOptions struct
  type AuthFlowFlagError (line 47) | type AuthFlowFlagError struct
    method Error (line 52) | func (a *AuthFlowFlagError) Error() string {
    method Is (line 57) | func (a *AuthFlowFlagError) Is(err error) bool {
  type AuthFlowTypeError (line 63) | type AuthFlowTypeError struct
    method Error (line 68) | func (p *AuthFlowTypeError) Error() string {
    method Is (line 73) | func (p *AuthFlowTypeError) Is(err error) bool {
  function NewGetCredentialsCommand (line 79) | func NewGetCredentialsCommand() (*cobra.Command, error) {
  function providerFromFlow (line 95) | func providerFromFlow(flow string) (credentialconfig.DockerConfigProvide...
  function getCredentials (line 109) | func getCredentials(authFlow string) error {
  function defineFlags (line 138) | func defineFlags(credCmd *cobra.Command, options *CredentialOptions) {
  function validateFlags (line 142) | func validateFlags(options *CredentialOptions) error {

FILE: cmd/auth-provider-gcp/app/getcredentials_test.go
  function TestValidateAuthFlow (line 26) | func TestValidateAuthFlow(t *testing.T) {
  function TestProviderFromFlow (line 59) | func TestProviderFromFlow(t *testing.T) {
  function TestFlagError (line 96) | func TestFlagError(t *testing.T) {
  function TestFlowError (line 120) | func TestFlowError(t *testing.T) {

FILE: cmd/auth-provider-gcp/main.go
  function main (line 29) | func main() {

FILE: cmd/auth-provider-gcp/provider/provider.go
  constant cacheImage (line 32) | cacheImage                = "image"
  constant cacheRegistry (line 33) | cacheRegistry             = "registry"
  constant cacheGlobal (line 34) | cacheGlobal               = "global"
  constant cacheDurationKey (line 35) | cacheDurationKey          = "KUBE_SIDECAR_CACHE_DURATION"
  constant cacheTypeKey (line 36) | cacheTypeKey              = "KUBE_SIDECAR_CACHE_TYPE"
  constant metadataHTTPClientTimeout (line 37) | metadataHTTPClientTimeout = time.Second * 10
  constant apiKind (line 38) | apiKind                   = "CredentialProviderResponse"
  constant apiVersion (line 39) | apiVersion                = "credentialprovider.kubelet.k8s.io/v1"
  function MakeRegistryProvider (line 43) | func MakeRegistryProvider(transport *http.Transport) *gcpcredential.Cont...
  function MakeDockerConfigProvider (line 53) | func MakeDockerConfigProvider(transport *http.Transport) *gcpcredential....
  function MakeDockerConfigURLProvider (line 62) | func MakeDockerConfigURLProvider(transport *http.Transport) *gcpcredenti...
  function makeHTTPClient (line 70) | func makeHTTPClient(transport *http.Transport) *http.Client {
  function getCacheDuration (line 77) | func getCacheDuration() (time.Duration, error) {
  function getCacheKeyType (line 93) | func getCacheKeyType() (credentialproviderapi.PluginCacheKeyType, error) {
  function GetResponse (line 112) | func GetResponse(image string, provider credentialconfig.DockerConfigPro...

FILE: cmd/auth-provider-gcp/provider/provider_test.go
  constant dummyToken (line 34) | dummyToken       = "ya26.lots-of-indiscernible-garbage"
  constant email (line 35) | email            = "1234@project.gserviceaccount.com"
  constant expectedUsername (line 36) | expectedUsername = "_token"
  constant expectedCacheKey (line 37) | expectedCacheKey = credentialproviderapi.ImagePluginCacheKeyType
  constant dummyImage (line 38) | dummyImage       = "registry.k8s.io/pause"
  function hasURL (line 41) | func hasURL(url string, response *credentialproviderapi.CredentialProvid...
  function TestContainerRegistry (line 46) | func TestContainerRegistry(t *testing.T) {
  function TestConfigProvider (line 111) | func TestConfigProvider(t *testing.T) {
  function TestConfigURLProvider (line 164) | func TestConfigURLProvider(t *testing.T) {

FILE: cmd/cloud-controller-manager/gkenetworkparamsetcontroller.go
  constant jsonContentType (line 22) | jsonContentType = "application/json"
  function startGkeNetworkParamSetControllerWrapper (line 24) | func startGkeNetworkParamSetControllerWrapper(initCtx app.ControllerInit...
  function startGkeNetworkParamsController (line 30) | func startGkeNetworkParamsController(ccmConfig *cloudcontrollerconfig.Co...
  function validClusterCIDR (line 75) | func validClusterCIDR(clusterCIDRFromFlag string) ([]*net.IPNet, error) {

FILE: cmd/cloud-controller-manager/gkeservicecontroller.go
  function startGkeServiceControllerWrapper (line 17) | func startGkeServiceControllerWrapper(initContext app.ControllerInitCont...
  function startGkeServiceController (line 23) | func startGkeServiceController(ctx context.Context, initContext app.Cont...

FILE: cmd/cloud-controller-manager/gkeservicecontroller_test.go
  function TestWantsLoadBalancer (line 17) | func TestWantsLoadBalancer(t *testing.T) {

FILE: cmd/cloud-controller-manager/gketenantcontrollermanager.go
  type gkeTenantControllerManagerConfig (line 36) | type gkeTenantControllerManagerConfig struct
  function startGKETenantControllerManagerWrapper (line 46) | func startGKETenantControllerManagerWrapper(initContext app.ControllerIn...
  function startGKETenantControllerManager (line 61) | func startGKETenantControllerManager(mgrCfg gkeTenantControllerManagerCo...
  function getCIDRsFromProviderConfig (line 235) | func getCIDRsFromProviderConfig(pc *v1.ProviderConfig) string {

FILE: cmd/cloud-controller-manager/gketenantcontrollermanager_test.go
  function TestStartGKETenantControllerManager (line 20) | func TestStartGKETenantControllerManager(t *testing.T) {
  function TestGetClusterCIDRsFromProviderConfig (line 116) | func TestGetClusterCIDRsFromProviderConfig(t *testing.T) {

FILE: cmd/cloud-controller-manager/main.go
  constant gkeServiceLBControllerName (line 44) | gkeServiceLBControllerName      = "gke-service-lb-controller"
  constant gkeServiceControllerClientName (line 45) | gkeServiceControllerClientName  = "gke-service-controller"
  constant gkeServiceAlias (line 46) | gkeServiceAlias                 = "gke-service"
  constant gkeTenantControllerManagerName (line 47) | gkeTenantControllerManagerName  = "gke-tenant-controller-manager"
  constant gkeTenantControllerClientName (line 48) | gkeTenantControllerClientName   = "gke-tenant-controller-manager"
  constant gkeTenantControllerManagerAlias (line 49) | gkeTenantControllerManagerAlias = "gke-tenant"
  function main (line 86) | func main() {
  function cloudInitializer (line 168) | func cloudInitializer(config *cloudcontrollerconfig.CompletedConfig) clo...

FILE: cmd/cloud-controller-manager/nodecontroller.go
  function startCloudNodeControllerWrapper (line 32) | func startCloudNodeControllerWrapper(initContext app.ControllerInitConte...
  function startCloudNodeController (line 38) | func startCloudNodeController(ctx context.Context, initContext app.Contr...

FILE: cmd/cloud-controller-manager/nodeipamcontroller.go
  type nodeIPAMController (line 40) | type nodeIPAMController struct
    method startNodeIpamControllerWrapper (line 45) | func (nodeIpamController *nodeIPAMController) startNodeIpamControllerW...
  function startNodeIpamController (line 57) | func startNodeIpamController(ccmConfig *cloudcontrollerconfig.CompletedC...

FILE: cmd/cloud-controller-manager/nodeipamcontroller_test.go
  type fakeCloudProvider (line 17) | type fakeCloudProvider struct
    method Initialize (line 22) | func (f *fakeCloudProvider) Initialize(clientBuilder cloudprovider.Con...
    method LoadBalancer (line 25) | func (f *fakeCloudProvider) LoadBalancer() (cloudprovider.LoadBalancer...
    method Instances (line 29) | func (f *fakeCloudProvider) Instances() (cloudprovider.Instances, bool) {
    method InstancesV2 (line 33) | func (f *fakeCloudProvider) InstancesV2() (cloudprovider.InstancesV2, ...
    method Zones (line 37) | func (f *fakeCloudProvider) Zones() (cloudprovider.Zones, bool) {
    method Clusters (line 41) | func (f *fakeCloudProvider) Clusters() (cloudprovider.Clusters, bool) {
    method Routes (line 45) | func (f *fakeCloudProvider) Routes() (cloudprovider.Routes, bool) {
    method ProviderName (line 49) | func (f *fakeCloudProvider) ProviderName() string {
    method HasClusterID (line 53) | func (f *fakeCloudProvider) HasClusterID() bool {
  function TestStartNodeIpamController (line 57) | func TestStartNodeIpamController(t *testing.T) {

FILE: cmd/cloud-controller-manager/nodelifecyclecontroller.go
  function startCloudNodeLifecycleControllerWrapper (line 32) | func startCloudNodeLifecycleControllerWrapper(initContext app.Controller...
  function startCloudNodeLifecycleController (line 38) | func startCloudNodeLifecycleController(ctx context.Context, initContext ...

FILE: cmd/cloud-controller-manager/nodelifecyclecontroller_test.go
  type mockInstances (line 33) | type mockInstances struct
    method InstanceExistsByProviderID (line 38) | func (m *mockInstances) InstanceExistsByProviderID(ctx context.Context...
    method InstanceShutdownByProviderID (line 46) | func (m *mockInstances) InstanceShutdownByProviderID(ctx context.Conte...
  type mockCloud (line 50) | type mockCloud struct
    method Instances (line 55) | func (m *mockCloud) Instances() (cloudprovider.Instances, bool) {
    method InstancesV2 (line 59) | func (m *mockCloud) InstancesV2() (cloudprovider.InstancesV2, bool) {
  function TestMonitorNodes_FilterLabel (line 63) | func TestMonitorNodes_FilterLabel(t *testing.T) {

FILE: cmd/cloud-controller-manager/options/nodeipamcontroller.go
  type NodeIPAMControllerOptions (line 29) | type NodeIPAMControllerOptions struct
    method AddFlags (line 34) | func (o *NodeIPAMControllerOptions) AddFlags(fs *pflag.FlagSet) {
    method ApplyTo (line 47) | func (o *NodeIPAMControllerOptions) ApplyTo(cfg *nodeipamconfig.NodeIP...
    method Validate (line 71) | func (o *NodeIPAMControllerOptions) Validate() []error {

FILE: cmd/gke-gcloud-auth-plugin/cred.go
  constant cacheFileName (line 36) | cacheFileName = "gke_gcloud_auth_plugin_cache"
  constant activeConfig (line 40) | activeConfig = "active_config"
  constant applicableOnlyForEdgeCloud (line 44) | applicableOnlyForEdgeCloud = "(only applicable when '--use_edge_cloud' i...
  constant requiredForEdgeCloud (line 45) | requiredForEdgeCloud       = "(mandatory when using --use_edge_cloud, op...
  constant cloudsdkAuthAccessEnvVar (line 50) | cloudsdkAuthAccessEnvVar = "CLOUDSDK_AUTH_ACCESS_TOKEN"
  type cache (line 64) | type cache struct
  type plugin (line 79) | type plugin struct
    method execCredential (line 190) | func (p *plugin) execCredential() (*clientauthv1b1.ExecCredential, err...
    method accessToken (line 243) | func (p *plugin) accessToken() (string, *metav1.Time, error) {
    method writeGcloudAccessTokenToCache (line 271) | func (p *plugin) writeGcloudAccessTokenToCache(accessToken string, exp...
    method getCachedGcloudAccessToken (line 297) | func (p *plugin) getCachedGcloudAccessToken() (string, *metav1.Time, e...
  function newPlugin (line 88) | func newPlugin(tokenProvider tokenProvider) *plugin {
  function main (line 109) | func main() {
  function PrintCred (line 168) | func PrintCred(tokenProvider *tokenProvider) error {
  function k8sStartingConfig (line 341) | func k8sStartingConfig() (*clientcmdapi.Config, error) {
  function writeCacheFile (line 346) | func writeCacheFile(content string) error {
  function getCacheFilePath (line 369) | func getCacheFilePath() string {
  function executeCommand (line 377) | func executeCommand(name string, arg ...string) ([]byte, error) {
  function readFile (line 390) | func readFile(filename string) ([]byte, error) {
  function timeNow (line 394) | func timeNow() time.Time {
  function formatToJSON (line 398) | func formatToJSON(i interface{}) (string, error) {

FILE: cmd/gke-gcloud-auth-plugin/cred_test.go
  type mockTokenSource (line 17) | type mockTokenSource struct
    method Token (line 19) | func (*mockTokenSource) Token() (*oauth2.Token, error) {
  function TestExecCredential (line 158) | func TestExecCredential(t *testing.T) {
  function TestCloudsdkBasedGcloudAccessToken (line 692) | func TestCloudsdkBasedGcloudAccessToken(t *testing.T) {
  function fakeDefaultTokenSource (line 723) | func fakeDefaultTokenSource(ctx context.Context, scope ...string) (oauth...
  function fakeGcloudConfigOutput (line 727) | func fakeGcloudConfigOutput(extraArgs []string) ([]byte, error) {
  function fakeGcloudConfigWithAuthzTokenOutput (line 757) | func fakeGcloudConfigWithAuthzTokenOutput(extraArgs []string) ([]byte, e...
  function fakeGcloudConfigWithAccessTokenFileOutput (line 776) | func fakeGcloudConfigWithAccessTokenFileOutput(extraArgs []string) ([]by...
  function fakeReadFile (line 811) | func fakeReadFile(filename string) ([]byte, error) {
  function fakeGetCacheFilePath (line 825) | func fakeGetCacheFilePath() string {
  function fakeK8sStartingConfig (line 829) | func fakeK8sStartingConfig() (*clientcmdapi.Config, error) {
  function fakeExecCredential (line 853) | func fakeExecCredential(token string, expiry *metav1.Time) *clientauthv1...
  function fakeTimeNow (line 866) | func fakeTimeNow() time.Time {
  function fakeEdgeCloudTokenOutput (line 870) | func fakeEdgeCloudTokenOutput(extraArgs []string) ([]byte, error) {

FILE: cmd/gke-gcloud-auth-plugin/default_credentials_token_provider.go
  type defaultCredentialsTokenProvider (line 23) | type defaultCredentialsTokenProvider struct
    method token (line 27) | func (p *defaultCredentialsTokenProvider) token() (string, *time.Time,...
    method useCache (line 51) | func (p *defaultCredentialsTokenProvider) useCache() bool { return fal...
    method getExtraArgs (line 53) | func (p *defaultCredentialsTokenProvider) getExtraArgs() []string { re...
    method getGcloudArgs (line 55) | func (p *defaultCredentialsTokenProvider) getGcloudArgs() []string { r...

FILE: cmd/gke-gcloud-auth-plugin/gcloud_edge_cloud_token_provider.go
  type gcloudEdgeCloudTokenProvider (line 10) | type gcloudEdgeCloudTokenProvider struct
    method token (line 24) | func (p *gcloudEdgeCloudTokenProvider) token() (string, *time.Time, er...
    method useCache (line 39) | func (p *gcloudEdgeCloudTokenProvider) useCache() bool { return true }
    method getExtraArgs (line 41) | func (p *gcloudEdgeCloudTokenProvider) getExtraArgs() []string {
    method getGcloudArgs (line 49) | func (p *gcloudEdgeCloudTokenProvider) getGcloudArgs() []string {
  type gcloudEdgeCloudToken (line 19) | type gcloudEdgeCloudToken struct
  function getGcloudEdgeCloudTokenRaw (line 55) | func getGcloudEdgeCloudTokenRaw(args []string) ([]byte, error) {

FILE: cmd/gke-gcloud-auth-plugin/gcloud_token_provider.go
  type gcloudConfiguration (line 13) | type gcloudConfiguration struct
  type gcloudTokenProvider (line 28) | type gcloudTokenProvider struct
    method readGcloudConfig (line 37) | func (p *gcloudTokenProvider) readGcloudConfig(extraArgs []string) (*g...
    method token (line 50) | func (p *gcloudTokenProvider) token() (string, *time.Time, error) {
    method useCache (line 69) | func (p *gcloudTokenProvider) useCache() bool {
    method getExtraArgs (line 78) | func (p *gcloudTokenProvider) getExtraArgs() []string {
    method getGcloudArgs (line 92) | func (p *gcloudTokenProvider) getGcloudArgs() []string {
  function readGcloudConfigRaw (line 102) | func readGcloudConfigRaw(args []string) ([]byte, error) {

FILE: cmd/gke-gcloud-auth-plugin/token_provider.go
  type tokenProvider (line 7) | type tokenProvider interface

FILE: metis/api/adaptiveipam/v1/adaptiveipam.pb.go
  constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type IPConfig (line 25) | type IPConfig struct
    method Reset (line 39) | func (x *IPConfig) Reset() {
    method String (line 46) | func (x *IPConfig) String() string {
    method ProtoMessage (line 50) | func (*IPConfig) ProtoMessage() {}
    method ProtoReflect (line 52) | func (x *IPConfig) ProtoReflect() protoreflect.Message {
    method Descriptor (line 65) | func (*IPConfig) Descriptor() ([]byte, []int) {
    method GetInterfaceName (line 69) | func (x *IPConfig) GetInterfaceName() string {
    method GetContainerId (line 76) | func (x *IPConfig) GetContainerId() string {
    method GetInitialPodCidr (line 83) | func (x *IPConfig) GetInitialPodCidr() string {
  type AllocatePodIPRequest (line 95) | type AllocatePodIPRequest struct
    method Reset (line 111) | func (x *AllocatePodIPRequest) Reset() {
    method String (line 118) | func (x *AllocatePodIPRequest) String() string {
    method ProtoMessage (line 122) | func (*AllocatePodIPRequest) ProtoMessage() {}
    method ProtoReflect (line 124) | func (x *AllocatePodIPRequest) ProtoReflect() protoreflect.Message {
    method Descriptor (line 137) | func (*AllocatePodIPRequest) Descriptor() ([]byte, []int) {
    method GetNetwork (line 141) | func (x *AllocatePodIPRequest) GetNetwork() string {
    method GetIpv4Config (line 148) | func (x *AllocatePodIPRequest) GetIpv4Config() *IPConfig {
    method GetIpv6Config (line 155) | func (x *AllocatePodIPRequest) GetIpv6Config() *IPConfig {
    method GetPodName (line 162) | func (x *AllocatePodIPRequest) GetPodName() string {
    method GetPodNamespace (line 169) | func (x *AllocatePodIPRequest) GetPodNamespace() string {
  type PodIP (line 177) | type PodIP struct
    method Reset (line 187) | func (x *PodIP) Reset() {
    method String (line 194) | func (x *PodIP) String() string {
    method ProtoMessage (line 198) | func (*PodIP) ProtoMessage() {}
    method ProtoReflect (line 200) | func (x *PodIP) ProtoReflect() protoreflect.Message {
    method Descriptor (line 213) | func (*PodIP) Descriptor() ([]byte, []int) {
    method GetIpAddress (line 217) | func (x *PodIP) GetIpAddress() string {
    method GetCidr (line 224) | func (x *PodIP) GetCidr() string {
  type AllocatePodIPResponse (line 233) | type AllocatePodIPResponse struct
    method Reset (line 243) | func (x *AllocatePodIPResponse) Reset() {
    method String (line 250) | func (x *AllocatePodIPResponse) String() string {
    method ProtoMessage (line 254) | func (*AllocatePodIPResponse) ProtoMessage() {}
    method ProtoReflect (line 256) | func (x *AllocatePodIPResponse) ProtoReflect() protoreflect.Message {
    method Descriptor (line 269) | func (*AllocatePodIPResponse) Descriptor() ([]byte, []int) {
    method GetIpv4 (line 273) | func (x *AllocatePodIPResponse) GetIpv4() *PodIP {
    method GetIpv6 (line 280) | func (x *AllocatePodIPResponse) GetIpv6() *PodIP {
  type DeallocatePodIPRequest (line 288) | type DeallocatePodIPRequest struct
    method Reset (line 304) | func (x *DeallocatePodIPRequest) Reset() {
    method String (line 311) | func (x *DeallocatePodIPRequest) String() string {
    method ProtoMessage (line 315) | func (*DeallocatePodIPRequest) ProtoMessage() {}
    method ProtoReflect (line 317) | func (x *DeallocatePodIPRequest) ProtoReflect() protoreflect.Message {
    method Descriptor (line 330) | func (*DeallocatePodIPRequest) Descriptor() ([]byte, []int) {
    method GetNetwork (line 334) | func (x *DeallocatePodIPRequest) GetNetwork() string {
    method GetInterfaceName (line 341) | func (x *DeallocatePodIPRequest) GetInterfaceName() string {
    method GetContainerId (line 348) | func (x *DeallocatePodIPRequest) GetContainerId() string {
    method GetPodName (line 355) | func (x *DeallocatePodIPRequest) GetPodName() string {
    method GetPodNamespace (line 362) | func (x *DeallocatePodIPRequest) GetPodNamespace() string {
  type DeallocatePodIPResponse (line 371) | type DeallocatePodIPResponse struct
    method Reset (line 377) | func (x *DeallocatePodIPResponse) Reset() {
    method String (line 384) | func (x *DeallocatePodIPResponse) String() string {
    method ProtoMessage (line 388) | func (*DeallocatePodIPResponse) ProtoMessage() {}
    method ProtoReflect (line 390) | func (x *DeallocatePodIPResponse) ProtoReflect() protoreflect.Message {
    method Descriptor (line 403) | func (*DeallocatePodIPResponse) Descriptor() ([]byte, []int) {
  type CheckPodIPRequest (line 408) | type CheckPodIPRequest struct
    method Reset (line 424) | func (x *CheckPodIPRequest) Reset() {
    method String (line 431) | func (x *CheckPodIPRequest) String() string {
    method ProtoMessage (line 435) | func (*CheckPodIPRequest) ProtoMessage() {}
    method ProtoReflect (line 437) | func (x *CheckPodIPRequest) ProtoReflect() protoreflect.Message {
    method Descriptor (line 450) | func (*CheckPodIPRequest) Descriptor() ([]byte, []int) {
    method GetNetwork (line 454) | func (x *CheckPodIPRequest) GetNetwork() string {
    method GetInterfaceName (line 461) | func (x *CheckPodIPRequest) GetInterfaceName() string {
    method GetContainerId (line 468) | func (x *CheckPodIPRequest) GetContainerId() string {
    method GetPodName (line 475) | func (x *CheckPodIPRequest) GetPodName() string {
    method GetPodNamespace (line 482) | func (x *CheckPodIPRequest) GetPodNamespace() string {
  type CheckPodIPResponse (line 491) | type CheckPodIPResponse struct
    method Reset (line 497) | func (x *CheckPodIPResponse) Reset() {
    method String (line 504) | func (x *CheckPodIPResponse) String() string {
    method ProtoMessage (line 508) | func (*CheckPodIPResponse) ProtoMessage() {}
    method ProtoReflect (line 510) | func (x *CheckPodIPResponse) ProtoReflect() protoreflect.Message {
    method Descriptor (line 523) | func (*CheckPodIPResponse) Descriptor() ([]byte, []int) {
  constant file_metis_api_adaptiveipam_v1_adaptiveipam_proto_rawDesc (line 529) | file_metis_api_adaptiveipam_v1_adaptiveipam_proto_rawDesc = "" +
  function file_metis_api_adaptiveipam_v1_adaptiveipam_proto_rawDescGZIP (line 576) | func file_metis_api_adaptiveipam_v1_adaptiveipam_proto_rawDescGZIP() []b...
  function init (line 612) | func init() { file_metis_api_adaptiveipam_v1_adaptiveipam_proto_init() }
  function file_metis_api_adaptiveipam_v1_adaptiveipam_proto_init (line 613) | func file_metis_api_adaptiveipam_v1_adaptiveipam_proto_init() {

FILE: metis/api/adaptiveipam/v1/adaptiveipam_grpc.pb.go
  constant _ (line 19) | _ = grpc.SupportPackageIsVersion9
  constant AdaptiveIpam_AllocatePodIP_FullMethodName (line 22) | AdaptiveIpam_AllocatePodIP_FullMethodName   = "/adaptiveipam.v1.Adaptive...
  constant AdaptiveIpam_DeallocatePodIP_FullMethodName (line 23) | AdaptiveIpam_DeallocatePodIP_FullMethodName = "/adaptiveipam.v1.Adaptive...
  constant AdaptiveIpam_CheckPodIP_FullMethodName (line 24) | AdaptiveIpam_CheckPodIP_FullMethodName      = "/adaptiveipam.v1.Adaptive...
  type AdaptiveIpamClient (line 33) | type AdaptiveIpamClient interface
  type adaptiveIpamClient (line 47) | type adaptiveIpamClient struct
    method AllocatePodIP (line 55) | func (c *adaptiveIpamClient) AllocatePodIP(ctx context.Context, in *Al...
    method DeallocatePodIP (line 65) | func (c *adaptiveIpamClient) DeallocatePodIP(ctx context.Context, in *...
    method CheckPodIP (line 75) | func (c *adaptiveIpamClient) CheckPodIP(ctx context.Context, in *Check...
  function NewAdaptiveIpamClient (line 51) | func NewAdaptiveIpamClient(cc grpc.ClientConnInterface) AdaptiveIpamClie...
  type AdaptiveIpamServer (line 91) | type AdaptiveIpamServer interface
  type UnimplementedAdaptiveIpamServer (line 111) | type UnimplementedAdaptiveIpamServer struct
    method AllocatePodIP (line 113) | func (UnimplementedAdaptiveIpamServer) AllocatePodIP(context.Context, ...
    method DeallocatePodIP (line 116) | func (UnimplementedAdaptiveIpamServer) DeallocatePodIP(context.Context...
    method CheckPodIP (line 119) | func (UnimplementedAdaptiveIpamServer) CheckPodIP(context.Context, *Ch...
    method mustEmbedUnimplementedAdaptiveIpamServer (line 122) | func (UnimplementedAdaptiveIpamServer) mustEmbedUnimplementedAdaptiveI...
    method testEmbeddedByValue (line 123) | func (UnimplementedAdaptiveIpamServer) testEmbeddedByValue()          ...
  type UnsafeAdaptiveIpamServer (line 128) | type UnsafeAdaptiveIpamServer interface
  function RegisterAdaptiveIpamServer (line 132) | func RegisterAdaptiveIpamServer(s grpc.ServiceRegistrar, srv AdaptiveIpa...
  function _AdaptiveIpam_AllocatePodIP_Handler (line 143) | func _AdaptiveIpam_AllocatePodIP_Handler(srv interface{}, ctx context.Co...
  function _AdaptiveIpam_DeallocatePodIP_Handler (line 161) | func _AdaptiveIpam_DeallocatePodIP_Handler(srv interface{}, ctx context....
  function _AdaptiveIpam_CheckPodIP_Handler (line 179) | func _AdaptiveIpam_CheckPodIP_Handler(srv interface{}, ctx context.Conte...

FILE: metis/cmd/cni.go
  function RunCni (line 25) | func RunCni() {

FILE: metis/cmd/daemon.go
  function newDaemonCommand (line 31) | func newDaemonCommand() *cobra.Command {

FILE: metis/cmd/daemonoptions.go
  type DaemonOptions (line 28) | type DaemonOptions struct
    method AddFlags (line 33) | func (o *DaemonOptions) AddFlags() cliflag.NamedFlagSets {
    method ApplyTo (line 49) | func (o *DaemonOptions) ApplyTo(cfg *daemon.Config) error {

FILE: metis/cmd/main.go
  function main (line 27) | func main() {

FILE: metis/pkg/cni/config.go
  function loadNetConf (line 28) | func loadNetConf(bytes []byte) (*PluginConf, error) {
  function getGatewayIP (line 36) | func getGatewayIP(ipNet *net.IPNet) net.IP {
  function loadK8sArgs (line 60) | func loadK8sArgs(args string) (*K8sArgs, error) {

FILE: metis/pkg/cni/config_test.go
  function TestLoadNetConf (line 24) | func TestLoadNetConf(t *testing.T) {
  function TestGetGatewayIP (line 164) | func TestGetGatewayIP(t *testing.T) {
  function TestLoadK8sArgs (line 206) | func TestLoadK8sArgs(t *testing.T) {

FILE: metis/pkg/cni/handlers.go
  method CmdAdd (line 31) | func (p *Plugin) CmdAdd(args *skel.CmdArgs) error {
  method cmdAdd (line 39) | func (p *Plugin) cmdAdd(args *skel.CmdArgs) (*current.Result, error) {
  method CmdDel (line 104) | func (p *Plugin) CmdDel(args *skel.CmdArgs) error {
  method cmdDel (line 108) | func (p *Plugin) cmdDel(args *skel.CmdArgs) error {
  method CmdCheck (line 140) | func (p *Plugin) CmdCheck(args *skel.CmdArgs) error {
  method cmdCheck (line 144) | func (p *Plugin) cmdCheck(args *skel.CmdArgs) error {
  function buildIPConfig (line 176) | func buildIPConfig(ipConfig *pb.PodIP) (*current.IPConfig, net.IP, error) {
  function toCNIResult (line 194) | func toCNIResult(resp *pb.AllocatePodIPResponse, conf *PluginConf, args ...

FILE: metis/pkg/cni/handlers_test.go
  type mockAdaptiveIpamClient (line 40) | type mockAdaptiveIpamClient struct
    method AllocatePodIP (line 47) | func (m *mockAdaptiveIpamClient) AllocatePodIP(ctx context.Context, in...
    method DeallocatePodIP (line 54) | func (m *mockAdaptiveIpamClient) DeallocatePodIP(ctx context.Context, ...
    method CheckPodIP (line 61) | func (m *mockAdaptiveIpamClient) CheckPodIP(ctx context.Context, in *p...
  function TestCmdAdd (line 68) | func TestCmdAdd(t *testing.T) {
  function TestCmdDel (line 214) | func TestCmdDel(t *testing.T) {
  function TestCmdCheck (line 272) | func TestCmdCheck(t *testing.T) {
  function TestCniWithActualDaemon (line 309) | func TestCniWithActualDaemon(t *testing.T) {
  function runWithOutputCapture (line 376) | func runWithOutputCapture(t *testing.T, f func() error) (stdout string, ...
  function TestCmdAdd_CleanStdout (line 422) | func TestCmdAdd_CleanStdout(t *testing.T) {

FILE: metis/pkg/cni/plugin.go
  constant defaultRPCTimeout (line 35) | defaultRPCTimeout = 10 * time.Second
  type Option (line 37) | type Option
  function WithClientFunc (line 40) | func WithClientFunc(fn func(socketPath string) (pb.AdaptiveIpamClient, *...
  function WithSocketPath (line 47) | func WithSocketPath(path string) Option {
  function WithLogFile (line 54) | func WithLogFile(path string) Option {
  function NewPlugin (line 61) | func NewPlugin(opts ...Option) *Plugin {
  type pluginSession (line 73) | type pluginSession struct
    method close (line 82) | func (s *pluginSession) close() {
  method prepare (line 91) | func (p *Plugin) prepare(args *skel.CmdArgs, command string) (*pluginSes...
  method setupLogging (line 137) | func (p *Plugin) setupLogging(args *skel.CmdArgs, command string, logFil...
  function getGrpcClient (line 159) | func getGrpcClient(socketPath string) (pb.AdaptiveIpamClient, *grpc.Clie...

FILE: metis/pkg/cni/types.go
  type Route (line 26) | type Route struct
  type SubnetRange (line 31) | type SubnetRange struct
  type IPAM (line 36) | type IPAM struct
  type PluginConf (line 43) | type PluginConf struct
  type K8sArgs (line 51) | type K8sArgs struct
  type Plugin (line 58) | type Plugin struct

FILE: metis/pkg/consts.go
  constant DefaultDBPath (line 20) | DefaultDBPath      = "/var/lib/cni/metis/metis.sqlite"
  constant DefaultSockPath (line 21) | DefaultSockPath    = "/var/lib/cni/metis/metis-adaptive-ipam.sock"
  constant DefaultCNILogPath (line 22) | DefaultCNILogPath  = "/var/lib/cni/metis/metis-cni.log"
  constant DefaultGatewayIPv4 (line 23) | DefaultGatewayIPv4 = "169.254.4.6"
  constant DefaultGatewayIPv6 (line 24) | DefaultGatewayIPv6 = "fe80::8893:b6ff:fe2c:7a0d"

FILE: metis/pkg/daemon/daemon.go
  type Config (line 30) | type Config struct
  type Daemon (line 38) | type Daemon struct
    method Run (line 50) | func (d *Daemon) Run(ctx context.Context) error {
  function NewDaemon (line 43) | func NewDaemon(cfg Config) *Daemon {

FILE: metis/pkg/daemon/daemon_server.go
  constant defaultPollInterval (line 38) | defaultPollInterval = 50 * time.Millisecond
  type adaptiveIpamServer (line 40) | type adaptiveIpamServer struct
    method AllocatePodIP (line 62) | func (s *adaptiveIpamServer) AllocatePodIP(ctx context.Context, req *a...
    method allocateIP (line 99) | func (s *adaptiveIpamServer) allocateIP(ctx context.Context, req *adap...
    method maybeAddInitialPodCidr (line 155) | func (s *adaptiveIpamServer) maybeAddInitialPodCidr(ctx context.Contex...
    method DeallocatePodIP (line 179) | func (s *adaptiveIpamServer) DeallocatePodIP(ctx context.Context, req ...
    method CheckPodIP (line 202) | func (s *adaptiveIpamServer) CheckPodIP(ctx context.Context, req *adap...
    method start (line 220) | func (s *adaptiveIpamServer) start() error {
    method stop (line 243) | func (s *adaptiveIpamServer) stop() {
  function newAdaptiveIpamServer (line 50) | func newAdaptiveIpamServer(logger logr.Logger, storeInstance *store.Stor...

FILE: metis/pkg/daemon/daemon_server_test.go
  function TestAdaptiveIpamServer_withGrpcClient (line 39) | func TestAdaptiveIpamServer_withGrpcClient(t *testing.T) {
  function TestAdaptiveIpamServer_AllocatePodIP (line 100) | func TestAdaptiveIpamServer_AllocatePodIP(t *testing.T) {
  function TestAdaptiveIpamServer_AllocatePodIP_Concurrency (line 141) | func TestAdaptiveIpamServer_AllocatePodIP_Concurrency(t *testing.T) {
  function TestAdaptiveIpamServer_DeallocatePodIP (line 248) | func TestAdaptiveIpamServer_DeallocatePodIP(t *testing.T) {
  function TestAdaptiveIpamServer_AllocatePodIP_RetryOnDBError (line 318) | func TestAdaptiveIpamServer_AllocatePodIP_RetryOnDBError(t *testing.T) {
  function TestAdaptiveIpamServer_AllocatePodIP_NoRetryOnExhaustion (line 375) | func TestAdaptiveIpamServer_AllocatePodIP_NoRetryOnExhaustion(t *testing...
  function TestAdaptiveIpamServer_AllocatePodIP_IPv6 (line 425) | func TestAdaptiveIpamServer_AllocatePodIP_IPv6(t *testing.T) {
  function TestAdaptiveIpamServer_AllocatePodIP_IPv6_Idempotency_Release (line 472) | func TestAdaptiveIpamServer_AllocatePodIP_IPv6_Idempotency_Release(t *te...
  function TestAdaptiveIpamServer_AllocatePodIP_DualStack (line 545) | func TestAdaptiveIpamServer_AllocatePodIP_DualStack(t *testing.T) {
  function TestAdaptiveIpamServer_CheckPodIP (line 599) | func TestAdaptiveIpamServer_CheckPodIP(t *testing.T) {

FILE: metis/pkg/daemon/daemon_test.go
  function TestDaemon_Run (line 27) | func TestDaemon_Run(t *testing.T) {

FILE: metis/pkg/store/schema.sql
  type cidr_blocks (line 3) | CREATE TABLE IF NOT EXISTS cidr_blocks (
  type ip_addresses (line 46) | CREATE TABLE IF NOT EXISTS ip_addresses (
  type idx_available_ips (line 90) | CREATE INDEX IF NOT EXISTS idx_available_ips
  type idx_ip_idempotency (line 95) | CREATE INDEX IF NOT EXISTS idx_ip_idempotency

FILE: metis/pkg/store/store.go
  constant dbSchemaVersion (line 40) | dbSchemaVersion = 1
  constant maxOpenConns (line 41) | maxOpenConns    = 10
  constant maxIdleConns (line 42) | maxIdleConns    = 10
  constant DefaultBusyTimeout (line 44) | DefaultBusyTimeout = 5000 * time.Millisecond
  constant ipv6PopulationBatchSize (line 47) | ipv6PopulationBatchSize = 64
  type IPFamily (line 62) | type IPFamily
  constant IPv4 (line 65) | IPv4 IPFamily = "ipv4"
  constant IPv6 (line 66) | IPv6 IPFamily = "ipv6"
  type Store (line 70) | type Store struct
    method initSchema (line 150) | func (s *Store) initSchema(ctx context.Context) error {
    method Close (line 194) | func (s *Store) Close() error {
    method DB (line 205) | func (s *Store) DB() *sql.DB {
    method AllocateIP (line 219) | func (s *Store) AllocateIP(ctx context.Context, params AllocateIPParam...
    method GetCIDRBlockByCIDRAndNetwork (line 224) | func (s *Store) GetCIDRBlockByCIDRAndNetwork(ctx context.Context, cidr...
    method AddCIDR (line 241) | func (s *Store) AddCIDR(ctx context.Context, network, cidr string) err...
    method ReleaseIPByOwner (line 390) | func (s *Store) ReleaseIPByOwner(ctx context.Context, network, contain...
    method allocateIPTx (line 459) | func (s *Store) allocateIPTx(ctx context.Context, tx *sql.Tx, cidrBloc...
    method allocateIP (line 510) | func (s *Store) allocateIP(ctx context.Context, params AllocateIPParam...
    method tryAllocateIPInBlock (line 590) | func (s *Store) tryAllocateIPInBlock(ctx context.Context, params Alloc...
    method getNextIPv6StartAddr (line 628) | func (s *Store) getNextIPv6StartAddr(ctx context.Context, tx *sql.Tx, ...
    method expandIPv6Block (line 652) | func (s *Store) expandIPv6Block(ctx context.Context, cidrBlockID int64...
    method CheckAllocation (line 725) | func (s *Store) CheckAllocation(ctx context.Context, network, containe...
  function NewStore (line 76) | func NewStore(ctx context.Context, log logr.Logger, dbPath string) (*Sto...
  type AllocateIPParams (line 210) | type AllocateIPParams struct

FILE: metis/pkg/store/store_test.go
  function TestNewStore_SuccessAndClose (line 36) | func TestNewStore_SuccessAndClose(t *testing.T) {
  function TestNewStore_Idempotency (line 70) | func TestNewStore_Idempotency(t *testing.T) {
  function TestNewStore_SchemaVerification (line 121) | func TestNewStore_SchemaVerification(t *testing.T) {
  function TestStore_Concurrency (line 171) | func TestStore_Concurrency(t *testing.T) {
  function TestStore_MaxOpenConns_Limit (line 228) | func TestStore_MaxOpenConns_Limit(t *testing.T) {
  function TestStore_AddCIDR (line 289) | func TestStore_AddCIDR(t *testing.T) {
  function TestStore_AddCIDR_Small (line 415) | func TestStore_AddCIDR_Small(t *testing.T) {
  function TestStore_GetCIDRBlockByCIDRAndNetwork (line 463) | func TestStore_GetCIDRBlockByCIDRAndNetwork(t *testing.T) {
  function TestStore_AllocateIPv4_SingleCIDR (line 532) | func TestStore_AllocateIPv4_SingleCIDR(t *testing.T) {
  function TestStore_ReleaseIPByOwner (line 644) | func TestStore_ReleaseIPByOwner(t *testing.T) {
  function TestStore_AllocateIPv4_FallbackAndCooldown (line 716) | func TestStore_AllocateIPv4_FallbackAndCooldown(t *testing.T) {
  function TestStore_AllocateIPv4_Idempotency_Concurrency (line 785) | func TestStore_AllocateIPv4_Idempotency_Concurrency(t *testing.T) {
  function TestStore_AllocateIPv4_Concurrency_DifferentContainers (line 850) | func TestStore_AllocateIPv4_Concurrency_DifferentContainers(t *testing.T) {
  function TestStore_AllocateIPv6 (line 916) | func TestStore_AllocateIPv6(t *testing.T) {
  function TestStore_AllocateIPv6_ExceedBatch (line 989) | func TestStore_AllocateIPv6_ExceedBatch(t *testing.T) {
  function TestStore_AllocateIPv6_Concurrency (line 1043) | func TestStore_AllocateIPv6_Concurrency(t *testing.T) {
  function TestStore_AllocateIPv6_Exhaustion (line 1108) | func TestStore_AllocateIPv6_Exhaustion(t *testing.T) {
  function TestStore_AllocateIPv6_MultiCIDRExpansion (line 1148) | func TestStore_AllocateIPv6_MultiCIDRExpansion(t *testing.T) {
  function TestStore_AllocateIPv6_Concurrency_AllocateAndRelease (line 1196) | func TestStore_AllocateIPv6_Concurrency_AllocateAndRelease(t *testing.T) {
  function TestStore_CheckAllocation (line 1362) | func TestStore_CheckAllocation(t *testing.T) {

FILE: metis/test/cni_conformance_test.go
  function TestLibcniConformance (line 33) | func TestLibcniConformance(t *testing.T) {

FILE: pkg/controller/gkenetworkparamset/gkenetworkparamset_controller.go
  constant GNPFinalizer (line 57) | GNPFinalizer              = "networking.gke.io/gnp-controller"
  constant gnpKind (line 58) | gnpKind                   = "gkenetworkparamset"
  constant workqueueName (line 59) | workqueueName             = "gkenetworkparamset"
  constant annotationComponentsLayer (line 60) | annotationComponentsLayer = "components.gke.io/layer"
  constant annotationComponentsName (line 61) | annotationComponentsName  = "components.gke.io/component-name"
  constant labelsAddonManagerMode (line 62) | labelsAddonManagerMode    = "addonmanager.kubernetes.io/mode"
  constant componentLayer (line 63) | componentLayer            = "addon"
  constant componentName (line 64) | componentName             = "cloud-controller-manager"
  constant ensureExistsMode (line 65) | ensureExistsMode          = "EnsureExists"
  constant reconcileMode (line 66) | reconcileMode             = "Reconcile"
  type Controller (line 70) | type Controller struct
    method Run (line 194) | func (c *Controller) Run(numWorkers int, stopCh <-chan struct{}, contr...
    method runWorker (line 220) | func (c *Controller) runWorker(ctx context.Context) {
    method processNextItem (line 225) | func (c *Controller) processNextItem(ctx context.Context) bool {
    method handleErr (line 239) | func (c *Controller) handleErr(err error, key interface{}) {
    method reconcile (line 290) | func (c *Controller) reconcile(ctx context.Context, key string) error {
    method populateDesiredDefaultParamSet (line 345) | func (c *Controller) populateDesiredDefaultParamSet(ctx context.Contex...
    method syncGNP (line 402) | func (c *Controller) syncGNP(ctx context.Context, params *networkv1.GK...
    method getAndSyncNetworkForGNP (line 466) | func (c *Controller) getAndSyncNetworkForGNP(ctx context.Context, para...
    method getNetworkReferringToGNP (line 482) | func (c *Controller) getNetworkReferringToGNP(gnpName string) (*networ...
    method syncNetworkWithGNP (line 498) | func (c *Controller) syncNetworkWithGNP(ctx context.Context, network *...
    method handleGNPDelete (line 520) | func (c *Controller) handleGNPDelete(ctx context.Context, params *netw...
    method executeGNPDelete (line 542) | func (c *Controller) executeGNPDelete(ctx context.Context, params *net...
    method cleanupGNPDeletion (line 549) | func (c *Controller) cleanupGNPDeletion(ctx context.Context, gnpName s...
    method updateGKENetworkParamSet (line 602) | func (c *Controller) updateGKENetworkParamSet(ctx context.Context, par...
    method updateGKENetworkParamSetStatus (line 610) | func (c *Controller) updateGKENetworkParamSetStatus(ctx context.Contex...
    method syncPodRanges (line 620) | func (c *Controller) syncPodRanges(ctx context.Context, params *networ...
    method updateNetworkConditionForPodRanges (line 643) | func (c *Controller) updateNetworkConditionForPodRanges(ctx context.Co...
  function NewGKENetworkParamSetController (line 84) | func NewGKENetworkParamSetController(
  function addFinalizerInPlace (line 266) | func addFinalizerInPlace(params *networkv1.GKENetworkParamSet) {
  function removeFinalizerInPlace (line 278) | func removeFinalizerInPlace(params *networkv1.GKENetworkParamSet) {
  function extractRelevantCidrs (line 573) | func extractRelevantCidrs(subnet *compute.Subnetwork, paramset *networkv...
  function paramSetIncludesRange (line 593) | func paramSetIncludesRange(params *networkv1.GKENetworkParamSet, seconda...

FILE: pkg/controller/gkenetworkparamset/gkenetworkparamset_controller_test.go
  type testGKENetworkParamSetController (line 31) | type testGKENetworkParamSetController struct
    method runGKENetworkParamSetController (line 107) | func (testVals *testGKENetworkParamSetController) runGKENetworkParamSe...
    method doesGNPFinalizerExist (line 1362) | func (testVals *testGKENetworkParamSetController) doesGNPFinalizerExis...
  constant defaultTestNetworkName (line 42) | defaultTestNetworkName    = "default-network"
  constant nonDefaultTestNetworkName (line 43) | nonDefaultTestNetworkName = "not-default-network"
  constant defaultTestSubnetworkName (line 44) | defaultTestSubnetworkName = "default-subnetwork"
  constant defaultNode (line 45) | defaultNode               = "default-node"
  constant node1 (line 46) | node1                     = "new-node1"
  constant defaultPodRange (line 47) | defaultPodRange           = "default-pod-range"
  constant newPodRange1 (line 48) | newPodRange1              = "new-pod-range1"
  constant newPodRange2 (line 49) | newPodRange2              = "new-pod-range2"
  constant defaultPodCIDR (line 50) | defaultPodCIDR            = "10.100.0.0/16"
  constant newPodCIDR1 (line 51) | newPodCIDR1               = "10.101.0.0/16"
  constant newPodCIDR2 (line 52) | newPodCIDR2               = "10.102.0.0/16"
  function setupGKENetworkParamSetController (line 55) | func setupGKENetworkParamSetController(ctx context.Context) *testGKENetw...
  function TestControllerRuns (line 111) | func TestControllerRuns(t *testing.T) {
  function TestAddValidParamSetSingleSecondaryRange (line 118) | func TestAddValidParamSetSingleSecondaryRange(t *testing.T) {
  function TestAddValidParamSetMultipleSecondaryRange (line 182) | func TestAddValidParamSetMultipleSecondaryRange(t *testing.T) {
  function TestAddInvalidParamSetNoMatchingSecondaryRange (line 253) | func TestAddInvalidParamSetNoMatchingSecondaryRange(t *testing.T) {
  function TestParamSetPartialSecondaryRange (line 309) | func TestParamSetPartialSecondaryRange(t *testing.T) {
  function TestValidParamSetSubnetRange (line 373) | func TestValidParamSetSubnetRange(t *testing.T) {
  function TestAddAndRemoveFinalizerToGKENetworkParamSet_NoNetworkName (line 426) | func TestAddAndRemoveFinalizerToGKENetworkParamSet_NoNetworkName(t *test...
  type conditionMatcher (line 470) | type conditionMatcher struct
    method Match (line 474) | func (m *conditionMatcher) Match(actual interface{}) (success bool, er...
    method FailureMessage (line 485) | func (m *conditionMatcher) FailureMessage(actual interface{}) (message...
    method NegatedFailureMessage (line 489) | func (m *conditionMatcher) NegatedFailureMessage(actual interface{}) (...
  function matchConditionIgnoringMessageAndLastTransitionTime (line 493) | func matchConditionIgnoringMessageAndLastTransitionTime(expected metav1....
  function TestGKENetworkParamSetValidations (line 497) | func TestGKENetworkParamSetValidations(t *testing.T) {
  function TestCrossValidateNetworkAndGnp (line 928) | func TestCrossValidateNetworkAndGnp(t *testing.T) {
  function TestHandleGKENetworkParamSetDelete_NetworkPresent (line 1207) | func TestHandleGKENetworkParamSetDelete_NetworkPresent(t *testing.T) {
  function TestPopulateDesiredDefaultParamSet (line 1377) | func TestPopulateDesiredDefaultParamSet(t *testing.T) {
  function TestSyncDefaultPodRanges (line 1470) | func TestSyncDefaultPodRanges(t *testing.T) {
  type gnpOptions (line 1645) | type gnpOptions struct
  function newL3GNP (line 1654) | func newL3GNP(name string, rangeNames []string, opts *gnpOptions) *netwo...
  function newL3Network (line 1693) | func newL3Network(name string) *networkv1.Network {
  function TestSameStringSlice (line 1706) | func TestSameStringSlice(t *testing.T) {

FILE: pkg/controller/gkenetworkparamset/gkenetworkparamset_metrics.go
  constant GKENetworkParamSetSubsystem (line 11) | GKENetworkParamSetSubsystem = "gkenetworkparamset_controller"
  function registerGKENetworkParamSetMetrics (line 28) | func registerGKENetworkParamSetMetrics() {

FILE: pkg/controller/gkenetworkparamset/gnpcontroller_validations.go
  type gnpValidation (line 41) | type gnpValidation struct
    method toCondition (line 47) | func (val *gnpValidation) toCondition() metav1.Condition {
  method validateFieldCombinations (line 67) | func (c *Controller) validateFieldCombinations(ctx context.Context, para...
  method getAndValidateSubnet (line 118) | func (c *Controller) getAndValidateSubnet(ctx context.Context, params *n...
  method validateNetworkAttachment (line 141) | func (c *Controller) validateNetworkAttachment(ctx context.Context, netA...
  method validateGKENetworkParamSet (line 154) | func (c *Controller) validateGKENetworkParamSet(ctx context.Context, par...
  type gnpNetworkCrossValidation (line 255) | type gnpNetworkCrossValidation struct
    method toCondition (line 261) | func (val *gnpNetworkCrossValidation) toCondition() metav1.Condition {
  function crossValidateNetworkAndGnp (line 279) | func crossValidateNetworkAndGnp(network *networkv1.Network, params *netw...
  method nonDefaultParamsPodRanges (line 317) | func (c *Controller) nonDefaultParamsPodRanges(node *v1.Node) bool {
  method getParamsPodRanges (line 332) | func (c *Controller) getParamsPodRanges(paramsName string) ([]string, er...
  function hasRangeNames (line 345) | func hasRangeNames(params *networkv1.GKENetworkParamSet) bool {
  function samePodIPv4Ranges (line 356) | func samePodIPv4Ranges(params *networkv1.GKENetworkParamSet, originalPar...
  function sameStringSlice (line 368) | func sameStringSlice(x, y []string) bool {

FILE: pkg/controller/gketenantcontrollers/cloud.go
  type TenantCloud (line 34) | type TenantCloud interface
  function CreateTenantScopedGCECloud (line 39) | func CreateTenantScopedGCECloud(config *config.CompletedConfig, pc *v1.P...
  function validateConfig (line 79) | func validateConfig(pc *v1.ProviderConfig) error {
  function validateTokenURL (line 91) | func validateTokenURL(pc *v1.ProviderConfig) error {
  function createConfigReader (line 109) | func createConfigReader(configFilePath string) (io.Reader, error) {
  function parseConfigFile (line 118) | func parseConfigFile(configReader io.Reader) (*gce.ConfigFile, error) {
  function generateCloudConfig (line 126) | func generateCloudConfig(configFile *gce.ConfigFile, providerConfig *v1....
  function setNetworkConfig (line 147) | func setNetworkConfig(c *gce.CloudConfig, network string) error {
  function setSubnetworkConfig (line 159) | func setSubnetworkConfig(c *gce.CloudConfig, subnetwork string) error {
  function validateField (line 171) | func validateField(name, value string, pattern *regexp.Regexp) error {

FILE: pkg/controller/gketenantcontrollers/cloud_test.go
  function TestValidateConfig (line 17) | func TestValidateConfig(t *testing.T) {
  function TestSetNetworkConfig (line 149) | func TestSetNetworkConfig(t *testing.T) {
  function TestSetSubnetworkConfig (line 191) | func TestSetSubnetworkConfig(t *testing.T) {
  function TestValidateField (line 233) | func TestValidateField(t *testing.T) {
  function TestURLRegexes (line 277) | func TestURLRegexes(t *testing.T) {

FILE: pkg/controller/gketenantcontrollers/starter.go
  constant providerConfigLabelKey (line 33) | providerConfigLabelKey = "tenancy.gke.io/provider-config"
  constant conditionReasonFailed (line 34) | conditionReasonFailed  = "ControllerFailedForTenant"
  constant tenantComponentName (line 35) | tenantComponentName    = "gke-tenant-controller-manager"
  type ControllerConfig (line 39) | type ControllerConfig struct
  type ControllerStartFunc (line 56) | type ControllerStartFunc
  type ControllersStarter (line 59) | type ControllersStarter struct
    method ControllerNames (line 100) | func (s *ControllersStarter) ControllerNames() []string {
    method StartController (line 111) | func (s *ControllersStarter) StartController(pc *v1.ProviderConfig) (c...
    method runControllerWithRecovery (line 206) | func (s *ControllersStarter) runControllerWithRecovery(pc *v1.Provider...
  function NewControllersStarter (line 71) | func NewControllersStarter(

FILE: pkg/controller/gketenantcontrollers/starter_test.go
  function TestNewControllersStarter (line 22) | func TestNewControllersStarter(t *testing.T) {
  function TestRunControllerWithRecovery (line 41) | func TestRunControllerWithRecovery(t *testing.T) {

FILE: pkg/controller/gketenantcontrollers/utils/helpers.go
  constant accessLevelLabelKey (line 11) | accessLevelLabelKey = "tenancy.gke.io/access-level"
  constant supervisor (line 12) | supervisor = "supervisor"
  function IsSupervisor (line 15) | func IsSupervisor(pc *v1.ProviderConfig) bool {

FILE: pkg/controller/gketenantcontrollers/utils/helpers_test.go
  function TestIsSupervisor (line 11) | func TestIsSupervisor(t *testing.T) {

FILE: pkg/controller/nodeipam/config/types.go
  type NodeIPAMControllerConfiguration (line 20) | type NodeIPAMControllerConfiguration struct

FILE: pkg/controller/nodeipam/config/v1alpha1/conversion.go
  function Convert_v1alpha1_NodeIPAMControllerConfiguration_To_config_NodeIPAMControllerConfiguration (line 33) | func Convert_v1alpha1_NodeIPAMControllerConfiguration_To_config_NodeIPAM...
  function Convert_config_NodeIPAMControllerConfiguration_To_v1alpha1_NodeIPAMControllerConfiguration (line 38) | func Convert_config_NodeIPAMControllerConfiguration_To_v1alpha1_NodeIPAM...

FILE: pkg/controller/nodeipam/config/v1alpha1/defaults.go
  function RecommendedDefaultNodeIPAMControllerConfiguration (line 32) | func RecommendedDefaultNodeIPAMControllerConfiguration(obj *kubectrlmgrc...

FILE: pkg/controller/nodeipam/config/v1alpha1/zz_generated.conversion.go
  function init (line 32) | func init() {
  function RegisterConversions (line 38) | func RegisterConversions(s *runtime.Scheme) error {
  function autoConvert_v1alpha1_GroupResource_To_v1_GroupResource (line 62) | func autoConvert_v1alpha1_GroupResource_To_v1_GroupResource(in *v1alpha1...
  function Convert_v1alpha1_GroupResource_To_v1_GroupResource (line 69) | func Convert_v1alpha1_GroupResource_To_v1_GroupResource(in *v1alpha1.Gro...
  function autoConvert_v1_GroupResource_To_v1alpha1_GroupResource (line 73) | func autoConvert_v1_GroupResource_To_v1alpha1_GroupResource(in *v1.Group...
  function Convert_v1_GroupResource_To_v1alpha1_GroupResource (line 80) | func Convert_v1_GroupResource_To_v1alpha1_GroupResource(in *v1.GroupReso...
  function autoConvert_v1alpha1_NodeIPAMControllerConfiguration_To_config_NodeIPAMControllerConfiguration (line 84) | func autoConvert_v1alpha1_NodeIPAMControllerConfiguration_To_config_Node...
  function autoConvert_config_NodeIPAMControllerConfiguration_To_v1alpha1_NodeIPAMControllerConfiguration (line 93) | func autoConvert_config_NodeIPAMControllerConfiguration_To_v1alpha1_Node...

FILE: pkg/controller/nodeipam/config/zz_generated.deepcopy.go
  method DeepCopyInto (line 25) | func (in *NodeIPAMControllerConfiguration) DeepCopyInto(out *NodeIPAMCon...
  method DeepCopy (line 31) | func (in *NodeIPAMControllerConfiguration) DeepCopy() *NodeIPAMControlle...

FILE: pkg/controller/nodeipam/ipam/adapter.go
  type adapter (line 41) | type adapter struct
    method Alias (line 65) | func (a *adapter) Alias(ctx context.Context, node *v1.Node) (*net.IPNe...
    method AddAlias (line 92) | func (a *adapter) AddAlias(ctx context.Context, node *v1.Node, cidrRan...
    method Node (line 100) | func (a *adapter) Node(ctx context.Context, name string) (*v1.Node, er...
    method UpdateNodePodCIDR (line 104) | func (a *adapter) UpdateNodePodCIDR(ctx context.Context, node *v1.Node...
    method UpdateNodeNetworkUnavailable (line 120) | func (a *adapter) UpdateNodeNetworkUnavailable(nodeName string, unavai...
    method EmitNodeWarningEvent (line 134) | func (a *adapter) EmitNodeWarningEvent(nodeName, reason, fmt string, a...
  function newAdapter (line 48) | func newAdapter(k8s clientset.Interface, cloud *gce.Cloud) *adapter {

FILE: pkg/controller/nodeipam/ipam/cidr_allocator.go
  type CIDRAllocatorType (line 40) | type CIDRAllocatorType
  constant RangeAllocatorType (line 45) | RangeAllocatorType CIDRAllocatorType = "RangeAllocator"
  constant CloudAllocatorType (line 48) | CloudAllocatorType CIDRAllocatorType = "CloudAllocator"
  constant IPAMFromClusterAllocatorType (line 51) | IPAMFromClusterAllocatorType = "IPAMFromCluster"
  constant IPAMFromCloudAllocatorType (line 54) | IPAMFromCloudAllocatorType = "IPAMFromCloud"
  constant apiserverStartupGracePeriod (line 60) | apiserverStartupGracePeriod = 10 * time.Minute
  constant cidrUpdateWorkers (line 63) | cidrUpdateWorkers = 30
  constant cidrUpdateQueueSize (line 66) | cidrUpdateQueueSize = 5000
  constant cidrUpdateRetries (line 69) | cidrUpdateRetries = 3
  constant updateRetryTimeout (line 72) | updateRetryTimeout = 250 * time.Millisecond
  constant maxUpdateRetryTimeout (line 75) | maxUpdateRetryTimeout = 5 * time.Second
  constant updateMaxRetries (line 78) | updateMaxRetries = 10
  constant nodeTopologyWorkers (line 81) | nodeTopologyWorkers = 30
  constant nodeTopologyReconcileInterval (line 84) | nodeTopologyReconcileInterval = 10 * time.Minute
  type CIDRAllocator (line 93) | type CIDRAllocator interface
  type CIDRAllocatorParams (line 106) | type CIDRAllocatorParams struct
  function New (line 118) | func New(kubeClient clientset.Interface, cloud cloudprovider.Interface, ...
  function listNodes (line 134) | func listNodes(kubeClient clientset.Interface) (*v1.NodeList, error) {

FILE: pkg/controller/nodeipam/ipam/cidrset/cidr_set.go
  type CidrSet (line 31) | type CidrSet struct
    method indexToCIDRBlock (line 101) | func (s *CidrSet) indexToCIDRBlock(index int) *net.IPNet {
    method AllocateNext (line 150) | func (s *CidrSet) AllocateNext() (*net.IPNet, error) {
    method getBeginingAndEndIndices (line 177) | func (s *CidrSet) getBeginingAndEndIndices(cidr *net.IPNet) (begin, en...
    method Release (line 227) | func (s *CidrSet) Release(cidr *net.IPNet) error {
    method Occupy (line 250) | func (s *CidrSet) Occupy(cidr *net.IPNet) (err error) {
    method getIndexForCIDR (line 271) | func (s *CidrSet) getIndexForCIDR(cidr *net.IPNet) (int, error) {
    method getIndexForIP (line 275) | func (s *CidrSet) getIndexForIP(ip net.IP) (int, error) {
  constant clusterSubnetMaxDiff (line 61) | clusterSubnetMaxDiff = 16
  constant halfIPv6Len (line 63) | halfIPv6Len = net.IPv6len / 2
  function NewCIDRSet (line 78) | func NewCIDRSet(clusterCIDR *net.IPNet, subNetMaskSize int) (*CidrSet, e...

FILE: pkg/controller/nodeipam/ipam/cidrset/cidr_set_test.go
  function TestCIDRSetFullyAllocated (line 29) | func TestCIDRSetFullyAllocated(t *testing.T) {
  function TestIndexToCIDRBlock (line 86) | func TestIndexToCIDRBlock(t *testing.T) {
  function TestCIDRSet_RandomishAllocation (line 213) | func TestCIDRSet_RandomishAllocation(t *testing.T) {
  function TestCIDRSet_AllocationOccupied (line 274) | func TestCIDRSet_AllocationOccupied(t *testing.T) {
  function TestDoubleOccupyRelease (line 346) | func TestDoubleOccupyRelease(t *testing.T) {
  function TestGetBitforCIDR (line 438) | func TestGetBitforCIDR(t *testing.T) {
  function TestOccupy (line 591) | func TestOccupy(t *testing.T) {
  function TestCIDRSetv6 (line 765) | func TestCIDRSetv6(t *testing.T) {
  function TestCidrSetMetrics (line 835) | func TestCidrSetMetrics(t *testing.T) {
  function TestCidrSetMetricsHistogram (line 881) | func TestCidrSetMetricsHistogram(t *testing.T) {
  function TestCidrSetMetricsDual (line 917) | func TestCidrSetMetricsDual(t *testing.T) {
  function clearMetrics (line 974) | func clearMetrics(labels map[string]string) {
  type testMetrics (line 981) | type testMetrics struct
  function expectMetrics (line 988) | func expectMetrics(t *testing.T, label string, em testMetrics) {
  function benchmarkAllocateAllIPv6 (line 1014) | func benchmarkAllocateAllIPv6(cidr string, subnetMaskSize int, b *testin...
  function BenchmarkAllocateAll_48_52 (line 1027) | func BenchmarkAllocateAll_48_52(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_48_56 (line 1028) | func BenchmarkAllocateAll_48_56(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_48_60 (line 1030) | func BenchmarkAllocateAll_48_60(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_48_64 (line 1031) | func BenchmarkAllocateAll_48_64(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_64_68 (line 1033) | func BenchmarkAllocateAll_64_68(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_64_72 (line 1035) | func BenchmarkAllocateAll_64_72(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_64_76 (line 1036) | func BenchmarkAllocateAll_64_76(b *testing.B) { benchmarkAllocateAllIPv6...
  function BenchmarkAllocateAll_64_80 (line 1038) | func BenchmarkAllocateAll_64_80(b *testing.B) { benchmarkAllocateAllIPv6...

FILE: pkg/controller/nodeipam/ipam/cidrset/metrics.go
  constant nodeIpamSubsystem (line 26) | nodeIpamSubsystem = "node_ipam_controller"
  function registerCidrsetMetrics (line 71) | func registerCidrsetMetrics() {

FILE: pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go
  constant workqueueName (line 62) | workqueueName = "cloudCIDRAllocator"
  type clusterStackType (line 66) | type clusterStackType
  constant stackIPv4 (line 69) | stackIPv4     clusterStackType = "IPv4"
  constant stackIPv4IPv6 (line 70) | stackIPv4IPv6 clusterStackType = "IPv4_IPv6"
  constant stackIPv6IPv4 (line 71) | stackIPv6IPv4 clusterStackType = "IPv6_IPv4"
  constant stackIPv6 (line 72) | stackIPv6     clusterStackType = "IPv6"
  type cloudCIDRAllocator (line 85) | type cloudCIDRAllocator struct
    method updateUniqueNode (line 276) | func (ca *cloudCIDRAllocator) updateUniqueNode(oldNode, newNode *v1.No...
    method Run (line 287) | func (ca *cloudCIDRAllocator) Run(stopCh <-chan struct{}) {
    method AllocateOrOccupyCIDR (line 332) | func (ca *cloudCIDRAllocator) AllocateOrOccupyCIDR(node *v1.Node) error {
    method runWorker (line 338) | func (ca *cloudCIDRAllocator) runWorker(ctx context.Context) {
    method processNextItem (line 343) | func (ca *cloudCIDRAllocator) processNextItem(ctx context.Context) bool {
    method handleErr (line 359) | func (ca *cloudCIDRAllocator) handleErr(err error, key interface{}) {
    method updateCIDRAllocation (line 390) | func (ca *cloudCIDRAllocator) updateCIDRAllocation(nodeName string) er...
    method updateNodePodCIDRWithCidrStrings (line 522) | func (ca *cloudCIDRAllocator) updateNodePodCIDRWithCidrStrings(oldNode...
    method setNetworkCondition (line 548) | func (ca *cloudCIDRAllocator) setNetworkCondition(node *v1.Node) {
    method updateNodeCIDR (line 569) | func (ca *cloudCIDRAllocator) updateNodeCIDR(node, oldNode *v1.Node) e...
    method ReleaseCIDR (line 598) | func (ca *cloudCIDRAllocator) ReleaseCIDR(node *v1.Node) error {
  function NewCloudCIDRAllocator (line 114) | func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovid...
  function isIP4 (line 605) | func isIP4(ipnet *net.IPNet) bool {
  function isIP6 (line 613) | func isIP6(ipnet *net.IPNet) bool {
  function filterMultiNetworkAnnotations (line 621) | func filterMultiNetworkAnnotations(annotations map[string]string) map[st...
  function filterMultiNetworkCapacity (line 639) | func filterMultiNetworkCapacity(capacity v1.ResourceList) v1.ResourceList {
  function nodeMultiNetworkChanged (line 653) | func nodeMultiNetworkChanged(oldNode *v1.Node, newNode *v1.Node) bool {

FILE: pkg/controller/nodeipam/ipam/cloud_cidr_allocator_metrics.go
  constant nodeIpamSubsystem (line 11) | nodeIpamSubsystem = "node_ipam_controller"
  function registerCloudCidrAllocatorMetrics (line 28) | func registerCloudCidrAllocatorMetrics() {

FILE: pkg/controller/nodeipam/ipam/cloud_cidr_allocator_nolegacyproviders.go
  function NewCloudCIDRAllocator (line 31) | func NewCloudCIDRAllocator(client clientset.Interface, cloud cloudprovid...

FILE: pkg/controller/nodeipam/ipam/cloud_cidr_allocator_test.go
  constant defaultGKENetworkParamsName (line 53) | defaultGKENetworkParamsName = "DefaultGKENetworkParams"
  constant defaultVPCName (line 54) | defaultVPCName              = "projects/testProject/global/networks/defa...
  constant defaultVPCSubnetName (line 55) | defaultVPCSubnetName        = "projects/testProject/regions/us-central1/...
  constant defaultSecondaryRangeA (line 56) | defaultSecondaryRangeA      = "RangeA"
  constant defaultSecondaryRangeB (line 57) | defaultSecondaryRangeB      = "RangeB"
  constant redNetworkName (line 59) | redNetworkName           = "Red-Network"
  constant redGKENetworkParamsName (line 60) | redGKENetworkParamsName  = "RedGKENetworkParams"
  constant redVPCName (line 61) | redVPCName               = "projects/testProject/global/networks/red"
  constant redVPCSubnetName (line 62) | redVPCSubnetName         = "projects/testProject/regions/us-central1/sub...
  constant redSecondaryRangeA (line 63) | redSecondaryRangeA       = "RedRangeA"
  constant redSecondaryRangeB (line 64) | redSecondaryRangeB       = "RedRangeB"
  constant redNetworkAttachmentName (line 65) | redNetworkAttachmentName = "projects/testProject/regions/us-central1/net...
  constant blueNetworkName (line 67) | blueNetworkName           = "Blue-Network"
  constant blueGKENetworkParamsName (line 68) | blueGKENetworkParamsName  = "BlueGKENetworkParams"
  constant blueVPCName (line 69) | blueVPCName               = "projects/testProject/global/networks/blue"
  constant blueVPCSubnetName (line 70) | blueVPCSubnetName         = "projects/testProject/regions/us-central1/su...
  constant blueSecondaryRangeA (line 71) | blueSecondaryRangeA       = "BlueRangeA"
  constant blueNetworkAttachmentName (line 72) | blueNetworkAttachmentName = "projects/testProject/regions/us-central1/ne...
  function hasNodeInProcessing (line 79) | func hasNodeInProcessing(ca *cloudCIDRAllocator, name string) bool {
  function TestBoundedRetries (line 89) | func TestBoundedRetries(t *testing.T) {
  function TestNodeTopologyQueuePeriodicSync (line 110) | func TestNodeTopologyQueuePeriodicSync(t *testing.T) {
  function TestNodeTopologyCR_AddOrUpdateNode (line 190) | func TestNodeTopologyCR_AddOrUpdateNode(t *testing.T) {
  function TestNodeTopologyCR_DeleteNode (line 296) | func TestNodeTopologyCR_DeleteNode(t *testing.T) {
  function TestUpdateUniqueNode (line 370) | func TestUpdateUniqueNode(t *testing.T) {
  function TestUpdateCIDRAllocation (line 481) | func TestUpdateCIDRAllocation(t *testing.T) {
  function sanitizeDates (line 2505) | func sanitizeDates(node *v1.Node) {
  function gkeNetworkParams (line 2512) | func gkeNetworkParams(name, vpc, subnet string, secRangeNames []string) ...
  function gkeNetworkParamsWithNetworkAttachment (line 2530) | func gkeNetworkParamsWithNetworkAttachment(name, networkAttachment strin...
  function interfaces (line 2543) | func interfaces(network, subnetwork, networkIP string, aliasIPRanges []*...
  function interfacesWithNetworkAttachment (line 2552) | func interfacesWithNetworkAttachment(network, networkAttachment, network...
  function TestIsIP4_net_nil (line 2561) | func TestIsIP4_net_nil(t *testing.T) {
  function TestIsIP4_ip_nil (line 2567) | func TestIsIP4_ip_nil(t *testing.T) {
  function TestIsIP4 (line 2574) | func TestIsIP4(t *testing.T) {
  function TestIsIP6_net_nil (line 2604) | func TestIsIP6_net_nil(t *testing.T) {
  function TestIsIP6_ip_nil (line 2610) | func TestIsIP6_ip_nil(t *testing.T) {
  function TestIsIP6 (line 2617) | func TestIsIP6(t *testing.T) {
  function TestNodeMultiNetworkChanged (line 2647) | func TestNodeMultiNetworkChanged(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/controller_legacyprovider.go
  type Config (line 42) | type Config struct
  type Controller (line 55) | type Controller struct
    method Start (line 114) | func (c *Controller) Start(nodeInformer informers.NodeInformer) error {
    method newSyncer (line 175) | func (c *Controller) newSyncer(name string) *nodesync.NodeSync {
    method onAdd (line 186) | func (c *Controller) onAdd(node *v1.Node) error {
    method onUpdate (line 203) | func (c *Controller) onUpdate(_, node *v1.Node) error {
    method onDelete (line 217) | func (c *Controller) onDelete(node *v1.Node) error {
  function NewController (line 66) | func NewController(
  function occupyServiceCIDR (line 154) | func occupyServiceCIDR(set *cidrset.CidrSet, clusterCIDR, serviceCIDR *n...
  type nodeState (line 163) | type nodeState struct
    method ReportResult (line 167) | func (ns *nodeState) ReportResult(err error) {
    method ResyncTimeout (line 171) | func (ns *nodeState) ResyncTimeout() time.Duration {

FILE: pkg/controller/nodeipam/ipam/controller_test.go
  function TestOccupyServiceCIDR (line 27) | func TestOccupyServiceCIDR(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/multinetwork_cloud_cidr_allocator.go
  method performMultiNetworkCIDRAllocation (line 26) | func (ca *cloudCIDRAllocator) performMultiNetworkCIDRAllocation(node *v1...
  function getNodeDefaultLabels (line 156) | func getNodeDefaultLabels(node *v1.Node) (bool, string, string) {
  method extractDefaultNwCIDRs (line 168) | func (ca *cloudCIDRAllocator) extractDefaultNwCIDRs(interfaces []*comput...
  function updateAnnotations (line 191) | func updateAnnotations(node *v1.Node, northInterfaces networkv1.NorthInt...
  function allocateIPCapacity (line 216) | func allocateIPCapacity(node *v1.Node, nodeNetworks networkv1.MultiNetwo...
  function resourceName (line 237) | func resourceName(name string) string {
  function getNodeCapacity (line 242) | func getNodeCapacity(nw networkv1.NodeNetwork) (int64, error) {
  function getUpNetworks (line 259) | func getUpNetworks(node *v1.Node) (map[string]struct{}, error) {
  method NetworkToNodes (line 278) | func (ca *cloudCIDRAllocator) NetworkToNodes(network *networkv1.Network)...

FILE: pkg/controller/nodeipam/ipam/multinetwork_cloud_cidr_allocator_test.go
  constant group (line 16) | group                = "networking.gke.io"
  constant gkeNetworkParamsKind (line 17) | gkeNetworkParamsKind = "GKENetworkParams"
  function network (line 20) | func network(name, gkeNetworkParamsName string, isReady bool) *networkv1...
  function networkAll (line 24) | func networkAll(name, gkeNetworkParamsName string, netType networkv1.Net...
  function TestNetworkToNodes (line 53) | func TestNetworkToNodes(t *testing.T) {
  function TestGetNodeCapacity (line 242) | func TestGetNodeCapacity(t *testing.T) {
  function TestGetUpNetworks (line 351) | func TestGetUpNetworks(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/node_topology_syncer.go
  constant nodeTopologyCRName (line 21) | nodeTopologyCRName = "default"
  type NodeTopologySyncer (line 37) | type NodeTopologySyncer struct
    method sync (line 43) | func (syncer *NodeTopologySyncer) sync(key string) error {
    method reconcile (line 73) | func (syncer *NodeTopologySyncer) reconcile() error {
    method updateNodeTopology (line 133) | func (syncer *NodeTopologySyncer) updateNodeTopology(node *v1.Node) er...
  function getNodeSubnetLabel (line 213) | func getNodeSubnetLabel(node *v1.Node) (bool, string) {
  function getSubnetWithPrefixFromURL (line 221) | func getSubnetWithPrefixFromURL(url string) (subnetName string, subnetPr...
  function isZoneInCR (line 247) | func isZoneInCR(nodeZone string, nodeTopologyCR *nodetopologyv1.NodeTopo...
  function isSubnetInCR (line 256) | func isSubnetInCR(nodeSubnet string, nodeTopologyCR *nodetopologyv1.Node...
  function getZoneFromNode (line 265) | func getZoneFromNode(ctx context.Context, syncer *NodeTopologySyncer, no...

FILE: pkg/controller/nodeipam/ipam/node_topology_syncer_test.go
  constant testNodePoolSubnetLabelPrefix (line 23) | testNodePoolSubnetLabelPrefix = "cloud.google.com/gke-node-pool-subnet"
  constant exampleSubnetURL (line 24) | exampleSubnetURL              = "https://www.googleapis.com/compute/v1/p...
  constant exampleSubnetPathPrefix (line 25) | exampleSubnetPathPrefix       = "projects/my-project/regions/us-central1...
  function TestGetNodeSubnetLabel (line 28) | func TestGetNodeSubnetLabel(t *testing.T) {
  function TestGetSubnetWithPrefixFromURL (line 107) | func TestGetSubnetWithPrefixFromURL(t *testing.T) {
  function testClient (line 165) | func testClient() *ntfakeclient.Clientset {
  function TestNodeTopologySync (line 174) | func TestNodeTopologySync(t *testing.T) {
  function TestNodeTopologySyncZone (line 431) | func TestNodeTopologySyncZone(t *testing.T) {
  function addSubnetsToCR (line 752) | func addSubnetsToCR(subnets []string, client ntclient.Interface) {
  function addZonesToCR (line 770) | func addZonesToCR(zones []string, client ntclient.Interface) {
  function verifySubnetsInCR (line 784) | func verifySubnetsInCR(t *testing.T, subnets []string, client ntclient.I...

FILE: pkg/controller/nodeipam/ipam/range_allocator.go
  type nodeReservedCIDRs (line 45) | type nodeReservedCIDRs struct
  type rangeAllocator (line 50) | type rangeAllocator struct
    method Run (line 169) | func (r *rangeAllocator) Run(stopCh <-chan struct{}) {
    method worker (line 186) | func (r *rangeAllocator) worker(stopChan <-chan struct{}) {
    method insertNodeToProcessing (line 204) | func (r *rangeAllocator) insertNodeToProcessing(nodeName string) bool {
    method removeNodeFromProcessing (line 214) | func (r *rangeAllocator) removeNodeFromProcessing(nodeName string) {
    method occupyCIDRs (line 221) | func (r *rangeAllocator) occupyCIDRs(node *v1.Node) error {
    method AllocateOrOccupyCIDR (line 248) | func (r *rangeAllocator) AllocateOrOccupyCIDR(node *v1.Node) error {
    method ReleaseCIDR (line 283) | func (r *rangeAllocator) ReleaseCIDR(node *v1.Node) error {
    method filterOutServiceRange (line 311) | func (r *rangeAllocator) filterOutServiceRange(serviceCIDR *net.IPNet) {
    method updateCIDRsAllocation (line 331) | func (r *rangeAllocator) updateCIDRsAllocation(data nodeReservedCIDRs)...
  function NewCIDRRangeAllocator (line 74) | func NewCIDRRangeAllocator(client clientset.Interface, nodeInformer info...
  function cidrsAsString (line 395) | func cidrsAsString(inCIDRs []*net.IPNet) []string {

FILE: pkg/controller/nodeipam/ipam/range_allocator_test.go
  constant testNodePollInterval (line 34) | testNodePollInterval = 10 * time.Millisecond
  function waitForUpdatedNodeWithTimeout (line 38) | func waitForUpdatedNodeWithTimeout(nodeHandler *testutil.FakeNodeHandler...
  function getFakeNodeInformer (line 48) | func getFakeNodeInformer(fakeNodeHandler *testutil.FakeNodeHandler) core...
  type testCase (line 60) | type testCase struct
  function TestOccupyPreExistingCIDR (line 71) | func TestOccupyPreExistingCIDR(t *testing.T) {
  function TestAllocateOrOccupyCIDRSuccess (line 319) | func TestAllocateOrOccupyCIDRSuccess(t *testing.T) {
  function TestAllocateOrOccupyCIDRFailure (line 609) | func TestAllocateOrOccupyCIDRFailure(t *testing.T) {
  type releaseTestCase (line 696) | type releaseTestCase struct
  function TestReleaseCIDRSuccess (line 706) | func TestReleaseCIDRSuccess(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/sync/sync.go
  constant InvalidPodCIDR (line 34) | InvalidPodCIDR = "CloudCIDRAllocatorInvalidPodCIDR"
  constant InvalidModeEvent (line 37) | InvalidModeEvent = "CloudCIDRAllocatorInvalidMode"
  constant MismatchEvent (line 40) | MismatchEvent = "CloudCIDRAllocatorMismatch"
  type cloudAlias (line 44) | type cloudAlias interface
  type kubeAPI (line 52) | type kubeAPI interface
  type controller (line 64) | type controller interface
  type NodeSyncMode (line 74) | type NodeSyncMode
  function IsValidMode (line 86) | func IsValidMode(m NodeSyncMode) bool {
  type NodeSync (line 97) | type NodeSync struct
    method Loop (line 122) | func (sync *NodeSync) Loop(done chan struct{}) {
    method Update (line 161) | func (sync *NodeSync) Update(node *v1.Node) {
    method Delete (line 169) | func (sync *NodeSync) Delete(node *v1.Node) {
  function New (line 108) | func New(c controller, cloudAlias cloudAlias, kubeAPI kubeAPI, mode Node...
  type syncOp (line 175) | type syncOp interface
  type updateOp (line 181) | type updateOp struct
    method String (line 185) | func (op *updateOp) String() string {
    method run (line 192) | func (op *updateOp) run(sync *NodeSync) error {
    method validateRange (line 229) | func (op *updateOp) validateRange(ctx context.Context, sync *NodeSync,...
    method updateNodeFromAlias (line 245) | func (op *updateOp) updateNodeFromAlias(ctx context.Context, sync *Nod...
    method updateAliasFromNode (line 277) | func (op *updateOp) updateAliasFromNode(ctx context.Context, sync *Nod...
    method allocateRange (line 314) | func (op *updateOp) allocateRange(ctx context.Context, sync *NodeSync,...
  type deleteOp (line 349) | type deleteOp struct
    method String (line 353) | func (op *deleteOp) String() string {
    method run (line 360) | func (op *deleteOp) run(sync *NodeSync) error {

FILE: pkg/controller/nodeipam/ipam/sync/sync_test.go
  type fakeEvent (line 39) | type fakeEvent struct
  type fakeAPIs (line 44) | type fakeAPIs struct
    method Alias (line 61) | func (f *fakeAPIs) Alias(ctx context.Context, node *v1.Node) (*net.IPN...
    method AddAlias (line 66) | func (f *fakeAPIs) AddAlias(ctx context.Context, node *v1.Node, cidrRa...
    method Node (line 71) | func (f *fakeAPIs) Node(ctx context.Context, name string) (*v1.Node, e...
    method UpdateNodePodCIDR (line 76) | func (f *fakeAPIs) UpdateNodePodCIDR(ctx context.Context, node *v1.Nod...
    method UpdateNodeNetworkUnavailable (line 81) | func (f *fakeAPIs) UpdateNodeNetworkUnavailable(nodeName string, unava...
    method EmitNodeWarningEvent (line 86) | func (f *fakeAPIs) EmitNodeWarningEvent(nodeName, reason, fmtStr strin...
    method ReportResult (line 90) | func (f *fakeAPIs) ReportResult(err error) {
    method ResyncTimeout (line 98) | func (f *fakeAPIs) ResyncTimeout() time.Duration {
    method dumpTrace (line 105) | func (f *fakeAPIs) dumpTrace() {
  function TestNodeSyncUpdate (line 120) | func TestNodeSyncUpdate(t *testing.T) {
  function TestNodeSyncResync (line 223) | func TestNodeSyncResync(t *testing.T) {
  function TestNodeSyncDelete (line 244) | func TestNodeSyncDelete(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/task_queue.go
  type TaskQueue (line 27) | type TaskQueue struct
    method Run (line 43) | func (t *TaskQueue) Run() {
    method runInternal (line 52) | func (t *TaskQueue) runInternal(workerID int) {
    method Enqueue (line 72) | func (t *TaskQueue) Enqueue(obj interface{}) {
    method Shutdown (line 83) | func (t *TaskQueue) Shutdown() {
  function NewTaskQueue (line 91) | func NewTaskQueue(name, resource string, numWorkers int, keyFn func(obj ...

FILE: pkg/controller/nodeipam/ipam/task_queue_test.go
  function simpleKeyFun (line 27) | func simpleKeyFun(obj interface{}) (string, error) {
  function TestTaskQueue (line 32) | func TestTaskQueue(t *testing.T) {
  function TestQueueWithMultipleWorkers (line 79) | func TestQueueWithMultipleWorkers(t *testing.T) {

FILE: pkg/controller/nodeipam/ipam/test/utils.go
  function MustParseCIDR (line 25) | func MustParseCIDR(s string) *net.IPNet {

FILE: pkg/controller/nodeipam/ipam/timeout.go
  type Timeout (line 27) | type Timeout struct
    method Update (line 42) | func (b *Timeout) Update(ok bool) {
    method Next (line 62) | func (b *Timeout) Next() time.Duration {

FILE: pkg/controller/nodeipam/ipam/timeout_test.go
  function TestTimeout (line 25) | func TestTimeout(t *testing.T) {

FILE: pkg/controller/nodeipam/legacyprovider.go
  function startLegacyIPAM (line 34) | func startLegacyIPAM(

FILE: pkg/controller/nodeipam/node_ipam_controller.go
  constant ipamResyncInterval (line 43) | ipamResyncInterval = 30 * time.Second
  constant ipamMaxBackoff (line 46) | ipamMaxBackoff = 10 * time.Second
  constant ipamInitialBackoff (line 49) | ipamInitialBackoff = 250 * time.Millisecond
  type Controller (line 53) | type Controller struct
    method Name (line 71) | func (c *Controller) Name() string {
    method Run (line 158) | func (c *Controller) Run(stopCh <-chan struct{}, controllerManagerMetr...
  function NewNodeIpamController (line 80) | func NewNodeIpamController(

FILE: pkg/controller/nodeipam/node_ipam_controller_test.go
  function newTestNodeIpamController (line 43) | func newTestNodeIpamController(clusterCIDR []*net.IPNet, serviceCIDR *ne...
  function TestNewNodeIpamControllerWithCIDRMasks (line 72) | func TestNewNodeIpamControllerWithCIDRMasks(t *testing.T) {

FILE: pkg/controller/nodeipam/nolegacyprovider.go
  function startLegacyIPAM (line 31) | func startLegacyIPAM(

FILE: pkg/controller/nodeipam/starter.go
  constant defaultNodeMaskCIDRIPv4 (line 26) | defaultNodeMaskCIDRIPv4 = 24
  constant defaultNodeMaskCIDRIPv6 (line 28) | defaultNodeMaskCIDRIPv6 = 64
  function StartNodeIpamController (line 33) | func StartNodeIpamController(
  function ProcessCIDRs (line 137) | func ProcessCIDRs(cidrsList string) ([]*net.IPNet, bool, error) {
  function setNodeCIDRMaskSizes (line 155) | func setNodeCIDRMaskSizes(cfg nodeipamconfig.NodeIPAMControllerConfigura...

FILE: pkg/controller/service/controller.go
  constant serviceSyncPeriod (line 53) | serviceSyncPeriod = 30 * time.Second
  constant nodeSyncPeriod (line 55) | nodeSyncPeriod = 100 * time.Second
  constant minRetryDelay (line 60) | minRetryDelay = 5 * time.Second
  constant maxRetryDelay (line 61) | maxRetryDelay = 300 * time.Second
  constant ToBeDeletedTaint (line 64) | ToBeDeletedTaint = "ToBeDeletedByClusterAutoscaler"
  type cachedService (line 67) | type cachedService struct
  type serviceCache (line 72) | type serviceCache struct
    method ListKeys (line 477) | func (s *serviceCache) ListKeys() []string {
    method GetByKey (line 488) | func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) {
    method allServices (line 499) | func (s *serviceCache) allServices() []*v1.Service {
    method get (line 509) | func (s *serviceCache) get(serviceName string) (*cachedService, bool) {
    method getOrCreate (line 516) | func (s *serviceCache) getOrCreate(serviceName string) *cachedService {
    method set (line 527) | func (s *serviceCache) set(serviceName string, service *cachedService) {
    method delete (line 533) | func (s *serviceCache) delete(serviceName string) {
  type Controller (line 79) | type Controller struct
    method enqueueService (line 194) | func (c *Controller) enqueueService(obj interface{}) {
    method enqueueNode (line 204) | func (c *Controller) enqueueNode(obj interface{}) {
    method Run (line 223) | func (c *Controller) Run(ctx context.Context, workers int, controllerM...
    method serviceWorker (line 258) | func (c *Controller) serviceWorker(ctx context.Context) {
    method nodeWorker (line 265) | func (c *Controller) nodeWorker(ctx context.Context, workers int) {
    method processNextNodeItem (line 270) | func (c *Controller) processNextNodeItem(ctx context.Context, workers ...
    method processNextServiceItem (line 285) | func (c *Controller) processNextServiceItem(ctx context.Context) bool {
    method init (line 310) | func (c *Controller) init() error {
    method processServiceCreateOrUpdate (line 326) | func (c *Controller) processServiceCreateOrUpdate(ctx context.Context,...
    method syncLoadBalancerIfNeeded (line 365) | func (c *Controller) syncLoadBalancerIfNeeded(ctx context.Context, ser...
    method ensureLoadBalancer (line 442) | func (c *Controller) ensureLoadBalancer(ctx context.Context, service *...
    method storeLastSyncedNodes (line 461) | func (c *Controller) storeLastSyncedNodes(svc *v1.Service, nodes []*v1...
    method getLastSyncedNodes (line 468) | func (c *Controller) getLastSyncedNodes(svc *v1.Service) []*v1.Node {
    method syncNodes (line 716) | func (c *Controller) syncNodes(ctx context.Context, workers int) sets....
    method nodeSyncService (line 738) | func (c *Controller) nodeSyncService(svc *v1.Service) bool {
    method updateLoadBalancerHosts (line 802) | func (c *Controller) updateLoadBalancerHosts(ctx context.Context, serv...
    method lockedUpdateLoadBalancerHosts (line 825) | func (c *Controller) lockedUpdateLoadBalancerHosts(service *v1.Service...
    method syncService (line 885) | func (c *Controller) syncService(ctx context.Context, key string) error {
    method processServiceDeletion (line 914) | func (c *Controller) processServiceDeletion(ctx context.Context, key s...
    method processLoadBalancerDelete (line 931) | func (c *Controller) processLoadBalancerDelete(ctx context.Context, se...
    method addFinalizer (line 946) | func (c *Controller) addFinalizer(service *v1.Service) error {
    method removeFinalizer (line 961) | func (c *Controller) removeFinalizer(service *v1.Service) error {
    method patchStatus (line 988) | func (c *Controller) patchStatus(service *v1.Service, previousStatus, ...
  function New (line 104) | func New(
  type loadBalancerOperation (line 354) | type loadBalancerOperation
  constant deleteLoadBalancer (line 357) | deleteLoadBalancer loadBalancerOperation = iota
  constant ensureLoadBalancer (line 358) | ensureLoadBalancer
  constant maxNodeNamesToLog (line 359) | maxNodeNamesToLog = 20
  function needsCleanup (line 540) | func needsCleanup(service *v1.Service) bool {
  function needsUpdate (line 558) | func needsUpdate(oldService *v1.Service, newService *v1.Service) bool {
  function getPortsForLB (line 620) | func getPortsForLB(service *v1.Service) []*v1.ServicePort {
  function portsEqualForLB (line 629) | func portsEqualForLB(x, y *v1.Service) bool {
  function portSlicesEqualForLB (line 635) | func portSlicesEqualForLB(x, y []*v1.ServicePort) bool {
  function portEqualForLB (line 648) | func portEqualForLB(x, y *v1.ServicePort) bool {
  function nodeNames (line 677) | func nodeNames(nodes []*v1.Node) sets.String {
  function loggableNodeNames (line 685) | func loggableNodeNames(nodes []*v1.Node) []string {
  function shouldSyncUpdatedNode (line 694) | func shouldSyncUpdatedNode(oldNode, newNode *v1.Node) bool {
  function nodesSufficientlyEqual (line 771) | func nodesSufficientlyEqual(oldNodes, newNodes []*v1.Node) bool {
  function WantsLoadBalancer (line 865) | func WantsLoadBalancer(service *v1.Service) bool {
  function loadBalancerIPsAreEqual (line 878) | func loadBalancerIPsAreEqual(oldService, newService *v1.Service) bool {
  function removeString (line 977) | func removeString(slice []string, s string) []string {
  type NodeConditionPredicate (line 1003) | type NodeConditionPredicate
  function nodeIncludedPredicate (line 1025) | func nodeIncludedPredicate(node *v1.Node) bool {
  function nodeUnTaintedPredicate (line 1038) | func nodeUnTaintedPredicate(node *v1.Node) bool {
  function nodeReadyPredicate (line 1048) | func nodeReadyPredicate(node *v1.Node) bool {
  function nodeNotDeletedPredicate (line 1057) | func nodeNotDeletedPredicate(node *v1.Node) bool {
  function listWithPredicates (line 1062) | func listWithPredicates(nodeLister corelisters.NodeLister, predicates .....
  function filterWithPredicates (line 1070) | func filterWithPredicates(nodes []*v1.Node, predicates ...NodeConditionP...
  function respectsPredicates (line 1080) | func respectsPredicates(node *v1.Node, predicates ...NodeConditionPredic...

FILE: pkg/controller/service/metrics.go
  constant subSystemName (line 29) | subSystemName = "gke_service_controller"
  function registerMetrics (line 35) | func registerMetrics() {

FILE: pkg/controller/testutil/test_utils.go
  type FakeNodeHandler (line 60) | type FakeNodeHandler struct
    method GetUpdatedNodesCopy (line 87) | func (m *FakeNodeHandler) GetUpdatedNodesCopy() []*v1.Node {
    method Core (line 98) | func (m *FakeNodeHandler) Core() v1core.CoreV1Interface {
    method CoreV1 (line 103) | func (m *FakeNodeHandler) CoreV1() v1core.CoreV1Interface {
    method Create (line 113) | func (m *FakeNodeHandler) Create(_ context.Context, node *v1.Node, _ m...
    method Get (line 133) | func (m *FakeNodeHandler) Get(_ context.Context, name string, opts met...
    method List (line 155) | func (m *FakeNodeHandler) List(_ context.Context, opts metav1.ListOpti...
    method Delete (line 185) | func (m *FakeNodeHandler) Delete(_ context.Context, id string, opt met...
    method DeleteCollection (line 199) | func (m *FakeNodeHandler) DeleteCollection(_ context.Context, opt meta...
    method Update (line 204) | func (m *FakeNodeHandler) Update(_ context.Context, node *v1.Node, _ m...
    method UpdateStatus (line 223) | func (m *FakeNodeHandler) UpdateStatus(_ context.Context, node *v1.Nod...
    method PatchStatus (line 266) | func (m *FakeNodeHandler) PatchStatus(ctx context.Context, nodeName st...
    method Watch (line 272) | func (m *FakeNodeHandler) Watch(_ context.Context, opts metav1.ListOpt...
    method Patch (line 277) | func (m *FakeNodeHandler) Patch(_ context.Context, name string, pt typ...
    method Apply (line 354) | func (m *FakeNodeHandler) Apply(ctx context.Context, node *v1apply.Nod...
    method ApplyStatus (line 369) | func (m *FakeNodeHandler) ApplyStatus(ctx context.Context, node *v1app...
  type FakeLegacyHandler (line 81) | type FakeLegacyHandler struct
    method Nodes (line 108) | func (m *FakeLegacyHandler) Nodes() v1core.NodeInterface {
  type FakeRecorder (line 384) | type FakeRecorder struct
    method Event (line 392) | func (f *FakeRecorder) Event(obj runtime.Object, eventtype, reason, me...
    method Eventf (line 397) | func (f *FakeRecorder) Eventf(obj runtime.Object, eventtype, reason, m...
    method AnnotatedEventf (line 402) | func (f *FakeRecorder) AnnotatedEventf(obj runtime.Object, annotations...
    method generateEvent (line 406) | func (f *FakeRecorder) generateEvent(obj runtime.Object, timestamp met...
    method makeEvent (line 421) | func (f *FakeRecorder) makeEvent(ref *v1.ObjectReference, eventtype, r...
  function NewFakeRecorder (line 454) | func NewFakeRecorder() *FakeRecorder {
  function NewNode (line 463) | func NewNode(name string) *v1.Node {
  function NewPod (line 476) | func NewPod(name, host string) *v1.Pod {
  function contains (line 498) | func contains(node *v1.Node, nodes []*v1.Node) bool {
  function GetZones (line 508) | func GetZones(nodeHandler *FakeNodeHandler) []string {
  function CreateZoneID (line 518) | func CreateZoneID(region, zone string) string {
  function GetKey (line 524) | func GetKey(obj interface{}, t *testing.T) string {

FILE: pkg/controllermetrics/controllermetrics.go
  function init (line 25) | func init() {

FILE: pkg/credentialconfig/config.go
  constant maxReadLength (line 35) | maxReadLength = 10 * 1 << 20
  type DockerConfigJSON (line 40) | type DockerConfigJSON struct
  type DockerConfig (line 49) | type DockerConfig
  type DockerConfigEntry (line 52) | type DockerConfigEntry struct
    method UnmarshalJSON (line 266) | func (ident *DockerConfigEntry) UnmarshalJSON(data []byte) error {
    method MarshalJSON (line 286) | func (ident DockerConfigEntry) MarshalJSON() ([]byte, error) {
  function SetPreferredDockercfgPath (line 73) | func SetPreferredDockercfgPath(path string) {
  function GetPreferredDockercfgPath (line 80) | func GetPreferredDockercfgPath() string {
  function DefaultDockercfgPaths (line 87) | func DefaultDockercfgPaths() []string {
  function DefaultDockerConfigJSONPaths (line 92) | func DefaultDockerConfigJSONPaths() []string {
  function ReadDockercfgFile (line 98) | func ReadDockercfgFile(searchPaths []string) (cfg DockerConfig, err erro...
  function ReadDockerConfigJSONFile (line 133) | func ReadDockerConfigJSONFile(searchPaths []string) (cfg DockerConfig, e...
  function ReadSpecificDockerConfigJSONFile (line 159) | func ReadSpecificDockerConfigJSONFile(filePath string) (cfg DockerConfig...
  function ReadDockerConfigFile (line 169) | func ReadDockerConfigFile() (cfg DockerConfig, err error) {
  type HTTPError (line 179) | type HTTPError struct
    method Error (line 185) | func (he *HTTPError) Error() string {
  function ReadURL (line 191) | func ReadURL(url string, client *http.Client, header *http.Header) (body...
  function ReadDockerConfigFileFromURL (line 227) | func ReadDockerConfigFileFromURL(url string, client *http.Client, header...
  function ReadDockerConfigFileFromBytes (line 236) | func ReadDockerConfigFileFromBytes(contents []byte) (cfg DockerConfig, e...
  function readDockerConfigJSONFileFromBytes (line 243) | func readDockerConfigJSONFileFromBytes(contents []byte) (cfg DockerConfi...
  type dockerConfigEntryWithAuth (line 254) | type dockerConfigEntryWithAuth struct
  function decodeDockerConfigFieldAuth (line 295) | func decodeDockerConfigFieldAuth(field string) (username, password strin...
  function encodeDockerConfigFieldAuth (line 325) | func encodeDockerConfigFieldAuth(username, password string) string {

FILE: pkg/credentialconfig/config_test.go
  function TestReadDockerConfigFile (line 28) | func TestReadDockerConfigFile(t *testing.T) {
  function TestDockerConfigJsonJSONDecode (line 64) | func TestDockerConfigJsonJSONDecode(t *testing.T) {
  function TestDockerConfigJSONDecode (line 94) | func TestDockerConfigJSONDecode(t *testing.T) {
  function TestDockerConfigEntryJSONDecode (line 122) | func TestDockerConfigEntryJSONDecode(t *testing.T) {
  function TestDecodeDockerConfigFieldAuth (line 199) | func TestDecodeDockerConfigFieldAuth(t *testing.T) {
  function TestDockerConfigEntryJSONCompatibleEncode (line 283) | func TestDockerConfigEntryJSONCompatibleEncode(t *testing.T) {
  function TestReadDockerConfigFileFromBytes (line 312) | func TestReadDockerConfigFileFromBytes(t *testing.T) {
  function TestReadDockerConfigJSONFileFromBytes (line 356) | func TestReadDockerConfigJSONFileFromBytes(t *testing.T) {

FILE: pkg/credentialconfig/provider.go
  type DockerConfigProvider (line 29) | type DockerConfigProvider interface
  type CachingDockerConfigProvider (line 44) | type CachingDockerConfigProvider struct
    method Enabled (line 59) | func (d *CachingDockerConfigProvider) Enabled() bool {
    method Provide (line 64) | func (d *CachingDockerConfigProvider) Provide(image string) DockerConf...

FILE: pkg/credentialconfig/provider_test.go
  type testProvider (line 24) | type testProvider struct
    method Enabled (line 29) | func (d *testProvider) Enabled() bool {
    method Provide (line 34) | func (d *testProvider) Provide(image string) DockerConfig {
  function TestCachingProvider (line 39) | func TestCachingProvider(t *testing.T) {

FILE: pkg/gcpcredential/gcpcredential.go
  constant metadataURL (line 33) | metadataURL        = "http://metadata.google.internal./computeMetadata/v1/"
  constant metadataAttributes (line 34) | metadataAttributes = metadataURL + "instance/attributes/"
  constant DockerConfigKey (line 36) | DockerConfigKey = metadataAttributes + "google-dockercfg"
  constant DockerConfigURLKey (line 38) | DockerConfigURLKey = metadataAttributes + "google-dockercfg-url"
  constant serviceAccounts (line 39) | serviceAccounts    = metadataURL + "instance/service-accounts/"
  constant metadataScopes (line 40) | metadataScopes     = serviceAccounts + "default/scopes"
  constant metadataToken (line 41) | metadataToken      = serviceAccounts + "default/token"
  constant metadataEmail (line 42) | metadataEmail      = serviceAccounts + "default/email"
  constant StorageScopePrefix (line 44) | StorageScopePrefix       = "https://www.googleapis.com/auth/devstorage"
  constant cloudPlatformScopePrefix (line 45) | cloudPlatformScopePrefix = "https://www.googleapis.com/auth/cloud-platform"
  constant defaultServiceAccount (line 46) | defaultServiceAccount    = "default/"
  type MetadataProvider (line 63) | type MetadataProvider struct
    method Enabled (line 116) | func (g *MetadataProvider) Enabled() bool {
  type DockerConfigKeyProvider (line 69) | type DockerConfigKeyProvider struct
    method Provide (line 121) | func (g *DockerConfigKeyProvider) Provide(image string) credentialconf...
  type DockerConfigURLKeyProvider (line 75) | type DockerConfigURLKeyProvider struct
    method Provide (line 134) | func (g *DockerConfigURLKeyProvider) Provide(image string) credentialc...
  type ContainerRegistryProvider (line 83) | type ContainerRegistryProvider struct
    method Enabled (line 182) | func (g *ContainerRegistryProvider) Enabled() bool {
    method Provide (line 236) | func (g *ContainerRegistryProvider) Provide(image string) credentialco...
  function onGCEVM (line 90) | func onGCEVM() bool {
  function runWithBackoff (line 156) | func runWithBackoff(f func() ([]byte, error)) []byte {
  type TokenBlob (line 231) | type TokenBlob struct

FILE: pkg/util/controller_utils.go
  function RecordNodeStatusChange (line 30) | func RecordNodeStatusChange(recorder record.EventRecorder, node *v1.Node...
  function CreateAddNodeHandler (line 45) | func CreateAddNodeHandler(f func(node *v1.Node) error) func(obj interfac...
  function CreateUpdateNodeHandler (line 55) | func CreateUpdateNodeHandler(f func(oldNode, newNode *v1.Node) error) fu...
  function CreateDeleteNodeHandler (line 67) | func CreateDeleteNodeHandler(f func(node *v1.Node) error) func(obj inter...
  function GetNodeCondition (line 93) | func GetNodeCondition(status *v1.NodeStatus, conditionType v1.NodeCondit...

FILE: pkg/util/node/node.go
  constant NodePoolPodRangeLabelPrefix (line 41) | NodePoolPodRangeLabelPrefix = "cloud.google.com/gke-np-default-pod-range"
  constant DefaultSubnetLabelPrefix (line 43) | DefaultSubnetLabelPrefix = "cloud.google.com/gke-np-default-subnet"
  constant NodePoolSubnetLabelPrefix (line 45) | NodePoolSubnetLabelPrefix = "cloud.google.com/gke-node-pool-subnet"
  constant GKEUnmanagedNodeLabelKey (line 47) | GKEUnmanagedNodeLabelKey = "components.gke.io/gke-unmanaged-node"
  constant GKEUnmanagedNodeLabelValue (line 49) | GKEUnmanagedNodeLabelValue = "true"
  type GKEFilteringNodeInformer (line 53) | type GKEFilteringNodeInformer struct
    method Lister (line 58) | func (i *GKEFilteringNodeInformer) Lister() v1lister.NodeLister {
    method Informer (line 63) | func (i *GKEFilteringNodeInformer) Informer() cache.SharedIndexInformer {
  type GKEFilteringSharedIndexInformer (line 68) | type GKEFilteringSharedIndexInformer struct
    method AddEventHandler (line 73) | func (f *GKEFilteringSharedIndexInformer) AddEventHandler(handler cach...
    method AddEventHandlerWithResyncPeriod (line 84) | func (f *GKEFilteringSharedIndexInformer) AddEventHandlerWithResyncPer...
  function IsUnmanagedNode (line 95) | func IsUnmanagedNode(node *v1.Node) bool {
  type GKEFilteringNodeLister (line 104) | type GKEFilteringNodeLister struct
    method List (line 109) | func (l *GKEFilteringNodeLister) List(selector labels.Selector) (ret [...
    method Get (line 125) | func (l *GKEFilteringNodeLister) Get(name string) (*v1.Node, error) {
  type ErrNodeUnmanagedByGKE (line 137) | type ErrNodeUnmanagedByGKE struct
    method Error (line 141) | func (e *ErrNodeUnmanagedByGKE) Error() string {
    method Status (line 147) | func (e *ErrNodeUnmanagedByGKE) Status() metav1.Status {
  function IsUnmanagedNodeError (line 155) | func IsUnmanagedNodeError(err error) bool {
  type nodeForConditionPatch (line 163) | type nodeForConditionPatch struct
  type nodeStatusForPatch (line 167) | type nodeStatusForPatch struct
  function SetNodeCondition (line 172) | func SetNodeCondition(c clientset.Interface, node types.NodeName, condit...
  type nodeForCIDRMergePatch (line 196) | type nodeForCIDRMergePatch struct
  type nodeSpecForMergePatch (line 200) | type nodeSpecForMergePatch struct
  function PatchNodeCIDRs (line 206) | func PatchNodeCIDRs(c clientset.Interface, node types.NodeName, cidrs []...
  function PatchNodeMultiNetwork (line 227) | func PatchNodeMultiNetwork(c clientset.Interface, node *v1.Node) error {

FILE: pkg/util/node/node_test.go
  function TestPatchNodeMultiNetwork (line 31) | func TestPatchNodeMultiNetwork(t *testing.T) {

FILE: pkg/util/taints/taints.go
  function TaintExists (line 25) | func TaintExists(taints []v1.Taint, taintToFind *v1.Taint) bool {

FILE: pkg/util/taints/taints_test.go
  function TestTaintExists (line 25) | func TestTaintExists(t *testing.T) {

FILE: providers/gce/gce.go
  constant ProviderName (line 62) | ProviderName = "gce"
  constant k8sNodeRouteTag (line 64) | k8sNodeRouteTag = "k8s-node-route"
  constant gceAffinityTypeNone (line 67) | gceAffinityTypeNone = "NONE"
  constant gceAffinityTypeClientIP (line 69) | gceAffinityTypeClientIP = "CLIENT_IP"
  constant operationPollInterval (line 71) | operationPollInterval           = time.Second
  constant maxTargetPoolCreateInstances (line 72) | maxTargetPoolCreateInstances    = 200
  constant maxInstancesPerTargetPoolUpdate (line 73) | maxInstancesPerTargetPoolUpdate = 1000
  constant gceHcCheckIntervalSeconds (line 77) | gceHcCheckIntervalSeconds = int64(8)
  constant gceHcTimeoutSeconds (line 78) | gceHcTimeoutSeconds       = int64(1)
  constant gceHcHealthyThreshold (line 80) | gceHcHealthyThreshold = int64(1)
  constant gceHcUnhealthyThreshold (line 82) | gceHcUnhealthyThreshold = int64(3)
  constant gceComputeAPIEndpoint (line 84) | gceComputeAPIEndpoint     = "https://www.googleapis.com/compute/v1/"
  constant gceComputeAPIEndpointBeta (line 85) | gceComputeAPIEndpointBeta = "https://www.googleapis.com/compute/beta/"
  type StackType (line 98) | type StackType
  constant NetworkStackDualStack (line 101) | NetworkStackDualStack StackType = "IPV4_IPV6"
  constant NetworkStackIPV4 (line 104) | NetworkStackIPV4 StackType = "IPV4"
  constant NetworkStackIPV6 (line 107) | NetworkStackIPV6 StackType = "IPV6"
  constant clusterStackDualStack (line 111) | clusterStackDualStack StackType = "IPV4_IPV6"
  constant clusterStackIPV4 (line 115) | clusterStackIPV4 StackType = "IPV4"
  constant clusterStackIPV6 (line 119) | clusterStackIPV6 StackType = "IPV6"
  type Cloud (line 122) | type Cloud struct
    method ComputeServices (line 310) | func (g *Cloud) ComputeServices() *Services {
    method Compute (line 315) | func (g *Cloud) Compute() cloud.Cloud {
    method ContainerService (line 320) | func (g *Cloud) ContainerService() *container.Service {
    method initializeSubnetworkURLAndIsLegacyNetwork (line 602) | func (g *Cloud) initializeSubnetworkURLAndIsLegacyNetwork() {
    method SetRateLimiter (line 642) | func (g *Cloud) SetRateLimiter(rl cloud.RateLimiter) {
    method Initialize (line 701) | func (g *Cloud) Initialize(clientBuilder cloudprovider.ControllerClien...
    method LoadBalancer (line 714) | func (g *Cloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
    method Instances (line 719) | func (g *Cloud) Instances() (cloudprovider.Instances, bool) {
    method InstancesV2 (line 725) | func (g *Cloud) InstancesV2() (cloudprovider.InstancesV2, bool) {
    method Zones (line 730) | func (g *Cloud) Zones() (cloudprovider.Zones, bool) {
    method Clusters (line 735) | func (g *Cloud) Clusters() (cloudprovider.Clusters, bool) {
    method Routes (line 740) | func (g *Cloud) Routes() (cloudprovider.Routes, bool) {
    method ProviderName (line 745) | func (g *Cloud) ProviderName() string {
    method ProjectID (line 750) | func (g *Cloud) ProjectID() string {
    method NetworkProjectID (line 755) | func (g *Cloud) NetworkProjectID() string {
    method Region (line 760) | func (g *Cloud) Region() string {
    method Regional (line 765) | func (g *Cloud) Regional() bool {
    method LocalZone (line 770) | func (g *Cloud) LocalZone() string {
    method OnXPN (line 775) | func (g *Cloud) OnXPN() bool {
    method NetworkURL (line 780) | func (g *Cloud) NetworkURL() string {
    method SubnetworkURL (line 785) | func (g *Cloud) SubnetworkURL() string {
    method IsLegacyNetwork (line 791) | func (g *Cloud) IsLegacyNetwork() bool {
    method SetInformers (line 797) | func (g *Cloud) SetInformers(informerFactory informers.SharedInformerF...
    method updateNodeZones (line 835) | func (g *Cloud) updateNodeZones(prevNode, newNode *v1.Node) {
    method HasClusterID (line 862) | func (g *Cloud) HasClusterID() bool {
    method SetProjectFromNodeProviderID (line 869) | func (g *Cloud) SetProjectFromNodeProviderID(enabled bool) {
    method SetEnableRBSDefaultForL4NetLB (line 873) | func (g *Cloud) SetEnableRBSDefaultForL4NetLB(enabled bool) {
    method SetEnableL4LBAnnotations (line 877) | func (g *Cloud) SetEnableL4LBAnnotations(enabled bool) {
    method SetEnableL4DenyFirewallRule (line 881) | func (g *Cloud) SetEnableL4DenyFirewallRule(firewallEnabled, rollbackE...
  type ConfigGlobal (line 224) | type ConfigGlobal struct
  type ConfigFile (line 265) | type ConfigFile struct
  type CloudConfig (line 270) | type CloudConfig struct
  function init (line 293) | func init() {
  type Services (line 302) | type Services struct
  function newGCECloud (line 325) | func newGCECloud(config io.Reader) (gceCloud *Cloud, err error) {
  function readConfig (line 345) | func readConfig(reader io.Reader) (*ConfigFile, error) {
  function GenerateCloudConfig (line 354) | func GenerateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConf...
  function CreateGCECloud (line 460) | func CreateGCECloud(config *CloudConfig) (*Cloud, error) {
  function determineSubnetURL (line 650) | func determineSubnetURL(service *compute.Service, networkProjectID, netw...
  function tryConvertToProjectNames (line 672) | func tryConvertToProjectNames(configProject, configNetworkProject string...
  function getProjectsBasePath (line 888) | func getProjectsBasePath(basePath string) string {
  function isProjectNumber (line 900) | func isProjectNumber(idOrNumber string) bool {
  function gceNetworkURL (line 905) | func gceNetworkURL(apiEndpoint, project, network string) string {
  function gceSubnetworkURL (line 912) | func gceSubnetworkURL(apiEndpoint, project, region, subnetwork string) s...
  function getRegionInURL (line 923) | func getRegionInURL(urlStr string) string {
  function getNetworkNameViaMetadata (line 933) | func getNetworkNameViaMetadata() (string, error) {
  function getNetwork (line 946) | func getNetwork(svc *compute.Service, networkProjectID, networkID string...
  function listSubnetworksOfNetwork (line 951) | func listSubnetworksOfNetwork(svc *compute.Service, networkProjectID, ne...
  function getProjectID (line 961) | func getProjectID(svc *compute.Service, projectNumberOrID string) (strin...
  function getZonesForRegion (line 970) | func getZonesForRegion(svc *compute.Service, projectID, region string) (...
  function findSubnetForRegion (line 995) | func findSubnetForRegion(subnetURLs []string, region string) string {
  method getProjectsAPIEndpoint (line 1004) | func (manager *gceServiceManager) getProjectsAPIEndpoint() string {

FILE: providers/gce/gce_address_manager.go
  type addressManager (line 32) | type addressManager struct
    method HoldAddress (line 61) | func (am *addressManager) HoldAddress() (string, error) {
    method ReleaseAddress (line 100) | func (am *addressManager) ReleaseAddress() error {
    method ensureAddressReservation (line 122) | func (am *addressManager) ensureAddressReservation() (string, error) {
    method validateAddress (line 185) | func (am *addressManager) validateAddress(addr *compute.Address) error {
    method isManagedAddress (line 196) | func (am *addressManager) isManagedAddress(addr *compute.Address) bool {
  function newAddressManager (line 44) | func newAddressManager(svc CloudAddressService, serviceName, region, sub...
  function ensureAddressDeleted (line 200) | func ensureAddressDeleted(svc CloudAddressService, name, region string) ...

FILE: providers/gce/gce_address_manager_test.go
  constant testSvcName (line 31) | testSvcName = "my-service"
  constant testSubnet (line 32) | testSubnet = "/projects/x/testRegions/us-central1/testSubnetworks/custom...
  constant testLBName (line 33) | testLBName = "a111111111111111"
  function TestAddressManagerNoRequestedIP (line 38) | func TestAddressManagerNoRequestedIP(t *testing.T) {
  function TestAddressManagerBasic (line 49) | func TestAddressManagerBasic(t *testing.T) {
  function TestAddressManagerOrphaned (line 61) | func TestAddressManagerOrphaned(t *testing.T) {
  function TestAddressManagerOutdatedOrphan (line 77) | func TestAddressManagerOutdatedOrphan(t *testing.T) {
  function TestAddressManagerExternallyOwned (line 94) | func TestAddressManagerExternallyOwned(t *testing.T) {
  function TestAddressManagerBadExternallyOwned (line 117) | func TestAddressManagerBadExternallyOwned(t *testing.T) {
  function testHoldAddress (line 132) | func testHoldAddress(t *testing.T, mgr *addressManager, svc CloudAddress...
  function testReleaseAddress (line 145) | func testReleaseAddress(t *testing.T, mgr *addressManager, svc CloudAddr...

FILE: providers/gce/gce_addresses.go
  function newAddressMetricContext (line 35) | func newAddressMetricContext(request, region string) *metricContext {
  function newAddressMetricContextWithVersion (line 39) | func newAddressMetricContextWithVersion(request, region, version string)...
  method ReserveGlobalAddress (line 47) | func (g *Cloud) ReserveGlobalAddress(addr *compute.Address) error {
  method DeleteGlobalAddress (line 56) | func (g *Cloud) DeleteGlobalAddress(name string) error {
  method GetGlobalAddress (line 65) | func (g *Cloud) GetGlobalAddress(name string) (*compute.Address, error) {
  method ReserveRegionAddress (line 75) | func (g *Cloud) ReserveRegionAddress(addr *compute.Address, region strin...
  method ReserveBetaRegionAddress (line 84) | func (g *Cloud) ReserveBetaRegionAddress(addr *computebeta.Address, regi...
  method DeleteRegionAddress (line 93) | func (g *Cloud) DeleteRegionAddress(name, region string) error {
  method GetRegionAddress (line 102) | func (g *Cloud) GetRegionAddress(name, region string) (*compute.Address,...
  method GetBetaRegionAddress (line 112) | func (g *Cloud) GetBetaRegionAddress(name, region string) (*computebeta....
  method GetRegionAddressByIP (line 122) | func (g *Cloud) GetRegionAddressByIP(region, ipAddress string) (*compute...
  method GetBetaRegionAddressByIP (line 146) | func (g *Cloud) GetBetaRegionAddressByIP(region, ipAddress string) (*com...
  method getNetworkTierFromAddress (line 169) | func (g *Cloud) getNetworkTierFromAddress(name, region string) (string, ...
  function addrNames (line 179) | func addrNames(items interface{}) []string {

FILE: providers/gce/gce_alpha.go
  constant AlphaFeatureILBSubsets (line 25) | AlphaFeatureILBSubsets = "ILBSubsets"
  constant AlphaFeatureSkipIGsManagement (line 29) | AlphaFeatureSkipIGsManagement = "SkipIGsManagement"
  type AlphaFeatureGate (line 33) | type AlphaFeatureGate struct
    method Enabled (line 38) | func (af *AlphaFeatureGate) Enabled(key string) bool {
  function NewAlphaFeatureGate (line 46) | func NewAlphaFeatureGate(features []string) *AlphaFeatureGate {

FILE: providers/gce/gce_annotations.go
  type LoadBalancerType (line 32) | type LoadBalancerType
  constant ServiceAnnotationLoadBalancerType (line 38) | ServiceAnnotationLoadBalancerType = "networking.gke.io/load-balancer-type"
  constant deprecatedServiceAnnotationLoadBalancerType (line 41) | deprecatedServiceAnnotationLoadBalancerType = "cloud.google.com/load-bal...
  constant LBTypeInternal (line 44) | LBTypeInternal LoadBalancerType = "Internal"
  constant deprecatedTypeInternalLowerCase (line 47) | deprecatedTypeInternalLowerCase LoadBalancerType = "internal"
  constant LegacyRegionalInternalLoadBalancerClass (line 51) | LegacyRegionalInternalLoadBalancerClass = "networking.gke.io/l4-regional...
  constant LegacyRegionalExternalLoadBalancerClass (line 55) | LegacyRegionalExternalLoadBalancerClass = "networking.gke.io/l4-regional...
  constant ServiceAnnotationILBBackendShare (line 60) | ServiceAnnotationILBBackendShare = "alpha.cloud.google.com/load-balancer...
  constant deprecatedServiceAnnotationILBBackendShare (line 63) | deprecatedServiceAnnotationILBBackendShare = "cloud.google.com/load-bala...
  constant ServiceAnnotationILBAllowGlobalAccess (line 68) | ServiceAnnotationILBAllowGlobalAccess = "networking.gke.io/internal-load...
  constant ServiceAnnotationILBSubnet (line 73) | ServiceAnnotationILBSubnet = "networking.gke.io/internal-load-balancer-s...
  constant NetworkTierAnnotationKey (line 78) | NetworkTierAnnotationKey = "cloud.google.com/network-tier"
  constant NetworkTierAnnotationStandard (line 81) | NetworkTierAnnotationStandard = cloud.NetworkTierStandard
  constant NetworkTierAnnotationPremium (line 84) | NetworkTierAnnotationPremium = cloud.NetworkTierPremium
  constant RBSAnnotationKey (line 88) | RBSAnnotationKey = "cloud.google.com/l4-rbs"
  constant RBSEnabled (line 91) | RBSEnabled = "enabled"
  constant serviceStatusPrefix (line 95) | serviceStatusPrefix = "networking.gke.io"
  constant backendServiceResource (line 97) | backendServiceResource = "backend-service"
  constant targetPoolResource (line 98) | targetPoolResource     = "target-pool"
  constant backendServiceKey (line 102) | backendServiceKey = serviceStatusPrefix + "/" + backendServiceResource
  constant targetPoolKey (line 106) | targetPoolKey = serviceStatusPrefix + "/" + targetPoolResource
  function GetLoadBalancerAnnotationType (line 115) | func GetLoadBalancerAnnotationType(service *v1.Service) LoadBalancerType {
  function GetLoadBalancerAnnotationBackendShare (line 143) | func GetLoadBalancerAnnotationBackendShare(service *v1.Service) bool {
  function GetServiceNetworkTier (line 160) | func GetServiceNetworkTier(service *v1.Service) (cloud.NetworkTier, erro...
  type ILBOptions (line 179) | type ILBOptions struct
  function GetLoadBalancerAnnotationAllowGlobalAccess (line 188) | func GetLoadBalancerAnnotationAllowGlobalAccess(service *v1.Service) bool {
  function GetLoadBalancerAnnotationSubnet (line 193) | func GetLoadBalancerAnnotationSubnet(service *v1.Service) string {
  function mergeMap (line 204) | func mergeMap(existing, update map[string]string) map[string]string {

FILE: providers/gce/gce_annotations_test.go
  function TestServiceNetworkTierAnnotationKey (line 34) | func TestServiceNetworkTierAnnotationKey(t *testing.T) {
  function TestMergeMap (line 78) | func TestMergeMap(t *testing.T) {
  function TestComputeNewAnnotationsIfNeeded (line 152) | func TestComputeNewAnnotationsIfNeeded(t *testing.T) {

FILE: providers/gce/gce_backendservice.go
  function newBackendServiceMetricContext (line 32) | func newBackendServiceMetricContext(request, region string) *metricConte...
  function newBackendServiceMetricContextWithVersion (line 36) | func newBackendServiceMetricContextWithVersion(request, region, version ...
  method GetGlobalBackendService (line 41) | func (g *Cloud) GetGlobalBackendService(name string) (*compute.BackendSe...
  method GetBetaGlobalBackendService (line 51) | func (g *Cloud) GetBetaGlobalBackendService(name string) (*computebeta.B...
  method GetAlphaGlobalBackendService (line 61) | func (g *Cloud) GetAlphaGlobalBackendService(name string) (*computealpha...
  method UpdateGlobalBackendService (line 72) | func (g *Cloud) UpdateGlobalBackendService(bg *compute.BackendService) e...
  method UpdateBetaGlobalBackendService (line 82) | func (g *Cloud) UpdateBetaGlobalBackendService(bg *computebeta.BackendSe...
  method UpdateAlphaGlobalBackendService (line 92) | func (g *Cloud) UpdateAlphaGlobalBackendService(bg *computealpha.Backend...
  method DeleteGlobalBackendService (line 101) | func (g *Cloud) DeleteGlobalBackendService(name string) error {
  method CreateGlobalBackendService (line 110) | func (g *Cloud) CreateGlobalBackendService(bg *compute.BackendService) e...
  method CreateBetaGlobalBackendService (line 119) | func (g *Cloud) CreateBetaGlobalBackendService(bg *computebeta.BackendSe...
  method CreateAlphaGlobalBackendService (line 128) | func (g *Cloud) CreateAlphaGlobalBackendService(bg *computealpha.Backend...
  method ListGlobalBackendServices (line 137) | func (g *Cloud) ListGlobalBackendServices() ([]*compute.BackendService, ...
  method GetGlobalBackendServiceHealth (line 149) | func (g *Cloud) GetGlobalBackendServiceHealth(name string, instanceGroup...
  method GetRegionBackendService (line 160) | func (g *Cloud) GetRegionBackendService(name, region string) (*compute.B...
  method UpdateRegionBackendService (line 171) | func (g *Cloud) UpdateRegionBackendService(bg *compute.BackendService, r...
  method DeleteRegionBackendService (line 180) | func (g *Cloud) DeleteRegionBackendService(name, region string) error {
  method CreateRegionBackendService (line 189) | func (g *Cloud) CreateRegionBackendService(bg *compute.BackendService, r...
  method ListRegionBackendServices (line 198) | func (g *Cloud) ListRegionBackendServices(region string) ([]*compute.Bac...
  method GetRegionalBackendServiceHealth (line 210) | func (g *Cloud) GetRegionalBackendServiceHealth(name, region string, ins...
  method SetSecurityPolicyForBetaGlobalBackendService (line 222) | func (g *Cloud) SetSecurityPolicyForBetaGlobalBackendService(backendServ...
  method SetSecurityPolicyForAlphaGlobalBackendService (line 232) | func (g *Cloud) SetSecurityPolicyForAlphaGlobalBackendService(backendSer...

FILE: providers/gce/gce_cert.go
  function newCertMetricContext (line 30) | func newCertMetricContext(request string) *metricContext {
  method GetSslCertificate (line 35) | func (g *Cloud) GetSslCertificate(name string) (*compute.SslCertificate,...
  method CreateSslCertificate (line 45) | func (g *Cloud) CreateSslCertificate(sslCerts *compute.SslCertificate) (...
  method DeleteSslCertificate (line 58) | func (g *Cloud) DeleteSslCertificate(name string) error {
  method ListSslCertificates (line 67) | func (g *Cloud) ListSslCertificates() ([]*compute.SslCertificate, error) {

FILE: providers/gce/gce_clusterid.go
  constant UIDConfigMapName (line 44) | UIDConfigMapName = "ingress-uid"
  constant UIDNamespace (line 47) | UIDNamespace = metav1.NamespaceSystem
  constant UIDCluster (line 50) | UIDCluster = "uid"
  constant UIDProvider (line 53) | UIDProvider = "provider-uid"
  constant UIDLengthBytes (line 56) | UIDLengthBytes = 8
  constant updateFuncFrequency (line 60) | updateFuncFrequency = 10 * time.Minute
  type ClusterID (line 64) | type ClusterID struct
    method GetID (line 126) | func (ci *ClusterID) GetID() (string, error) {
    method GetFederationID (line 148) | func (ci *ClusterID) GetFederationID() (string, bool, error) {
    method getOrInitialize (line 170) | func (ci *ClusterID) getOrInitialize() error {
    method getConfigMap (line 214) | func (ci *ClusterID) getConfigMap() (bool, error) {
    method update (line 233) | func (ci *ClusterID) update(m *v1.ConfigMap) {
  method watchClusterID (line 74) | func (g *Cloud) watchClusterID(stop <-chan struct{}) {
  function makeUID (line 244) | func makeUID() (string, error) {
  function newSingleObjectListerWatcher (line 253) | func newSingleObjectListerWatcher(lw cache.ListerWatcher, objectName str...
  type singleObjListerWatcher (line 257) | type singleObjListerWatcher struct
    method List (line 262) | func (sow *singleObjListerWatcher) List(options metav1.ListOptions) (r...
    method Watch (line 267) | func (sow *singleObjListerWatcher) Watch(options metav1.ListOptions) (...

FILE: providers/gce/gce_clusters.go
  function newClustersMetricContext (line 30) | func newClustersMetricContext(request, zone string) *metricContext {
  method ListClusters (line 35) | func (g *Cloud) ListClusters(ctx context.Context) ([]string, error) {
  method GetManagedClusters (line 51) | func (g *Cloud) GetManagedClusters(ctx context.Context) ([]*container.Cl...
  method Master (line 76) | func (g *Cloud) Master(ctx context.Context, clusterName string) (string,...
  method listClustersInZone (line 80) | func (g *Cloud) listClustersInZone(zone string) ([]string, error) {
  method getClustersInLocation (line 93) | func (g *Cloud) getClustersInLocation(zoneOrRegion string) ([]*container...

FILE: providers/gce/gce_disks.go
  type DiskType (line 47) | type DiskType
  constant DiskTypeSSD (line 51) | DiskTypeSSD = "pd-ssd"
  constant DiskTypeStandard (line 54) | DiskTypeStandard = "pd-standard"
  constant diskTypeDefault (line 56) | diskTypeDefault               = DiskTypeStandard
  constant diskTypeURITemplateSingleZone (line 57) | diskTypeURITemplateSingleZone = "%s/zones/%s/diskTypes/%s"
  constant diskTypeURITemplateRegional (line 58) | diskTypeURITemplateRegional   = "%s/regions/%s/diskTypes/%s"
  constant diskTypePersistent (line 59) | diskTypePersistent            = "PERSISTENT"
  constant diskSourceURITemplateSingleZone (line 61) | diskSourceURITemplateSingleZone = "%s/zones/%s/disks/%s"
  constant diskSourceURITemplateRegional (line 62) | diskSourceURITemplateRegional   = "%s/regions/%s/disks/%s"
  constant replicaZoneURITemplateSingleZone (line 64) | replicaZoneURITemplateSingleZone = "%s/zones/%s"
  constant diskKind (line 66) | diskKind = "compute#disk"
  type diskServiceManager (line 69) | type diskServiceManager interface
  type gceServiceManager (line 115) | type gceServiceManager struct
    method CreateDiskOnCloudProvider (line 121) | func (manager *gceServiceManager) CreateDiskOnCloudProvider(
    method CreateRegionalDiskOnCloudProvider (line 152) | func (manager *gceServiceManager) CreateRegionalDiskOnCloudProvider(
    method AttachDiskOnCloudProvider (line 191) | func (manager *gceServiceManager) AttachDiskOnCloudProvider(
    method DetachDiskOnCloudProvider (line 214) | func (manager *gceServiceManager) DetachDiskOnCloudProvider(
    method GetDiskFromCloudProvider (line 223) | func (manager *gceServiceManager) GetDiskFromCloudProvider(
    method GetRegionalDiskFromCloudProvider (line 261) | func (manager *gceServiceManager) GetRegionalDiskFromCloudProvider(
    method DeleteDiskOnCloudProvider (line 286) | func (manager *gceServiceManager) DeleteDiskOnCloudProvider(
    method DeleteRegionalDiskOnCloudProvider (line 294) | func (manager *gceServiceManager) DeleteRegionalDiskOnCloudProvider(
    method getDiskSourceURI (line 302) | func (manager *gceServiceManager) getDiskSourceURI(disk *Disk) (string...
    method getDiskTypeURI (line 336) | func (manager *gceServiceManager) getDiskTypeURI(
    method getReplicaZoneURI (line 368) | func (manager *gceServiceManager) getReplicaZoneURI(zone string) string {
    method getRegionFromZone (line 375) | func (manager *gceServiceManager) getRegionFromZone(zoneInfo zoneType)...
    method ResizeDiskOnCloudProvider (line 409) | func (manager *gceServiceManager) ResizeDiskOnCloudProvider(disk *Disk...
    method RegionalResizeDiskOnCloudProvider (line 419) | func (manager *gceServiceManager) RegionalResizeDiskOnCloudProvider(di...
  type Disks (line 431) | type Disks interface
  type Disk (line 478) | type Disk struct
  type zoneType (line 487) | type zoneType interface
  type multiZone (line 491) | type multiZone struct
    method isZoneType (line 499) | func (m multiZone) isZoneType()  {}
  type singleZone (line 495) | type singleZone struct
    method isZoneType (line 500) | func (s singleZone) isZoneType() {}
  function newDiskMetricContextZonal (line 502) | func newDiskMetricContextZonal(request, region, zone string) *metricCont...
  function newDiskMetricContextRegional (line 506) | func newDiskMetricContextRegional(request, region string) *metricContext {
  method GetLabelsForVolume (line 511) | func (g *Cloud) GetLabelsForVolume(ctx context.Context, pv *v1.Persisten...
  method getDiskByNameAndOptionalLabelZones (line 537) | func (g *Cloud) getDiskByNameAndOptionalLabelZones(name, labelZone strin...
  method AttachDisk (line 554) | func (g *Cloud) AttachDisk(diskName string, nodeName types.NodeName, rea...
  method DetachDisk (line 588) | func (g *Cloud) DetachDisk(devicePath string, nodeName types.NodeName) e...
  method DiskIsAttached (line 609) | func (g *Cloud) DiskIsAttached(diskName string, nodeName types.NodeName)...
  method DisksAreAttached (line 637) | func (g *Cloud) DisksAreAttached(diskNames []string, nodeName types.Node...
  method BulkDisksAreAttached (line 671) | func (g *Cloud) BulkDisksAreAttached(diskByNodes map[types.NodeName][]st...
  method CreateDisk (line 703) | func (g *Cloud) CreateDisk(
  method CreateRegionalDisk (line 743) | func (g *Cloud) CreateRegionalDisk(
  function getDiskType (line 784) | func getDiskType(diskType string) (string, error) {
  method DeleteDisk (line 796) | func (g *Cloud) DeleteDisk(diskToDelete string) error {
  method ResizeDisk (line 809) | func (g *Cloud) ResizeDisk(diskToResize string, oldSize resource.Quantit...
  method GetAutoLabelsForPD (line 857) | func (g *Cloud) GetAutoLabelsForPD(disk *Disk) (map[string]string, error) {
  method findDiskByName (line 888) | func (g *Cloud) findDiskByName(diskName string, zone string) (*Disk, err...
  method getDiskByName (line 901) | func (g *Cloud) getDiskByName(diskName string, zone string) (*Disk, erro...
  method findRegionalDiskByName (line 911) | func (g *Cloud) findRegionalDiskByName(diskName string) (*Disk, error) {
  method getRegionalDiskByName (line 924) | func (g *Cloud) getRegionalDiskByName(diskName string) (*Disk, error) {
  method GetDiskByNameUnknownZone (line 935) | func (g *Cloud) GetDiskByNameUnknownZone(diskName string) (*Disk, error) {
  method encodeDiskTags (line 988) | func (g *Cloud) encodeDiskTags(tags map[string]string) (string, error) {
  method doDeleteDisk (line 1001) | func (g *Cloud) doDeleteDisk(diskToDelete string) error {
  function isGCEError (line 1025) | func isGCEError(err error, reason string) bool {
  function verifyDisksAttachedToNode (line 1041) | func verifyDisksAttachedToNode(disksToVerify []string, disksActuallyAtta...

FILE: providers/gce/gce_disks_test.go
  function TestCreateDisk_Basic (line 41) | func TestCreateDisk_Basic(t *testing.T) {
  function TestCreateRegionalDisk_Basic (line 96) | func TestCreateRegionalDisk_Basic(t *testing.T) {
  function TestCreateDisk_DiskAlreadyExists (line 150) | func TestCreateDisk_DiskAlreadyExists(t *testing.T) {
  function TestCreateDisk_WrongZone (line 181) | func TestCreateDisk_WrongZone(t *testing.T) {
  function TestCreateDisk_NoManagedZone (line 206) | func TestCreateDisk_NoManagedZone(t *testing.T) {
  function TestCreateDisk_BadDiskType (line 231) | func TestCreateDisk_BadDiskType(t *testing.T) {
  function TestCreateDisk_MultiZone (line 256) | func TestCreateDisk_MultiZone(t *testing.T) {
  function TestDeleteDisk_Basic (line 284) | func TestDeleteDisk_Basic(t *testing.T) {
  function TestDeleteDisk_NotFound (line 318) | func TestDeleteDisk_NotFound(t *testing.T) {
  function TestDeleteDisk_ResourceBeingUsed (line 343) | func TestDeleteDisk_ResourceBeingUsed(t *testing.T) {
  function TestDeleteDisk_SameDiskMultiZone (line 374) | func TestDeleteDisk_SameDiskMultiZone(t *testing.T) {
  function TestDeleteDisk_DiffDiskMultiZone (line 408) | func TestDeleteDisk_DiffDiskMultiZone(t *testing.T) {
  function pv (line 442) | func pv(name, zone string) *v1.PersistentVolume {
  function TestGetLabelsForVolume_Basic (line 459) | func TestGetLabelsForVolume_Basic(t *testing.T) {
  function TestGetLabelsForVolume_NoZone (line 496) | func TestGetLabelsForVolume_NoZone(t *testing.T) {
  function TestGetLabelsForVolume_DiskNotFound (line 536) | func TestGetLabelsForVolume_DiskNotFound(t *testing.T) {
  function TestGetLabelsForVolume_DiskNotFoundAndNoZone (line 559) | func TestGetLabelsForVolume_DiskNotFoundAndNoZone(t *testing.T) {
  function TestGetLabelsForVolume_DupDisk (line 589) | func TestGetLabelsForVolume_DupDisk(t *testing.T) {
  function TestGetLabelsForVolume_DupDiskNoZone (line 629) | func TestGetLabelsForVolume_DupDiskNoZone(t *testing.T) {
  function TestGetAutoLabelsForPD (line 665) | func TestGetAutoLabelsForPD(t *testing.T) {
  type targetClientAPI (line 761) | type targetClientAPI
  constant targetStable (line 764) | targetStable targetClientAPI = iota
  constant targetBeta (line 765) | targetBeta
  constant targetAlpha (line 766) | targetAlpha
  type FakeServiceManager (line 769) | type FakeServiceManager struct
    method CreateDiskOnCloudProvider (line 802) | func (manager *FakeServiceManager) CreateDiskOnCloudProvider(
    method CreateRegionalDiskOnCloudProvider (line 853) | func (manager *FakeServiceManager) CreateRegionalDiskOnCloudProvider(
    method AttachDiskOnCloudProvider (line 878) | func (manager *FakeServiceManager) AttachDiskOnCloudProvider(
    method DetachDiskOnCloudProvider (line 896) | func (manager *FakeServiceManager) DetachDiskOnCloudProvider(
    method GetDiskFromCloudProvider (line 915) | func (manager *FakeServiceManager) GetDiskFromCloudProvider(
    method GetRegionalDiskFromCloudProvider (line 940) | func (manager *FakeServiceManager) GetRegionalDiskFromCloudProvider(
    method ResizeDiskOnCloudProvider (line 962) | func (manager *FakeServiceManager) ResizeDiskOnCloudProvider(
    method RegionalResizeDiskOnCloudProvider (line 969) | func (manager *FakeServiceManager) RegionalResizeDiskOnCloudProvider(
    method DeleteDiskOnCloudProvider (line 978) | func (manager *FakeServiceManager) DeleteDiskOnCloudProvider(
    method DeleteRegionalDiskOnCloudProvider (line 997) | func (manager *FakeServiceManager) DeleteRegionalDiskOnCloudProvider(
  function newFakeManager (line 789) | func newFakeManager(gceProjectID string, gceRegion string) *FakeServiceM...
  function createNodeZones (line 1015) | func createNodeZones(zones []string) map[string]sets.String {

FILE: providers/gce/gce_fake.go
  type TestClusterValues (line 32) | type TestClusterValues struct
  function DefaultTestClusterValues (line 48) | func DefaultTestClusterValues() TestClusterValues {
  function fakeClusterID (line 62) | func fakeClusterID(clusterID string) ClusterID {
  function NewFakeGCECloud (line 72) | func NewFakeGCECloud(vals TestClusterValues) *Cloud {
  function UpdateFakeGCECloud (line 99) | func UpdateFakeGCECloud(g *Cloud, vals TestClusterValues) {
  function SetFakeStackType (line 104) | func SetFakeStackType(g *Cloud, stackType StackType) {

FILE: providers/gce/gce_firewall.go
  function newFirewallMetricContext (line 29) | func newFirewallMetricContext(request string) *metricContext {
  method GetFirewall (line 34) | func (g *Cloud) GetFirewall(name string) (*compute.Firewall, error) {
  method CreateFirewall (line 44) | func (g *Cloud) CreateFirewall(f *compute.Firewall) error {
  method DeleteFirewall (line 53) | func (g *Cloud) DeleteFirewall(name string) error {
  method UpdateFirewall (line 62) | func (g *Cloud) UpdateFirewall(f *compute.Firewall) error {
  method PatchFirewall (line 71) | func (g *Cloud) PatchFirewall(f *compute.Firewall) error {

FILE: providers/gce/gce_forwardingrule.go
  function newForwardingRuleMetricContext (line 31) | func newForwardingRuleMetricContext(request, region string) *metricConte...
  function newForwardingRuleMetricContextWithVersion (line 34) | func newForwardingRuleMetricContextWithVersion(request, region, version ...
  method CreateGlobalForwardingRule (line 39) | func (g *Cloud) CreateGlobalForwardingRule(rule *compute.ForwardingRule)...
  method SetProxyForGlobalForwardingRule (line 49) | func (g *Cloud) SetProxyForGlobalForwardingRule(forwardingRuleName, targ...
  method DeleteGlobalForwardingRule (line 59) | func (g *Cloud) DeleteGlobalForwardingRule(name string) error {
  method GetGlobalForwardingRule (line 68) | func (g *Cloud) GetGlobalForwardingRule(name string) (*compute.Forwardin...
  method ListGlobalForwardingRules (line 78) | func (g *Cloud) ListGlobalForwardingRules() ([]*compute.ForwardingRule, ...
  method GetRegionForwardingRule (line 88) | func (g *Cloud) GetRegionForwardingRule(name, region string) (*compute.F...
  method GetAlphaRegionForwardingRule (line 98) | func (g *Cloud) GetAlphaRegionForwardingRule(name, region string) (*comp...
  method GetBetaRegionForwardingRule (line 108) | func (g *Cloud) GetBetaRegionForwardingRule(name, region string) (*compu...
  method ListRegionForwardingRules (line 118) | func (g *Cloud) ListRegionForwardingRules(region string) ([]*compute.For...
  method ListAlphaRegionForwardingRules (line 128) | func (g *Cloud) ListAlphaRegionForwardingRules(region string) ([]*comput...
  method ListBetaRegionForwardingRules (line 138) | func (g *Cloud) ListBetaRegionForwardingRules(region string) ([]*compute...
  method CreateRegionForwardingRule (line 149) | func (g *Cloud) CreateRegionForwardingRule(rule *compute.ForwardingRule,...
  method CreateAlphaRegionForwardingRule (line 159) | func (g *Cloud) CreateAlphaRegionForwardingRule(rule *computealpha.Forwa...
  method CreateBetaRegionForwardingRule (line 169) | func (g *Cloud) CreateBetaRegionForwardingRule(rule *computebeta.Forward...
  method DeleteRegionForwardingRule (line 178) | func (g *Cloud) DeleteRegionForwardingRule(name, region string) error {
  method getNetworkTierFromForwardingRule (line 186) | func (g *Cloud) getNetworkTierFromForwardingRule(name, region string) (s...

FILE: providers/gce/gce_healthchecks.go
  constant nodesHealthCheckPath (line 33) | nodesHealthCheckPath = "/healthz"
  constant lbNodesHealthCheckPort (line 38) | lbNodesHealthCheckPort = 10256
  function newHealthcheckMetricContext (line 41) | func newHealthcheckMetricContext(request string) *metricContext {
  function newHealthcheckMetricContextWithVersion (line 45) | func newHealthcheckMetricContextWithVersion(request, version string) *me...
  method GetHTTPHealthCheck (line 50) | func (g *Cloud) GetHTTPHealthCheck(name string) (*compute.HttpHealthChec...
  method UpdateHTTPHealthCheck (line 60) | func (g *Cloud) UpdateHTTPHealthCheck(hc *compute.HttpHealthCheck) error {
  method DeleteHTTPHealthCheck (line 69) | func (g *Cloud) DeleteHTTPHealthCheck(name string) error {
  method CreateHTTPHealthCheck (line 78) | func (g *Cloud) CreateHTTPHealthCheck(hc *compute.HttpHealthCheck) error {
  method ListHTTPHealthChecks (line 87) | func (g *Cloud) ListHTTPHealthChecks() ([]*compute.HttpHealthCheck, erro...
  method GetHTTPSHealthCheck (line 99) | func (g *Cloud) GetHTTPSHealthCheck(name string) (*compute.HttpsHealthCh...
  method UpdateHTTPSHealthCheck (line 109) | func (g *Cloud) UpdateHTTPSHealthCheck(hc *compute.HttpsHealthCheck) err...
  method DeleteHTTPSHealthCheck (line 118) | func (g *Cloud) DeleteHTTPSHealthCheck(name string) error {
  method CreateHTTPSHealthCheck (line 127) | func (g *Cloud) CreateHTTPSHealthCheck(hc *compute.HttpsHealthCheck) err...
  method ListHTTPSHealthChecks (line 136) | func (g *Cloud) ListHTTPSHealthChecks() ([]*compute.HttpsHealthCheck, er...
  method GetHealthCheck (line 148) | func (g *Cloud) GetHealthCheck(name string) (*compute.HealthCheck, error) {
  method GetAlphaHealthCheck (line 158) | func (g *Cloud) GetAlphaHealthCheck(name string) (*computealpha.HealthCh...
  method GetBetaHealthCheck (line 168) | func (g *Cloud) GetBetaHealthCheck(name string) (*computebeta.HealthChec...
  method UpdateHealthCheck (line 178) | func (g *Cloud) UpdateHealthCheck(hc *compute.HealthCheck) error {
  method UpdateAlphaHealthCheck (line 187) | func (g *Cloud) UpdateAlphaHealthCheck(hc *computealpha.HealthCheck) err...
  method UpdateBetaHealthCheck (line 196) | func (g *Cloud) UpdateBetaHealthCheck(hc *computebeta.HealthCheck) error {
  method DeleteHealthCheck (line 205) | func (g *Cloud) DeleteHealthCheck(name string) error {
  method CreateHealthCheck (line 214) | func (g *Cloud) CreateHealthCheck(hc *compute.HealthCheck) error {
  method CreateAlphaHealthCheck (line 223) | func (g *Cloud) CreateAlphaHealthCheck(hc *computealpha.HealthCheck) err...
  method CreateBetaHealthCheck (line 232) | func (g *Cloud) CreateBetaHealthCheck(hc *computebeta.HealthCheck) error {
  method ListHealthChecks (line 241) | func (g *Cloud) ListHealthChecks() ([]*compute.HealthCheck, error) {
  function GetNodesHealthCheckPort (line 252) | func GetNodesHealthCheckPort() int32 {
  function GetNodesHealthCheckPath (line 258) | func GetNodesHealthCheckPath() string {

FILE: providers/gce/gce_instancegroup.go
  function newInstanceGroupMetricContext (line 30) | func newInstanceGroupMetricContext(request string, zone string) *metricC...
  method CreateInstanceGroup (line 36) | func (g *Cloud) CreateInstanceGroup(ig *compute.InstanceGroup, zone stri...
  method DeleteInstanceGroup (line 45) | func (g *Cloud) DeleteInstanceGroup(name string, zone string) error {
  method FilterInstanceGroupsByNamePrefix (line 55) | func (g *Cloud) FilterInstanceGroupsByNamePrefix(namePrefix, zone string...
  method ListInstanceGroups (line 65) | func (g *Cloud) ListInstanceGroups(zone string) ([]*compute.InstanceGrou...
  method ListInstancesInInstanceGroup (line 76) | func (g *Cloud) ListInstancesInInstanceGroup(name string, zone string, s...
  method AddInstancesToInstanceGroup (line 88) | func (g *Cloud) AddInstancesToInstanceGroup(name string, zone string, in...
  method RemoveInstancesFromInstanceGroup (line 105) | func (g *Cloud) RemoveInstancesFromInstanceGroup(name string, zone strin...
  method SetNamedPortsOfInstanceGroup (line 121) | func (g *Cloud) SetNamedPortsOfInstanceGroup(igName, zone string, namedP...
  method GetInstanceGroup (line 131) | func (g *Cloud) GetInstanceGroup(name string, zone string) (*compute.Ins...

FILE: providers/gce/gce_instances.go
  constant emptyZone (line 47) | emptyZone                     = ""
  constant networkInterfaceIP (line 48) | networkInterfaceIP            = "instance/network-interfaces/%s/ip"
  constant networkInterfaceIPV6 (line 49) | networkInterfaceIPV6          = "instance/network-interfaces/%s/ipv6s"
  constant networkInterfaceAccessConfigs (line 50) | networkInterfaceAccessConfigs = "instance/network-interfaces/%s/access-c...
  constant networkInterfaceExternalIP (line 51) | networkInterfaceExternalIP    = "instance/network-interfaces/%s/access-c...
  function newInstancesMetricContext (line 54) | func newInstancesMetricContext(request, zone string) *metricContext {
  function splitNodesByZone (line 58) | func splitNodesByZone(nodes []*v1.Node) map[string][]*v1.Node {
  function getZone (line 69) | func getZone(node *v1.Node) string {
  function makeHostURL (line 82) | func makeHostURL(projectsAPIEndpoint, projectID, zone, host string) stri...
  method ToInstanceReferences (line 88) | func (g *Cloud) ToInstanceReferences(zone string, instanceNames []string...
  method orderAddresses (line 99) | func (g *Cloud) orderAddresses(addresses []v1.NodeAddress) []v1.NodeAddr...
  method NodeAddresses (line 125) | func (g *Cloud) NodeAddresses(ctx context.Context, nodeName types.NodeNa...
  method NodeAddressesByProviderID (line 235) | func (g *Cloud) NodeAddressesByProviderID(ctx context.Context, providerI...
  method instanceByProviderID (line 260) | func (g *Cloud) instanceByProviderID(providerID string) (*gceInstance, e...
  method InstanceShutdownByProviderID (line 278) | func (g *Cloud) InstanceShutdownByProviderID(ctx context.Context, provid...
  method InstanceShutdown (line 283) | func (g *Cloud) InstanceShutdown(ctx context.Context, node *v1.Node) (bo...
  method nodeAddressesFromInstance (line 287) | func (g *Cloud) nodeAddressesFromInstance(instance *compute.Instance) ([...
  function getIPV6AddressFromInterface (line 308) | func getIPV6AddressFromInterface(nic *compute.NetworkInterface) string {
  method InstanceTypeByProviderID (line 322) | func (g *Cloud) InstanceTypeByProviderID(ctx context.Context, providerID...
  method InstanceExistsByProviderID (line 333) | func (g *Cloud) InstanceExistsByProviderID(ctx context.Context, provider...
  method InstanceExists (line 347) | func (g *Cloud) InstanceExists(ctx context.Context, node *v1.Node) (bool...
  method InstanceMetadata (line 362) | func (g *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*c...
  method InstanceID (line 413) | func (g *Cloud) InstanceID(ctx context.Context, nodeName types.NodeName)...
  method InstanceType (line 432) | func (g *Cloud) InstanceType(ctx context.Context, nodeName types.NodeNam...
  method AddSSHKeyToAllInstances (line 452) | func (g *Cloud) AddSSHKeyToAllInstances(ctx context.Context, user string...
  method GetAllCurrentZones (line 501) | func (g *Cloud) GetAllCurrentZones() (sets.String, error) {
  method GetAllZonesFromCloudProvider (line 527) | func (g *Cloud) GetAllZonesFromCloudProvider() (sets.String, error) {
  method InsertInstance (line 545) | func (g *Cloud) InsertInstance(project string, zone string, i *compute.I...
  method ListInstanceNames (line 556) | func (g *Cloud) ListInstanceNames(project, zone string) (string, error) {
  method DeleteInstance (line 572) | func (g *Cloud) DeleteInstance(project, zone, name string) error {
  method CurrentNodeName (line 581) | func (g *Cloud) CurrentNodeName(ctx context.Context, hostname string) (t...
  method AliasRangesByProviderID (line 588) | func (g *Cloud) AliasRangesByProviderID(providerID string) (cidrs []stri...
  method GetIPV6Address (line 620) | func (g *Cloud) GetIPV6Address(networkInterface *compute.NetworkInterfac...
  method AddAliasToInstanceByProviderID (line 637) | func (g *Cloud) AddAliasToInstanceByProviderID(providerID string, alias ...
  method getInstancesByNames (line 684) | func (g *Cloud) getInstancesByNames(names []string) ([]*gceInstance, err...
  method getFoundInstanceByNames (line 701) | func (g *Cloud) getFoundInstanceByNames(names []string) ([]*gceInstance,...
  method getInstanceByName (line 765) | func (g *Cloud) getInstanceByName(name string) (*gceInstance, error) {
  method getInstanceFromProjectInZoneByName (line 784) | func (g *Cloud) getInstanceFromProjectInZoneByName(project, zone, name s...
  function getInstanceIDViaMetadata (line 810) | func getInstanceIDViaMetadata() (string, error) {
  function getCurrentMachineTypeViaMetadata (line 822) | func getCurrentMachineTypeViaMetadata() (string, error) {
  method isCurrentInstance (line 837) | func (g *Cloud) isCurrentInstance(instanceID string) bool {
  method computeHostTags (line 854) | func (g *Cloud) computeHostTags(hosts []*gceInstance) ([]string, error) {
  method GetNodeTags (line 912) | func (g *Cloud) GetNodeTags(nodeNames []string) ([]string, error) {
  method InstanceByProviderID (line 946) | func (g *Cloud) InstanceByProviderID(providerID string) (res *compute.In...

FILE: providers/gce/gce_instances_test.go
  function TestInstanceExists (line 39) | func TestInstanceExists(t *testing.T) {
  function TestNodeAddresses (line 77) | func TestNodeAddresses(t *testing.T) {
  function TestAliasRangesByProviderID (line 321) | func TestAliasRangesByProviderID(t *testing.T) {
  function TestInstanceByProviderID (line 449) | func TestInstanceByProviderID(t *testing.T) {
  function TestGetZone (line 526) | func TestGetZone(t *testing.T) {
  function TestProjectFromNodeProviderID (line 574) | func TestProjectFromNodeProviderID(t *testing.T) {

FILE: providers/gce/gce_interfaces.go
  type CloudAddressService (line 30) | type CloudAddressService interface
  type CloudForwardingRuleService (line 47) | type CloudForwardingRuleService interface

FILE: providers/gce/gce_loadbalancer.go
  type cidrs (line 44) | type cidrs struct
    method String (line 89) | func (c *cidrs) String() string {
    method Set (line 96) | func (c *cidrs) Set(value string) error {
  type lbSyncResult (line 49) | type lbSyncResult struct
  function newLBSyncResult (line 54) | func newLBSyncResult() *lbSyncResult {
  function init (line 71) | func init() {
  function L4LoadBalancerSrcRanges (line 118) | func L4LoadBalancerSrcRanges() []string {
  function L7LoadBalancerSrcRanges (line 124) | func L7LoadBalancerSrcRanges() []string {
  method GetLoadBalancer (line 129) | func (g *Cloud) GetLoadBalancer(ctx context.Context, clusterName string,...
  method GetLoadBalancerName (line 147) | func (g *Cloud) GetLoadBalancerName(ctx context.Context, clusterName str...
  method EnsureLoadBalancer (line 153) | func (g *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName stri...
  method updateL4ResourcesAnnotations (line 251) | func (g *Cloud) updateL4ResourcesAnnotations(ctx context.Context, svc *v...
  function servicePatchBytes (line 269) | func servicePatchBytes(oldSvc, newSvc *v1.Service) ([]byte, error) {
  method UpdateLoadBalancer (line 289) | func (g *Cloud) UpdateLoadBalancer(ctx context.Context, clusterName stri...
  method EnsureLoadBalancerDeleted (line 338) | func (g *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterNa...
  function getSvcScheme (line 366) | func getSvcScheme(svc *v1.Service) cloud.LbScheme {
  function checkMixedProtocol (line 375) | func checkMixedProtocol(ports []v1.ServicePort) error {
  function hasLoadBalancerPortsError (line 390) | func hasLoadBalancerPortsError(service *v1.Service) bool {
  function computeNewAnnotationsIfNeeded (line 406) | func computeNewAnnotationsIfNeeded(svc *v1.Service, newAnnotations map[s...

FILE: providers/gce/gce_loadbalancer_external.go
  constant errStrLbNoHosts (line 45) | errStrLbNoHosts         = "cannot EnsureLoadBalancer() with no hosts"
  constant maxNodeNamesToLog (line 46) | maxNodeNamesToLog       = 50
  constant firewallPriorityDefault (line 47) | firewallPriorityDefault = 1000
  constant firewallPriorityDeny (line 48) | firewallPriorityDeny    = firewallPriorityDefault
  constant firewallPriorityAllow (line 49) | firewallPriorityAllow   = firewallPriorityDefault - 1
  method ensureExternalLoadBalancer (line 60) | func (g *Cloud) ensureExternalLoadBalancer(clusterName string, clusterID...
  method updateExternalLoadBalancer (line 317) | func (g *Cloud) updateExternalLoadBalancer(clusterName string, service *...
  method ensureExternalLoadBalancerDeleted (line 340) | func (g *Cloud) ensureExternalLoadBalancerDeleted(clusterName, clusterID...
  method DeleteExternalTargetPoolAndChecks (line 434) | func (g *Cloud) DeleteExternalTargetPoolAndChecks(service *v1.Service, n...
  function verifyUserRequestedIP (line 501) | func verifyUserRequestedIP(s CloudAddressService, region, requestedIP, f...
  method ensureTargetPoolAndHealthCheck (line 546) | func (g *Cloud) ensureTargetPoolAndHealthCheck(tpExists, tpNeedsRecreati...
  method createTargetPoolAndHealthCheck (line 612) | func (g *Cloud) createTargetPoolAndHealthCheck(svc *v1.Service, name, se...
  method updateTargetPool (line 656) | func (g *Cloud) updateTargetPool(loadBalancerName string, hosts []*gceIn...
  method targetPoolURL (line 722) | func (g *Cloud) targetPoolURL(name string) string {
  function makeHTTPHealthCheck (line 726) | func makeHTTPHealthCheck(name, path string, port int32) *compute.HttpHea...
  function mergeHTTPHealthChecks (line 746) | func mergeHTTPHealthChecks(hc, newHC *compute.HttpHealthCheck) {
  function needToUpdateHTTPHealthChecks (line 763) | func needToUpdateHTTPHealthChecks(hc, newHC *compute.HttpHealthCheck) bo...
  method ensureHTTPHealthCheck (line 778) | func (g *Cloud) ensureHTTPHealthCheck(name, path string, port int32) (hc...
  method forwardingRuleNeedsUpdate (line 816) | func (g *Cloud) forwardingRuleNeedsUpdate(name, region string, loadBalan...
  method targetPoolNeedsRecreation (line 862) | func (g *Cloud) targetPoolNeedsRecreation(name, region string, affinityT...
  method makeComparableHostPath (line 887) | func (h *gceInstance) makeComparableHostPath() string {
  function nodeNames (line 891) | func nodeNames(nodes []*v1.Node) []string {
  function loggableNodeNames (line 899) | func loggableNodeNames(nodes []*v1.Node) []string {
  function hostURLToComparablePath (line 906) | func hostURLToComparablePath(hostURL string) string {
  function getProtocol (line 914) | func getProtocol(svcPorts []v1.ServicePort) (v1.Protocol, error) {
  function minMaxPort (line 926) | func minMaxPort[T v1.ServicePort | string](svcPorts []T) (int32, int32) {
  function loadBalancerPortRange (line 951) | func loadBalancerPortRange[T v1.ServicePort | string](svcPorts []T) (str...
  function translateAffinityType (line 961) | func translateAffinityType(affinityType v1.ServiceAffinity) string {
  method firewallNeedsUpdate (line 973) | func (g *Cloud) firewallNeedsUpdate(name, serviceName, ipAddress string,...
  method ensureHTTPHealthCheckFirewall (line 1022) | func (g *Cloud) ensureHTTPHealthCheckFirewall(svc *v1.Service, serviceNa...
  function createForwardingRule (line 1065) | func createForwardingRule(s CloudForwardingRuleService, name, serviceNam...
  method createFirewall (line 1095) | func (g *Cloud) createFirewall(svc *v1.Service, name, desc, destinationI...
  method updateFirewall (line 1113) | func (g *Cloud) updateFirewall(svc *v1.Service, name, desc, destinationI...
  method firewallObject (line 1132) | func (g *Cloud) firewallObject(name, desc, destinationIP string, sourceR...
  method ensureAllowNodeFirewall (line 1174) | func (g *Cloud) ensureAllowNodeFirewall(apiService *v1.Service, loadBala...
  method ensureDenyNodeFirewall (line 1217) | func (g *Cloud) ensureDenyNodeFirewall(apiService *v1.Service, loadBalan...
  method ensureFirewallDeleted (line 1284) | func (g *Cloud) ensureFirewallDeleted(fwName string) error {
  function firewallsEqual (line 1306) | func firewallsEqual(a, b *compute.Firewall) (bool, error) {
  function firewallEffectsEqual (line 1321) | func firewallEffectsEqual[T compute.FirewallAllowed | compute.FirewallDe...
  type protocol (line 1335) | type protocol
  function portsPerProtocol (line 1337) | func portsPerProtocol[T compute.FirewallAllowed | compute.FirewallDenied...
  function parsePort (line 1376) | func parsePort(portStr string) (int, int, error) {
  function ipRangesEqual (line 1399) | func ipRangesEqual(a, b []string) (bool, error) {
  function ensureStaticIP (line 1411) | func ensureStaticIP(s CloudAddressService, name, serviceName, region, ex...
  method getServiceNetworkTier (line 1459) | func (g *Cloud) getServiceNetworkTier(svc *v1.Service) (cloud.NetworkTie...
  method deleteWrongNetworkTieredResources (line 1468) | func (g *Cloud) deleteWrongNetworkTieredResources(lbName, lbRef string, ...
  function deleteFWDRuleWithWrongTier (line 1481) | func deleteFWDRuleWithWrongTier(s CloudForwardingRuleService, region, na...
  function deleteAddressWithWrongTier (line 1500) | func deleteAddressWithWrongTier(s CloudAddressService, region, name, log...

FILE: providers/gce/gce_loadbalancer_external_deny_test.go
  constant fakeDenyFirewallName (line 40) | fakeDenyFirewallName        = "k8s-fw-a-deny"
  constant fakeNodeFirewallName (line 41) | fakeNodeFirewallName        = "k8s-fw-a"
  constant fakeHealthCheckFirewallName (line 42) | fakeHealthCheckFirewallName = "k8s-test-cluster-id-node-http-hc"
  type firewallTracker (line 48) | type firewallTracker struct
    method patch (line 64) | func (f *firewallTracker) patch(fw *compute.Firewall) error {
    method delete (line 104) | func (f *firewallTracker) delete(name string) {
    method hookTo (line 119) | func (f *firewallTracker) hookTo(mockGCE *cloud.MockGCE) {
  type ipPrefix (line 57) | type ipPrefix
  type resourceName (line 58) | type resourceName
  type firewallMap (line 59) | type firewallMap
  function areBlocked (line 146) | func areBlocked(fw1, fw2 *compute.Firewall) bool {
  function TestDenyFirewall (line 164) | func TestDenyFirewall(t *testing.T) {
  function TestDenyRollforwardDoesNotBlockTraffic (line 244) | func TestDenyRollforwardDoesNotBlockTraffic(t *testing.T) {
  function TestDenyRollback (line 358) | func TestDenyRollback(t *testing.T) {
  function TestDenyIsNotCreatedWhenPriorityUpdateFails (line 429) | func TestDenyIsNotCreatedWhenPriorityUpdateFails(t *testing.T) {
  function TestContinueOnXPN403s (line 509) | func TestContinueOnXPN403s(t *testing.T) {

FILE: providers/gce/gce_loadbalancer_external_test.go
  constant eventMsgFirewallChange (line 48) | eventMsgFirewallChange = "Firewall change required by security admin"
  function TestEnsureStaticIP (line 51) | func TestEnsureStaticIP(t *testing.T) {
  function TestEnsureStaticIPWithTier (line 81) | func TestEnsureStaticIPWithTier(t *testing.T) {
  function TestVerifyRequestedIP (line 119) | func TestVerifyRequestedIP(t *testing.T) {
  function TestMinMaxPortRange (line 176) | func TestMinMaxPortRange(t *testing.T) {
  function TestCreateForwardingRuleWithTier (line 244) | func TestCreateForwardingRuleWithTier(t *testing.T) {
  function TestCreateForwardingRulePorts (line 303) | func TestCreateForwardingRulePorts(t *testing.T) {
  function TestDeleteAddressWithWrongTier (line 385) | func TestDeleteAddressWithWrongTier(t *testing.T) {
  function createExternalLoadBalancer (line 444) | func createExternalLoadBalancer(gce *Cloud, svc *v1.Service, nodeNames [...
  function assertSyncResultAnnotations (line 460) | func assertSyncResultAnnotations(t *testing.T, gce *Cloud, svc *v1.Servi...
  function TestShouldNotRecreateLBWhenNetworkTiersMismatch (line 465) | func TestShouldNotRecreateLBWhenNetworkTiersMismatch(t *testing.T) {
  function TestEnsureExternalLoadBalancer (line 548) | func TestEnsureExternalLoadBalancer(t *testing.T) {
  function TestUpdateExternalLoadBalancer (line 575) | func TestUpdateExternalLoadBalancer(t *testing.T) {
  function TestEnsureExternalLoadBalancerDeleted (line 658) | func TestEnsureExternalLoadBalancerDeleted(t *testing.T) {
  function TestLoadBalancerWrongTierResourceDeletion (line 689) | func TestLoadBalancerWrongTierResourceDeletion(t *testing.T) {
  function TestEnsureExternalLoadBalancerFailsIfInvalidNetworkTier (line 745) | func TestEnsureExternalLoadBalancerFailsIfInvalidNetworkTier(t *testing....
  function TestEnsureExternalLoadBalancerFailsWithNoNodes (line 767) | func TestEnsureExternalLoadBalancerFailsWithNoNodes(t *testing.T) {
  function TestEnsureExternalLoadBalancerRBSAnnotation (line 784) | func TestEnsureExternalLoadBalancerRBSAnnotation(t *testing.T) {
  function TestEnsureExternalLoadBalancerRBSFinalizer (line 870) | func TestEnsureExternalLoadBalancerRBSFinalizer(t *testing.T) {
  function TestDeleteExternalLoadBalancerWithFinalizer (line 980) | func TestDeleteExternalLoadBalancerWithFinalizer(t *testing.T) {
  function TestEnsureExternalLoadBalancerExistingFwdRule (line 1044) | func TestEnsureExternalLoadBalancerExistingFwdRule(t *testing.T) {
  function TestForwardingRuleNeedsUpdate (line 1097) | func TestForwardingRuleNeedsUpdate(t *testing.T) {
  function TestCreateForwardingRuleNeedsUpdate (line 1186) | func TestCreateForwardingRuleNeedsUpdate(t *testing.T) {
  function TestTargetPoolAddsAndRemoveInstancesInBatches (line 1370) | func TestTargetPoolAddsAndRemoveInstancesInBatches(t *testing.T) {
  function TestTargetPoolNeedsRecreation (line 1420) | func TestTargetPoolNeedsRecreation(t *testing.T) {
  function TestFirewallNeedsUpdate (line 1473) | func TestFirewallNeedsUpdate(t *testing.T) {
  function TestDeleteWrongNetworkTieredResourcesSucceedsWhenNotFound (line 1737) | func TestDeleteWrongNetworkTieredResourcesSucceedsWhenNotFound(t *testin...
  function TestEnsureTargetPoolAndHealthCheck (line 1746) | func TestEnsureTargetPoolAndHealthCheck(t *testing.T) {
  function TestCreateAndUpdateFirewallSucceedsOnXPN (line 1823) | func TestCreateAndUpdateFirewallSucceedsOnXPN(t *testing.T) {
  function TestEnsureExternalLoadBalancerDeletedSucceedsOnXPN (line 1882) | func TestEnsureExternalLoadBalancerDeletedSucceedsOnXPN(t *testing.T) {
  type EnsureELBParams (line 1912) | type EnsureELBParams struct
  function newEnsureELBParams (line 1921) | func newEnsureELBParams(nodes []*v1.Node, svc *v1.Service) *EnsureELBPar...
  function TestEnsureExternalLoadBalancerErrors (line 1935) | func TestEnsureExternalLoadBalancerErrors(t *testing.T) {
  function TestExternalLoadBalancerEnsureHttpHealthCheck (line 2031) | func TestExternalLoadBalancerEnsureHttpHealthCheck(t *testing.T) {
  function TestMergeHttpHealthChecks (line 2099) | func TestMergeHttpHealthChecks(t *testing.T) {
  function TestNeedToUpdateHttpHealthChecks (line 2147) | func TestNeedToUpdateHttpHealthChecks(t *testing.T) {
  function TestFirewallObject (line 2180) | func TestFirewallObject(t *testing.T) {
  function copyFirewallObj (line 2307) | func copyFirewallObj(firewall *compute.Firewall) (*compute.Firewall, err...
  function TestEnsureExternalLoadBalancerClass (line 2321) | func TestEnsureExternalLoadBalancerClass(t *testing.T) {
  function TestFirewallsEqual (line 2448) | func TestFirewallsEqual(t *testing.T) {
  function TestEnsureExternalLoadBalancerMetrics (line 2646) | func TestEnsureExternalLoadBalancerMetrics(t *testing.T) {

FILE: providers/gce/gce_loadbalancer_internal.go
  constant allInstances (line 44) | allInstances = "ALL"
  constant ILBFinalizerV1 (line 46) | ILBFinalizerV1 = "gke.networking.io/l4-ilb-v1"
  constant ILBFinalizerV2 (line 48) | ILBFinalizerV2 = "gke.networking.io/l4-ilb-v2"
  constant maxInstancesPerInstanceGroup (line 50) | maxInstancesPerInstanceGroup = 1000
  constant maxL4ILBPorts (line 52) | maxL4ILBPorts = 5
  constant labelGKESubnetworkName (line 54) | labelGKESubnetworkName = "cloud.google.com/gke-node-pool-subnet"
  method ensureInternalLoadBalancer (line 58) | func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string...
  function removeNodesInNonDefaultNetworks (line 270) | func removeNodesInNonDefaultNetworks(nodes []*v1.Node, defaultSubnetName...
  function subnetNameFromURL (line 300) | func subnetNameFromURL(url string) (string, error) {
  function truncateList (line 312) | func truncateList[T any](l []T, max int) []T {
  method clearPreviousInternalResources (line 319) | func (g *Cloud) clearPreviousInternalResources(svc *v1.Service, loadBala...
  method updateInternalLoadBalancer (line 344) | func (g *Cloud) updateInternalLoadBalancer(clusterName, clusterID string...
  method ensureInternalLoadBalancerDeleted (line 375) | func (g *Cloud) ensureInternalLoadBalancerDeleted(clusterName, clusterID...
  method teardownInternalBackendService (line 459) | func (g *Cloud) teardownInternalBackendService(bsName string) error {
  method teardownInternalHealthCheckAndFirewall (line 475) | func (g *Cloud) teardownInternalHealthCheckAndFirewall(svc *v1.Service, ...
  method ensureInternalFirewall (line 503) | func (g *Cloud) ensureInternalFirewall(svc *v1.Service, fwName, fwDesc, ...
  method ensureInternalFirewalls (line 581) | func (g *Cloud) ensureInternalFirewalls(loadBalancerName, ipAddress, clu...
  method ensureInternalHealthCheck (line 601) | func (g *Cloud) ensureInternalHealthCheck(name string, svcName types.Nam...
  method ensureInternalInstanceGroup (line 640) | func (g *Cloud) ensureInternalInstanceGroup(name, zone string, nodes []*...
  method ensureInternalInstanceGroups (line 717) | func (g *Cloud) ensureInternalInstanceGroups(name string, nodes []*v1.No...
  method ensureInternalInstanceGroupsDeleted (line 767) | func (g *Cloud) ensureInternalInstanceGroupsDeleted(name string) error {
  method ensureInternalBackendService (line 786) | func (g *Cloud) ensureInternalBackendService(name, description string, a...
  method ensureInternalBackendServiceGroups (line 830) | func (g *Cloud) ensureInternalBackendServiceGroups(name string, igLinks ...
  function shareBackendService (line 853) | func shareBackendService(svc *v1.Service) bool {
  function backendsFromGroupLinks (line 857) | func backendsFromGroupLinks(igLinks []string) (backends []*compute.Backe...
  function newInternalLBHealthCheck (line 866) | func newInternalLBHealthCheck(name string, svcName types.NamespacedName,...
  function firewallRuleEqual (line 887) | func firewallRuleEqual(a, b *compute.Firewall) bool {
  function mergeHealthChecks (line 903) | func mergeHealthChecks(hc, newHC *compute.HealthCheck) {
  function needToUpdateHealthChecks (line 919) | func needToUpdateHealthChecks(hc, newHC *compute.HealthCheck) bool {
  function backendsListEqual (line 937) | func backendsListEqual(a, b []*compute.Backend) bool {
  function backendSvcEqual (line 957) | func backendSvcEqual(a, b *compute.BackendService) bool {
  function getPortsAndProtocol (line 966) | func getPortsAndProtocol(svcPorts []v1.ServicePort) (ports []string, por...
  function getPortRanges (line 982) | func getPortRanges(ports []int) (ranges []string) {
  method getBackendServiceLink (line 1024) | func (g *Cloud) getBackendServiceLink(name string) string {
  function getNameFromLink (line 1028) | func getNameFromLink(link string) string {
  function ilbIPToUse (line 1040) | func ilbIPToUse(svc *v1.Service, fwdRule *compute.ForwardingRule, reques...
  function getILBOptions (line 1054) | func getILBOptions(svc *v1.Service) ILBOptions {
  type forwardingRuleDescription (line 1060) | type forwardingRuleDescription struct
    method marshal (line 1066) | func (d *forwardingRuleDescription) marshal() (string, error) {
    method unmarshal (line 1075) | func (d *forwardingRuleDescription) unmarshal(desc string) error {
  function getFwdRuleAPIVersion (line 1079) | func getFwdRuleAPIVersion(rule *compute.ForwardingRule) (meta.Version, e...
  method ensureInternalForwardingRule (line 1093) | func (g *Cloud) ensureInternalForwardingRule(existingFwdRule, newFwdRule...
  function forwardingRulesEqual (line 1114) | func forwardingRulesEqual(old, new *compute.ForwardingRule) bool {

FILE: providers/gce/gce_loadbalancer_internal_test.go
  function assertILBSyncResultAnnotations (line 46) | func assertILBSyncResultAnnotations(t *testing.T, gce *Cloud, svc *v1.Se...
  function createInternalLoadBalancer (line 55) | func createInternalLoadBalancer(gce *Cloud, svc *v1.Service, existingFwd...
  function TestEnsureInternalBackendServiceUpdates (line 70) | func TestEnsureInternalBackendServiceUpdates(t *testing.T) {
  function TestEnsureInternalBackendServiceGroups (line 101) | func TestEnsureInternalBackendServiceGroups(t *testing.T) {
  function TestEnsureInternalInstanceGroupsLimit (line 162) | func TestEnsureInternalInstanceGroupsLimit(t *testing.T) {
  function TestEnsureMultipleInstanceGroups (line 184) | func TestEnsureMultipleInstanceGroups(t *testing.T) {
  function TestEnsureInstanceGroupFromDefaultNetworkMultiSubnetClusterMode (line 212) | func TestEnsureInstanceGroupFromDefaultNetworkMultiSubnetClusterMode(t *...
  function TestEnsureInstanceGroupFromDefaultNetworkMultiSubnetClusterModeIfSubnetworkValueIsInvalid (line 266) | func TestEnsureInstanceGroupFromDefaultNetworkMultiSubnetClusterModeIfSu...
  function hasInstanceForNode (line 303) | func hasInstanceForNode(instances []*compute.InstanceWithNamedPorts, nod...
  function TestRemoveNodesInNonDefaultNetworks (line 312) | func TestRemoveNodesInNonDefaultNetworks(t *testing.T) {
  function TestEnsureInternalLoadBalancer (line 383) | func TestEnsureInternalLoadBalancer(t *testing.T) {
  function TestEnsureInternalLoadBalancerDeprecatedAnnotation (line 404) | func TestEnsureInternalLoadBalancerDeprecatedAnnotation(t *testing.T) {
  function TestEnsureInternalLoadBalancerWithExistingResources (line 459) | func TestEnsureInternalLoadBalancerWithExistingResources(t *testing.T) {
  function TestEnsureInternalLoadBalancerClearPreviousResources (line 498) | func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
  function TestEnsureInternalLoadBalancerHealthCheckConfigurable (line 579) | func TestEnsureInternalLoadBalancerHealthCheckConfigurable(t *testing.T) {
  function TestUpdateInternalLoadBalancerBackendServices (line 610) | func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
  function TestUpdateInternalLoadBalancerNodes (line 669) | func TestUpdateInternalLoadBalancerNodes(t *testing.T) {
  function TestUpdateInternalLoadBalancerNodesWithEmptyZone (line 738) | func TestUpdateInternalLoadBalancerNodesWithEmptyZone(t *testing.T) {
  function TestEnsureInternalLoadBalancerDeleted (line 791) | func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
  function TestSkipInstanceGroupDeletion (line 811) | func TestSkipInstanceGroupDeletion(t *testing.T) {
  function TestEnsureInternalLoadBalancerDeletedTwiceDoesNotError (line 835) | func TestEnsureInternalLoadBalancerDeletedTwiceDoesNotError(t *testing.T) {
  function TestEnsureInternalLoadBalancerWithSpecialHealthCheck (line 857) | func TestEnsureInternalLoadBalancerWithSpecialHealthCheck(t *testing.T) {
  function TestClearPreviousInternalResources (line 883) | func TestClearPreviousInternalResources(t *testing.T) {
  function TestEnsureInternalFirewallDeletesLegacyFirewall (line 949) | func TestEnsureInternalFirewallDeletesLegacyFirewall(t *testing.T) {
  function TestEnsureInternalFirewallSucceedsOnXPN (line 1029) | func TestEnsureInternalFirewallSucceedsOnXPN(t *testing.T) {
  function TestEnsureLoadBalancerDeletedSucceedsOnXPN (line 1106) | func TestEnsureLoadBalancerDeletedSucceedsOnXPN(t *testing.T) {
  function TestEnsureInternalInstanceGroupsDeleted (line 1128) | func TestEnsureInternalInstanceGroupsDeleted(t *testing.T) {
  type EnsureILBParams (line 1169) | type EnsureILBParams struct
  function newEnsureILBParams (line 1178) | func newEnsureILBParams(nodes []*v1.Node) *EnsureILBParams {
  function TestEnsureInternalLoadBalancerErrors (line 1192) | func TestEnsureInternalLoadBalancerErrors(t *testing.T) {
  function TestMergeHealthChecks (line 1279) | func TestMergeHealthChecks(t *testing.T) {
  function TestCompareHealthChecks (line 1327) | func TestCompareHealthChecks(t *testing.T) {
  function TestEnsureInternalLoadBalancerSubsetting (line 1362) | func TestEnsureInternalLoadBalancerSubsetting(t *testing.T) {
  function TestEnsureInternalLoadBalancerDeletedSubsetting (line 1452) | func TestEnsureInternalLoadBalancerDeletedSubsetting(t *testing.T) {
  function TestEnsureInternalLoadBalancerUpdateSubsetting (line 1499) | func TestEnsureInternalLoadBalancerUpdateSubsetting(t *testing.T) {
  function TestEnsureInternalLoadBalancerGlobalAccess (line 1552) | func TestEnsureInternalLoadBalancerGlobalAccess(t *testing.T) {
  function TestEnsureInternalLoadBalancerDisableGlobalAccess (line 1610) | func TestEnsureInternalLoadBalancerDisableGlobalAccess(t *testing.T) {
  function TestGlobalAccessChangeScheme (line 1662) | func TestGlobalAccessChangeScheme(t *testing.T) {
  function TestUnmarshalEmptyAPIVersion (line 1735) | func TestUnmarshalEmptyAPIVersion(t *testing.T) {
  function TestForwardingRulesEqual (line 1763) | func TestForwardingRulesEqual(t *testing.T) {
  function TestEnsureInternalLoadBalancerCustomSubnet (line 1872) | func TestEnsureInternalLoadBalancerCustomSubnet(t *testing.T) {
  function TestGetPortRanges (line 1960) | func TestGetPortRanges(t *testing.T) {
  function TestEnsureInternalFirewallPortRanges (line 1985) | func TestEnsureInternalFirewallPortRanges(t *testing.T) {
  function TestEnsureInternalFirewallDestinations (line 2030) | func TestEnsureInternalFirewallDestinations(t *testing.T) {
  function TestEnsureInternalLoadBalancerFinalizer (line 2089) | func TestEnsureInternalLoadBalancerFinalizer(t *testing.T) {
  function TestEnsureLoadBalancerSkipped (line 2126) | func TestEnsureLoadBalancerSkipped(t *testing.T) {
  function TestEnsureLoadBalancerPartialDelete (line 2148) | func TestEnsureLoadBalancerPartialDelete(t *testing.T) {
  function TestEnsureInternalLoadBalancerModifyProtocol (line 2194) | func TestEnsureInternalLoadBalancerModifyProtocol(t *testing.T) {
  function TestEnsureInternalLoadBalancerAllPorts (line 2256) | func TestEnsureInternalLoadBalancerAllPorts(t *testing.T) {
  function TestSubnetNameFromURL (line 2340) | func TestSubnetNameFromURL(t *testing.T) {
  function TestEnsureInternalLoadBalancerClass (line 2385) | func TestEnsureInternalLoadBalancerClass(t *testing.T) {

FILE: providers/gce/gce_loadbalancer_metrics.go
  constant label (line 33) | label = "feature"
  function init (line 56) | func init() {
  type LoadBalancerMetrics (line 65) | type LoadBalancerMetrics struct
    method Run (line 126) | func (lm *LoadBalancerMetrics) Run(stopCh <-chan struct{}) {
    method SetL4ILBService (line 138) | func (lm *LoadBalancerMetrics) SetL4ILBService(svcKey string, state L4...
    method DeleteL4ILBService (line 149) | func (lm *LoadBalancerMetrics) DeleteL4ILBService(svcKey string) {
    method export (line 157) | func (lm *LoadBalancerMetrics) export() {
    method exportILBMetrics (line 162) | func (lm *LoadBalancerMetrics) exportILBMetrics() {
    method computeL4ILBMetrics (line 172) | func (lm *LoadBalancerMetrics) computeL4ILBMetrics() map[feature]int {
    method SetL4NetLBService (line 232) | func (lm *LoadBalancerMetrics) SetL4NetLBService(svcKey string, state ...
    method DeleteL4NetLBService (line 240) | func (lm *LoadBalancerMetrics) DeleteL4NetLBService(svcKey string) {
    method exportNetLBMetrics (line 248) | func (lm *LoadBalancerMetrics) exportNetLBMetrics() {
  type feature (line 73) | type feature
    method String (line 75) | func (f feature) String() string {
  constant l4ILBService (line 80) | l4ILBService      = feature("L4ILBService")
  constant l4ILBGlobalAccess (line 81) | l4ILBGlobalAccess = feature("L4ILBGlobalAccess")
  constant l4ILBCustomSubnet (line 82) | l4ILBCustomSubnet = feature("L4ILBCustomSubnet")
  constant l4ILBInSuccess (line 84) | l4ILBInSuccess = feature("L4ILBInSuccess")
  constant l4ILBInError (line 87) | l4ILBInError = feature("L4ILBInError")
  type L4ILBServiceState (line 92) | type L4ILBServiceState struct
  type loadbalancerMetricsCollector (line 103) | type loadbalancerMetricsCollector interface
  function newLoadBalancerMetrics (line 118) | func newLoadBalancerMetrics() loadbalancerMetricsCollector {
  type L4ServiceStatus (line 205) | type L4ServiceStatus
  constant StatusSuccess (line 209) | StatusSuccess         = L4ServiceStatus("Success")
  constant StatusUserError (line 210) | StatusUserError       = L4ServiceStatus("UserError")
  constant StatusError (line 211) | StatusError           = L4ServiceStatus("Error")
  constant StatusPersistentError (line 212) | StatusPersistentError = L4ServiceStatus("PersistentError")
  type DenyFirewallStatus (line 216) | type DenyFirewallStatus
  constant DenyFirewallStatusUnknown (line 220) | DenyFirewallStatusUnknown  = DenyFirewallStatus("UNKNOWN")
  constant DenyFirewallStatusNone (line 221) | DenyFirewallStatusNone     = DenyFirewallStatus("")
  constant DenyFirewallStatusDisabled (line 222) | DenyFirewallStatusDisabled = DenyFirewallStatus("DISABLED")
  constant DenyFirewallStatusIPv4 (line 223) | DenyFirewallStatusIPv4     = DenyFirewallStatus("IPv4")
  type L4NetLBServiceState (line 226) | type L4NetLBServiceState struct

FILE: providers/gce/gce_loadbalancer_metrics_test.go
  function TestComputeL4ILBMetrics (line 30) | func TestComputeL4ILBMetrics(t *testing.T) {
  function newL4ILBServiceState (line 165) | func newL4ILBServiceState(globalAccess, customSubnet, inSuccess bool) L4...
  function TestL4NetLBMetrics (line 173) | func TestL4NetLBMetrics(t *testing.T) {
  function verifyL4NetLBMetric (line 222) | func verifyL4NetLBMetric(t *testing.T, expectedCount int, status L4Servi...

FILE: providers/gce/gce_loadbalancer_naming.go
  function makeInstanceGroupName (line 36) | func makeInstanceGroupName(clusterID string) string {
  function makeBackendServiceName (line 45) | func makeBackendServiceName(loadBalancerName, clusterID string, shared b...
  function makeHealthCheckName (line 68) | func makeHealthCheckName(loadBalancerName, clusterID string, shared bool...
  function makeHealthCheckFirewallNameFromHC (line 76) | func makeHealthCheckFirewallNameFromHC(healthCheckName string) string {
  function makeHealthCheckFirewallName (line 80) | func makeHealthCheckFirewallName(loadBalancerName, clusterID string, sha...
  function makeBackendServiceDescription (line 87) | func makeBackendServiceDescription(nm types.NamespacedName, shared bool)...
  function makeServiceDescription (line 97) | func makeServiceDescription(serviceName string) string {
  function MakeNodesHealthCheckName (line 103) | func MakeNodesHealthCheckName(clusterID string) string {
  function makeHealthCheckDescription (line 107) | func makeHealthCheckDescription(serviceName string) string {
  function MakeHealthCheckFirewallName (line 113) | func MakeHealthCheckFirewallName(clusterID, hcName string, isNodesHealth...
  function MakeFirewallName (line 122) | func MakeFirewallName(name string) string {
  function MakeFirewallDenyName (line 129) | func MakeFirewallDenyName(name string) string {
  function makeFirewallDescription (line 133) | func makeFirewallDescription(serviceName, ipAddress string) string {

FILE: providers/gce/gce_loadbalancer_naming_test.go
  function TestLoadBalancerNames (line 34) | func TestLoadBalancerNames(t *testing.T) {

FILE: providers/gce/gce_loadbalancer_test.go
  function TestEnsureLoadBalancerError (line 38) | func TestEnsureLoadBalancerError(t *testing.T) {
  function TestGetLoadBalancer (line 65) | func TestGetLoadBalancer(t *testing.T) {
  function TestEnsureLoadBalancerCreatesExternalLb (line 115) | func TestEnsureLoadBalancerCreatesExternalLb(t *testing.T) {
  function TestEnsureLoadBalancerCreatesInternalLb (line 137) | func TestEnsureLoadBalancerCreatesInternalLb(t *testing.T) {
  function TestEnsureLoadBalancerDeletesExistingInternalLb (line 157) | func TestEnsureLoadBalancerDeletesExistingInternalLb(t *testing.T) {
  function TestEnsureLoadBalancerDeletesExistingExternalLb (line 183) | func TestEnsureLoadBalancerDeletesExistingExternalLb(t *testing.T) {
  function TestEnsureLoadBalancerDeletedDeletesExternalLb (line 214) | func TestEnsureLoadBalancerDeletedDeletesExternalLb(t *testing.T) {
  function TestEnsureLoadBalancerDeletedDeletesInternalLb (line 240) | func TestEnsureLoadBalancerDeletedDeletesInternalLb(t *testing.T) {
  function TestProjectsBasePath (line 261) | func TestProjectsBasePath(t *testing.T) {
  function TestEnsureLoadBalancerMixedProtocols (line 275) | func TestEnsureLoadBalancerMixedProtocols(t *testing.T) {
  function TestUpdateLoadBalancerMixedProtocols (line 309) | func TestUpdateLoadBalancerMixedProtocols(t *testing.T) {
  function TestCheckMixedProtocol (line 346) | func TestCheckMixedProtocol(t *testing.T) {
  function Test_hasLoadBalancerPortsError (line 439) | func Test_hasLoadBalancerPortsError(t *testing.T) {
  function TestEnsureLoadBalancerServiceWithLoadBalancerClass (line 528) | func TestEnsureLoadBalancerServiceWithLoadBalancerClass(t *testing.T) {
  function TestUpdateLoadBalancerWithLoadBalancerClass (line 587) | func TestUpdateLoadBalancerWithLoadBalancerClass(t *testing.T) {

FILE: providers/gce/gce_loadbalancer_utils_test.go
  constant eventReasonManualChange (line 46) | eventReasonManualChange = "LoadBalancerManualChange"
  constant errPrefixGetTargetPool (line 47) | errPrefixGetTargetPool  = "error getting load balancer's target pool:"
  constant wrongTier (line 48) | wrongTier               = "SupremeLuxury"
  constant errStrUnsupportedTier (line 49) | errStrUnsupportedTier   = "unsupported network tier: \"" + wrongTier + "\""
  constant fakeSvcName (line 50) | fakeSvcName             = "fakesvc"
  function fakeLoadbalancerService (line 53) | func fakeLoadbalancerService(lbType string) *v1.Service {
  function fakeLoadBalancerServiceDeprecatedAnnotation (line 57) | func fakeLoadBalancerServiceDeprecatedAnnotation(lbType string) *v1.Serv...
  function fakeLoadbalancerServiceWithLoadBalancerClass (line 61) | func fakeLoadbalancerServiceWithLoadBalancerClass(lbType, lbClass string...
  function fakeLoadbalancerServiceHelper (line 75) | func fakeLoadbalancerServiceHelper(lbType string, annotationKey string) ...
  function createAndInsertNodes (line 93) | func createAndInsertNodes(gce *Cloud, nodeNames []string, zoneName strin...
  function assertExternalLbResources (line 143) | func assertExternalLbResources(t *testing.T, gce *Cloud, apiService *v1....
  function assertExternalLbResourcesDeleted (line 180) | func assertExternalLbResourcesDeleted(t *testing.T, gce *Cloud, apiServi...
  function assertInternalLbResources (line 220) | func assertInternalLbResources(t *testing.T, gce *Cloud, apiService *v1....
  function assertInternalLbResourcesDeleted (line 278) | func assertInternalLbResourcesDeleted(t *testing.T, gce *Cloud, apiServi...
  function checkEvent (line 321) | func checkEvent(t *testing.T, recorder *record.FakeRecorder, expected st...

FILE: providers/gce/gce_networkendpointgroup.go
  function newNetworkEndpointGroupMetricContext (line 33) | func newNetworkEndpointGroupMetricContext(request string, zone string) *...
  method GetNetworkEndpointGroup (line 38) | func (g *Cloud) GetNetworkEndpointGroup(name string, zone string) (*comp...
  method ListNetworkEndpointGroup (line 48) | func (g *Cloud) ListNetworkEndpointGroup(zone string) ([]*computebeta.Ne...
  method AggregatedListNetworkEndpointGroup (line 58) | func (g *Cloud) AggregatedListNetworkEndpointGroup() (map[string][]*comp...
  method CreateNetworkEndpointGroup (line 82) | func (g *Cloud) CreateNetworkEndpointGroup(neg *computebeta.NetworkEndpo...
  method DeleteNetworkEndpointGroup (line 91) | func (g *Cloud) DeleteNetworkEndpointGroup(name string, zone string) err...
  method AttachNetworkEndpoints (line 100) | func (g *Cloud) AttachNetworkEndpoints(name, zone string, endpoints []*c...
  method DetachNetworkEndpoints (line 112) | func (g *Cloud) DetachNetworkEndpoints(name, zone string, endpoints []*c...
  method ListNetworkEndpoints (line 124) | func (g *Cloud) ListNetworkEndpoints(name, zone string, showHealthStatus...

FILE: providers/gce/gce_networks.go
  function newNetworkMetricContext (line 26) | func newNetworkMetricContext(request string) *metricContext {
  method GetNetwork (line 31) | func (g *Cloud) GetNetwork(networkName string) (*compute.Network, error) {

FILE: providers/gce/gce_routes.go
  function newRoutesMetricContext (line 38) | func newRoutesMetricContext(request string) *metricContext {
  method ListRoutes (line 43) | func (g *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*...
  method CreateRoute (line 69) | func (g *Cloud) CreateRoute(ctx context.Context, clusterName string, nam...
  method DeleteRoute (line 97) | func (g *Cloud) DeleteRoute(ctx context.Context, clusterName string, rou...
  function truncateClusterName (line 105) | func truncateClusterName(clusterName string) string {

FILE: providers/gce/gce_securitypolicy.go
  function newSecurityPolicyMetricContextWithVersion (line 30) | func newSecurityPolicyMetricContextWithVersion(request, version string) ...
  method GetBetaSecurityPolicy (line 35) | func (g *Cloud) GetBetaSecurityPolicy(name string) (*computebeta.Securit...
  method ListBetaSecurityPolicy (line 45) | func (g *Cloud) ListBetaSecurityPolicy() ([]*computebeta.SecurityPolicy,...
  method CreateBetaSecurityPolicy (line 55) | func (g *Cloud) CreateBetaSecurityPolicy(sp *computebeta.SecurityPolicy)...
  method DeleteBetaSecurityPolicy (line 64) | func (g *Cloud) DeleteBetaSecurityPolicy(name string) error {
  method PatchBetaSecurityPolicy (line 74) | func (g *Cloud) PatchBetaSecurityPolicy(sp *computebeta.SecurityPolicy) ...
  method GetRuleForBetaSecurityPolicy (line 83) | func (g *Cloud) GetRuleForBetaSecurityPolicy(name string) (*computebeta....
  method AddRuletoBetaSecurityPolicy (line 94) | func (g *Cloud) AddRuletoBetaSecurityPolicy(name string, spr *computebet...
  method PatchRuleForBetaSecurityPolicy (line 104) | func (g *Cloud) PatchRuleForBetaSecurityPolicy(name string, spr *compute...
  method RemoveRuleFromBetaSecurityPolicy (line 113) | func (g *Cloud) RemoveRuleFromBetaSecurityPolicy(name string) error {

FILE: providers/gce/gce_subnetworks.go
  function newSubnetworkMetricContext (line 26) | func newSubnetworkMetricContext(request, region string) *metricContext {
  method GetSubnetwork (line 31) | func (g *Cloud) GetSubnetwork(region, subnetworkName string) (*compute.S...

FILE: providers/gce/gce_targetpool.go
  function newTargetPoolMetricContext (line 29) | func newTargetPoolMetricContext(request, region string) *metricContext {
  method GetTargetPool (line 34) | func (g *Cloud) GetTargetPool(name, region string) (*compute.TargetPool,...
  method CreateTargetPool (line 44) | func (g *Cloud) CreateTargetPool(tp *compute.TargetPool, region string) ...
  method DeleteTargetPool (line 53) | func (g *Cloud) DeleteTargetPool(name, region string) error {
  method AddInstancesToTargetPool (line 62) | func (g *Cloud) AddInstancesToTargetPool(name, region string, instanceRe...
  method RemoveInstancesFromTargetPool (line 74) | func (g *Cloud) RemoveInstancesFromTargetPool(name, region string, insta...

FILE: providers/gce/gce_targetproxy.go
  function newTargetProxyMetricContext (line 30) | func newTargetProxyMetricContext(request string) *metricContext {
  method GetTargetHTTPProxy (line 35) | func (g *Cloud) GetTargetHTTPProxy(name string) (*compute.TargetHttpProx...
  method CreateTargetHTTPProxy (line 45) | func (g *Cloud) CreateTargetHTTPProxy(proxy *compute.TargetHttpProxy) er...
  method SetURLMapForTargetHTTPProxy (line 54) | func (g *Cloud) SetURLMapForTargetHTTPProxy(proxy *compute.TargetHttpPro...
  method DeleteTargetHTTPProxy (line 64) | func (g *Cloud) DeleteTargetHTTPProxy(name string) error {
  method ListTargetHTTPProxies (line 73) | func (g *Cloud) ListTargetHTTPProxies() ([]*compute.TargetHttpProxy, err...
  method GetTargetHTTPSProxy (line 85) | func (g *Cloud) GetTargetHTTPSProxy(name string) (*compute.TargetHttpsPr...
  method CreateTargetHTTPSProxy (line 95) | func (g *Cloud) CreateTargetHTTPSProxy(proxy *compute.TargetHttpsProxy) ...
  method SetURLMapForTargetHTTPSProxy (line 104) | func (g *Cloud) SetURLMapForTargetHTTPSProxy(proxy *compute.TargetHttpsP...
  method SetSslCertificateForTargetHTTPSProxy (line 114) | func (g *Cloud) SetSslCertificateForTargetHTTPSProxy(proxy *compute.Targ...
  method DeleteTargetHTTPSProxy (line 126) | func (g *Cloud) DeleteTargetHTTPSProxy(name string) error {
  method ListTargetHTTPSProxies (line 135) | func (g *Cloud) ListTargetHTTPSProxies() ([]*compute.TargetHttpsProxy, e...

FILE: providers/gce/gce_test.go
  function TestReadConfigFile (line 33) | func TestReadConfigFile(t *testing.T) {
  function TestExtraKeyInConfig (line 72) | func TestExtraKeyInConfig(t *testing.T) {
  function TestGetRegion (line 88) | func TestGetRegion(t *testing.T) {
  function TestComparingHostURLs (line 114) | func TestComparingHostURLs(t *testing.T) {
  function TestSplitProviderID (line 180) | func TestSplitProviderID(t *testing.T) {
  function TestGetZoneByProviderID (line 270) | func TestGetZoneByProviderID(t *testing.T) {
  function TestGenerateCloudConfigs (line 325) | func TestGenerateCloudConfigs(t *testing.T) {
  function TestNewAlphaFeatureGate (line 499) | func TestNewAlphaFeatureGate(t *testing.T) {
  function TestGetRegionInURL (line 547) | func TestGetRegionInURL(t *testing.T) {
  function TestFindSubnetForRegion (line 564) | func TestFindSubnetForRegion(t *testing.T) {
  function TestLastComponent (line 591) | func TestLastComponent(t *testing.T) {
  function TestGetProjectsBasePath (line 607) | func TestGetProjectsBasePath(t *testing.T) {

FILE: providers/gce/gce_tpu.go
  function newTPUService (line 37) | func newTPUService() (*tpuService, error) {
  type tpuService (line 49) | type tpuService struct
  method CreateTPU (line 55) | func (g *Cloud) CreateTPU(ctx context.Context, name, zone string, node *...
  method DeleteTPU (line 88) | func (g *Cloud) DeleteTPU(ctx context.Context, name, zone string) error {
  method GetTPU (line 110) | func (g *Cloud) GetTPU(ctx context.Context, name, zone string) (*tpuapi....
  method ListTPUs (line 122) | func (g *Cloud) ListTPUs(ctx context.Context, zone string) ([]*tpuapi.No...
  method ListLocations (line 139) | func (g *Cloud) ListLocations(ctx context.Context) ([]*tpuapi.Location, ...
  method waitForTPUOp (line 156) | func (g *Cloud) waitForTPUOp(ctx context.Context, op *tpuapi.Operation) ...
  function newTPUMetricContext (line 193) | func newTPUMetricContext(request, zone string) *metricContext {
  function getErrorFromTPUOp (line 199) | func getErrorFromTPUOp(op *tpuapi.Operation) error {
  function getTPUProjectURL (line 209) | func getTPUProjectURL(project string) string {
  function getTPUParentName (line 213) | func getTPUParentName(project, zone string) string {
  function getTPUName (line 217) | func getTPUName(project, zone, name string) string {

FILE: providers/gce/gce_urlmap.go
  function newURLMapMetricContext (line 30) | func newURLMapMetricContext(request string) *metricContext {
  method GetURLMap (line 35) | func (g *Cloud) GetURLMap(name string) (*compute.UrlMap, error) {
  method CreateURLMap (line 45) | func (g *Cloud) CreateURLMap(urlMap *compute.UrlMap) error {
  method UpdateURLMap (line 54) | func (g *Cloud) UpdateURLMap(urlMap *compute.UrlMap) error {
  method DeleteURLMap (line 63) | func (g *Cloud) DeleteURLMap(name string) error {
  method ListURLMaps (line 72) | func (g *Cloud) ListURLMaps() ([]*compute.UrlMap, error) {

FILE: providers/gce/gce_util.go
  constant RegionalExternalLoadBalancerClass (line 53) | RegionalExternalLoadBalancerClass = "networking.gke.io/l4-regional-exter...
  constant NetLBFinalizerV1 (line 56) | NetLBFinalizerV1 = "gke.networking.io/l4-netlb-v1"
  constant NetLBFinalizerV2 (line 59) | NetLBFinalizerV2 = "gke.networking.io/l4-netlb-v2"
  constant NetLBFinalizerV3 (line 62) | NetLBFinalizerV3 = "gke.networking.io/l4-netlb-v3"
  function fakeGCECloud (line 65) | func fakeGCECloud(vals TestClusterValues) (*Cloud, error) {
  function registerTargetPoolAddInstanceHook (line 103) | func registerTargetPoolAddInstanceHook(gce *Cloud, callback func(*comput...
  function registerTargetPoolRemoveInstanceHook (line 117) | func registerTargetPoolRemoveInstanceHook(gce *Cloud, callback func(*com...
  type gceInstance (line 131) | type gceInstance struct
  function getProjectAndZone (line 148) | func getProjectAndZone() (string, string, error) {
  method raiseFirewallChangeNeededEvent (line 165) | func (g *Cloud) raiseFirewallChangeNeededEvent(svc *v1.Service, cmd stri...
  function FirewallToGCloudCreateCmd (line 173) | func FirewallToGCloudCreateCmd(fw *compute.Firewall, projectID string) s...
  function FirewallToGCloudUpdateCmd (line 179) | func FirewallToGCloudUpdateCmd(fw *compute.Firewall, projectID string) s...
  function FirewallToGCloudDeleteCmd (line 185) | func FirewallToGCloudDeleteCmd(fwName, projectID string) string {
  function firewallToGcloudArgs (line 189) | func firewallToGcloudArgs(fw *compute.Firewall, projectID string) string {
  function canonicalizeInstanceName (line 210) | func canonicalizeInstanceName(name string) string {
  function lastComponent (line 220) | func lastComponent(s string) string {
  function mapNodeNameToInstanceName (line 230) | func mapNodeNameToInstanceName(nodeName types.NodeName) string {
  function GetGCERegion (line 238) | func GetGCERegion(zone string) (string, error) {
  function isHTTPErrorCode (line 246) | func isHTTPErrorCode(err error, code int) bool {
  function isInUsedByError (line 251) | func isInUsedByError(err error) bool {
  function splitProviderID (line 262) | func splitProviderID(providerID string) (project, zone, instance string,...
  function equalStringSets (line 270) | func equalStringSets(x, y []string) bool {
  function isNotFound (line 279) | func isNotFound(err error) bool {
  function ignoreNotFound (line 283) | func ignoreNotFound(err error) error {
  function isNotFoundOrInUse (line 290) | func isNotFoundOrInUse(err error) bool {
  function isForbidden (line 294) | func isForbidden(err error) bool {
  function makeGoogleAPINotFoundError (line 298) | func makeGoogleAPINotFoundError(message string) error {
  function containsCIDR (line 303) | func containsCIDR(outer, inner *net.IPNet) bool {
  function firstIPInRange (line 308) | func firstIPInRange(ipNet *net.IPNet) net.IP {
  function lastIPInRange (line 313) | func lastIPInRange(cidr *net.IPNet) net.IP {
  function subnetsInCIDR (line 323) | func subnetsInCIDR(subnets []*compute.Subnetwork, cidr *net.IPNet) ([]*c...
  type netType (line 337) | type netType
  constant netTypeLegacy (line 340) | netTypeLegacy netType = "LEGACY"
  constant netTypeAuto (line 341) | netTypeAuto   netType = "AUTO"
  constant netTypeCustom (line 342) | netTypeCustom netType = "CUSTOM"
  function typeOfNetwork (line 345) | func typeOfNetwork(network *compute.Network) netType {
  function getLocationName (line 357) | func getLocationName(project, zoneOrRegion string) string {
  function addFinalizer (line 361) | func addFinalizer(service *v1.Service, kubeClient v1core.CoreV1Interface...
  function removeFinalizer (line 375) | func removeFinalizer(service *v1.Service, kubeClient v1core.CoreV1Interf...
  function hasFinalizer (line 389) | func hasFinalizer(service *v1.Service, key string) bool {
  function hasLoadBalancerClass (line 398) | func hasLoadBalancerClass(service *v1.Service, key string) bool {
  function removeString (line 409) | func removeString(slice []string, s string) []string {
  function shouldProcessNetLB (line 421) | func shouldProcessNetLB(service *v1.Service, forwardingRule *compute.For...
  function usesL4RBS (line 440) | func usesL4RBS(service *v1.Service, forwardingRule *compute.ForwardingRu...

FILE: providers/gce/gce_util_test.go
  function TestLastIPInRange (line 32) | func TestLastIPInRange(t *testing.T) {
  function TestSubnetsInCIDR (line 58) | func TestSubnetsInCIDR(t *testing.T) {
  function TestFirewallToGcloudArgs (line 97) | func TestFirewallToGcloudArgs(t *testing.T) {
  function TestAddRemoveFinalizer (line 126) | func TestAddRemoveFinalizer(t *testing.T) {

FILE: providers/gce/gce_zones.go
  function newZonesMetricContext (line 35) | func newZonesMetricContext(request, region string) *metricContext {
  method GetZone (line 40) | func (g *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
  method GetZoneByProviderID (line 50) | func (g *Cloud) GetZoneByProviderID(ctx context.Context, providerID stri...
  method GetZoneByNodeName (line 65) | func (g *Cloud) GetZoneByNodeName(ctx context.Context, nodeName types.No...
  method ListZonesInRegion (line 79) | func (g *Cloud) ListZonesInRegion(region string) ([]*compute.Zone, error) {
  method getRegionLink (line 93) | func (g *Cloud) getRegionLink(region string) string {

FILE: providers/gce/gcpcredential/credentialutil.go
  constant maxReadLength (line 31) | maxReadLength = 10 * 1 << 20
  type HTTPError (line 35) | type HTTPError struct
    method Error (line 41) | func (he *HTTPError) Error() string {
  function ReadURL (line 47) | func ReadURL(url string, client *http.Client, header *http.Header) (body...
  function ReadDockerConfigFileFromURL (line 83) | func ReadDockerConfigFileFromURL(url string, client *http.Client, header...
  type internalRegistryConfig (line 91) | type internalRegistryConfig
  function ReadDockerConfigFileFromBytes (line 94) | func ReadDockerConfigFileFromBytes(contents []byte) (cfg credentialconfi...
  function convertToExternalConfig (line 102) | func convertToExternalConfig(in internalRegistryConfig) (cfg credentialc...

FILE: providers/gce/gcpcredential/gcpcredential.go
  constant metadataURL (line 29) | metadataURL        = "http://metadata.google.internal./computeMetadata/v1/"
  constant metadataAttributes (line 30) | metadataAttributes = metadataURL + "instance/attributes/"
  constant DockerConfigKey (line 32) | DockerConfigKey = metadataAttributes + "google-dockercfg"
  constant DockerConfigURLKey (line 34) | DockerConfigURLKey = metadataAttributes + "google-dockercfg-url"
  constant serviceAccounts (line 35) | serviceAccounts    = metadataURL + "instance/service-accounts/"
  constant metadataScopes (line 36) | metadataScopes     = metadataURL + "instance/service-accounts/default/sc...
  constant metadataToken (line 37) | metadataToken      = metadataURL + "instance/service-accounts/default/to...
  constant metadataEmail (line 38) | metadataEmail      = metadataURL + "instance/service-accounts/default/em...
  constant StorageScopePrefix (line 40) | StorageScopePrefix       = "https://www.googleapis.com/auth/devstorage"
  constant cloudPlatformScopePrefix (line 41) | cloudPlatformScopePrefix = "https://www.googleapis.com/auth/cloud-platform"
  constant defaultServiceAccount (line 42) | defaultServiceAccount    = "default/"
  function ProvideConfigKey (line 58) | func ProvideConfigKey(client *http.Client, image string) credentialconfi...
  function ProvideURLKey (line 71) | func ProvideURLKey(client *http.Client, image string) credentialconfig.R...
  type TokenBlob (line 93) | type TokenBlob struct
  function ProvideContainerRegistry (line 98) | func ProvideContainerRegistry(client *http.Client, image string) credent...

FILE: providers/gce/gcpcredential/registry_marshal.go
  type registryConfigEntryWithAuth (line 30) | type registryConfigEntryWithAuth struct
  type RegistryConfigEntry (line 42) | type RegistryConfigEntry struct
    method UnmarshalJSON (line 47) | func (ident *RegistryConfigEntry) UnmarshalJSON(data []byte) error {
    method MarshalJSON (line 67) | func (ident RegistryConfigEntry) MarshalJSON() ([]byte, error) {
  function decodeRegistryConfigFieldAuth (line 76) | func decodeRegistryConfigFieldAuth(field string) (username, password str...
  function encodeRegistryConfigFieldAuth (line 106) | func encodeRegistryConfigFieldAuth(username, password string) string {

FILE: providers/gce/gcpcredential/registry_marshal_test.go
  function TestRegistryConfigEntryJSONDecode (line 30) | func TestRegistryConfigEntryJSONDecode(t *testing.T) {
  function TestDecodeRegistryConfigFieldAuth (line 117) | func TestDecodeRegistryConfigFieldAuth(t *testing.T) {
  function TestRegistryConfigEntryJSONCompatibleEncode (line 201) | func TestRegistryConfigEntryJSONCompatibleEncode(t *testing.T) {

FILE: providers/gce/metrics.go
  constant computeV1Version (line 31) | computeV1Version    = "v1"
  constant computeAlphaVersion (line 32) | computeAlphaVersion = "alpha"
  constant computeBetaVersion (line 33) | computeBetaVersion  = "beta"
  type apiCallMetrics (line 36) | type apiCallMetrics struct
  type metricContext (line 52) | type metricContext struct
    method Observe (line 63) | func (mc *metricContext) Observe(err error) error {
  constant unusedMetricLabel (line 60) | unusedMetricLabel = "<n/a>"
  function newGenericMetricContext (line 73) | func newGenericMetricContext(prefix, request, region, zone, version stri...
  function registerAPIMetrics (line 87) | func registerAPIMetrics() *apiCallMetrics {

FILE: providers/gce/metrics_test.go
  function TestVerifyMetricLabelCardinality (line 28) | func TestVerifyMetricLabelCardinality(t *testing.T) {

FILE: providers/gce/support.go
  type gceProjectRouter (line 30) | type gceProjectRouter struct
    method ProjectID (line 35) | func (r *gceProjectRouter) ProjectID(ctx context.Context, version meta...
  type gceRateLimiter (line 45) | type gceRateLimiter struct
    method Accept (line 54) | func (l *gceRateLimiter) Accept(ctx context.Context, key *cloud.RateLi...
    method Observe (line 70) | func (*gceRateLimiter) Observe(context.Context, error, *cloud.RateLimi...
  function CreateGCECloudWithCloud (line 75) | func CreateGCECloudWithCloud(config *CloudConfig, c cloud.Cloud) (*Cloud...

FILE: providers/gce/token_source.go
  constant tokenURLQPS (line 40) | tokenURLQPS = .05
  constant tokenURLBurst (line 42) | tokenURLBurst = 3
  function init (line 70) | func init() {
  type AltTokenSource (line 76) | type AltTokenSource struct
    method Token (line 84) | func (a *AltTokenSource) Token() (*oauth2.Token, error) {
    method token (line 94) | func (a *AltTokenSource) token() (*oauth2.Token, error) {
  function NewAltTokenSource (line 121) | func NewAltTokenSource(tokenURL, tokenBody string) oauth2.TokenSource {

FILE: test/e2e/firewall.go
  constant firewallTestTCPTimeout (line 31) | firewallTestTCPTimeout = time.Duration(1 * time.Second)
  function assertNotReachableHTTPTimeout (line 70) | func assertNotReachableHTTPTimeout(ip, path string, port int, timeout ti...
  function controlPlaneAddresses (line 80) | func controlPlaneAddresses(ctx context.Context, f *framework.Framework) ...

FILE: test/e2e/gce.go
  function factory (line 28) | func factory() (framework.ProviderInterface, error) {
  type Provider (line 99) | type Provider struct
  function NewProvider (line 105) | func NewProvider(gceCloud *gcecloud.Cloud) framework.ProviderInterface {
  function GetGCECloud (line 112) | func GetGCECloud() (*gcecloud.Cloud, error) {

FILE: test/e2e/loadbalancer.go
  type HTTPPokeParams (line 256) | type HTTPPokeParams struct
  type HTTPPokeResult (line 265) | type HTTPPokeResult struct
  type HTTPPokeStatus (line 273) | type HTTPPokeStatus
  constant HTTPSuccess (line 277) | HTTPSuccess HTTPPokeStatus = "Success"
  constant HTTPError (line 279) | HTTPError HTTPPokeStatus = "UnknownError"
  constant HTTPTimeout (line 281) | HTTPTimeout HTTPPokeStatus = "TimedOut"
  constant HTTPRefused (line 283) | HTTPRefused HTTPPokeStatus = "ConnectionRefused"
  constant HTTPRetryCode (line 285) | HTTPRetryCode HTTPPokeStatus = "RetryCode"
  constant HTTPWrongCode (line 287) | HTTPWrongCode HTTPPokeStatus = "WrongCode"
  constant HTTPBadResponse (line 289) | HTTPBadResponse HTTPPokeStatus = "BadResponse"
  function PokeHTTP (line 307) | func PokeHTTP(host string, port int, path string, params *HTTPPokeParams...
  function httpGetNoConnectionPoolTimeout (line 401) | func httpGetNoConnectionPoolTimeout(url string, timeout time.Duration) (...
  function testReachableUDP (line 415) | func testReachableUDP(host string, port int, timeout time.Duration) {
  function testNotReachableUDP (line 433) | func testNotReachableUDP(host string, port int, timeout time.Duration) {
  function testRejectedUDP (line 447) | func testRejectedUDP(host string, port int, timeout time.Duration) {
  type UDPPokeParams (line 461) | type UDPPokeParams struct
  type UDPPokeResult (line 467) | type UDPPokeResult struct
  type UDPPokeStatus (line 474) | type UDPPokeStatus
  constant UDPSuccess (line 478) | UDPSuccess UDPPokeStatus = "Success"
  constant UDPError (line 480) | UDPError UDPPokeStatus = "UnknownError"
  constant UDPTimeout (line 482) | UDPTimeout UDPPokeStatus = "TimedOut"
  constant UDPRefused (line 484) | UDPRefused UDPPokeStatus = "ConnectionRefused"
  constant UDPBadResponse (line 486) | UDPBadResponse UDPPokeStatus = "BadResponse"
  function pokeUDP (line 500) | func pokeUDP(host string, port int, request string, params *UDPPokeParam...

FILE: test/e2e/network_tiers.go
  function waitAndVerifyLBWithTier (line 146) | func waitAndVerifyLBWithTier(ctx context.Context, jig *e2eservice.TestJi...
  function getLBNetworkTierByIP (line 176) | func getLBNetworkTierByIP(ip string) (cloud.NetworkTier, error) {
  function getGCEForwardingRuleByIP (line 193) | func getGCEForwardingRuleByIP(ip string) (*compute.ForwardingRule, error) {
  function setNetworkTier (line 210) | func setNetworkTier(svc *v1.Service, tier string) {
  function reserveRegionalAddress (line 219) | func reserveRegionalAddress(cloud *gcecloud.Cloud, name string, netTier ...
  function DescribeSvc (line 238) | func DescribeSvc(ns string) {

FILE: test/e2e/suite_test.go
  constant kubeconfigEnvVar (line 34) | kubeconfigEnvVar = "KUBECONFIG"
  function init (line 36) | func init() {
  function TestE2E (line 55) | func TestE2E(t *testing.T) {
  function WriteJUnitReport (line 92) | func WriteJUnitReport(report ginkgo.Report, filename string) error {

FILE: tools/kops/main.go
  function main (line 30) | func main() {

FILE: tools/kops/pkg/kops/config.go
  type Config (line 31) | type Config struct
    method Finalize (line 96) | func (c *Config) Finalize() error {
  function NewConfigFromEnv (line 57) | func NewConfigFromEnv() (*Config, error) {
  function UpdateConfigFromFlags (line 171) | func UpdateConfigFromFlags(c *Config) error {
  function repoRoot (line 175) | func repoRoot() (string, error) {
  function versionFromFile (line 192) | func versionFromFile(repoRoot string) (string, error) {
  function latestK8sVersion (line 201) | func latestK8sVersion() (string, error) {
  function latestKopsVersion (line 205) | func latestKopsVersion() (string, error) {
  function versionFromURL (line 209) | func versionFromURL(url string) (string, error) {

FILE: tools/kops/pkg/kops/default_template.go
  constant defaultTemplate (line 19) | defaultTemplate = `apiVersion: kops.k8s.io/v1alpha2

FILE: tools/kops/pkg/kops/gcp.go
  function EnsureStateStore (line 27) | func EnsureStateStore(c *Config) error {
  function EnsureSSHKey (line 86) | func EnsureSSHKey(c *Config) error {
  function CleanSSHKey (line 109) | func CleanSSHKey(c *Config) error {

FILE: tools/kops/pkg/kops/kops_test.go
  function TestHydrateTemplate (line 25) | func TestHydrateTemplate(t *testing.T) {
  function TestConfigFinalize (line 74) | func TestConfigFinalize(t *testing.T) {

FILE: tools/kops/pkg/kops/lifecycle.go
  function Up (line 28) | func Up(c *Config) error {
  function Down (line 67) | func Down(c *Config) error {
  function commonArgs (line 99) | func commonArgs(c *Config) []string {
  function runKubetest2 (line 137) | func runKubetest2(c *Config, args []string) error {
  function prepareLocalCCMManifest (line 170) | func prepareLocalCCMManifest(c *Config) (string, error) {
  function setEnvIfNotEmpty (line 193) | func setEnvIfNotEmpty(cmd *exec.Cmd, key, value string) {

FILE: tools/kops/pkg/kops/template.go
  function HydrateTemplate (line 27) | func HydrateTemplate(c *Config) error {

FILE: vendor/cel.dev/expr/checked.pb.go
  constant _ (line 21) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 23) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type Type_PrimitiveType (line 26) | type Type_PrimitiveType
    method Enum (line 60) | func (x Type_PrimitiveType) Enum() *Type_PrimitiveType {
    method String (line 66) | func (x Type_PrimitiveType) String() string {
    method Descriptor (line 70) | func (Type_PrimitiveType) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 74) | func (Type_PrimitiveType) Type() protoreflect.EnumType {
    method Number (line 78) | func (x Type_PrimitiveType) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 83) | func (Type_PrimitiveType) EnumDescriptor() ([]byte, []int) {
  constant Type_PRIMITIVE_TYPE_UNSPECIFIED (line 29) | Type_PRIMITIVE_TYPE_UNSPECIFIED Type_PrimitiveType = 0
  constant Type_BOOL (line 30) | Type_BOOL                       Type_PrimitiveType = 1
  constant Type_INT64 (line 31) | Type_INT64                      Type_PrimitiveType = 2
  constant T
Copy disabled (too large) Download .json
Condensed preview — 8514 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (111,771K chars).
[
  {
    "path": ".gitallowed",
    "chars": 47,
    "preview": "ya29.t0k3n\n\"access-token\": \"ya29.CjWdA4GiBPTt\"\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 617,
    "preview": "version: 2\nupdates:\n- package-ecosystem: \"github-actions\"\n  directory: \"/\"\n  schedule:\n    interval: \"weekly\"\n    day: \""
  },
  {
    "path": ".github/release.yml",
    "chars": 253,
    "preview": "changelog:\n  exclude:\n    labels:\n      - ignore-for-release\n    authors:\n      - dependabot[bot]\n  categories:\n    - ti"
  },
  {
    "path": ".github/workflows/dependabot-sync.yml",
    "chars": 1043,
    "preview": "name: Dependabot Go Work Sync\n\non:\n  pull_request:\n    paths:\n      - '**/go.mod'\n      - '**/go.sum'\n\npermissions:\n  co"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 544,
    "preview": "name: Create GitHub Release\n\non:\n  push:\n    tags:\n      - 'v*'\n\npermissions:\n  contents: write\n\njobs:\n  release:\n    ru"
  },
  {
    "path": ".github/workflows/tag-auth-provider-gcp.yml",
    "chars": 828,
    "preview": "name: Tag auth-provider-gcp\n\non:\n  push:\n    branches:\n      - 'release-1.*'\n    paths:\n      - 'cmd/auth-provider-gcp/*"
  },
  {
    "path": ".github/workflows/tag-ccm.yml",
    "chars": 795,
    "preview": "name: Tag CCM\n\non:\n  push:\n    branches:\n      - 'release-1.*'\n    paths-ignore:\n      - 'cmd/auth-provider-gcp/**'\n    "
  },
  {
    "path": ".github/workflows/tag-gke-gcloud-auth-plugin.yml",
    "chars": 848,
    "preview": "name: Tag gke-gcloud-auth-plugin\n\non:\n  push:\n    branches:\n      - 'release-1.*'\n    paths:\n      - 'cmd/gke-gcloud-aut"
  },
  {
    "path": ".gitignore",
    "chars": 99,
    "preview": "MERGED_LICENSES\nrelease/*\n.go-cache/\n.idea/\n.vscode/\n_artifacts/\n_rundir/\n_tmp/\n/bin/\n__pycache__/\n"
  },
  {
    "path": ".ko.yaml",
    "chars": 1085,
    "preview": "defaultPlatforms:\n- linux/arm64\n- linux/amd64\n\nbuilds:\n- id: cloud-controller-manager\n  dir: .\n  main: cmd/cloud-control"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1386,
    "preview": "# Contributing Guidelines\n\nThe **kubernetes/cloud-provider-gcp** project accepts contribution via github [pull request]("
  },
  {
    "path": "Dockerfile",
    "chars": 656,
    "preview": "FROM --platform=${BUILDPLATFORM} golang:1.26.0 AS builder\n\n# golang envs\nARG TARGETARCH\nARG GOOS=linux\nENV CGO_ENABLED=0"
  },
  {
    "path": "LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "Makefile",
    "chars": 16577,
    "preview": "# Copyright 2025 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may n"
  },
  {
    "path": "OWNERS",
    "chars": 330,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\n\napprovers:\n- sig-cloud-provider-leads\n- aojea\n- bowei\n- cheftako\n- hd"
  },
  {
    "path": "OWNERS_ALIASES",
    "chars": 177,
    "preview": "# See the OWNERS docs: https://git.k8s.io/community/docs/devel/owners.md\n\naliases:\n  sig-cloud-provider-leads:\n    - bri"
  },
  {
    "path": "README.md",
    "chars": 5674,
    "preview": "# cloud-provider-gcp\n\n[![Go Report Card](https://goreportcard.com/badge/k8s.io/cloud-provider-gcp)](https://goreportcard"
  },
  {
    "path": "SECURITY_CONTACTS",
    "chars": 544,
    "preview": "# Defined below are the security contacts for this repo.\n#\n# They are the contact point for the Product Security Committ"
  },
  {
    "path": "cloudbuild.yaml",
    "chars": 794,
    "preview": "# See https://cloud.google.com/cloud-build/docs/build-config\n# For more information about Image pushing refer to https:/"
  },
  {
    "path": "cmd/auth-provider-gcp/OWNERS",
    "chars": 158,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\n\napprovers:\n- ahmedtd\n- dangerontheranger\n\nreviewers:\n- ahmedtd\n- cici"
  },
  {
    "path": "cmd/auth-provider-gcp/app/getcredentials.go",
    "chars": 4711,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/auth-provider-gcp/app/getcredentials_test.go",
    "chars": 5158,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/auth-provider-gcp/main.go",
    "chars": 1512,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/auth-provider-gcp/provider/provider.go",
    "chars": 4639,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/auth-provider-gcp/provider/provider_test.go",
    "chars": 7808,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/OWNERS",
    "chars": 152,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\n\napprovers:\n- aojea\n- bowei\n- justinsb\n\nreviewers:\n- aojea\n- bowei\n- c"
  },
  {
    "path": "cmd/cloud-controller-manager/gkenetworkparamsetcontroller.go",
    "chars": 3600,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n\n\tnetworkclientset \"github.com/GoogleCloudPlatform/gke-networkin"
  },
  {
    "path": "cmd/cloud-controller-manager/gkeservicecontroller.go",
    "chars": 1920,
    "preview": "package main\n\nimport (\n\t\"context\"\n\n\tutilfeature \"k8s.io/apiserver/pkg/util/feature\"\n\tcloudprovider \"k8s.io/cloud-provide"
  },
  {
    "path": "cmd/cloud-controller-manager/gkeservicecontroller_test.go",
    "chars": 2369,
    "preview": "package main\n\nimport (\n\t\"testing\"\n\n\tv1 \"k8s.io/api/core/v1\"\n\tgkeservicecontroller \"k8s.io/cloud-provider-gcp/pkg/control"
  },
  {
    "path": "cmd/cloud-controller-manager/gketenantcontrollermanager.go",
    "chars": 10429,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\npackage main\n\nimport (\n\t\"context\"\n\t\"strings\"\n\n\tv1 \"github.com/GoogleCloudPl"
  },
  {
    "path": "cmd/cloud-controller-manager/gketenantcontrollermanager_test.go",
    "chars": 4164,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"testing\"\n\t\"time\"\n\n\tv1 \"github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/apis/pro"
  },
  {
    "path": "cmd/cloud-controller-manager/main.go",
    "chars": 10140,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/nodecontroller.go",
    "chars": 2485,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/nodeipamcontroller.go",
    "chars": 4303,
    "preview": "/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/nodeipamcontroller_test.go",
    "chars": 6829,
    "preview": "package main\n\nimport (\n\t\"testing\"\n\n\t\"k8s.io/client-go/informers\"\n\tk8sfake \"k8s.io/client-go/kubernetes/fake\"\n\t\"k8s.io/cl"
  },
  {
    "path": "cmd/cloud-controller-manager/nodelifecyclecontroller.go",
    "chars": 2449,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/nodelifecyclecontroller_test.go",
    "chars": 3950,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/cloud-controller-manager/options/nodeipamcontroller.go",
    "chars": 3195,
    "preview": "/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/OWNERS",
    "chars": 131,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\n\napprovers:\n- ahmedtd\n- zshihang\n\nreviewers:\n- ahmedtd\n- jprzychodzen\n"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/cred.go",
    "chars": 13824,
    "preview": "// Package cred prints an ExecCredential object to stdout. The ExecCredential\n// object is filled with an access_token e"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/cred_test.go",
    "chars": 27500,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"path\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"golang.org/x/oaut"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/default_credentials_token_provider.go",
    "chars": 1736,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2\"\n\t\"k8s.io/client-go/util/retry\"\n)\n\nvar (\n\t// def"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/gcloud_edge_cloud_token_provider.go",
    "chars": 1759,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"time\"\n)\n\n// gcloudEdgeCloudTokenProvider provides gcloud edge-cloud tok"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/gcloud_token_provider.go",
    "chars": 3053,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"k8s.io/klog/v2\"\n)\n\n// gcloudConfiguration holds types un"
  },
  {
    "path": "cmd/gke-gcloud-auth-plugin/token_provider.go",
    "chars": 510,
    "preview": "package main\n\nimport (\n\t\"time\"\n)\n\ntype tokenProvider interface {\n\t// token returns a new token, and the expiry of that t"
  },
  {
    "path": "code-of-conduct.md",
    "chars": 148,
    "preview": "# Kubernetes Community Code of Conduct\n\nPlease refer to our [Kubernetes Community Code of Conduct](https://git.k8s.io/co"
  },
  {
    "path": "deploy/cloud-controller-manager.manifest",
    "chars": 2833,
    "preview": "{\n\"apiVersion\": \"v1\",\n\"kind\": \"Pod\",\n\"metadata\": {\n  \"name\":\"cloud-controller-manager\",\n  \"namespace\": \"kube-system\",\n  "
  },
  {
    "path": "deploy/cloud-node-controller-binding.yaml",
    "chars": 1188,
    "preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  labels:\n    addonmanager.kubernetes.io/mode: Reco"
  },
  {
    "path": "deploy/cloud-node-controller-role.yaml",
    "chars": 2414,
    "preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  labels:\n    addonmanager.kubernetes.io/mode: Reco"
  },
  {
    "path": "deploy/packages/default/kustomization.yaml",
    "chars": 93,
    "preview": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\nresources:\n  - manifest.yaml\n"
  },
  {
    "path": "deploy/packages/default/manifest.yaml",
    "chars": 7553,
    "preview": "---\napiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n  name: cloud-controller-manager\n  namespace: kube-system\n  labels:\n  "
  },
  {
    "path": "deploy/pvl-controller-role.yaml",
    "chars": 370,
    "preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  labels:\n    addonmanager.kubernetes.io/mode: Reco"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-conformance-latest-with-gcepd.sh",
    "chars": 927,
    "preview": "#!/bin/bash\n\n# TODO: Use published release tars for cloud-provider-gcp if/once they exist\nset -o errexit\nset -o nounset\n"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-conformance-latest.sh",
    "chars": 884,
    "preview": "#!/bin/bash\n\n# TODO: Use published release tars for cloud-provider-gcp if/once they exist\nset -o errexit\nset -o nounset\n"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-kops.sh",
    "chars": 947,
    "preview": "#!/bin/bash\n\n# Copyright 2026 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-with-gcepd.sh",
    "chars": 1030,
    "preview": "#!/bin/bash\n\n# TODO: Use published release tars for cloud-provider-gcp if/once they exist\nset -o errexit\nset -o nounset\n"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest-with-kubernetes-master.sh",
    "chars": 1075,
    "preview": "#!/bin/bash\n\n# TODO: Use published release tars for cloud-provider-gcp if/once they exist\nset -o errexit\nset -o nounset\n"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-e2e-latest.sh",
    "chars": 999,
    "preview": "#!/bin/bash\n\n# TODO: Use published release tars for cloud-provider-gcp if/once they exist\nset -o errexit\nset -o nounset\n"
  },
  {
    "path": "dev/ci/periodics/ci-cloud-provider-gcp-e2e-scenario-kops-simple.sh",
    "chars": 169,
    "preview": "#!/bin/bash\n\nset -o errexit\nset -o nounset\nset -o pipefail\nset -o xtrace\n\ncd $GOPATH/src/cloud-provider-gcp\ne2e/add-kube"
  },
  {
    "path": "dev/ci/presubmits/cloud-provider-gcp-tests",
    "chars": 895,
    "preview": "#!/usr/bin/env python3\n\nimport json\nimport os\nimport urllib.request\nimport subprocess\nimport glob\n\ndef find_go_modules()"
  },
  {
    "path": "docs/RELEASE.md",
    "chars": 5309,
    "preview": "# Release Instructions\n\n## Version Schema\nCloud controller manager (CCM) has unique image builds for every Kubernetes mi"
  },
  {
    "path": "docs/kops-quickstart.md",
    "chars": 2499,
    "preview": "# GCP CCM with kOps Quickstart\n\nThis guide provides a quickstart for building and deploying the GCP Cloud Controller Man"
  },
  {
    "path": "e2e/add-kubernetes-to-workspace.sh",
    "chars": 1430,
    "preview": "#!/usr/bin/env bash\n\n# Copyright 2022 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": "e2e/scenarios/kops-simple",
    "chars": 1874,
    "preview": "#!/usr/bin/env bash\n\n# Copyright 2026 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": "ginko-test-package-version.env",
    "chars": 8,
    "preview": "v1.36.0\n"
  },
  {
    "path": "go.mod",
    "chars": 8306,
    "preview": "module k8s.io/cloud-provider-gcp\n\ngo 1.26.0\n\nrequire (\n\tgithub.com/evanphx/json-patch v5.9.0+incompatible\n\tgithub.com/go"
  },
  {
    "path": "go.sum",
    "chars": 42477,
    "preview": "cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=\ncel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ"
  },
  {
    "path": "go.work",
    "chars": 1451,
    "preview": "go 1.26.0\n\nuse (\n\t.\n\t./metis\n\t./providers\n\t./test/e2e\n)\n\nreplace (\n\tk8s.io/api => k8s.io/api v0.36.0\n\tk8s.io/apiextensio"
  },
  {
    "path": "go.work.sum",
    "chars": 1034,
    "preview": "cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=\ncloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkY"
  },
  {
    "path": "metis/Dockerfile",
    "chars": 1763,
    "preview": "FROM --platform=${BUILDPLATFORM} golang:1.26.0 AS builder\n\n# Install cross-compilers for amd64 and arm64\nRUN apt-get upd"
  },
  {
    "path": "metis/Makefile",
    "chars": 4811,
    "preview": "# Makefile for metis component\n\n# Variables for local development, can be overridden by the caller\nIMAGE_REGISTRY ?= gcr"
  },
  {
    "path": "metis/api/adaptiveipam/v1/adaptiveipam.pb.go",
    "chars": 22397,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v7.34.1\n// so"
  },
  {
    "path": "metis/api/adaptiveipam/v1/adaptiveipam.proto",
    "chars": 4568,
    "preview": "syntax = \"proto3\";\n\npackage adaptiveipam.v1;\n\noption go_package = \"k8s.io/metis/api/adaptiveipam/v1;adaptiveipam\";\n\n// A"
  },
  {
    "path": "metis/api/adaptiveipam/v1/adaptiveipam_grpc.pb.go",
    "chars": 9370,
    "preview": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.6.2\n// - protoc           "
  },
  {
    "path": "metis/cmd/cni.go",
    "chars": 1032,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/cmd/daemon.go",
    "chars": 1468,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/cmd/daemonoptions.go",
    "chars": 1747,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/cmd/main.go",
    "chars": 1511,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/go.mod",
    "chars": 2230,
    "preview": "module k8s.io/metis\n\ngo 1.26.0\n\nrequire (\n\tgithub.com/containernetworking/cni v1.3.0\n\tgithub.com/go-logr/logr v1.4.3\n\tgi"
  },
  {
    "path": "metis/go.sum",
    "chars": 13766,
    "preview": "github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=\ngithub.com/Masterminds/semver/v3"
  },
  {
    "path": "metis/install-plugin.sh",
    "chars": 316,
    "preview": "#!/bin/sh -ex\n\nCNI_DIR=\"${CNI_DIR:-/host/opt/cni/bin}\"\nMETIS_BINARY=\"/bin/metis\"\n\necho \"Installing metis CNI binary to $"
  },
  {
    "path": "metis/pkg/cni/config.go",
    "chars": 1869,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/cni/config_test.go",
    "chars": 5920,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/cni/handlers.go",
    "chars": 7079,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/cni/handlers_test.go",
    "chars": 13313,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/cni/plugin.go",
    "chars": 4330,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/cni/types.go",
    "chars": 1837,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/consts.go",
    "chars": 861,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/daemon/daemon.go",
    "chars": 2447,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/daemon/daemon_server.go",
    "chars": 9195,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/daemon/daemon_server_test.go",
    "chars": 18276,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/daemon/daemon_test.go",
    "chars": 1870,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/store/schema.sql",
    "chars": 4056,
    "preview": "-- cidr_blocks tracks the lifecycle and utilization of all IP alias ranges \n-- provisioned to this node by GCE.\nCREATE T"
  },
  {
    "path": "metis/pkg/store/store.go",
    "chars": 24551,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/pkg/store/store_test.go",
    "chars": 45746,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "metis/test/cni_conformance_test.go",
    "chars": 4751,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/gkenetworkparamset/gkenetworkparamset_controller.go",
    "chars": 23870,
    "preview": "/*\nCopyright 2022 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/gkenetworkparamset/gkenetworkparamset_controller_test.go",
    "chars": 55220,
    "preview": "package gkenetworkparamset\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\tnetworkv1 \"github.com/Goog"
  },
  {
    "path": "pkg/controller/gkenetworkparamset/gkenetworkparamset_metrics.go",
    "chars": 812,
    "preview": "package gkenetworkparamset\n\nimport (\n\t\"sync\"\n\n\t\"k8s.io/component-base/metrics\"\n\t\"k8s.io/component-base/metrics/legacyreg"
  },
  {
    "path": "pkg/controller/gkenetworkparamset/gnpcontroller_validations.go",
    "chars": 12906,
    "preview": "/*\nCopyright 2023 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/README.md",
    "chars": 5500,
    "preview": "# GKE Tenant Controller Manager\n\nThis package (`gketenantcontrollers`) implements the core logic for the **GKE Tenant Co"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/cloud.go",
    "chars": 6574,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\n\npackage gketenantcontrollers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"regex"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/cloud_test.go",
    "chars": 10294,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\n\npackage gketenantcontrollers\n\nimport (\n\t\"regexp\"\n\t\"testing\"\n\n\tv1 \"github.c"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/starter.go",
    "chars": 8591,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\n\npackage gketenantcontrollers\n\nimport (\n\t\"context\"\n\t\"sort\"\n\t\"time\"\n\n\tv1 \"gi"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/starter_test.go",
    "chars": 3221,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\n\npackage gketenantcontrollers\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\tv1 \"github.com/"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/utils/helpers.go",
    "chars": 428,
    "preview": "/*\nCopyright 2026 The Kubernetes Authors.\n*/\n\npackage utils\n\nimport (\n\tv1 \"github.com/GoogleCloudPlatform/gke-enterprise"
  },
  {
    "path": "pkg/controller/gketenantcontrollers/utils/helpers_test.go",
    "chars": 1110,
    "preview": "package utils\n\nimport (\n\t\"testing\"\n\n\tv1 \"github.com/GoogleCloudPlatform/gke-enterprise-mt/pkg/apis/providerconfig/v1\"\n\t\""
  },
  {
    "path": "pkg/controller/nodeipam/OWNERS",
    "chars": 132,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\n\napprovers:\n- bowei\n- cheftako\nreviewers:\n- cici37\n- jpbetz\nlabels:\n- "
  },
  {
    "path": "pkg/controller/nodeipam/config/doc.go",
    "chars": 677,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/types.go",
    "chars": 2217,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/conversion.go",
    "chars": 2125,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/defaults.go",
    "chars": 1661,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/doc.go",
    "chars": 861,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/register.go",
    "chars": 1113,
    "preview": "/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/zz_generated.conversion.go",
    "chars": 4630,
    "preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n/*\nCopyright The Kubernetes Authors.\n\nLicensed under t"
  },
  {
    "path": "pkg/controller/nodeipam/config/v1alpha1/zz_generated.deepcopy.go",
    "chars": 698,
    "preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n/*\nCopyright The Kubernetes Authors.\n\nLicensed under t"
  },
  {
    "path": "pkg/controller/nodeipam/config/zz_generated.deepcopy.go",
    "chars": 1254,
    "preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n/*\nCopyright The Kubernetes Authors.\n\nLicensed under t"
  },
  {
    "path": "pkg/controller/nodeipam/doc.go",
    "chars": 734,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/adapter.go",
    "chars": 3942,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cidr_allocator.go",
    "chars": 5913,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cidrset/cidr_set.go",
    "chars": 9458,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cidrset/cidr_set_test.go",
    "chars": 27687,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cidrset/metrics.go",
    "chars": 2370,
    "preview": "/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go",
    "chars": 25528,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cloud_cidr_allocator_metrics.go",
    "chars": 802,
    "preview": "package ipam\n\nimport (\n\t\"sync\"\n\n\t\"k8s.io/component-base/metrics\"\n\t\"k8s.io/component-base/metrics/legacyregistry\"\n)\n\n// n"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cloud_cidr_allocator_nolegacyproviders.go",
    "chars": 1062,
    "preview": "//go:build providerless\n// +build providerless\n\n/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache Lic"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/cloud_cidr_allocator_test.go",
    "chars": 95907,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/controller_legacyprovider.go",
    "chars": 6041,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/controller_test.go",
    "chars": 1942,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/doc.go",
    "chars": 1381,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/multinetwork_cloud_cidr_allocator.go",
    "chars": 12505,
    "preview": "package ipam\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\n\tnetworkv1 \"github.com/GoogleCloudPlatform/gke-networking-api/apis/netw"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/multinetwork_cloud_cidr_allocator_test.go",
    "chars": 10360,
    "preview": "package ipam\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\tnetworkv1 \"github.com/GoogleCloudPlatform/gke-networking-api/apis/network/v1\""
  },
  {
    "path": "pkg/controller/nodeipam/ipam/node_topology_syncer.go",
    "chars": 8976,
    "preview": "package ipam\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n\n\tnodetopologyv1 \"github.com/GoogleCloudPlatform/gke-networking-api/"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/node_topology_syncer_test.go",
    "chars": 21324,
    "preview": "package ipam\n\nimport (\n\t\"context\"\n\t\"sort\"\n\t\"testing\"\n\t\"time\"\n\n\tntv1 \"github.com/GoogleCloudPlatform/gke-networking-api/a"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/range_allocator.go",
    "chars": 14817,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/range_allocator_test.go",
    "chars": 26090,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/sync/sync.go",
    "chars": 12178,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/sync/sync_test.go",
    "chars": 7413,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/task_queue.go",
    "chars": 3679,
    "preview": "/*\nCopyright 2025 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/task_queue_test.go",
    "chars": 3760,
    "preview": "/*\nCopyright 2025 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/test/utils.go",
    "chars": 825,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/timeout.go",
    "chars": 1788,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/ipam/timeout_test.go",
    "chars": 1429,
    "preview": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/legacyprovider.go",
    "chars": 2067,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/node_ipam_controller.go",
    "chars": 6121,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/nodeipam/node_ipam_controller_test.go",
    "chars": 6530,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "pkg/controller/nodeipam/nolegacyprovider.go",
    "chars": 1130,
    "preview": "//go:build providerless\n// +build providerless\n\n/*\nCopyright 2019 The Kubernetes Authors.\n\nLicensed under the Apache Lic"
  },
  {
    "path": "pkg/controller/nodeipam/starter.go",
    "chars": 7583,
    "preview": "package nodeipam\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\n\tcoreinformers \"k8s.io/client-go/informers/cor"
  },
  {
    "path": "pkg/controller/service/OWNERS",
    "chars": 96,
    "preview": "approvers:\n  - aojea\n  - bowei\n  - mmamczur\n  - thockin\n  - felipeyepez\nlabels:\n  - sig/network\n"
  },
  {
    "path": "pkg/controller/service/README.md",
    "chars": 1829,
    "preview": "# Service Controller\n\nThis service controller is a fork of the upstream service controller from `k8s.io/cloud-provider/c"
  },
  {
    "path": "pkg/controller/service/controller.go",
    "chars": 39256,
    "preview": "// This file is a fork of k8s.io/cloud-provider/controllers/service/controller.go\n/*\nCopyright 2015 The Kubernetes Autho"
  },
  {
    "path": "pkg/controller/service/controller_gke.go",
    "chars": 770,
    "preview": "/*\nCopyright 2025 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controller/service/doc.go",
    "chars": 758,
    "preview": "// This file is a fork of k8s.io/cloud-provider/controllers/service/doc.go\n/*\nCopyright 2015 The Kubernetes Authors.\n\nLi"
  },
  {
    "path": "pkg/controller/service/metrics.go",
    "chars": 2666,
    "preview": "// This file is a fork of k8s.io/cloud-provider/controllers/service/metrics.go\n/*\nCopyright 2020 The Kubernetes Authors."
  },
  {
    "path": "pkg/controller/testutil/test_utils.go",
    "chars": 15201,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/controllermetrics/controllermetrics.go",
    "chars": 734,
    "preview": "package controllermetrics\n\nimport (\n\t\"sync\"\n\n\t\"k8s.io/component-base/metrics\"\n\t\"k8s.io/component-base/metrics/legacyregi"
  },
  {
    "path": "pkg/credentialconfig/README.md",
    "chars": 491,
    "preview": "Temporarily copied from a PR intended to be merged into kubernetes/kubernetes (https://github.com/kubernetes/kubernetes/"
  },
  {
    "path": "pkg/credentialconfig/config.go",
    "chars": 9884,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/credentialconfig/config_test.go",
    "chars": 10992,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/credentialconfig/provider.go",
    "chars": 2570,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/credentialconfig/provider_test.go",
    "chars": 1823,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/gcpcredential/README.md",
    "chars": 491,
    "preview": "Temporarily copied from a PR intended to be merged into kubernetes/kubernetes (https://github.com/kubernetes/kubernetes/"
  },
  {
    "path": "pkg/gcpcredential/gcpcredential.go",
    "chars": 9944,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/util/controller_utils.go",
    "chars": 3644,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/util/node/node.go",
    "chars": 9378,
    "preview": "/*\nCopyright 2015 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/util/node/node_test.go",
    "chars": 5163,
    "preview": "/*\nCopyright 2023 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/util/taints/taints.go",
    "chars": 964,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "pkg/util/taints/taints_test.go",
    "chars": 1673,
    "preview": "/*\nCopyright 2016 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "providers/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "providers/README.md",
    "chars": 767,
    "preview": "# cloud-provider-gcp/providers\n\nCurrently feature development is no longer accepted in `k8s.io/kubernetes/staging/src/k8"
  },
  {
    "path": "providers/gce/OWNERS",
    "chars": 160,
    "preview": "# See the OWNERS docs at https://go.k8s.io/owners\napprovers:\n- saad-ali\n- jingxu97\n- bowei\n- freehan\n- mrhohn\n- cheftako"
  },
  {
    "path": "providers/gce/doc.go",
    "chars": 742,
    "preview": "/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "providers/gce/gce.go",
    "chars": 35461,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2014 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_address_manager.go",
    "chars": 7628,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_address_manager_test.go",
    "chars": 5687,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_addresses.go",
    "chars": 6280,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_alpha.go",
    "chars": 1633,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_annotations.go",
    "chars": 8332,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_annotations_test.go",
    "chars": 8988,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_backendservice.go",
    "chars": 10039,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_cert.go",
    "chars": 2464,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_clusterid.go",
    "chars": 7289,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_clusters.go",
    "chars": 3194,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_disks.go",
    "chars": 33398,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_disks_test.go",
    "chars": 28317,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_fake.go",
    "chars": 3309,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2018 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_firewall.go",
    "chars": 2522,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_forwardingrule.go",
    "chars": 7914,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_healthchecks.go",
    "chars": 9559,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_instancegroup.go",
    "chars": 5266,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_instances.go",
    "chars": 30868,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_instances_test.go",
    "chars": 20504,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_interfaces.go",
    "chars": 2013,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer.go",
    "chars": 16846,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer_external.go",
    "chars": 64222,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer_external_deny_test.go",
    "chars": 19426,
    "preview": "/*\nCopyright 2025 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not u"
  },
  {
    "path": "providers/gce/gce_loadbalancer_external_test.go",
    "chars": 86660,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer_internal.go",
    "chars": 47013,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer_internal_test.go",
    "chars": 95213,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache L"
  },
  {
    "path": "providers/gce/gce_loadbalancer_metrics.go",
    "chars": 8604,
    "preview": "//go:build !providerless\n// +build !providerless\n\n/*\nCopyright 2020 The Kubernetes Authors.\n\nLicensed under the Apache L"
  }
]

// ... and 8314 more files (download for full content)

About this extraction

This page contains the full source code of the kubernetes/cloud-provider-gcp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 8514 files (129.1 MB), approximately 26.8M tokens, and a symbol index with 202754 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!