mirror of https://github.com/crossplane/upjet.git
Compare commits
11 Commits
Author | SHA1 | Date |
---|---|---|
|
8b328b5feb | |
|
3e39bc3691 | |
|
8ded1c0b01 | |
|
f472f48ea8 | |
|
404ab86cb1 | |
|
aa58f1aaad | |
|
247b2d2d5f | |
|
9e55a83cc9 | |
|
11855fb98a | |
|
00389e5c31 | |
|
acb59402d6 |
|
@ -27,6 +27,7 @@ import (
|
|||
"github.com/hashicorp/terraform-plugin-go/tftypes"
|
||||
"github.com/pkg/errors"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/crossplane/upjet/pkg/config"
|
||||
|
@ -270,13 +271,15 @@ func (n *terraformPluginFrameworkExternalClient) getDiffPlanResponse(ctx context
|
|||
return nil, false, errors.Wrap(err, "cannot compare prior state and plan")
|
||||
}
|
||||
|
||||
// filter diffs that has unknown plan value which corresponds to
|
||||
// computed values. These cause unnecessary diff detection when only computed
|
||||
// attribute diffs exist in the raw diff and no actual diff exists in the
|
||||
// parametrizable attributes
|
||||
// Filter diffs that have unknown plan values, which correspond to
|
||||
// computed fields, and null plan values, which correspond to
|
||||
// not-specified fields. Such cases cause unnecessary diff detection
|
||||
// when only computed attributes or not-specified argument diffs
|
||||
// exist in the raw diff and no actual diff exists in the
|
||||
// parametrizable attributes.
|
||||
filteredDiff := make([]tftypes.ValueDiff, 0)
|
||||
for _, diff := range rawDiff {
|
||||
if diff.Value1.IsKnown() {
|
||||
if diff.Value1.IsKnown() && !diff.Value1.IsNull() {
|
||||
filteredDiff = append(filteredDiff, diff)
|
||||
}
|
||||
}
|
||||
|
@ -348,10 +351,16 @@ func (n *terraformPluginFrameworkExternalClient) Observe(ctx context.Context, mg
|
|||
if err != nil {
|
||||
return managed.ExternalObservation{}, errors.Wrap(err, "cannot marshal the attributes of the new state for late-initialization")
|
||||
}
|
||||
|
||||
policySet := sets.New[xpv1.ManagementAction](mg.(resource.Terraformed).GetManagementPolicies()...)
|
||||
policyHasLateInit := policySet.HasAny(xpv1.ManagementActionLateInitialize, xpv1.ManagementActionAll)
|
||||
if policyHasLateInit {
|
||||
specUpdateRequired, err = mg.(resource.Terraformed).LateInitialize(buff)
|
||||
if err != nil {
|
||||
return managed.ExternalObservation{}, errors.Wrap(err, "cannot late-initialize the managed resource")
|
||||
}
|
||||
}
|
||||
|
||||
err = mg.(resource.Terraformed).SetObservation(stateValueMap)
|
||||
if err != nil {
|
||||
return managed.ExternalObservation{}, errors.Errorf("could not set observation: %v", err)
|
||||
|
|
|
@ -158,13 +158,13 @@ func getExtendedParameters(ctx context.Context, tr resource.Terraformed, externa
|
|||
return params, nil
|
||||
}
|
||||
|
||||
func (c *TerraformPluginSDKConnector) processParamsWithStateFunc(schemaMap map[string]*schema.Schema, params map[string]any) map[string]any {
|
||||
func (c *TerraformPluginSDKConnector) processParamsWithHCLParser(schemaMap map[string]*schema.Schema, params map[string]any) map[string]any {
|
||||
if params == nil {
|
||||
return params
|
||||
}
|
||||
for key, param := range params {
|
||||
if sc, ok := schemaMap[key]; ok {
|
||||
params[key] = c.applyStateFuncToParam(sc, param)
|
||||
params[key] = c.applyHCLParserToParam(sc, param)
|
||||
} else {
|
||||
params[key] = param
|
||||
}
|
||||
|
@ -172,11 +172,11 @@ func (c *TerraformPluginSDKConnector) processParamsWithStateFunc(schemaMap map[s
|
|||
return params
|
||||
}
|
||||
|
||||
func (c *TerraformPluginSDKConnector) applyStateFuncToParam(sc *schema.Schema, param any) any { //nolint:gocyclo
|
||||
func (c *TerraformPluginSDKConnector) applyHCLParserToParam(sc *schema.Schema, param any) any { //nolint:gocyclo
|
||||
if param == nil {
|
||||
return param
|
||||
}
|
||||
switch sc.Type {
|
||||
switch sc.Type { //nolint:exhaustive
|
||||
case schema.TypeMap:
|
||||
if sc.Elem == nil {
|
||||
return param
|
||||
|
@ -185,7 +185,7 @@ func (c *TerraformPluginSDKConnector) applyStateFuncToParam(sc *schema.Schema, p
|
|||
// TypeMap only supports schema in Elem
|
||||
if mapSchema, ok := sc.Elem.(*schema.Schema); ok && okParam {
|
||||
for pk, pv := range pmap {
|
||||
pmap[pk] = c.applyStateFuncToParam(mapSchema, pv)
|
||||
pmap[pk] = c.applyHCLParserToParam(mapSchema, pv)
|
||||
}
|
||||
return pmap
|
||||
}
|
||||
|
@ -196,13 +196,13 @@ func (c *TerraformPluginSDKConnector) applyStateFuncToParam(sc *schema.Schema, p
|
|||
pArray, okParam := param.([]any)
|
||||
if setSchema, ok := sc.Elem.(*schema.Schema); ok && okParam {
|
||||
for i, p := range pArray {
|
||||
pArray[i] = c.applyStateFuncToParam(setSchema, p)
|
||||
pArray[i] = c.applyHCLParserToParam(setSchema, p)
|
||||
}
|
||||
return pArray
|
||||
} else if setResource, ok := sc.Elem.(*schema.Resource); ok {
|
||||
for i, p := range pArray {
|
||||
if resParam, okRParam := p.(map[string]any); okRParam {
|
||||
pArray[i] = c.processParamsWithStateFunc(setResource.Schema, resParam)
|
||||
pArray[i] = c.processParamsWithHCLParser(setResource.Schema, resParam)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -216,16 +216,6 @@ func (c *TerraformPluginSDKConnector) applyStateFuncToParam(sc *schema.Schema, p
|
|||
param = hclProccessedParam
|
||||
}
|
||||
}
|
||||
if sc.StateFunc != nil {
|
||||
return sc.StateFunc(param)
|
||||
}
|
||||
return param
|
||||
case schema.TypeBool, schema.TypeInt, schema.TypeFloat:
|
||||
if sc.StateFunc != nil {
|
||||
return sc.StateFunc(param)
|
||||
}
|
||||
return param
|
||||
case schema.TypeInvalid:
|
||||
return param
|
||||
default:
|
||||
return param
|
||||
|
@ -252,7 +242,7 @@ func (c *TerraformPluginSDKConnector) Connect(ctx context.Context, mg xpresource
|
|||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to get the extended parameters for resource %q", mg.GetName())
|
||||
}
|
||||
params = c.processParamsWithStateFunc(c.config.TerraformResource.Schema, params)
|
||||
params = c.processParamsWithHCLParser(c.config.TerraformResource.Schema, params)
|
||||
|
||||
schemaBlock := c.config.TerraformResource.CoreConfigSchema()
|
||||
rawConfig, err := schema.JSONMapToStateValue(params, schemaBlock)
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -1,7 +1,3 @@
|
|||
// SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
{{ .Header }}
|
||||
|
||||
{{ .GenStatement }}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2024 The Crossplane Authors <https://crossplane.io>
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
|
@ -268,7 +268,13 @@ func NewSensitiveField(g *Builder, cfg *config.Resource, r *resource, sch *schem
|
|||
return nil, true, nil
|
||||
}
|
||||
sfx := "SecretRef"
|
||||
switch f.FieldType.(type) {
|
||||
case *types.Slice:
|
||||
f.CRDPaths[len(f.CRDPaths)-2] = f.CRDPaths[len(f.CRDPaths)-2] + sfx
|
||||
cfg.Sensitive.AddFieldPath(fieldPathWithWildcard(f.TerraformPaths), "spec.forProvider."+fieldPathWithWildcard(f.CRDPaths))
|
||||
default:
|
||||
cfg.Sensitive.AddFieldPath(fieldPathWithWildcard(f.TerraformPaths), "spec.forProvider."+fieldPathWithWildcard(f.CRDPaths)+sfx)
|
||||
}
|
||||
// todo(turkenh): do we need to support other field types as sensitive?
|
||||
if f.FieldType.String() != "string" && f.FieldType.String() != "*string" && f.FieldType.String() != "[]string" &&
|
||||
f.FieldType.String() != "[]*string" && f.FieldType.String() != "map[string]string" && f.FieldType.String() != "map[string]*string" {
|
||||
|
|
Loading…
Reference in New Issue