Skip to content

Commit 0deb9d8

Browse files
committed
feat(datasource): Refactor filter to support nested field filtering
- Added support for filter structures such as: filter { name = 'state' values = ['Enabled'] }
1 parent 996ae9d commit 0deb9d8

32 files changed

+847
-200
lines changed

.copywrite.hcl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
schema_version = 1
2+
3+
project {
4+
license = "MPL-2.0"
5+
copyright_year = 2024
6+
copyright_holder = "ZStack.io, Inc."
7+
header_ignore = [
8+
".changelog/**",
9+
".github/**",
10+
".golangci.yml",
11+
".goreleaser.yml",
12+
".release/**",
13+
"vendor/**",
14+
"examples/**"
15+
]
16+
}

examples/data-sources/backupstorages/data-source.tf

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,18 @@
33
data "zstack_backupstorages" "example" {
44
# name = "backupstorage name"
55
# name_pattern = "image%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
Status = "Connected"
8-
State = "Enabled"
6+
# optional support schema filter
7+
filter {
8+
name = "status"
9+
values = ["Connected"]
10+
}
11+
filter {
12+
name = "state"
13+
values = ["Enabled"]
14+
}
15+
filter {
16+
name = "total_capacity"
17+
values = ["7999424823296"]
918
}
1019
}
1120

examples/data-sources/clusters/data-source.tf

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@
33
data "zstack_clusters" "example" {
44
#name = "cluster1"
55
#name_pattern = "clu%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
State = "Enabled"
8-
HypervisorType = "KVM"
9-
Architecture = "x86_64"
6+
filter {
7+
name = "architecture"
8+
values = ["aarch64", "x86_64"]
9+
}
10+
filter {
11+
name = "state"
12+
values = ["Enabled"]
13+
}
14+
filter {
15+
name = "hypervisor_type"
16+
values = ["KVM"]
1017
}
1118
}
1219

examples/data-sources/disk_offers/data-source.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@
33
data "zstack_disk_offers" "example" {
44
name = "smallDiskOffering"
55
# name_pattern = "sm%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
State = "Enabled"
6+
filter {
7+
name = "name"
8+
values = ["name1","name2"]
9+
}
10+
filter {
11+
name = "state"
12+
values = ["Enabled"]
813
}
914
}
1015

examples/data-sources/hosts/data-source.tf

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@
33
data "zstack_hosts" "example" {
44
# name = "hostname"
55
# name_pattern = "hostname%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
State = "Enabled"
8-
Status = "Connected"
9-
HypervisorType = "KVM"
10-
Architecture = "x86_64"
11-
TotalCpuCapacity = "480"
12-
ManagementIp = "172.30.3.4"
6+
filter {
7+
name = "architecture"
8+
values = ["aarch64", "x86_64"]
139
}
10+
filter {
11+
name = "state"
12+
values = ["Enabled"]
13+
}
14+
filter {
15+
name = "status"
16+
values = ["Disconnected"]
17+
}
18+
filter {
19+
name = "cluster_uuid"
20+
values = ["37c25209578c495ca176f60ad0cd97fa"]
21+
}
1422
}
1523

1624
output "zstack_hosts" {

examples/data-sources/images/data-source.tf

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,22 @@
33
data "zstack_images" "example" {
44
# name = "imageName"
55
# name_pattern = "hostname%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = {
7-
Status = "Ready"
8-
State = "Enabled"
9-
Platform = "Linux"
10-
Architecture = "x86_64"
6+
filter {
7+
name = "architecture"
8+
values = ["aarch64", "x86_64"]
119
}
10+
filter {
11+
name = "state"
12+
values = ["Enabled"]
13+
}
14+
filter {
15+
name = "status"
16+
values = ["Ready", "Deleted"]
17+
}
18+
filter {
19+
name = "guest_os_type"
20+
values = ["Linux"]
21+
}
1222
}
1323

1424
output "zstack_images" {

examples/data-sources/instance_offers/data-source.tf

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,22 @@
33
data "zstack_instance_offers" "example" {
44
# name = "InstanceOffering-1"
55
# name_pattern = "clu%" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
State = "Enabled"
6+
filter {
7+
name = "allocator_strategy"
8+
values = ["LeastVmPreferredHostAllocatorStrategy"]
89
}
10+
filter {
11+
name = "state"
12+
values = ["Enabled"]
13+
}
14+
filter {
15+
name = "memory_size"
16+
values = ["1073741824"]
17+
}
18+
filter {
19+
name = "cpu_num"
20+
values = [1]
21+
}
922
}
1023

1124
output "zstack_instance_offers" {

examples/data-sources/instances/data-source.tf

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@
33
data "zstack_instances" "vminstances" {
44
# name = "name of vm instance"
55
# name_pattern = "virtual machine instances name% Pattern" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = { # option
7-
State = "Running"
8-
CPUNum = "3"
6+
filter {
7+
name = "architecture"
8+
values = ["aarch64", "x86_64"]
9+
}
10+
filter {
11+
name = "state"
12+
values = ["Running", "Stopped"]
13+
}
14+
filter {
15+
name = "hypervisor_type"
16+
values = ["KVM"]
917
}
1018
}
1119

examples/data-sources/l2networks/data-source.tf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
data "zstack_l2networks" "networks" {
44
# name = "L2 networks name"
55
# name_pattern = "L2 networks name% Pattern" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = {
7-
Vlan = 36
8-
Type = "L2VlanNetwork"
6+
filter {
7+
name = "vlan"
8+
values = [36]
99
}
10+
filter {
11+
name = "physical_interface"
12+
values = ["ens29f1"]
13+
}
1014
}
1115

1216
output "zstack_l2networks" {

examples/data-sources/l3networks/data-source.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
data "zstack_l3networks" "networks" {
44
# name = "L3 networks name"
55
# name_pattern = "L3 networks name% Pattern" # Pattern for fuzzy name search, similar to MySQL LIKE. Use % for multiple characters and _ for exactly one character.
6-
filter = {
7-
Category = "Private"
8-
IpVersion = 6
9-
}
6+
filter {
7+
name = "category"
8+
values = ["Private", "Public"]
9+
}
1010
}
1111

1212
output "zstack_networks" {

0 commit comments

Comments
 (0)