mirror of https://github.com/crossplane/upjet.git
Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
|
0fbc2bfdea | |
|
d11fb1ffbc | |
|
9f045fd1da | |
|
7975d92bce |
|
@ -168,17 +168,25 @@ func GetSensitiveParameters(ctx context.Context, client SecretClient, from runti
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
pavedTF := fieldpath.Pave(into)
|
pavedTF := fieldpath.Pave(into)
|
||||||
|
prefixes := []string{"spec.initProvider.", "spec.forProvider."}
|
||||||
|
|
||||||
for tfPath, jsonPath := range mapping {
|
for tfPath, jsonPath := range mapping {
|
||||||
jp := jsonPath
|
jp := jsonPath
|
||||||
groups := reFieldPathSpec.FindStringSubmatch(jsonPath)
|
groups := reFieldPathSpec.FindStringSubmatch(jsonPath)
|
||||||
if len(groups) == 3 {
|
if len(groups) == 3 {
|
||||||
jp = groups[2]
|
jp = groups[2]
|
||||||
|
} else if strings.HasPrefix(jsonPath, "status.atProvider.") {
|
||||||
|
// we will not be prefixing the JSON fieldpath expression if it starts
|
||||||
|
// with "status.atProvider" in case there is a spec.forProvider.status
|
||||||
|
// field. If there exists a spec.forProvider.status field, then the
|
||||||
|
// fieldpath.ExpandWildcards will complain instead of expanding the
|
||||||
|
// fieldpath expression as an empty slice.
|
||||||
|
prefixes = []string{""}
|
||||||
}
|
}
|
||||||
|
|
||||||
// spec.forProvider secret references override the spec.initProvider
|
// spec.forProvider secret references override the spec.initProvider
|
||||||
// references.
|
// references.
|
||||||
for _, p := range []string{"spec.initProvider.", "spec.forProvider."} {
|
for _, p := range prefixes {
|
||||||
if err := storeSensitiveData(ctx, client, tfPath, p+jp, pavedTF, pavedJSON, mapping); err != nil {
|
if err := storeSensitiveData(ctx, client, tfPath, p+jp, pavedTF, pavedJSON, mapping); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,8 @@ const (
|
||||||
errUnmarshalTFState = "cannot unmarshal tfstate file"
|
errUnmarshalTFState = "cannot unmarshal tfstate file"
|
||||||
errFmtNonString = "cannot work with a non-string id: %s"
|
errFmtNonString = "cannot work with a non-string id: %s"
|
||||||
errReadMainTF = "cannot read main.tf.json file"
|
errReadMainTF = "cannot read main.tf.json file"
|
||||||
|
|
||||||
|
defaultRegistry = `provider["registry.terraform.io/%s"]`
|
||||||
)
|
)
|
||||||
|
|
||||||
// FileProducerOption allows you to configure FileProducer
|
// FileProducerOption allows you to configure FileProducer
|
||||||
|
@ -190,7 +192,7 @@ func (fp *FileProducer) WriteMainTF() (ProviderHandle, error) {
|
||||||
|
|
||||||
// EnsureTFState writes the Terraform state that should exist in the filesystem
|
// EnsureTFState writes the Terraform state that should exist in the filesystem
|
||||||
// to start any Terraform operation.
|
// to start any Terraform operation.
|
||||||
func (fp *FileProducer) EnsureTFState(_ context.Context, tfID string) error {
|
func (fp *FileProducer) EnsureTFState(_ context.Context, tfID string) error { //nolint:gocyclo // easier to follow as a unit
|
||||||
// TODO(muvaf): Reduce the cyclomatic complexity by separating the attributes
|
// TODO(muvaf): Reduce the cyclomatic complexity by separating the attributes
|
||||||
// generation into its own function/interface.
|
// generation into its own function/interface.
|
||||||
empty, err := fp.isStateEmpty()
|
empty, err := fp.isStateEmpty()
|
||||||
|
@ -229,14 +231,19 @@ func (fp *FileProducer) EnsureTFState(_ context.Context, tfID string) error {
|
||||||
s := json.NewStateV4()
|
s := json.NewStateV4()
|
||||||
s.TerraformVersion = fp.Setup.Version
|
s.TerraformVersion = fp.Setup.Version
|
||||||
s.Lineage = string(fp.Resource.GetUID())
|
s.Lineage = string(fp.Resource.GetUID())
|
||||||
|
|
||||||
|
registry := fp.Setup.Requirement.Registry
|
||||||
|
if registry == "" {
|
||||||
|
registry = defaultRegistry
|
||||||
|
}
|
||||||
|
|
||||||
s.Resources = []json.ResourceStateV4{
|
s.Resources = []json.ResourceStateV4{
|
||||||
{
|
{
|
||||||
Mode: "managed",
|
Mode: "managed",
|
||||||
Type: fp.Resource.GetTerraformResourceType(),
|
Type: fp.Resource.GetTerraformResourceType(),
|
||||||
Name: fp.Resource.GetName(),
|
Name: fp.Resource.GetName(),
|
||||||
// TODO(muvaf): we should get the full URL from Dockerfile since
|
// Support for private/non-default registries
|
||||||
// providers don't have to be hosted in registry.terraform.io
|
ProviderConfig: fmt.Sprintf(registry, fp.Setup.Requirement.Source),
|
||||||
ProviderConfig: fmt.Sprintf(`provider["registry.terraform.io/%s"]`, fp.Setup.Requirement.Source),
|
|
||||||
Instances: []json.InstanceObjectStateV4{
|
Instances: []json.InstanceObjectStateV4{
|
||||||
{
|
{
|
||||||
SchemaVersion: uint64(fp.Resource.GetTerraformSchemaVersion()),
|
SchemaVersion: uint64(fp.Resource.GetTerraformSchemaVersion()),
|
||||||
|
|
|
@ -47,6 +47,9 @@ type ProviderRequirement struct {
|
||||||
|
|
||||||
// Version of the provider. An example value is "4.0"
|
// Version of the provider. An example value is "4.0"
|
||||||
Version string
|
Version string
|
||||||
|
|
||||||
|
// Registry of the provider. An example value is `provider["registry.terraform.io/%s"]`
|
||||||
|
Registry string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProviderConfiguration holds the setup configuration body
|
// ProviderConfiguration holds the setup configuration body
|
||||||
|
|
Loading…
Reference in New Issue