#6779·crossplane

Dependency resolution creates duplicate Provider with auto-derived name, ignoring existing Provider installations.

Author: markussiebertCreated Sep 5, 2025Updated Sep 10, 2026
Labelsbugexempt-from-stale

What happened?

Expected: When a package declares dependsOn for a provider that is already installed and Healthy (even if installed from a mirrored registry), Crossplane should reuse the existing Provider object and update it - keeping the system healthy. Actual: Dependency resolution installs an additional Provider object with an auto-derived name based on the package path (e.g., upbound-provider-), even though a functionally identical Provider is already installed under a different name (e.g., provider-). While both exist, Providers/Configurations and related resources report Status Unknown. Deleting the additionally installed Provider restores normal operation.

How can we reproduce it?

Install provider

yaml
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-kubernetes
spec:
  package: my.private.mirror/upbound/provider-kubernetes:v0.17.1
  packagePullPolicy: IfNotPresent
  revisionActivationPolicy: Automatic
  revisionHistoryLimit: 1
  runtimeConfigRef:
    apiVersion: pkg.crossplane.io/v1beta1
    kind: DeploymentRuntimeConfig
    name: provider-kubernetes-config
  skipDependencyResolution: false
  ignoreCrossplaneConstraints: false

Install package with a dependency like:

yaml
dependsOn:
  - provider: my.private.mirror/upbound/provider-kubernetes
    version: '>= v0.18.0'

Then you will find a second installation of provider kubernetes with name upbound-provider-kubernetes

What environment did it happen in?

Crossplane version: 1.20.1