Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions controllers/istio/istio_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ func validate(istio *v1.Istio) error {
func (r *Reconciler) reconcileActiveRevision(ctx context.Context, istio *v1.Istio) error {
version, err := istioversion.Resolve(istio.Spec.Version)
if err != nil {
if istioversion.IsEOLVersion(istio.Spec.Version) {
return reconciler.NewValidationError(fmt.Sprintf("version %q is end-of-life and cannot be installed; use a supported version", istio.Spec.Version))
}
return fmt.Errorf("failed to resolve Istio version for %q: %w", istio.Name, err)
}
values, err := revision.ComputeValues(
Expand Down
10 changes: 10 additions & 0 deletions pkg/istioversion/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,16 @@ func Resolve(version string) (string, error) {
return info.Name, nil
}

// IsEOLVersion returns true if the version is known but has been marked end-of-life.
func IsEOLVersion(version string) bool {
for _, eolVersion := range EOL {
if eolVersion == version {
return true
}
}
return false
}

func init() {
// we can't use ldflags when running tests, use an env variable instead
// tmp workaround for https://github.com/golang/go/issues/64246
Expand Down
5 changes: 5 additions & 0 deletions pkg/istioversion/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,18 @@ versions:
assert.Equal(t, "v0.1", eolVersions[0])

Map = versionMap
EOL = eolVersions
resolved, err := Resolve("latest")
assert.NoError(t, err)
assert.Equal(t, "v2.0.0", resolved)

resolved, err = Resolve("nonexistent-version")
assert.Error(t, err)
assert.Equal(t, "", resolved)

assert.True(t, IsEOLVersion("v0.1"))
assert.False(t, IsEOLVersion("nonexistent-version"))
assert.False(t, IsEOLVersion("v1.0.0"))
}

func TestParseVersionsYaml_SingleVersion(t *testing.T) {
Expand Down
3 changes: 3 additions & 0 deletions pkg/reconcile/cni.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ func (r *CNIReconciler) Validate(ctx context.Context, version, namespace string)
func (r *CNIReconciler) ComputeValues(version string, userValues *v1.CNIValues, profile string) (helm.Values, error) {
resolvedVersion, err := istioversion.Resolve(version)
if err != nil {
if istioversion.IsEOLVersion(version) {
return nil, reconciler.NewValidationError(fmt.Sprintf("version %q is end-of-life and cannot be installed; use a supported version", version))
}
return nil, fmt.Errorf("failed to resolve CNI version: %w", err)
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/reconcile/ztunnel.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ func (r *ZTunnelReconciler) Validate(ctx context.Context, version, namespace str
func (r *ZTunnelReconciler) ComputeValues(version string, userValues *v1.ZTunnelValues) (helm.Values, error) {
resolvedVersion, err := istioversion.Resolve(version)
if err != nil {
if istioversion.IsEOLVersion(version) {
return nil, reconciler.NewValidationError(fmt.Sprintf("version %q is end-of-life and cannot be installed; use a supported version", version))
}
return nil, fmt.Errorf("failed to resolve ZTunnel version: %w", err)
}

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/api/istio_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ var _ = Describe("Istio resource", Ordered, func() {
}
Expect(k8sClient.Create(ctx, istio, &client.CreateOptions{})).To(Succeed())
Eventually(getObject).WithArguments(ctx, k8sClient, istioKey, istio).
Should(HaveConditionMessage(v1.IstioConditionReconciled, "failed to resolve Istio version"))
Should(HaveConditionMessage(v1.IstioConditionReconciled, "is end-of-life and cannot be installed"))
})
})
})
Expand Down
Loading