Curverneur opened a new pull request, #264:
URL: https://github.com/apache/cloudstack-terraform-provider/pull/264

   ## Description
   Add support for creating internal load balancer resources with the 
possibility to assign instances to the load balancer rule.
   
   ## Reason
   This feature allows users to create an internal load balancer for a certain 
vpc tier and assign instances to it in one step using the terraform provider 
following IaC principles.
   
   ## References
   - Documentation: 
https://docs.cloudstack.apache.org/en/latest/adminguide/networking_and_traffic.html#load-balancing-across-tiers
   - API:
     - createLoadBalancer: 
https://cloudstack.apache.org/api/apidocs-4.22/apis/createLoadBalancer.html
     - assignToLoadBalancerRule: 
https://cloudstack.apache.org/api/apidocs-4.22/apis/assignToLoadBalancerRule.html
   
   ## Changes
   Added `cloudstack_loadbalancer` resource to the terraform provider and the 
corresponding documentation page.
   - modified `cloudstack/provider.go`
   - added `cloudstack/resource_cloudstack_loadbalancer.go`
   - added `website/docs/r/loadbalancer.html.markdown`
   
   ## Deployment test
   ### Code:
   ```hcl
   resource "cloudstack_loadbalancer" "test" {
     algorithm                = "Source"
     instanceport             = "8081"
     name                     = "test3"
     networkid                = "0ae8fa84-c78e-441a-8628-917d276c7d5c"
     scheme                   = "Internal"
     sourceipaddressnetworkid = "0ae8fa84-c78e-441a-8628-917d276c7d5c"
     sourceport               = "8081"
     virtualmachineids        = [ "48600f99-d890-472c-bc1a-7379af22727c", 
"749485a1-4081-49cd-9668-1d160ac94488", "9bbf3c6d-c8b8-42e8-ab37-e4f60a71f61d" ]
   }
   ```
   
   ### Terraform apply:
   ```
   OpenTofu used the selected providers to generate the following execution 
plan. Resource actions are indicated with the following symbols:
     + create
   
   OpenTofu will perform the following actions:
   
     # cloudstack_loadbalancer.test will be created
     + resource "cloudstack_loadbalancer" "test" {
         + algorithm                = "Source"
         + id                       = (known after apply)
         + instanceport             = 8081
         + name                     = "test3"
         + networkid                = "0ae8fa84-c78e-441a-8628-917d276c7d5c"
         + scheme                   = "Internal"
         + sourceipaddressnetworkid = "0ae8fa84-c78e-441a-8628-917d276c7d5c"
         + sourceport               = 8081
         + virtualmachineids        = [
             + "48600f99-d890-472c-bc1a-7379af22727c",
             + "749485a1-4081-49cd-9668-1d160ac94488",
             + "9bbf3c6d-c8b8-42e8-ab37-e4f60a71f61d",
           ]
       }
   
   Plan: 1 to add, 0 to change, 0 to destroy.
   
   Do you want to perform these actions?
     OpenTofu will perform the actions described above.
     Only 'yes' will be accepted to approve.
   
     Enter a value: yes
   
   cloudstack_loadbalancer.test: Creating...
   cloudstack_loadbalancer.test: Still creating... [10s elapsed]
   cloudstack_loadbalancer.test: Still creating... [20s elapsed]
   cloudstack_loadbalancer.test: Still creating... [30s elapsed]
   cloudstack_loadbalancer.test: Creation complete after 31s 
[id=eefce154-e759-45a4-989a-9a432792801b]
   ```
   
   ### Verify using API:
   ```json
   {
     "listloadbalancersresponse": {
       "count": 1,
       "loadbalancer": [
         {
           "id": "eefce154-e759-45a4-989a-9a432792801b",
           "name": "test3",
           "algorithm": "Source",
           "networkid": "0ae8fa84-c78e-441a-8628-917d276c7d5c",
           "sourceipaddress": "10.0.0.13",
           "sourceipaddressnetworkid": "0ae8fa84-c78e-441a-8628-917d276c7d5c",
           "projectid": "850c3f62-94f5-497f-91f6-2a736af09b58",
           "project": "Test",
           "domainid": "96b987c6-a9a8-11f0-b71e-6c92cf3489d0",
           "domain": "ROOT",
           "domainpath": "ROOT",
           "loadbalancerrule": [
             {
               "sourceport": 8081,
               "instanceport": 8081,
               "state": "Active"
             }
           ],
           "loadbalancerinstance": [
             {
               "id": "48600f99-d890-472c-bc1a-7379af22727c",
               "name": "i-14-1286-VM",
               "ipaddress": "10.0.0.12"
             },
             {
               "id": "749485a1-4081-49cd-9668-1d160ac94488",
               "name": "i-14-1282-VM",
               "ipaddress": "10.0.0.11"
             },
             {
               "id": "9bbf3c6d-c8b8-42e8-ab37-e4f60a71f61d",
               "name": "i-14-1283-VM",
               "ipaddress": "10.0.0.10"
             }
           ],
           "tags": [],
           "fordisplay": true
         }
       ]
     }
   }
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to