fix: some_fixes #74
10 changed files with 715 additions and 29 deletions
38
cmd/cmd/publish/templates/Caddyfile
Normal file
38
cmd/cmd/publish/templates/Caddyfile
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
log {
|
||||||
|
level debug
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
filesystem tf s3 {
|
||||||
|
bucket "terraform-provider-privatepreview"
|
||||||
|
region eu01
|
||||||
|
endpoint https://object.storage.eu01.onstackit.cloud
|
||||||
|
use_path_style
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tfregistry.sysops.stackit.rocks {
|
||||||
|
encode zstd gzip
|
||||||
|
|
||||||
|
handle_path /docs/* {
|
||||||
|
root /srv/www
|
||||||
|
templates
|
||||||
|
|
||||||
|
@md {
|
||||||
|
file {path}
|
||||||
|
path *.md
|
||||||
|
}
|
||||||
|
|
||||||
|
rewrite @md /markdown.html
|
||||||
|
|
||||||
|
file_server {
|
||||||
|
browse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file_server {
|
||||||
|
fs tf
|
||||||
|
browse
|
||||||
|
}
|
||||||
|
}
|
||||||
54
docs/data-sources/sqlserverflexbeta_user.md
Normal file
54
docs/data-sources/sqlserverflexbeta_user.md
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
# generated by https://github.com/hashicorp/terraform-plugin-docs
|
||||||
|
page_title: "stackitprivatepreview_sqlserverflexbeta_user Data Source - stackitprivatepreview"
|
||||||
|
subcategory: ""
|
||||||
|
description: |-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# stackitprivatepreview_sqlserverflexbeta_user (Data Source)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- schema generated by tfplugindocs -->
|
||||||
|
## Schema
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
- `instance_id` (String) The ID of the instance.
|
||||||
|
- `project_id` (String) The STACKIT project ID.
|
||||||
|
- `region` (String) The region which should be addressed
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
- `page` (Number) Number of the page of items list to be returned.
|
||||||
|
- `size` (Number) Number of items to be returned on each page.
|
||||||
|
- `sort` (String) Sorting of the users to be returned on each page.
|
||||||
|
|
||||||
|
### Read-Only
|
||||||
|
|
||||||
|
- `pagination` (Attributes) (see [below for nested schema](#nestedatt--pagination))
|
||||||
|
- `users` (Attributes List) List of all users inside an instance (see [below for nested schema](#nestedatt--users))
|
||||||
|
|
||||||
|
<a id="nestedatt--pagination"></a>
|
||||||
|
### Nested Schema for `pagination`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `page` (Number)
|
||||||
|
- `size` (Number)
|
||||||
|
- `sort` (String)
|
||||||
|
- `total_pages` (Number)
|
||||||
|
- `total_rows` (Number)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="nestedatt--users"></a>
|
||||||
|
### Nested Schema for `users`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `status` (String) The current status of the user.
|
||||||
|
- `tf_original_api_id` (Number) The ID of the user.
|
||||||
|
- `username` (String) The name of the user.
|
||||||
38
docs/resources/sqlserverflexbeta_user.md
Normal file
38
docs/resources/sqlserverflexbeta_user.md
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# generated by https://github.com/hashicorp/terraform-plugin-docs
|
||||||
|
page_title: "stackitprivatepreview_sqlserverflexbeta_user Resource - stackitprivatepreview"
|
||||||
|
subcategory: ""
|
||||||
|
description: |-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# stackitprivatepreview_sqlserverflexbeta_user (Resource)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- schema generated by tfplugindocs -->
|
||||||
|
## Schema
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
- `roles` (List of String) A list containing the user roles for the instance. A list with the valid user roles can be retrieved using the List Roles endpoint.
|
||||||
|
- `username` (String) The name of the user.
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
- `default_database` (String) The default database for a user of the instance.
|
||||||
|
- `instance_id` (String) The ID of the instance.
|
||||||
|
- `project_id` (String) The STACKIT project ID.
|
||||||
|
- `region` (String) The region which should be addressed
|
||||||
|
- `user_id` (Number) The ID of the user.
|
||||||
|
|
||||||
|
### Read-Only
|
||||||
|
|
||||||
|
- `host` (String) The host of the instance in which the user belongs to.
|
||||||
|
- `id` (Number) The ID of the user.
|
||||||
|
- `password` (String) The password for the user.
|
||||||
|
- `port` (Number) The port of the instance in which the user belongs to.
|
||||||
|
- `status` (String) The current status of the user.
|
||||||
|
- `uri` (String) The connection string for the user to the instance.
|
||||||
|
|
@ -321,6 +321,7 @@ func (r *databaseResource) Read(
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: use values from api to identify drift
|
||||||
// Save identity into Terraform state
|
// Save identity into Terraform state
|
||||||
identity := DatabaseResourceIdentityModel{
|
identity := DatabaseResourceIdentityModel{
|
||||||
ProjectID: types.StringValue(projectId),
|
ProjectID: types.StringValue(projectId),
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"github.com/hashicorp/terraform-plugin-framework/attr"
|
"github.com/hashicorp/terraform-plugin-framework/attr"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/types"
|
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
|
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
|
||||||
"github.com/hashicorp/terraform-plugin-log/tflog"
|
|
||||||
|
|
||||||
postgresflex "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/pkg_gen/postgresflexalpha"
|
postgresflex "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/pkg_gen/postgresflexalpha"
|
||||||
postgresflexalphadatasource "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance/datasources_gen"
|
postgresflexalphadatasource "tf-provider.git.onstackit.cloud/stackit-dev-tools/terraform-provider-stackitprivatepreview/stackit/internal/services/postgresflexalpha/instance/datasources_gen"
|
||||||
|
|
@ -20,28 +19,6 @@ func mapGetInstanceResponseToModel(
|
||||||
m *postgresflexalpharesource.InstanceModel,
|
m *postgresflexalpharesource.InstanceModel,
|
||||||
resp *postgresflex.GetInstanceResponse,
|
resp *postgresflex.GetInstanceResponse,
|
||||||
) error {
|
) error {
|
||||||
tflog.Debug(
|
|
||||||
ctx, ">>>> MSH DEBUG <<<<", map[string]interface{}{
|
|
||||||
"id": m.Id.ValueString(),
|
|
||||||
"instance_id": m.InstanceId.ValueString(),
|
|
||||||
"backup_schedule": m.BackupSchedule.ValueString(),
|
|
||||||
"flavor_id": m.FlavorId.ValueString(),
|
|
||||||
"encryption.kek_key_id": m.Encryption.KekKeyId.ValueString(),
|
|
||||||
"encryption.kek_key_ring_id": m.Encryption.KekKeyRingId.ValueString(),
|
|
||||||
"encryption.kek_key_version": m.Encryption.KekKeyVersion.ValueString(),
|
|
||||||
"encryption.service_account": m.Encryption.ServiceAccount.ValueString(),
|
|
||||||
"is_deletable": m.IsDeletable.ValueBool(),
|
|
||||||
"name": m.Name.ValueString(),
|
|
||||||
"status": m.Status.ValueString(),
|
|
||||||
"retention_days": m.RetentionDays.ValueInt64(),
|
|
||||||
"replicas": m.Replicas.ValueInt64(),
|
|
||||||
"network.instance_address": m.Network.InstanceAddress.ValueString(),
|
|
||||||
"network.router_address": m.Network.RouterAddress.ValueString(),
|
|
||||||
"version": m.Version.ValueString(),
|
|
||||||
"network.acl": m.Network.Acl.String(),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
m.BackupSchedule = types.StringValue(resp.GetBackupSchedule())
|
m.BackupSchedule = types.StringValue(resp.GetBackupSchedule())
|
||||||
m.Encryption = postgresflexalpharesource.NewEncryptionValueNull()
|
m.Encryption = postgresflexalpharesource.NewEncryptionValueNull()
|
||||||
if resp.HasEncryption() {
|
if resp.HasEncryption() {
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@ fields:
|
||||||
- name: 'id'
|
- name: 'id'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'user_id'
|
- name: 'user_id'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'instance_id'
|
- name: 'instance_id'
|
||||||
validators:
|
validators:
|
||||||
|
|
@ -13,6 +15,7 @@ fields:
|
||||||
- validate.UUID
|
- validate.UUID
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'project_id'
|
- name: 'project_id'
|
||||||
validators:
|
validators:
|
||||||
|
|
@ -32,24 +35,30 @@ fields:
|
||||||
|
|
||||||
- name: 'password'
|
- name: 'password'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
||||||
- name: 'host'
|
- name: 'host'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
||||||
- name: 'port'
|
- name: 'port'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
||||||
- name: 'region'
|
- name: 'region'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'RequiresReplace'
|
- 'RequiresReplace'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'status'
|
- name: 'status'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
||||||
- name: 'connection_string'
|
- name: 'connection_string'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,569 @@
|
||||||
|
// Code generated by terraform-plugin-framework-generator DO NOT EDIT.
|
||||||
|
|
||||||
|
package sqlserverflexalpha
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/attr"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
|
||||||
|
"github.com/hashicorp/terraform-plugin-go/tftypes"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
func VersionDataSourceSchema(ctx context.Context) schema.Schema {
|
||||||
|
return schema.Schema{
|
||||||
|
Attributes: map[string]schema.Attribute{
|
||||||
|
"project_id": schema.StringAttribute{
|
||||||
|
Required: true,
|
||||||
|
Description: "The STACKIT project ID.",
|
||||||
|
MarkdownDescription: "The STACKIT project ID.",
|
||||||
|
},
|
||||||
|
"region": schema.StringAttribute{
|
||||||
|
Required: true,
|
||||||
|
Description: "The region which should be addressed",
|
||||||
|
MarkdownDescription: "The region which should be addressed",
|
||||||
|
Validators: []validator.String{
|
||||||
|
stringvalidator.OneOf(
|
||||||
|
"eu01",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"versions": schema.ListNestedAttribute{
|
||||||
|
NestedObject: schema.NestedAttributeObject{
|
||||||
|
Attributes: map[string]schema.Attribute{
|
||||||
|
"beta": schema.BoolAttribute{
|
||||||
|
Computed: true,
|
||||||
|
Description: "Flag if the version is a beta version. If set the version may contain bugs and is not fully tested.",
|
||||||
|
MarkdownDescription: "Flag if the version is a beta version. If set the version may contain bugs and is not fully tested.",
|
||||||
|
},
|
||||||
|
"deprecated": schema.StringAttribute{
|
||||||
|
Computed: true,
|
||||||
|
Description: "Timestamp in RFC3339 format which says when the version will no longer be supported by STACKIT.",
|
||||||
|
MarkdownDescription: "Timestamp in RFC3339 format which says when the version will no longer be supported by STACKIT.",
|
||||||
|
},
|
||||||
|
"recommend": schema.BoolAttribute{
|
||||||
|
Computed: true,
|
||||||
|
Description: "Flag if the version is recommend by the STACKIT Team.",
|
||||||
|
MarkdownDescription: "Flag if the version is recommend by the STACKIT Team.",
|
||||||
|
},
|
||||||
|
"version": schema.StringAttribute{
|
||||||
|
Computed: true,
|
||||||
|
Description: "The sqlserver version used for the instance.",
|
||||||
|
MarkdownDescription: "The sqlserver version used for the instance.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CustomType: VersionsType{
|
||||||
|
ObjectType: types.ObjectType{
|
||||||
|
AttrTypes: VersionsValue{}.AttributeTypes(ctx),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Computed: true,
|
||||||
|
Description: "A list containing available sqlserver versions.",
|
||||||
|
MarkdownDescription: "A list containing available sqlserver versions.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type VersionModel struct {
|
||||||
|
ProjectId types.String `tfsdk:"project_id"`
|
||||||
|
Region types.String `tfsdk:"region"`
|
||||||
|
Versions types.List `tfsdk:"versions"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ basetypes.ObjectTypable = VersionsType{}
|
||||||
|
|
||||||
|
type VersionsType struct {
|
||||||
|
basetypes.ObjectType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t VersionsType) Equal(o attr.Type) bool {
|
||||||
|
other, ok := o.(VersionsType)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return t.ObjectType.Equal(other.ObjectType)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t VersionsType) String() string {
|
||||||
|
return "VersionsType"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t VersionsType) ValueFromObject(ctx context.Context, in basetypes.ObjectValue) (basetypes.ObjectValuable, diag.Diagnostics) {
|
||||||
|
var diags diag.Diagnostics
|
||||||
|
|
||||||
|
attributes := in.Attributes()
|
||||||
|
|
||||||
|
betaAttribute, ok := attributes["beta"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`beta is missing from object`)
|
||||||
|
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
betaVal, ok := betaAttribute.(basetypes.BoolValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`beta expected to be basetypes.BoolValue, was: %T`, betaAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecatedAttribute, ok := attributes["deprecated"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`deprecated is missing from object`)
|
||||||
|
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecatedVal, ok := deprecatedAttribute.(basetypes.StringValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`deprecated expected to be basetypes.StringValue, was: %T`, deprecatedAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
recommendAttribute, ok := attributes["recommend"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`recommend is missing from object`)
|
||||||
|
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
recommendVal, ok := recommendAttribute.(basetypes.BoolValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`recommend expected to be basetypes.BoolValue, was: %T`, recommendAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
versionAttribute, ok := attributes["version"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`version is missing from object`)
|
||||||
|
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
versionVal, ok := versionAttribute.(basetypes.StringValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`version expected to be basetypes.StringValue, was: %T`, versionAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
if diags.HasError() {
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
return VersionsValue{
|
||||||
|
Beta: betaVal,
|
||||||
|
Deprecated: deprecatedVal,
|
||||||
|
Recommend: recommendVal,
|
||||||
|
Version: versionVal,
|
||||||
|
state: attr.ValueStateKnown,
|
||||||
|
}, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVersionsValueNull() VersionsValue {
|
||||||
|
return VersionsValue{
|
||||||
|
state: attr.ValueStateNull,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVersionsValueUnknown() VersionsValue {
|
||||||
|
return VersionsValue{
|
||||||
|
state: attr.ValueStateUnknown,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVersionsValue(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) (VersionsValue, diag.Diagnostics) {
|
||||||
|
var diags diag.Diagnostics
|
||||||
|
|
||||||
|
// Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/521
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
for name, attributeType := range attributeTypes {
|
||||||
|
attribute, ok := attributes[name]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Missing VersionsValue Attribute Value",
|
||||||
|
"While creating a VersionsValue value, a missing attribute value was detected. "+
|
||||||
|
"A VersionsValue must contain values for all attributes, even if null or unknown. "+
|
||||||
|
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
|
||||||
|
fmt.Sprintf("VersionsValue Attribute Name (%s) Expected Type: %s", name, attributeType.String()),
|
||||||
|
)
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if !attributeType.Equal(attribute.Type(ctx)) {
|
||||||
|
diags.AddError(
|
||||||
|
"Invalid VersionsValue Attribute Type",
|
||||||
|
"While creating a VersionsValue value, an invalid attribute value was detected. "+
|
||||||
|
"A VersionsValue must use a matching attribute type for the value. "+
|
||||||
|
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
|
||||||
|
fmt.Sprintf("VersionsValue Attribute Name (%s) Expected Type: %s\n", name, attributeType.String())+
|
||||||
|
fmt.Sprintf("VersionsValue Attribute Name (%s) Given Type: %s", name, attribute.Type(ctx)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for name := range attributes {
|
||||||
|
_, ok := attributeTypes[name]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Extra VersionsValue Attribute Value",
|
||||||
|
"While creating a VersionsValue value, an extra attribute value was detected. "+
|
||||||
|
"A VersionsValue must not contain values beyond the expected attribute types. "+
|
||||||
|
"This is always an issue with the provider and should be reported to the provider developers.\n\n"+
|
||||||
|
fmt.Sprintf("Extra VersionsValue Attribute Name: %s", name),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if diags.HasError() {
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
betaAttribute, ok := attributes["beta"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`beta is missing from object`)
|
||||||
|
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
betaVal, ok := betaAttribute.(basetypes.BoolValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`beta expected to be basetypes.BoolValue, was: %T`, betaAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecatedAttribute, ok := attributes["deprecated"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`deprecated is missing from object`)
|
||||||
|
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecatedVal, ok := deprecatedAttribute.(basetypes.StringValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`deprecated expected to be basetypes.StringValue, was: %T`, deprecatedAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
recommendAttribute, ok := attributes["recommend"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`recommend is missing from object`)
|
||||||
|
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
recommendVal, ok := recommendAttribute.(basetypes.BoolValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`recommend expected to be basetypes.BoolValue, was: %T`, recommendAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
versionAttribute, ok := attributes["version"]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Missing",
|
||||||
|
`version is missing from object`)
|
||||||
|
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
versionVal, ok := versionAttribute.(basetypes.StringValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
diags.AddError(
|
||||||
|
"Attribute Wrong Type",
|
||||||
|
fmt.Sprintf(`version expected to be basetypes.StringValue, was: %T`, versionAttribute))
|
||||||
|
}
|
||||||
|
|
||||||
|
if diags.HasError() {
|
||||||
|
return NewVersionsValueUnknown(), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
return VersionsValue{
|
||||||
|
Beta: betaVal,
|
||||||
|
Deprecated: deprecatedVal,
|
||||||
|
Recommend: recommendVal,
|
||||||
|
Version: versionVal,
|
||||||
|
state: attr.ValueStateKnown,
|
||||||
|
}, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVersionsValueMust(attributeTypes map[string]attr.Type, attributes map[string]attr.Value) VersionsValue {
|
||||||
|
object, diags := NewVersionsValue(attributeTypes, attributes)
|
||||||
|
|
||||||
|
if diags.HasError() {
|
||||||
|
// This could potentially be added to the diag package.
|
||||||
|
diagsStrings := make([]string, 0, len(diags))
|
||||||
|
|
||||||
|
for _, diagnostic := range diags {
|
||||||
|
diagsStrings = append(diagsStrings, fmt.Sprintf(
|
||||||
|
"%s | %s | %s",
|
||||||
|
diagnostic.Severity(),
|
||||||
|
diagnostic.Summary(),
|
||||||
|
diagnostic.Detail()))
|
||||||
|
}
|
||||||
|
|
||||||
|
panic("NewVersionsValueMust received error(s): " + strings.Join(diagsStrings, "\n"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return object
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t VersionsType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) {
|
||||||
|
if in.Type() == nil {
|
||||||
|
return NewVersionsValueNull(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if !in.Type().Equal(t.TerraformType(ctx)) {
|
||||||
|
return nil, fmt.Errorf("expected %s, got %s", t.TerraformType(ctx), in.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !in.IsKnown() {
|
||||||
|
return NewVersionsValueUnknown(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if in.IsNull() {
|
||||||
|
return NewVersionsValueNull(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes := map[string]attr.Value{}
|
||||||
|
|
||||||
|
val := map[string]tftypes.Value{}
|
||||||
|
|
||||||
|
err := in.As(&val)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range val {
|
||||||
|
a, err := t.AttrTypes[k].ValueFromTerraform(ctx, v)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes[k] = a
|
||||||
|
}
|
||||||
|
|
||||||
|
return NewVersionsValueMust(VersionsValue{}.AttributeTypes(ctx), attributes), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t VersionsType) ValueType(ctx context.Context) attr.Value {
|
||||||
|
return VersionsValue{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ basetypes.ObjectValuable = VersionsValue{}
|
||||||
|
|
||||||
|
type VersionsValue struct {
|
||||||
|
Beta basetypes.BoolValue `tfsdk:"beta"`
|
||||||
|
Deprecated basetypes.StringValue `tfsdk:"deprecated"`
|
||||||
|
Recommend basetypes.BoolValue `tfsdk:"recommend"`
|
||||||
|
Version basetypes.StringValue `tfsdk:"version"`
|
||||||
|
state attr.ValueState
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) ToTerraformValue(ctx context.Context) (tftypes.Value, error) {
|
||||||
|
attrTypes := make(map[string]tftypes.Type, 4)
|
||||||
|
|
||||||
|
var val tftypes.Value
|
||||||
|
var err error
|
||||||
|
|
||||||
|
attrTypes["beta"] = basetypes.BoolType{}.TerraformType(ctx)
|
||||||
|
attrTypes["deprecated"] = basetypes.StringType{}.TerraformType(ctx)
|
||||||
|
attrTypes["recommend"] = basetypes.BoolType{}.TerraformType(ctx)
|
||||||
|
attrTypes["version"] = basetypes.StringType{}.TerraformType(ctx)
|
||||||
|
|
||||||
|
objectType := tftypes.Object{AttributeTypes: attrTypes}
|
||||||
|
|
||||||
|
switch v.state {
|
||||||
|
case attr.ValueStateKnown:
|
||||||
|
vals := make(map[string]tftypes.Value, 4)
|
||||||
|
|
||||||
|
val, err = v.Beta.ToTerraformValue(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), err
|
||||||
|
}
|
||||||
|
|
||||||
|
vals["beta"] = val
|
||||||
|
|
||||||
|
val, err = v.Deprecated.ToTerraformValue(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), err
|
||||||
|
}
|
||||||
|
|
||||||
|
vals["deprecated"] = val
|
||||||
|
|
||||||
|
val, err = v.Recommend.ToTerraformValue(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), err
|
||||||
|
}
|
||||||
|
|
||||||
|
vals["recommend"] = val
|
||||||
|
|
||||||
|
val, err = v.Version.ToTerraformValue(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), err
|
||||||
|
}
|
||||||
|
|
||||||
|
vals["version"] = val
|
||||||
|
|
||||||
|
if err := tftypes.ValidateValue(objectType, vals); err != nil {
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), err
|
||||||
|
}
|
||||||
|
|
||||||
|
return tftypes.NewValue(objectType, vals), nil
|
||||||
|
case attr.ValueStateNull:
|
||||||
|
return tftypes.NewValue(objectType, nil), nil
|
||||||
|
case attr.ValueStateUnknown:
|
||||||
|
return tftypes.NewValue(objectType, tftypes.UnknownValue), nil
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("unhandled Object state in ToTerraformValue: %s", v.state))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) IsNull() bool {
|
||||||
|
return v.state == attr.ValueStateNull
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) IsUnknown() bool {
|
||||||
|
return v.state == attr.ValueStateUnknown
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) String() string {
|
||||||
|
return "VersionsValue"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) ToObjectValue(ctx context.Context) (basetypes.ObjectValue, diag.Diagnostics) {
|
||||||
|
var diags diag.Diagnostics
|
||||||
|
|
||||||
|
attributeTypes := map[string]attr.Type{
|
||||||
|
"beta": basetypes.BoolType{},
|
||||||
|
"deprecated": basetypes.StringType{},
|
||||||
|
"recommend": basetypes.BoolType{},
|
||||||
|
"version": basetypes.StringType{},
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.IsNull() {
|
||||||
|
return types.ObjectNull(attributeTypes), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.IsUnknown() {
|
||||||
|
return types.ObjectUnknown(attributeTypes), diags
|
||||||
|
}
|
||||||
|
|
||||||
|
objVal, diags := types.ObjectValue(
|
||||||
|
attributeTypes,
|
||||||
|
map[string]attr.Value{
|
||||||
|
"beta": v.Beta,
|
||||||
|
"deprecated": v.Deprecated,
|
||||||
|
"recommend": v.Recommend,
|
||||||
|
"version": v.Version,
|
||||||
|
})
|
||||||
|
|
||||||
|
return objVal, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) Equal(o attr.Value) bool {
|
||||||
|
other, ok := o.(VersionsValue)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.state != other.state {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.state != attr.ValueStateKnown {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if !v.Beta.Equal(other.Beta) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !v.Deprecated.Equal(other.Deprecated) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !v.Recommend.Equal(other.Recommend) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !v.Version.Equal(other.Version) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) Type(ctx context.Context) attr.Type {
|
||||||
|
return VersionsType{
|
||||||
|
basetypes.ObjectType{
|
||||||
|
AttrTypes: v.AttributeTypes(ctx),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v VersionsValue) AttributeTypes(ctx context.Context) map[string]attr.Type {
|
||||||
|
return map[string]attr.Type{
|
||||||
|
"beta": basetypes.BoolType{},
|
||||||
|
"deprecated": basetypes.StringType{},
|
||||||
|
"recommend": basetypes.BoolType{},
|
||||||
|
"version": basetypes.StringType{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ fields:
|
||||||
- name: 'id'
|
- name: 'id'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'instance_id'
|
- name: 'instance_id'
|
||||||
validators:
|
validators:
|
||||||
|
|
@ -32,13 +33,16 @@ fields:
|
||||||
- name: 'owner'
|
- name: 'owner'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'database_name'
|
- name: 'database_name'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
||||||
- name: 'collation_name'
|
- name: 'collation_name'
|
||||||
modifiers:
|
modifiers:
|
||||||
|
- 'RequiresReplace'
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
|
||||||
- name: 'compatibility'
|
- name: 'compatibility'
|
||||||
|
|
@ -49,3 +53,4 @@ fields:
|
||||||
- name: 'compatibility_level'
|
- name: 'compatibility_level'
|
||||||
modifiers:
|
modifiers:
|
||||||
- 'UseStateForUnknown'
|
- 'UseStateForUnknown'
|
||||||
|
- 'RequiresReplace'
|
||||||
|
|
|
||||||
|
|
@ -407,7 +407,7 @@ func (r *databaseResource) Read(ctx context.Context, req resource.ReadRequest, r
|
||||||
|
|
||||||
func (r *databaseResource) Update(ctx context.Context, _ resource.UpdateRequest, resp *resource.UpdateResponse) {
|
func (r *databaseResource) Update(ctx context.Context, _ resource.UpdateRequest, resp *resource.UpdateResponse) {
|
||||||
// TODO: Check update api endpoint - not available at the moment, so return an error for now
|
// TODO: Check update api endpoint - not available at the moment, so return an error for now
|
||||||
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating database", "Database can't be updated")
|
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating database", "there is no way to update a database")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *databaseResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
|
func (r *databaseResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
|
||||||
|
|
|
||||||
|
|
@ -208,11 +208,6 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("\n\n\n >>>>>> DEBUG <<<<< \n%+v\n\n\n", payload)
|
|
||||||
tflog.Debug(ctx, "\n\n\n >>>>>> DEBUG <<<<< \n\n\n", map[string]interface{}{
|
|
||||||
"encryption": payload.Encryption,
|
|
||||||
})
|
|
||||||
|
|
||||||
// Create new Instance
|
// Create new Instance
|
||||||
createResp, err := r.client.CreateInstanceRequest(
|
createResp, err := r.client.CreateInstanceRequest(
|
||||||
ctx,
|
ctx,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue