Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions docs/data-sources/machine_type.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "stackit_machine_type Data Source - stackit"
subcategory: ""
description: |-
Machine type data source.
~> This datasource is in beta and may be subject to breaking changes in the future. Use with caution. See our guide https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources for how to opt-in to use beta resources.
---

# stackit_machine_type (Data Source)

Machine type data source.

~> This datasource is in beta and may be subject to breaking changes in the future. Use with caution. See our [guide](https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources) for how to opt-in to use beta resources.

## Example Usage

```terraform
data "stackit_machine_type" "two_vcpus_filter" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus==2"
}

data "stackit_machine_type" "filter_sorted_ascending_false" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus >= 2 && ram >= 2048"
sort_ascending = false
}

data "stackit_machine_type" "intel_icelake_generic_filter" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "extraSpecs.cpu==\"intel-icelake-generic\" && vcpus == 2"
}

# returns warning
data "stackit_machine_type" "no_match" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus == 99"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `filter` (String) Expr-lang filter for filtering machine types.

Examples:
- vcpus == 2
- ram >= 2048
- extraSpecs.cpu == "intel-icelake-generic"
- extraSpecs.cpu == "intel-icelake-generic" && vcpus == 2

See https://expr-lang.org/docs/language-definition for syntax.
- `project_id` (String) STACKIT Project ID.

### Optional

- `sort_ascending` (Boolean) Sort machine types by name ascending (`true`) or descending (`false`). Defaults to `false`

### Read-Only

- `description` (String) Machine type description.
- `disk` (Number) Disk size in GB.
- `extra_specs` (Map of String) Extra specs (e.g., CPU type, overcommit ratio).
- `id` (String) Terraform's internal resource ID. It is structured as "`project_id`,`image_id`".
- `name` (String) Name of the machine type (e.g. 's1.2').
- `ram` (Number) RAM size in MB.
- `vcpus` (Number) Number of vCPUs.
21 changes: 21 additions & 0 deletions examples/data-sources/stackit_machine_type/data-source.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
data "stackit_machine_type" "two_vcpus_filter" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus==2"
}

data "stackit_machine_type" "filter_sorted_ascending_false" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus >= 2 && ram >= 2048"
sort_ascending = false
}

data "stackit_machine_type" "intel_icelake_generic_filter" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "extraSpecs.cpu==\"intel-icelake-generic\" && vcpus == 2"
}

# returns warning
data "stackit_machine_type" "no_match" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
filter = "vcpus == 99"
}
48 changes: 48 additions & 0 deletions stackit/internal/services/iaas/iaas_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ var (

//go:embed testdata/resource-server-max-server-attachments.tf
resourceServerMaxAttachmentConfig string

//go:embed testdata/datasource-machinetype.tf
dataSourceMachineTypeConfig string
)

const (
Expand Down Expand Up @@ -487,6 +490,10 @@ var testConfigKeyPairMaxUpdated = func() config.Variables {
return updatedConfig
}()

var testConfigMachineTypeVars = config.Variables{
"project_id": config.StringVariable(testutil.ProjectId),
}

// if no local file is provided the test should create a default file and work with this instead of failing
var localFileForIaasImage os.File

Expand Down Expand Up @@ -4054,6 +4061,47 @@ func TestAccProject(t *testing.T) {
})
}

func TestAccMachineType(t *testing.T) {
t.Logf("TestAccMachineType projectid: %s", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"]))
resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
ConfigVariables: testConfigMachineTypeVars,
Config: fmt.Sprintf("%s\n%s", dataSourceMachineTypeConfig, testutil.IaaSProviderConfigWithBetaResourcesEnabled()),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("data.stackit_machine_type.two_vcpus_filter", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "id"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "name"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "vcpus"),
resource.TestCheckResourceAttr("data.stackit_machine_type.two_vcpus_filter", "vcpus", "2"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "ram"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "disk"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "description"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "extra_specs.cpu"),

resource.TestCheckResourceAttr("data.stackit_machine_type.filter_sorted_ascending_false", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "id"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "name"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "vcpus"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "ram"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "disk"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "description"),
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "extra_specs.cpu"),

resource.TestCheckResourceAttr("data.stackit_machine_type.no_match", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "description"),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "disk"),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "extra_specs"),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "id"),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "name"),
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "ram"),
),
},
},
})
}

func testAccCheckDestroy(s *terraform.State) error {
checkFunctions := []func(s *terraform.State) error{
testAccCheckNetworkV1Destroy,
Expand Down
Loading
Loading