generated from hashicorp/terraform-provider-scaffolding-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
495 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "zentral_monolith_condition Resource - terraform-provider-zentral" | ||
subcategory: "" | ||
description: |- | ||
The resource zentral_monolith_condition manages Monolith conditions. | ||
--- | ||
|
||
# zentral_monolith_condition (Resource) | ||
|
||
The resource `zentral_monolith_condition` manages Monolith conditions. | ||
|
||
|
||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Required | ||
|
||
- `name` (String) Name of the condition. | ||
- `predicate` (String) Predicate of the condition. | ||
|
||
### Read-Only | ||
|
||
- `id` (Number) `ID` of the condition. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package provider | ||
|
||
import ( | ||
"github.com/hashicorp/terraform-plugin-framework/types" | ||
"github.com/zentralopensource/goztl" | ||
) | ||
|
||
type monolithCondition struct { | ||
ID types.Int64 `tfsdk:"id"` | ||
Name types.String `tfsdk:"name"` | ||
Predicate types.String `tfsdk:"predicate"` | ||
} | ||
|
||
func monolithConditionForState(mc *goztl.MonolithCondition) monolithCondition { | ||
return monolithCondition{ | ||
ID: types.Int64Value(int64(mc.ID)), | ||
Name: types.StringValue(mc.Name), | ||
Predicate: types.StringValue(mc.Predicate), | ||
} | ||
} | ||
|
||
func monolithConditionRequestWithState(data monolithCondition) *goztl.MonolithConditionRequest { | ||
return &goztl.MonolithConditionRequest{ | ||
Name: data.Name.ValueString(), | ||
Predicate: data.Predicate.ValueString(), | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
package provider | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform-plugin-framework/datasource" | ||
"github.com/hashicorp/terraform-plugin-framework/datasource/schema" | ||
"github.com/zentralopensource/goztl" | ||
) | ||
|
||
// Ensure provider defined types fully satisfy framework interfaces | ||
var _ datasource.DataSource = &MonolithConditionDataSource{} | ||
|
||
func NewMonolithConditionDataSource() datasource.DataSource { | ||
return &MonolithConditionDataSource{} | ||
} | ||
|
||
// MonolithConditionDataSource defines the data source implementation. | ||
type MonolithConditionDataSource struct { | ||
client *goztl.Client | ||
} | ||
|
||
func (d *MonolithConditionDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { | ||
resp.TypeName = req.ProviderTypeName + "_monolith_condition" | ||
} | ||
|
||
func (d *MonolithConditionDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { | ||
resp.Schema = schema.Schema{ | ||
Description: "Allows details of a Monolith condition to be retrieved by its ID or its name.", | ||
MarkdownDescription: "The data source `zentral_monolith_condition` allows details of a Monolith condition to be retrieved by its `ID` or its `name`.", | ||
|
||
Attributes: map[string]schema.Attribute{ | ||
"id": schema.Int64Attribute{ | ||
Description: "ID of the Monolith condition.", | ||
MarkdownDescription: "`ID` of the Monolith condition.", | ||
Optional: true, | ||
}, | ||
"name": schema.StringAttribute{ | ||
Description: "Name of the condition.", | ||
MarkdownDescription: "Name of the condition.", | ||
Optional: true, | ||
}, | ||
"predicate": schema.StringAttribute{ | ||
Description: "Predicate of the condition.", | ||
MarkdownDescription: "Predicate of the condition.", | ||
Computed: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func (d *MonolithConditionDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) { | ||
// Prevent panic if the provider has not been configured. | ||
if req.ProviderData == nil { | ||
return | ||
} | ||
|
||
client, ok := req.ProviderData.(*goztl.Client) | ||
|
||
if !ok { | ||
resp.Diagnostics.AddError( | ||
"Unexpected Data Source Configure Type", | ||
fmt.Sprintf("Expected *goztl.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData), | ||
) | ||
|
||
return | ||
} | ||
|
||
d.client = client | ||
} | ||
|
||
func (d *MonolithConditionDataSource) ValidateConfig(ctx context.Context, req datasource.ValidateConfigRequest, resp *datasource.ValidateConfigResponse) { | ||
var data monolithCondition | ||
diags := req.Config.Get(ctx, &data) | ||
resp.Diagnostics.Append(diags...) | ||
if resp.Diagnostics.HasError() { | ||
return | ||
} | ||
|
||
if data.ID.IsNull() && data.Name.IsNull() { | ||
resp.Diagnostics.AddError( | ||
"Invalid `zentral_monolith_condition` data source", | ||
"`id` or `name` missing", | ||
) | ||
} else if !data.ID.IsNull() && !data.Name.IsNull() { | ||
resp.Diagnostics.AddError( | ||
"Invalid `zentral_monolith_condition` data source", | ||
"`id` and `name` cannot be both set", | ||
) | ||
} | ||
} | ||
|
||
func (d *MonolithConditionDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { | ||
var data monolithCondition | ||
|
||
// Read Terraform condition data into the model | ||
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...) | ||
|
||
if resp.Diagnostics.HasError() { | ||
return | ||
} | ||
|
||
var ztlMM *goztl.MonolithCondition | ||
var err error | ||
if data.ID.ValueInt64() > 0 { | ||
ztlMM, _, err = d.client.MonolithConditions.GetByID(ctx, int(data.ID.ValueInt64())) | ||
if err != nil { | ||
resp.Diagnostics.AddError( | ||
"Client Error", | ||
fmt.Sprintf("Unable to get Monolith condition '%d' by ID, got error: %s", data.ID.ValueInt64(), err), | ||
) | ||
} | ||
} else { | ||
ztlMM, _, err = d.client.MonolithConditions.GetByName(ctx, data.Name.ValueString()) | ||
if err != nil { | ||
resp.Diagnostics.AddError( | ||
"Client Error", | ||
fmt.Sprintf("Unable to get Monolith condition '%s' by name, got error: %s", data.Name.ValueString(), err), | ||
) | ||
} | ||
} | ||
|
||
if ztlMM != nil { | ||
resp.Diagnostics.Append(resp.State.Set(ctx, monolithConditionForState(ztlMM))...) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package provider | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" | ||
) | ||
|
||
func TestAccMonolithConditionDataSource(t *testing.T) { | ||
c1Name := acctest.RandString(12) | ||
c2Name := acctest.RandString(12) | ||
c1ResourceName := "zentral_monolith_condition.test1" | ||
c2ResourceName := "zentral_monolith_condition.test2" | ||
ds1ResourceName := "data.zentral_monolith_condition.test_by_id" | ||
ds2ResourceName := "data.zentral_monolith_condition.test_by_name" | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccMonolithConditionDataSourceConfig(c1Name, c2Name), | ||
Check: resource.ComposeAggregateTestCheckFunc( | ||
// Read by id | ||
resource.TestCheckResourceAttrPair( | ||
ds1ResourceName, "id", c1ResourceName, "id"), | ||
resource.TestCheckResourceAttr( | ||
ds1ResourceName, "name", c1Name), | ||
resource.TestCheckResourceAttr( | ||
ds1ResourceName, "predicate", "machine_type == \"desktop\""), | ||
// Read by name | ||
resource.TestCheckResourceAttrPair( | ||
ds2ResourceName, "id", c2ResourceName, "id"), | ||
resource.TestCheckResourceAttr( | ||
ds2ResourceName, "name", c2Name), | ||
resource.TestCheckResourceAttr( | ||
ds2ResourceName, "predicate", "machine_type == \"laptop\""), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccMonolithConditionDataSourceConfig(c1Name string, c2Name string) string { | ||
return fmt.Sprintf(` | ||
resource "zentral_monolith_condition" "test1" { | ||
name = %[1]q | ||
predicate = "machine_type == \"desktop\"" | ||
} | ||
resource "zentral_monolith_condition" "test2" { | ||
name = %[2]q | ||
predicate = "machine_type == \"laptop\"" | ||
} | ||
data "zentral_monolith_condition" "test_by_id" { | ||
id = zentral_monolith_condition.test1.id | ||
} | ||
data "zentral_monolith_condition" "test_by_name" { | ||
name = zentral_monolith_condition.test2.name | ||
} | ||
`, c1Name, c2Name) | ||
} |
Oops, something went wrong.