From fa0257f04a431ef3faf4d246b94668c2ff4c6a10 Mon Sep 17 00:00:00 2001 From: Sumanth Lingappa Date: Thu, 25 Feb 2021 13:21:00 +0530 Subject: [PATCH 1/2] NSNETAUTO-428 quicbridgeprofile resource added Signed-off-by: Sumanth Lingappa --- citrixadc/provider.go | 1 + .../resource_citrixadc_quicbridgeprofile.go | 135 ++++++++++++++++++ ...source_citrixadc_quicbridgeprofile_test.go | 121 ++++++++++++++++ examples/quicnbridgeprofile/provider.tf | 3 + examples/quicnbridgeprofile/resources.tf | 5 + tools/Makefile | 2 + 6 files changed, 267 insertions(+) create mode 100644 citrixadc/resource_citrixadc_quicbridgeprofile.go create mode 100644 citrixadc/resource_citrixadc_quicbridgeprofile_test.go create mode 100644 examples/quicnbridgeprofile/provider.tf create mode 100644 examples/quicnbridgeprofile/resources.tf diff --git a/citrixadc/provider.go b/citrixadc/provider.go index 335f44098..ed991654f 100644 --- a/citrixadc/provider.go +++ b/citrixadc/provider.go @@ -164,6 +164,7 @@ func providerResources() map[string]*schema.Resource { "citrixadc_csvserver_transformpolicy_binding": resourceCitrixAdcCsvserver_transformpolicy_binding(), "citrixadc_sslvserver_sslcertkey_binding": resourceCitrixAdcSslvserver_sslcertkey_binding(), "citrixadc_servicegroup_servicegroupmember_binding": resourceCitrixAdcServicegroup_servicegroupmember_binding(), + "citrixadc_quicbridgeprofile": resourceCitrixAdcQuicbridgeprofile(), } } diff --git a/citrixadc/resource_citrixadc_quicbridgeprofile.go b/citrixadc/resource_citrixadc_quicbridgeprofile.go new file mode 100644 index 000000000..84a1c7bd2 --- /dev/null +++ b/citrixadc/resource_citrixadc_quicbridgeprofile.go @@ -0,0 +1,135 @@ +package citrixadc + +import ( + "github.com/hashicorp/terraform/helper/schema" + + "fmt" + "log" +) + +// Quicbridge Profile is a new resource. Go Nitro is to be updated for this new resource +type quicbridgeprofile struct { + Name string `json:"name,omitempty"` + Routingalgorithm string `json:"routingalgorithm,omitempty"` + Serveridlength int `json:"serveridlength,omitempty"` +} + +func resourceCitrixAdcQuicbridgeprofile() *schema.Resource { + return &schema.Resource{ + SchemaVersion: 1, + Create: createQuicbridgeprofileFunc, + Read: readQuicbridgeprofileFunc, + Update: updateQuicbridgeprofileFunc, + Delete: deleteQuicbridgeprofileFunc, + Schema: map[string]*schema.Schema{ + "name": &schema.Schema{ + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "routingalgorithm": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "serveridlength": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + }, + } +} + +func createQuicbridgeprofileFunc(d *schema.ResourceData, meta interface{}) error { + log.Printf("[DEBUG] citrixadc-provider: In createQuicbridgeprofileFunc") + client := meta.(*NetScalerNitroClient).client + quicbridgeprofileName := d.Get("name").(string) + + quicbridgeprofile := quicbridgeprofile{ + Name: d.Get("name").(string), + Routingalgorithm: d.Get("routingalgorithm").(string), + Serveridlength: d.Get("serveridlength").(int), + } + + _, err := client.AddResource("quicbridgeprofile", quicbridgeprofileName, &quicbridgeprofile) + if err != nil { + return err + } + + d.SetId(quicbridgeprofileName) + + err = readQuicbridgeprofileFunc(d, meta) + if err != nil { + log.Printf("[ERROR] netscaler-provider: ?? we just created this quicbridgeprofile but we can't read it ?? %s", quicbridgeprofileName) + return nil + } + return nil +} + +func readQuicbridgeprofileFunc(d *schema.ResourceData, meta interface{}) error { + log.Printf("[DEBUG] citrixadc-provider: In readQuicbridgeprofileFunc") + client := meta.(*NetScalerNitroClient).client + quicbridgeprofileName := d.Id() + log.Printf("[DEBUG] citrixadc-provider: Reading quicbridgeprofile state %s", quicbridgeprofileName) + data, err := client.FindResource("quicbridgeprofile", quicbridgeprofileName) + if err != nil { + log.Printf("[WARN] citrixadc-provider: Clearing quicbridgeprofile state %s", quicbridgeprofileName) + d.SetId("") + return nil + } + d.Set("name", data["name"]) + d.Set("routingalgorithm", data["routingalgorithm"]) + d.Set("serveridlength", data["serveridlength"]) + + return nil + +} + +func updateQuicbridgeprofileFunc(d *schema.ResourceData, meta interface{}) error { + log.Printf("[DEBUG] citrixadc-provider: In updateQuicbridgeprofileFunc") + client := meta.(*NetScalerNitroClient).client + quicbridgeprofileName := d.Get("name").(string) + + quicbridgeprofile := quicbridgeprofile{ + Name: d.Get("name").(string), + } + hasChange := false + if d.HasChange("name") { + log.Printf("[DEBUG] citrixadc-provider: Name has changed for quicbridgeprofile %s, starting update", quicbridgeprofileName) + quicbridgeprofile.Name = d.Get("name").(string) + hasChange = true + } + if d.HasChange("routingalgorithm") { + log.Printf("[DEBUG] citrixadc-provider: Routingalgorithm has changed for quicbridgeprofile %s, starting update", quicbridgeprofileName) + quicbridgeprofile.Routingalgorithm = d.Get("routingalgorithm").(string) + hasChange = true + } + if d.HasChange("serveridlength") { + log.Printf("[DEBUG] citrixadc-provider: Serveridlength has changed for quicbridgeprofile %s, starting update", quicbridgeprofileName) + quicbridgeprofile.Serveridlength = d.Get("serveridlength").(int) + hasChange = true + } + + if hasChange { + _, err := client.UpdateResource("quicbridgeprofile", quicbridgeprofileName, &quicbridgeprofile) + if err != nil { + return fmt.Errorf("Error updating quicbridgeprofile %s", quicbridgeprofileName) + } + } + return readQuicbridgeprofileFunc(d, meta) +} + +func deleteQuicbridgeprofileFunc(d *schema.ResourceData, meta interface{}) error { + log.Printf("[DEBUG] citrixadc-provider: In deleteQuicbridgeprofileFunc") + client := meta.(*NetScalerNitroClient).client + quicbridgeprofileName := d.Id() + err := client.DeleteResource("quicbridgeprofile", quicbridgeprofileName) + if err != nil { + return err + } + + d.SetId("") + + return nil +} diff --git a/citrixadc/resource_citrixadc_quicbridgeprofile_test.go b/citrixadc/resource_citrixadc_quicbridgeprofile_test.go new file mode 100644 index 000000000..95931b1d1 --- /dev/null +++ b/citrixadc/resource_citrixadc_quicbridgeprofile_test.go @@ -0,0 +1,121 @@ +/* +Copyright 2016 Citrix Systems, Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package citrixadc + +import ( + "fmt" + "github.com/hashicorp/terraform/helper/resource" + "github.com/hashicorp/terraform/terraform" + "testing" +) + +const testAccQuicbridgeprofile_add = ` + resource citrixadc_quicbridgeprofile tfAcc_quicbridge { + name = "tfAcc_quicbridge" + routingalgorithm = "PLAINTEXT" + serveridlength = 4 + } +` + +const testAccQuicbridgeprofile_update = ` + resource citrixadc_quicbridgeprofile tfAcc_quicbridge { + name = "tfAcc_quicbridge" + routingalgorithm = "PLAINTEXT" + serveridlength = 6 + } +` + +func TestAccQuicbridgeprofile_basic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckQuicbridgeprofileDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccQuicbridgeprofile_add, + Check: resource.ComposeTestCheckFunc( + testAccCheckQuicbridgeprofileExist("citrixadc_quicbridgeprofile.tfAcc_quicbridge", nil), + resource.TestCheckResourceAttr("citrixadc_quicbridgeprofile.tfAcc_quicbridge", "routingalgorithm", "PLAINTEXT"), + resource.TestCheckResourceAttr("citrixadc_quicbridgeprofile.tfAcc_quicbridge", "serveridlength", "4"), + ), + }, + resource.TestStep{ + Config: testAccQuicbridgeprofile_update, + Check: resource.ComposeTestCheckFunc( + testAccCheckQuicbridgeprofileExist("citrixadc_quicbridgeprofile.tfAcc_quicbridge", nil), + resource.TestCheckResourceAttr("citrixadc_quicbridgeprofile.tfAcc_quicbridge", "routingalgorithm", "PLAINTEXT"), + resource.TestCheckResourceAttr("citrixadc_quicbridgeprofile.tfAcc_quicbridge", "serveridlength", "6"), + ), + }, + }, + }) +} + +func testAccCheckQuicbridgeprofileExist(n string, id *string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No quicbridgeprofile name is set") + } + + if id != nil { + if *id != "" && *id != rs.Primary.ID { + return fmt.Errorf("Resource ID has changed!") + } + + *id = rs.Primary.ID + } + + nsClient := testAccProvider.Meta().(*NetScalerNitroClient).client + data, err := nsClient.FindResource("quicbridgeprofile", rs.Primary.ID) + + if err != nil { + return err + } + + if data == nil { + return fmt.Errorf("quicbridgeprofile %s not found", n) + } + + return nil + } +} + +func testAccCheckQuicbridgeprofileDestroy(s *terraform.State) error { + nsClient := testAccProvider.Meta().(*NetScalerNitroClient).client + + for _, rs := range s.RootModule().Resources { + if rs.Type != "citrixadc_quicbridgeprofile" { + continue + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No name is set") + } + + _, err := nsClient.FindResource("quicbridgeprofile", rs.Primary.ID) + if err == nil { + return fmt.Errorf("quicbridgeprofile %s still exists", rs.Primary.ID) + } + + } + + return nil +} diff --git a/examples/quicnbridgeprofile/provider.tf b/examples/quicnbridgeprofile/provider.tf new file mode 100644 index 000000000..13add289c --- /dev/null +++ b/examples/quicnbridgeprofile/provider.tf @@ -0,0 +1,3 @@ +provider "citrixadc" { + endpoint = "http://localhost:8080" +} \ No newline at end of file diff --git a/examples/quicnbridgeprofile/resources.tf b/examples/quicnbridgeprofile/resources.tf new file mode 100644 index 000000000..5c55dccb1 --- /dev/null +++ b/examples/quicnbridgeprofile/resources.tf @@ -0,0 +1,5 @@ +resource citrixadc_quicbridgeprofile demo_quicbridge { + name = "demo_quicbridge" + routingalgorithm = "PLAINTEXT" # OPTIONAL + serveridlength = 4 # OPTIONAL +} \ No newline at end of file diff --git a/tools/Makefile b/tools/Makefile index dfd7dde6c..9c5c873d3 100755 --- a/tools/Makefile +++ b/tools/Makefile @@ -92,6 +92,8 @@ schema_only: ./$(SCHEMA_EXEC) -i $(JSON_DIR)/appfw/appfwxmlcontenttype.json ./$(SCHEMA_EXEC) -i $(JSON_DIR)/appfw/appfwprofile_starturl_binding.json ./$(SCHEMA_EXEC) -i $(JSON_DIR)/appfw/appfwprofile_denyurl_binding.json + @# quicbridge - TODO: yet to add in go-nitro + #./$(SCHEMA_EXEC) -i $(JSON_DIR)/appfw/quicbridgeprofile.json schema: schema_only fmt From 510a6372bd8faf08c0d1d45e60cdcbe53510c3ba Mon Sep 17 00:00:00 2001 From: Sumanth Lingappa Date: Thu, 25 Feb 2021 19:56:02 +0530 Subject: [PATCH 2/2] NSNETAUTO-428 added quicbridgeprofilename attribute to lbvserver resource Signed-off-by: Sumanth Lingappa --- citrixadc/resource_citrixadc_lbvserver.go | 156 +++++++++++++++++- .../resource_citrixadc_lbvserver_test.go | 38 +++++ ...source_citrixadc_quicbridgeprofile_test.go | 3 + examples/quicnbridgeprofile/resources.tf | 11 +- 4 files changed, 203 insertions(+), 5 deletions(-) diff --git a/citrixadc/resource_citrixadc_lbvserver.go b/citrixadc/resource_citrixadc_lbvserver.go index aefd2800a..aaca1fdbd 100644 --- a/citrixadc/resource_citrixadc_lbvserver.go +++ b/citrixadc/resource_citrixadc_lbvserver.go @@ -1,7 +1,6 @@ package citrixadc import ( - "github.com/chiradeep/go-nitro/config/lb" "github.com/chiradeep/go-nitro/config/ssl" "github.com/chiradeep/go-nitro/netscaler" @@ -12,6 +11,144 @@ import ( "log" ) +// TODO: update go-nitro with quicbridgeprofilename attribute +type lbvserver struct { + Activeservices int `json:"activeservices,omitempty"` + Adfsproxyprofile string `json:"adfsproxyprofile,omitempty"` + Appflowlog string `json:"appflowlog,omitempty"` + Authentication string `json:"authentication,omitempty"` + Authenticationhost string `json:"authenticationhost,omitempty"` + Authn401 string `json:"authn401,omitempty"` + Authnprofile string `json:"authnprofile,omitempty"` + Authnvsname string `json:"authnvsname,omitempty"` + Backuplbmethod string `json:"backuplbmethod,omitempty"` + Backuppersistencetimeout int `json:"backuppersistencetimeout,omitempty"` + Backupvserver string `json:"backupvserver,omitempty"` + Backupvserverstatus string `json:"backupvserverstatus,omitempty"` + Bindpoint string `json:"bindpoint,omitempty"` + Bypassaaaa string `json:"bypassaaaa,omitempty"` + Cacheable string `json:"cacheable,omitempty"` + Cachevserver string `json:"cachevserver,omitempty"` + Clttimeout int `json:"clttimeout,omitempty"` + Comment string `json:"comment,omitempty"` + Connfailover string `json:"connfailover,omitempty"` + Consolidatedlconn string `json:"consolidatedlconn,omitempty"` + Consolidatedlconngbl string `json:"consolidatedlconngbl,omitempty"` + Cookiedomain string `json:"cookiedomain,omitempty"` + Cookiename string `json:"cookiename,omitempty"` + Curstate string `json:"curstate,omitempty"` + Datalength int `json:"datalength,omitempty"` + Dataoffset int `json:"dataoffset,omitempty"` + Dbprofilename string `json:"dbprofilename,omitempty"` + Dbslb string `json:"dbslb,omitempty"` + Disableprimaryondown string `json:"disableprimaryondown,omitempty"` + Dns64 string `json:"dns64,omitempty"` + Dnsprofilename string `json:"dnsprofilename,omitempty"` + Dnsvservername string `json:"dnsvservername,omitempty"` + Domain string `json:"domain,omitempty"` + Downstateflush string `json:"downstateflush,omitempty"` + Effectivestate string `json:"effectivestate,omitempty"` + Groupname string `json:"groupname,omitempty"` + Gt2gb string `json:"gt2gb,omitempty"` + Hashlength int `json:"hashlength,omitempty"` + Health int `json:"health,omitempty"` + Healththreshold int `json:"healththreshold,omitempty"` + Homepage string `json:"homepage,omitempty"` + Httpprofilename string `json:"httpprofilename,omitempty"` + Httpsredirecturl string `json:"httpsredirecturl,omitempty"` + Icmpvsrresponse string `json:"icmpvsrresponse,omitempty"` + Insertvserveripport string `json:"insertvserveripport,omitempty"` + Ipmapping string `json:"ipmapping,omitempty"` + Ipmask string `json:"ipmask,omitempty"` + Ippattern string `json:"ippattern,omitempty"` + Ipset string `json:"ipset,omitempty"` + Ipv46 string `json:"ipv46,omitempty"` + Isgslb bool `json:"isgslb,omitempty"` + L2conn string `json:"l2conn,omitempty"` + Lbmethod string `json:"lbmethod,omitempty"` + Lbprofilename string `json:"lbprofilename,omitempty"` + Lbrrreason int `json:"lbrrreason,omitempty"` + Listenpolicy string `json:"listenpolicy,omitempty"` + Listenpriority int `json:"listenpriority,omitempty"` + M string `json:"m,omitempty"` + Macmoderetainvlan string `json:"macmoderetainvlan,omitempty"` + Map string `json:"map,omitempty"` + Maxautoscalemembers int `json:"maxautoscalemembers,omitempty"` + Minautoscalemembers int `json:"minautoscalemembers,omitempty"` + Mssqlserverversion string `json:"mssqlserverversion,omitempty"` + Mysqlcharacterset int `json:"mysqlcharacterset,omitempty"` + Mysqlprotocolversion int `json:"mysqlprotocolversion,omitempty"` + Mysqlservercapabilities int `json:"mysqlservercapabilities,omitempty"` + Mysqlserverversion string `json:"mysqlserverversion,omitempty"` + Name string `json:"name,omitempty"` + Netmask string `json:"netmask,omitempty"` + Netprofile string `json:"netprofile,omitempty"` + Newname string `json:"newname,omitempty"` + Newservicerequest int `json:"newservicerequest,omitempty"` + Newservicerequestincrementinterval int `json:"newservicerequestincrementinterval,omitempty"` + Newservicerequestunit string `json:"newservicerequestunit,omitempty"` + Ngname string `json:"ngname,omitempty"` + Nodefaultbindings string `json:"nodefaultbindings,omitempty"` + Oracleserverversion string `json:"oracleserverversion,omitempty"` + Persistavpno interface{} `json:"persistavpno,omitempty"` + Persistencebackup string `json:"persistencebackup,omitempty"` + Persistencetype string `json:"persistencetype,omitempty"` + Persistmask string `json:"persistmask,omitempty"` + Port int `json:"port,omitempty"` + Pq string `json:"pq,omitempty"` + Precedence string `json:"precedence,omitempty"` + Processlocal string `json:"processlocal,omitempty"` + Push string `json:"push,omitempty"` + Pushlabel string `json:"pushlabel,omitempty"` + Pushmulticlients string `json:"pushmulticlients,omitempty"` + Pushvserver string `json:"pushvserver,omitempty"` + Range int `json:"range,omitempty"` + Recursionavailable string `json:"recursionavailable,omitempty"` + Redirect string `json:"redirect,omitempty"` + Redirectfromport int `json:"redirectfromport,omitempty"` + Redirectportrewrite string `json:"redirectportrewrite,omitempty"` + Redirurl string `json:"redirurl,omitempty"` + Redirurlflags bool `json:"redirurlflags,omitempty"` + Resrule string `json:"resrule,omitempty"` + Retainconnectionsoncluster string `json:"retainconnectionsoncluster,omitempty"` + Rhistate string `json:"rhistate,omitempty"` + Rtspnat string `json:"rtspnat,omitempty"` + Rule string `json:"rule,omitempty"` + Ruletype int `json:"ruletype,omitempty"` + Sc string `json:"sc,omitempty"` + Servicename string `json:"servicename,omitempty"` + Servicetype string `json:"servicetype,omitempty"` + Sessionless string `json:"sessionless,omitempty"` + Skippersistency string `json:"skippersistency,omitempty"` + Sobackupaction string `json:"sobackupaction,omitempty"` + Somethod string `json:"somethod,omitempty"` + Sopersistence string `json:"sopersistence,omitempty"` + Sopersistencetimeout int `json:"sopersistencetimeout,omitempty"` + Sothreshold int `json:"sothreshold,omitempty"` + State string `json:"state,omitempty"` + Statechangetimemsec int `json:"statechangetimemsec,omitempty"` + Statechangetimesec string `json:"statechangetimesec,omitempty"` + Statechangetimeseconds int `json:"statechangetimeseconds,omitempty"` + Status int `json:"status,omitempty"` + Tcpprofilename string `json:"tcpprofilename,omitempty"` + Td int `json:"td,omitempty"` + Thresholdvalue int `json:"thresholdvalue,omitempty"` + Tickssincelaststatechange int `json:"tickssincelaststatechange,omitempty"` + Timeout int `json:"timeout,omitempty"` + Tosid int `json:"tosid,omitempty"` + Totalservices int `json:"totalservices,omitempty"` + Trofspersistence string `json:"trofspersistence,omitempty"` + Type string `json:"type,omitempty"` + V6netmasklen int `json:"v6netmasklen,omitempty"` + V6persistmasklen int `json:"v6persistmasklen,omitempty"` + Value string `json:"value,omitempty"` + Version int `json:"version,omitempty"` + Vipheader string `json:"vipheader,omitempty"` + Vsvrdynconnsothreshold int `json:"vsvrdynconnsothreshold,omitempty"` + Weight int `json:"weight,omitempty"` + Quicbridgeprofilename string `json:"quicbridgeprofilename,omitempty"` +} + func resourceCitrixAdcLbvserver() *schema.Resource { return &schema.Resource{ SchemaVersion: 1, @@ -522,6 +659,10 @@ func resourceCitrixAdcLbvserver() *schema.Resource { Type: schema.TypeString, Optional: true, }, + "quicbridgeprofilename": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + }, "ciphers": &schema.Schema{ Type: schema.TypeList, Optional: true, @@ -608,7 +749,7 @@ func createLbvserverFunc(d *schema.ResourceData, meta interface{}) error { } } - lbvserver := lb.Lbvserver{ + lbvserver := lbvserver{ Name: lbvserverName, Appflowlog: d.Get("appflowlog").(string), Authentication: d.Get("authentication").(string), @@ -705,6 +846,7 @@ func createLbvserverFunc(d *schema.ResourceData, meta interface{}) error { V6persistmasklen: d.Get("v6persistmasklen").(int), Vipheader: d.Get("vipheader").(string), Weight: d.Get("weight").(int), + Quicbridgeprofilename: d.Get("quicbridgeprofilename").(string), } _, err := client.AddResource(netscaler.Lbvserver.Type(), lbvserverName, &lbvserver) @@ -889,6 +1031,7 @@ func readLbvserverFunc(d *schema.ResourceData, meta interface{}) error { d.Set("v6persistmasklen", data["v6persistmasklen"]) d.Set("vipheader", data["vipheader"]) d.Set("weight", data["weight"]) + d.Set("quicbridgeprofilename", data["quicbridgeprofilename"]) _, sslok := d.GetOk("sslcertkey") _, sniok := d.GetOk("snisslcertkeys") @@ -920,7 +1063,7 @@ func updateLbvserverFunc(d *schema.ResourceData, meta interface{}) error { client := meta.(*NetScalerNitroClient).client lbvserverName := d.Get("name").(string) - lbvserver := lb.Lbvserver{ + lbvserver := lbvserver{ Name: d.Get("name").(string), } stateChange := false @@ -1404,6 +1547,11 @@ func updateLbvserverFunc(d *schema.ResourceData, meta interface{}) error { lbvserver.Vipheader = d.Get("vipheader").(string) hasChange = true } + if d.HasChange("quicbridgeprofilename") { + log.Printf("[DEBUG] netscaler-provider: Quicbridgeprofilename has changed for lbvserver %s, starting update", lbvserverName) + lbvserver.Quicbridgeprofilename = d.Get("quicbridgeprofilename").(string) + hasChange = true + } if d.HasChange("weight") { log.Printf("[DEBUG] netscaler-provider: Weight has changed for lbvserver %s, starting update", lbvserverName) lbvserver.Weight = d.Get("weight").(int) @@ -1553,7 +1701,7 @@ func doLbvserverStateChange(d *schema.ResourceData, client *netscaler.NitroClien // We need a new instance of the struct since // ActOnResource will fail if we put in superfluous attributes - lbvserver := lb.Lbvserver{ + lbvserver := lbvserver{ Name: d.Get("name").(string), } diff --git a/citrixadc/resource_citrixadc_lbvserver_test.go b/citrixadc/resource_citrixadc_lbvserver_test.go index 15cecbaa9..091580004 100644 --- a/citrixadc/resource_citrixadc_lbvserver_test.go +++ b/citrixadc/resource_citrixadc_lbvserver_test.go @@ -57,6 +57,44 @@ func TestAccLbvserver_basic(t *testing.T) { }) } +const testAccLbvserver_quicbridgeprofile = ` + resource citrixadc_quicbridgeprofile demo_quicbridge { + name = "demo_quicbridge" + routingalgorithm = "PLAINTEXT" + serveridlength = 4 + } + resource "citrixadc_lbvserver" "tfAcc_lbvserver" { + name = "demo_quicbridge_vserver" + ipv46 = "10.202.11.11" + lbmethod = "TOKEN" + persistencetype = "CUSTOMSERVERID" + port = 8080 + servicetype = "QUIC_BRIDGE" + quicbridgeprofilename = citrixadc_quicbridgeprofile.demo_quicbridge.name + } +` + +func TestAccLbvserver_quicbridgeprofile(t *testing.T) { + if isCpxRun { + t.Skip("No support in CPX") + } + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckLbvserverDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccLbvserver_quicbridgeprofile, + Check: resource.ComposeTestCheckFunc(testAccCheckLbvserverExist("citrixadc_lbvserver.tfAcc_lbvserver", nil), + resource.TestCheckResourceAttr("citrixadc_lbvserver.tfAcc_lbvserver", "servicetype", "QUIC_BRIDGE"), + resource.TestCheckResourceAttr("citrixadc_lbvserver.tfAcc_lbvserver", "persistencetype", "CUSTOMSERVERID"), + resource.TestCheckResourceAttr("citrixadc_lbvserver.tfAcc_lbvserver", "quicbridgeprofilename", "demo_quicbridge"), + ), + }, + }, + }) +} + func TestAccLbvserver_snicerts(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { doPreChecks(t) }, diff --git a/citrixadc/resource_citrixadc_quicbridgeprofile_test.go b/citrixadc/resource_citrixadc_quicbridgeprofile_test.go index 95931b1d1..cfaf5f1be 100644 --- a/citrixadc/resource_citrixadc_quicbridgeprofile_test.go +++ b/citrixadc/resource_citrixadc_quicbridgeprofile_test.go @@ -39,6 +39,9 @@ const testAccQuicbridgeprofile_update = ` ` func TestAccQuicbridgeprofile_basic(t *testing.T) { + if isCpxRun { + t.Skip("No support in CPX") + } resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, diff --git a/examples/quicnbridgeprofile/resources.tf b/examples/quicnbridgeprofile/resources.tf index 5c55dccb1..6499dc538 100644 --- a/examples/quicnbridgeprofile/resources.tf +++ b/examples/quicnbridgeprofile/resources.tf @@ -2,4 +2,13 @@ resource citrixadc_quicbridgeprofile demo_quicbridge { name = "demo_quicbridge" routingalgorithm = "PLAINTEXT" # OPTIONAL serveridlength = 4 # OPTIONAL -} \ No newline at end of file +} +resource "citrixadc_lbvserver" "demo_quicbridge_lbvserver" { + name = "demo_quicbridge_vserver" + ipv46 = "10.202.11.11" + lbmethod = "TOKEN" + persistencetype = "CUSTOMSERVERID" + port = 8080 + servicetype = "QUIC_BRIDGE" + quicbridgeprofilename = citrixadc_quicbridgeprofile.demo_quicbridge.name +}