mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
prevent targeting for unsupported API versions
This commit is contained in:
parent
650a272a1d
commit
0eea4e7c62
@ -8,6 +8,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
|
|
||||||
tfe "github.com/hashicorp/go-tfe"
|
tfe "github.com/hashicorp/go-tfe"
|
||||||
|
version "github.com/hashicorp/go-version"
|
||||||
"github.com/hashicorp/terraform/backend"
|
"github.com/hashicorp/terraform/backend"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
"github.com/hashicorp/terraform/tfdiags"
|
"github.com/hashicorp/terraform/tfdiags"
|
||||||
@ -94,6 +95,26 @@ func (b *Remote) opApply(stopCtx, cancelCtx context.Context, op *backend.Operati
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(op.Targets) != 0 {
|
||||||
|
// For API versions prior to 2.3, RemoteAPIVersion will return an empty string,
|
||||||
|
// so if there's an error when parsing the RemoteAPIVersion, it's handled as
|
||||||
|
// equivalent to an API version < 2.3.
|
||||||
|
currentAPIVersion, parseErr := version.NewVersion(b.client.RemoteAPIVersion())
|
||||||
|
desiredAPIVersion, _ := version.NewVersion("2.3")
|
||||||
|
|
||||||
|
if parseErr != nil || currentAPIVersion.LessThan(desiredAPIVersion) {
|
||||||
|
diags = diags.Append(tfdiags.Sourceless(
|
||||||
|
tfdiags.Error,
|
||||||
|
"Resource targeting is not supported",
|
||||||
|
fmt.Sprintf(
|
||||||
|
`The host %s does not support the -target option for `+
|
||||||
|
`remote plans.`,
|
||||||
|
b.hostname,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return if there are any errors.
|
// Return if there are any errors.
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
return nil, diags.Err()
|
return nil, diags.Err()
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
tfe "github.com/hashicorp/go-tfe"
|
tfe "github.com/hashicorp/go-tfe"
|
||||||
|
version "github.com/hashicorp/go-version"
|
||||||
"github.com/hashicorp/terraform/backend"
|
"github.com/hashicorp/terraform/backend"
|
||||||
"github.com/hashicorp/terraform/tfdiags"
|
"github.com/hashicorp/terraform/tfdiags"
|
||||||
)
|
)
|
||||||
@ -98,6 +99,26 @@ func (b *Remote) opPlan(stopCtx, cancelCtx context.Context, op *backend.Operatio
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(op.Targets) != 0 {
|
||||||
|
// For API versions prior to 2.3, RemoteAPIVersion will return an empty string,
|
||||||
|
// so if there's an error when parsing the RemoteAPIVersion, it's handled as
|
||||||
|
// equivalent to an API version < 2.3.
|
||||||
|
currentAPIVersion, parseErr := version.NewVersion(b.client.RemoteAPIVersion())
|
||||||
|
desiredAPIVersion, _ := version.NewVersion("2.3")
|
||||||
|
|
||||||
|
if parseErr != nil || currentAPIVersion.LessThan(desiredAPIVersion) {
|
||||||
|
diags = diags.Append(tfdiags.Sourceless(
|
||||||
|
tfdiags.Error,
|
||||||
|
"Resource targeting is not supported",
|
||||||
|
fmt.Sprintf(
|
||||||
|
`The host %s does not support the -target option for `+
|
||||||
|
`remote plans.`,
|
||||||
|
b.hostname,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return if there are any errors.
|
// Return if there are any errors.
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
return nil, diags.Err()
|
return nil, diags.Err()
|
||||||
|
@ -207,6 +207,12 @@ func testServer(t *testing.T) *httptest.Server {
|
|||||||
}`, path.Base(r.URL.Path)))
|
}`, path.Base(r.URL.Path)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Respond to pings to get the API version header.
|
||||||
|
mux.HandleFunc("/api/v2/ping", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.Header().Set("TFP-API-Version", "2.3")
|
||||||
|
})
|
||||||
|
|
||||||
// Respond to the initial query to read the hashicorp org entitlements.
|
// Respond to the initial query to read the hashicorp org entitlements.
|
||||||
mux.HandleFunc("/api/v2/organizations/hashicorp/entitlement-set", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/api/v2/organizations/hashicorp/entitlement-set", func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/vnd.api+json")
|
w.Header().Set("Content-Type", "application/vnd.api+json")
|
||||||
|
Loading…
Reference in New Issue
Block a user