+1 (binding) I checked the source tarball checksum and gpg signature, and using the RC1 build was able to test a simple VM deployment in a zone in an isolated network with some firewall rules applied, against a KVM based ACS 4.16.0.0 env.
(note: in my testing, in the first run the firewall application met with some failure but on second try of terraform apply it worked, see run log below) Source tarball verification: gpg: Signature made Wed Jan 19 15:33:18 2022 IST gpg: using RSA key 1031D6946F8A7C4B0C3E9EEFAEA5313845ADC482 gpg: Good signature from "Harikrishna Patnala (github gpg) <harikrishna.patn...@gmail.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 1031 D694 6F8A 7C4B 0C3E 9EEF AEA5 3138 45AD C482 Run log for reference: # terraform apply Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # cloudstack_egress_firewall.default will be created + resource "cloudstack_egress_firewall" "default" { + id = (known after apply) + managed = false + network_id = (known after apply) + parallelism = 2 + rule { + cidr_list = [ + "10.200.0.0/24", ] + icmp_code = (known after apply) + icmp_type = (known after apply) + ports = [ + "21", + "22", + "443", + "80", ] + protocol = "tcp" + uuids = (known after apply) } } # cloudstack_firewall.default will be created + resource "cloudstack_firewall" "default" { + id = (known after apply) + ip_address_id = (known after apply) + managed = false + parallelism = 2 + rule { + cidr_list = [ + "0.0.0.0/0", ] + icmp_code = (known after apply) + icmp_type = (known after apply) + ports = [ + "22", + "443", + "80", ] + protocol = "tcp" + uuids = (known after apply) } } # cloudstack_instance.web will be created + resource "cloudstack_instance" "web" { + display_name = "VM1Test" + expunge = true + group = (known after apply) + id = (known after apply) + ip_address = (known after apply) + name = "VM1Test" + network_id = (known after apply) + project = (known after apply) + root_disk_size = (known after apply) + service_offering = "688de728-5d70-42b5-9913-someID" + start_vm = true + tags = (known after apply) + template = "someID-1d5b-4335-a9e7-someID" + zone = "someID-cf47-4b0b-8cf0-someID" } # cloudstack_ipaddress.newIP1 will be created + resource "cloudstack_ipaddress" "newIP1" { + id = (known after apply) + ip_address = (known after apply) + is_portable = false + is_source_nat = (known after apply) + network_id = (known after apply) + project = (known after apply) + tags = (known after apply) } # cloudstack_ipaddress.newIP2 will be created + resource "cloudstack_ipaddress" "newIP2" { + id = (known after apply) + ip_address = (known after apply) + is_portable = false + is_source_nat = (known after apply) + network_id = (known after apply) + project = (known after apply) + tags = (known after apply) } # cloudstack_network.N1 will be created + resource "cloudstack_network" "N1" { + acl_id = "none" + cidr = "10.200.0.0/24" + display_text = (known after apply) + endip = (known after apply) + gateway = (known after apply) + id = (known after apply) + name = "Network1" + network_domain = (known after apply) + network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService" + project = (known after apply) + source_nat_ip_id = (known after apply) + startip = (known after apply) + tags = (known after apply) + zone = "someID-cf47-4b0b-8cf0-e8256cea9bef" } # cloudstack_port_forward.default will be created + resource "cloudstack_port_forward" "default" { + id = (known after apply) + ip_address_id = (known after apply) + managed = false + forward { + private_port = 22 + protocol = "tcp" + public_port = 22 + uuid = (known after apply) + virtual_machine_id = (known after apply) } } # cloudstack_static_nat.default will be created + resource "cloudstack_static_nat" "default" { + id = (known after apply) + ip_address_id = (known after apply) + project = (known after apply) + virtual_machine_id = (known after apply) + vm_guest_ip = (known after apply) } Plan: 8 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes cloudstack_network.N1: Creating... cloudstack_network.N1: Creation complete after 1s [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129] cloudstack_ipaddress.newIP1: Creating... cloudstack_instance.web: Creating... cloudstack_egress_firewall.default: Creating... cloudstack_ipaddress.newIP1: Creation complete after 1s [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_ipaddress.newIP2: Creating... cloudstack_firewall.default: Creating... cloudstack_ipaddress.newIP2: Creation complete after 2s [id=aa79d2fb-14eb-4bc9-a134-fc1f434e5a86] cloudstack_instance.web: Still creating... [10s elapsed] cloudstack_instance.web: Still creating... [20s elapsed] cloudstack_instance.web: Still creating... [30s elapsed] cloudstack_instance.web: Still creating... [40s elapsed] cloudstack_instance.web: Still creating... [50s elapsed] cloudstack_instance.web: Still creating... [1m0s elapsed] cloudstack_instance.web: Still creating... [1m10s elapsed] cloudstack_instance.web: Still creating... [1m20s elapsed] cloudstack_instance.web: Still creating... [1m30s elapsed] cloudstack_instance.web: Still creating... [1m40s elapsed] cloudstack_instance.web: Still creating... [1m50s elapsed] cloudstack_instance.web: Still creating... [2m0s elapsed] cloudstack_instance.web: Still creating... [2m10s elapsed] cloudstack_instance.web: Still creating... [2m20s elapsed] cloudstack_instance.web: Still creating... [2m30s elapsed] cloudstack_instance.web: Creation complete after 2m33s [id=d6f87514-f7cd-4c47-9716-2a862486dea9] cloudstack_static_nat.default: Creating... cloudstack_port_forward.default: Creating... cloudstack_port_forward.default: Creation complete after 8s [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_static_nat.default: Creation complete after 10s [id=aa79d2fb-14eb-4bc9-a134-fc1f434e5a86] ╷ │ Error: 1 error occurred: │ * Undefined error: {"errorcode":530,"errortext":"Failed to create firewall rule"} │ │ │ │ with cloudstack_firewall.default, │ on config.tf line 119, in resource "cloudstack_firewall" "default": │ 119: resource "cloudstack_firewall" "default" { │ ╵ ╷ │ Error: 1 error occurred: │ * Undefined error: {"errorcode":530,"errortext":"Failed to create firewall rule"} │ │ │ │ with cloudstack_egress_firewall.default, │ on config.tf line 144, in resource "cloudstack_egress_firewall" "default": │ 144: resource "cloudstack_egress_firewall" "default" { │ ╵ # terraform apply cloudstack_network.N1: Refreshing state... [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129] cloudstack_ipaddress.newIP1: Refreshing state... [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_instance.web: Refreshing state... [id=d6f87514-f7cd-4c47-9716-2a862486dea9] cloudstack_egress_firewall.default: Refreshing state... [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129] cloudstack_ipaddress.newIP2: Refreshing state... [id=aa79d2fb-14eb-4bc9-a134-fc1f434e5a86] cloudstack_firewall.default: Refreshing state... [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_static_nat.default: Refreshing state... [id=aa79d2fb-14eb-4bc9-a134-fc1f434e5a86] cloudstack_port_forward.default: Refreshing state... [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: -/+ destroy and then create replacement Terraform will perform the following actions: # cloudstack_egress_firewall.default is tainted, so must be replaced -/+ resource "cloudstack_egress_firewall" "default" { ~ id = "e4f3d1b8-4fbb-49ec-8df9-76cb65c48129" -> (known after apply) # (3 unchanged attributes hidden) - rule { - cidr_list = [ - "10.200.0.0/24", ] -> null - icmp_code = 0 -> null - icmp_type = 0 -> null - ports = [ - "22", - "443", - "80", ] -> null - protocol = "tcp" -> null - uuids = { - "22" = "d1a666bc-13f0-41b7-a642-58c28031a1fb" - "443" = "c323e6fb-65ae-4265-992f-3124736d38c6" - "80" = "3ee81703-7c38-4d7c-b07f-e4546c1eeb11" } -> null } + rule { + cidr_list = [ + "10.200.0.0/24", ] + icmp_code = (known after apply) + icmp_type = (known after apply) + ports = [ + "21", + "22", + "443", + "80", ] + protocol = "tcp" + uuids = (known after apply) } } # cloudstack_firewall.default is tainted, so must be replaced -/+ resource "cloudstack_firewall" "default" { ~ id = "8d441288-1d8f-4fda-bdd8-e19e7fce6bd2" -> (known after apply) # (3 unchanged attributes hidden) - rule { - cidr_list = [ - "0.0.0.0/0", ] -> null - icmp_code = 0 -> null - icmp_type = 0 -> null - ports = [ - "22", - "80", ] -> null - protocol = "tcp" -> null - uuids = { - "22" = "fd460768-8b97-4ee0-858c-ee5fb3193f75" - "80" = "c21c86a3-d72e-4e73-b458-4e60d5b8f153" } -> null } + rule { + cidr_list = [ + "0.0.0.0/0", ] + icmp_code = (known after apply) + icmp_type = (known after apply) + ports = [ + "22", + "443", + "80", ] + protocol = "tcp" + uuids = (known after apply) } } Plan: 2 to add, 0 to change, 2 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes cloudstack_firewall.default: Destroying... [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_egress_firewall.default: Destroying... [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129] cloudstack_firewall.default: Destruction complete after 8s cloudstack_firewall.default: Creating... cloudstack_egress_firewall.default: Still destroying... [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129, 10s elapsed] cloudstack_egress_firewall.default: Destruction complete after 15s cloudstack_egress_firewall.default: Creating... cloudstack_firewall.default: Still creating... [10s elapsed] cloudstack_egress_firewall.default: Still creating... [10s elapsed] cloudstack_firewall.default: Creation complete after 18s [id=8d441288-1d8f-4fda-bdd8-e19e7fce6bd2] cloudstack_egress_firewall.default: Creation complete after 18s [id=e4f3d1b8-4fbb-49ec-8df9-76cb65c48129] Apply complete! Resources: 2 added, 0 changed, 2 destroyed. Regards. ________________________________ From: Harikrishna Patnala <harikrishna.patn...@shapeblue.com> Sent: Wednesday, January 19, 2022 16:09 To: 'us...@cloudstack.apache.org' <us...@cloudstack.apache.org>; dev@cloudstack.apache.org <dev@cloudstack.apache.org> Subject: [VOTE] Release Apache CloudStack Terraform Provider v0.4.0 Hi All, I've created a v0.4.0 release of CloudStack Terraform Provider, with the following artifacts up for a vote: Link to the latest CloudStack Terraform Provider artifact with version "0.4.0-RC1": https://registry.terraform.io/providers/cloudstack/cloudstack/0.4.0-RC1 Git Branch and commit SHA: https://github.com/cloudstack/terraform-provider-cloudstack/commit/9496d6a0d029a808dd8876c9119703d6b3bf8c9c Commit: 9496d6a0d029a808dd8876c9119703d6b3bf8c9c GitHub pre-release (for RC1 testing, contains changelog, artifacts/binaries to test, checksums/usage details): https://github.com/cloudstack/terraform-provider-cloudstack/releases/tag/v0.4.0-RC1 Source release (checksums and signatures are available at the same location): https://dist.apache.org/repos/dist/dev/cloudstack/terraform-provider-0.4.0-RC1/ PGP release keys (signed using 1031D6946F8A7C4B0C3E9EEFAEA5313845ADC482) https://dist.apache.org/repos/dist/release/cloudstack/KEYS The vote will be open until January 31st, 2022. For sanity in tallying the vote, can PMC members please be sure to indicate "(binding)" with their vote? [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove (and the reason why) Regards, Harikrishna