mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-22 15:13:29 -06:00
Warn user about provider version 0.0.0 (#2281)
Signed-off-by: Ilia Gogotchuri <ilia.gogotchuri0@gmail.com>
This commit is contained in:
parent
c433f87c58
commit
267b7f6008
@ -46,6 +46,7 @@ ENHANCEMENTS:
|
|||||||
* Changes to encryption configuration now auto-apply the migration ([#2232](https://github.com/opentofu/opentofu/pull/2232))
|
* Changes to encryption configuration now auto-apply the migration ([#2232](https://github.com/opentofu/opentofu/pull/2232))
|
||||||
* References to vars, data, etc. are now usable in variable validation ([#2216](https://github.com/opentofu/opentofu/pull/2216))
|
* References to vars, data, etc. are now usable in variable validation ([#2216](https://github.com/opentofu/opentofu/pull/2216))
|
||||||
* `AzureRM` backend now support `timeout_seconds` with default timeout of 300 seconds ([#2263](https://github.com/opentofu/opentofu/pull/2263))
|
* `AzureRM` backend now support `timeout_seconds` with default timeout of 300 seconds ([#2263](https://github.com/opentofu/opentofu/pull/2263))
|
||||||
|
* Adds warning about provider version `0.0.0` ([#2281](https://github.com/opentofu/opentofu/pull/2281))
|
||||||
|
|
||||||
BUG FIXES:
|
BUG FIXES:
|
||||||
* `templatefile` no longer crashes if the given filename is derived from a sensitive value. ([#1801](https://github.com/opentofu/opentofu/issues/1801))
|
* `templatefile` no longer crashes if the given filename is derived from a sensitive value. ([#1801](https://github.com/opentofu/opentofu/issues/1801))
|
||||||
|
@ -7,7 +7,9 @@ package getproviders
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/apparentlymart/go-versions/versions"
|
||||||
"github.com/opentofu/opentofu/internal/addrs"
|
"github.com/opentofu/opentofu/internal/addrs"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,7 +56,16 @@ func (s *FilesystemMirrorSource) AvailableVersions(ctx context.Context, provider
|
|||||||
ret = append(ret, v)
|
ret = append(ret, v)
|
||||||
}
|
}
|
||||||
ret.Sort()
|
ret.Sort()
|
||||||
return ret, nil, nil
|
// Check the existence of provider version 0.0.0 in the filesystem and warn the user about it
|
||||||
|
// If it exists, it will be the first element in the sorted list
|
||||||
|
var warnings Warnings
|
||||||
|
if len(ret) > 0 && ret[0] == versions.Unspecified {
|
||||||
|
warning := fmt.Sprintf("Provider %s has an unspecified (0.0.0) version available in the filesystem mirror, source at %s. It will not be used. \n"+
|
||||||
|
"If the version 0.0.0 is intended to represent a non-published provider, consider using dev_overrides - https://opentofu.org/docs/cli/config/config-file/#development-overrides-for-provider-developers",
|
||||||
|
provider, s.baseDir)
|
||||||
|
warnings = append(warnings, warning)
|
||||||
|
}
|
||||||
|
return ret, warnings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PackageMeta checks to see if the source's base directory contains a
|
// PackageMeta checks to see if the source's base directory contains a
|
||||||
|
@ -7,6 +7,7 @@ package getproviders
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/apparentlymart/go-versions/versions"
|
"github.com/apparentlymart/go-versions/versions"
|
||||||
@ -125,6 +126,30 @@ func TestFilesystemMirrorSourceAvailableVersions(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilesystemMirrorSourceAvailableVersions_Unspecified(t *testing.T) {
|
||||||
|
unspecifiedProvider := addrs.Provider{
|
||||||
|
Hostname: svchost.Hostname("registry.opentofu.org"),
|
||||||
|
Namespace: "testnamespace",
|
||||||
|
Type: "unspecified",
|
||||||
|
}
|
||||||
|
source := NewFilesystemMirrorSource("testdata/filesystem-mirror-unspecified")
|
||||||
|
got, warn, err := source.AvailableVersions(context.Background(), unspecifiedProvider)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// Check that we got the unspecified version
|
||||||
|
if len(got) != 1 || got[0] != versions.Unspecified {
|
||||||
|
t.Fatalf("expected unspecified version, got %v", got)
|
||||||
|
}
|
||||||
|
// We should have unspecified (0.0.0) version warning
|
||||||
|
if len(warn) != 1 {
|
||||||
|
t.Fatalf("expected 1 warning, got %v", warn)
|
||||||
|
}
|
||||||
|
warningBit := "unspecified (0.0.0) version available in the filesystem mirror"
|
||||||
|
if !strings.Contains(warn[0], warningBit) {
|
||||||
|
t.Fatalf("expected warning to contain %q, got %q", warningBit, warn[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
func TestFilesystemMirrorSourcePackageMeta(t *testing.T) {
|
func TestFilesystemMirrorSourcePackageMeta(t *testing.T) {
|
||||||
t.Run("available platform", func(t *testing.T) {
|
t.Run("available platform", func(t *testing.T) {
|
||||||
source := NewFilesystemMirrorSource("testdata/filesystem-mirror")
|
source := NewFilesystemMirrorSource("testdata/filesystem-mirror")
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
# This is just a placeholder file for discovery testing, not a real provider plugin.
|
@ -291,10 +291,18 @@ NeedProvider:
|
|||||||
// that context will fail immediately anyway.
|
// that context will fail immediately anyway.
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if cb := evts.QueryPackagesBegin; cb != nil {
|
if cb := evts.QueryPackagesBegin; cb != nil {
|
||||||
cb(provider, reqs[provider], locked[provider])
|
cb(provider, reqs[provider], locked[provider])
|
||||||
}
|
}
|
||||||
|
// Version 0.0.0 not supported
|
||||||
|
if err := checkUnspecifiedVersion(acceptableVersions); err != nil {
|
||||||
|
errs[provider] = err
|
||||||
|
if cb := evts.QueryPackagesFailure; cb != nil {
|
||||||
|
cb(provider, err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
available, warnings, err := i.source.AvailableVersions(ctx, provider)
|
available, warnings, err := i.source.AvailableVersions(ctx, provider)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs[provider] = err
|
errs[provider] = err
|
||||||
@ -736,6 +744,15 @@ NeedProvider:
|
|||||||
return locks, nil
|
return locks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkUnspecifiedVersion Check the presence of version 0.0.0 and return an error with a tip
|
||||||
|
func checkUnspecifiedVersion(acceptableVersions versions.Set) error {
|
||||||
|
if !acceptableVersions.Exactly(versions.Unspecified) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
tip := "If the version 0.0.0 is intended to represent a non-published provider, consider using dev_overrides - https://opentofu.org/docs/cli/config/config-file/#development-overrides-for-provider-developers"
|
||||||
|
return fmt.Errorf("0.0.0 is not a valid provider version. \n%s", tip)
|
||||||
|
}
|
||||||
|
|
||||||
// InstallMode customizes the details of how an install operation treats
|
// InstallMode customizes the details of how an install operation treats
|
||||||
// providers that have versions already cached in the target directory.
|
// providers that have versions already cached in the target directory.
|
||||||
type InstallMode rune
|
type InstallMode rune
|
||||||
|
@ -2315,6 +2315,12 @@ func TestEnsureProviderVersions_local_source(t *testing.T) {
|
|||||||
wantHash: getproviders.NilHash, // installation fails for a provider with no executable
|
wantHash: getproviders.NilHash, // installation fails for a provider with no executable
|
||||||
err: "provider binary not found: could not find executable file starting with terraform-provider-executable",
|
err: "provider binary not found: could not find executable file starting with terraform-provider-executable",
|
||||||
},
|
},
|
||||||
|
"unspecified-version": {
|
||||||
|
provider: "null",
|
||||||
|
version: "0.0.0",
|
||||||
|
wantHash: getproviders.NilHash,
|
||||||
|
err: "0.0.0 is not a valid provider version. \nIf the version 0.0.0 is intended to represent a non-published provider, consider using dev_overrides - https://opentofu.org/docs/cli/config/config-file/#development-overrides-for-provider-developers",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, test := range tests {
|
for name, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user