Skip to content

Commit ac68a4c

Browse files
committed
feat(iaas): add datasource to query machine types
Signed-off-by: Mauritz Uphoff <[email protected]>
1 parent 126b7a2 commit ac68a4c

File tree

7 files changed

+666
-0
lines changed

7 files changed

+666
-0
lines changed

docs/data-sources/machine_type.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "stackit_machine_type Data Source - stackit"
4+
subcategory: ""
5+
description: |-
6+
Machine type data source.
7+
---
8+
9+
# stackit_machine_type (Data Source)
10+
11+
Machine type data source.
12+
13+
## Example Usage
14+
15+
```terraform
16+
data "stackit_machine_type" "two_vcpus_filter" {
17+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
18+
filter = "vcpus==2"
19+
}
20+
21+
data "stackit_machine_type" "filter_sorted_ascending_false" {
22+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
23+
filter = "vcpus >= 2 && ram >= 2048"
24+
sort_ascending = false
25+
}
26+
27+
data "stackit_machine_type" "intel_icelake_generic_filter" {
28+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
29+
filter = "extraSpecs.cpu==\"intel-icelake-generic\" && vcpus == 2"
30+
}
31+
32+
# returns warning
33+
data "stackit_machine_type" "no_match" {
34+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
35+
filter = "vcpus == 99"
36+
}
37+
```
38+
39+
<!-- schema generated by tfplugindocs -->
40+
## Schema
41+
42+
### Required
43+
44+
- `filter` (String) Expr-lang filter for filtering machine types.
45+
46+
Examples:
47+
- vcpus == 2
48+
- ram >= 2048
49+
- extraSpecs.cpu == "intel-icelake-generic"
50+
- extraSpecs.cpu == "intel-icelake-generic" && vcpus == 2
51+
52+
See https://expr-lang.org/docs/language-definition for syntax.
53+
- `project_id` (String) STACKIT Project ID.
54+
55+
### Optional
56+
57+
- `sort_ascending` (Boolean) Sort machine types by name ascending (`true`) or descending (`false`). Optional.
58+
59+
### Read-Only
60+
61+
- `description` (String) Machine type description.
62+
- `disk` (Number) Disk size in GB.
63+
- `extra_specs` (Map of String) Extra specs (e.g., CPU type, overcommit ratio).
64+
- `id` (String) Terraform's internal resource ID. It is structured as "`project_id`,`image_id`".
65+
- `name` (String) Name of the machine type (e.g. 's1.2').
66+
- `ram` (Number) RAM size in MB.
67+
- `vcpus` (Number) Number of vCPUs.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
data "stackit_machine_type" "two_vcpus_filter" {
2+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
3+
filter = "vcpus==2"
4+
}
5+
6+
data "stackit_machine_type" "filter_sorted_ascending_false" {
7+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
8+
filter = "vcpus >= 2 && ram >= 2048"
9+
sort_ascending = false
10+
}
11+
12+
data "stackit_machine_type" "intel_icelake_generic_filter" {
13+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
14+
filter = "extraSpecs.cpu==\"intel-icelake-generic\" && vcpus == 2"
15+
}
16+
17+
# returns warning
18+
data "stackit_machine_type" "no_match" {
19+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
20+
filter = "vcpus == 99"
21+
}

stackit/internal/services/iaas/iaas_acc_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ var (
8888

8989
//go:embed testdata/resource-server-max-server-attachments.tf
9090
resourceServerMaxAttachmentConfig string
91+
92+
//go:embed testdata/datasource-machinetype.tf
93+
dataSourceMachineTypeConfig string
9194
)
9295

9396
const (
@@ -487,6 +490,10 @@ var testConfigKeyPairMaxUpdated = func() config.Variables {
487490
return updatedConfig
488491
}()
489492

493+
var testConfigMachineTypeVars = config.Variables{
494+
"project_id": config.StringVariable(testutil.ProjectId),
495+
}
496+
490497
// if no local file is provided the test should create a default file and work with this instead of failing
491498
var localFileForIaasImage os.File
492499

@@ -4022,6 +4029,47 @@ func TestAccImageMax(t *testing.T) {
40224029
})
40234030
}
40244031

4032+
func TestAccMachineTyp(t *testing.T) {
4033+
t.Logf("TestAccMachineTyp projectid: %s", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"]))
4034+
resource.ParallelTest(t, resource.TestCase{
4035+
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
4036+
Steps: []resource.TestStep{
4037+
{
4038+
ConfigVariables: testConfigMachineTypeVars,
4039+
Config: fmt.Sprintf("%s\n%s", dataSourceMachineTypeConfig, testutil.IaaSProviderConfig()),
4040+
Check: resource.ComposeTestCheckFunc(
4041+
resource.TestCheckResourceAttr("data.stackit_machine_type.two_vcpus_filter", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
4042+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "id"),
4043+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "name"),
4044+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "vcpus"),
4045+
resource.TestCheckResourceAttr("data.stackit_machine_type.two_vcpus_filter", "vcpus", "2"),
4046+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "ram"),
4047+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "disk"),
4048+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "description"),
4049+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.two_vcpus_filter", "extra_specs.cpu"),
4050+
4051+
resource.TestCheckResourceAttr("data.stackit_machine_type.filter_sorted_ascending_false", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
4052+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "id"),
4053+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "name"),
4054+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "vcpus"),
4055+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "ram"),
4056+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "disk"),
4057+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "description"),
4058+
resource.TestCheckResourceAttrSet("data.stackit_machine_type.filter_sorted_ascending_false", "extra_specs.cpu"),
4059+
4060+
resource.TestCheckResourceAttr("data.stackit_machine_type.no_match", "project_id", testutil.ConvertConfigVariable(testConfigMachineTypeVars["project_id"])),
4061+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "description"),
4062+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "disk"),
4063+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "extra_specs"),
4064+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "id"),
4065+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "name"),
4066+
resource.TestCheckNoResourceAttr("data.stackit_machine_type.no_match", "ram"),
4067+
),
4068+
},
4069+
},
4070+
})
4071+
}
4072+
40254073
func testAccCheckDestroy(s *terraform.State) error {
40264074
checkFunctions := []func(s *terraform.State) error{
40274075
testAccCheckNetworkV1Destroy,

0 commit comments

Comments
 (0)