GoogleContainerTools/skaffold · error

STATUSCHECK_CONFIG_CONNECTOR_RESOURCES_FETCH_ERR

STATUSCHECK_CONFIG_CONNECTOR_RESOURCES_FETCH_ERR

Error message

could not fetch config connector resources: %w

What it means

statusCheck wraps failures from getConfigConnectorResources with STATUSCHECK_CONFIG_CONNECTOR_RESOURCES_FETCH_ERR. Notably, this specific error is raised before any cluster call: it comes from manifest.ManifestList.SelectResources(manifest.ConfigConnectorResourceSelector...) failing to parse/select resources from the rendered manifests.

Source

Thrown at pkg/skaffold/kubernetes/status/status_check.go:220

			resources = append(resources, d)
			s.seenResources.Add(d)
		}

		newStandalonePods, err := getStandalonePods(ctx, client, n, s.labeller, getDeadline((s.deadlineSeconds)), s.tolerateFailures)
		if err != nil {
			return proto.StatusCode_STATUSCHECK_STANDALONE_PODS_FETCH_ERR, fmt.Errorf("could not fetch standalone pods: %w", err)
		}
		for _, pods := range newStandalonePods {
			if s.seenResources.Contains(pods) {
				continue
			}
			resources = append(resources, pods)
			s.seenResources.Add(pods)
		}

		newConfigConnectorResources, err := getConfigConnectorResources(client, dynClient, s.manifests, n, s.labeller, getDeadline(s.deadlineSeconds), s.tolerateFailures)
		if err != nil {
			return proto.StatusCode_STATUSCHECK_CONFIG_CONNECTOR_RESOURCES_FETCH_ERR, fmt.Errorf("could not fetch config connector resources: %w", err)
		}
		for _, d := range newConfigConnectorResources {
			if s.seenResources.Contains(d) {
				continue
			}
			resources = append(resources, d)
			s.seenResources.Add(d)
		}

		for _, selector := range s.crSelectors {
			customResources, err := getCustomResources(client, dynClient, s.manifests, n, getDeadline(s.deadlineSeconds), s.tolerateFailures, selector)
			if err != nil {
				return proto.StatusCode_STATUSCHECK_CUSTOM_RESOURCE_FETCH_ERR, fmt.Errorf("could not fetch custom resources: %w", err)
			}

			for _, d := range customResources {
				if s.seenResources.Contains(d) {
					continue

View on GitHub (pinned to a1189de023)

Solutions

  1. Inspect the rendered manifests ('skaffold render') and validate YAML with 'kubectl apply --dry-run=client' or yamllint
  2. Fix malformed manifests referenced by skaffold.yaml (indentation, duplicate keys, bad GVK)
  3. Update skaffold if the ConfigConnectorResourceSelector GVK list no longer matches your CNRM version
  4. Isolate the failing manifest by bisecting the manifest list
  5. Re-run the deploy+status check after manifest fixes

Example fix

// before: malformed manifest (missing GVK)
//   apiVersion: cnrm.cloud.google.com/v1beta1
//   kind: ""
// after:
//   apiVersion: cnrm.cloud.google.com/v1beta1
//   kind: SQLInstance
//   metadata: { name: my-db }
Defensive patterns

Strategy: validation

Validate before calling

// validate manifests before deploy
const rendered = execSync('skaffold render --stdout').toString();
try { YAML.parseAllDocuments(rendered, { uniqueKeys: true }); }
catch (e) { throw new Error('manifest parse error will break config-connector selection: ' + e.message); }

Try / catch

try {
  await statusCheck();
} catch (err) {
  if (err.message.includes('could not fetch config connector resources')) {
    // manifest-side failure: re-render and lint manifests
  }
  throw err;
}

Prevention

When it happens

Trigger: m.SelectResources(manifest.ConfigConnectorResourceSelector...) returns an error while selecting Config Connector (CNRM) resources from the manifest list — malformed/unparseable manifest YAML, or a selector/predicate error on GVK filtering.

Common situations: Manifests containing invalid or partially-rendered YAML; annotation-based resource injection producing duplicate keys; using Config Connector resources with a manifest pipeline that fails schema-free selection; hand-edited manifests with wrong GVK fields.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/4f0c8e3571f3b386. Report an issue: GitHub.