github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_edgegateway_dns.go (about) 1 /* 2 * Copyright 2023 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 3 */ 4 5 package govcd 6 7 import ( 8 "fmt" 9 10 "github.com/vmware/go-vcloud-director/v2/types/v56" 11 ) 12 13 // NsxtEdgeGatewayDns can be used to configure DNS on NSX-T Edge Gateway. 14 type NsxtEdgeGatewayDns struct { 15 NsxtEdgeGatewayDns *types.NsxtEdgeGatewayDns 16 client *Client 17 EdgeGatewayId string 18 } 19 20 // GetDnsConfig retrieves the DNS configuration for the underlying edge gateway 21 func (egw *NsxtEdgeGateway) GetDnsConfig() (*NsxtEdgeGatewayDns, error) { 22 return getDnsConfig(egw.client, egw.EdgeGateway.ID) 23 } 24 25 // UpdateDnsConfig updates the DNS configuration for the Edge Gateway 26 func (egw *NsxtEdgeGateway) UpdateDnsConfig(updatedConfig *types.NsxtEdgeGatewayDns) (*NsxtEdgeGatewayDns, error) { 27 return updateDnsConfig(updatedConfig, egw.client, egw.EdgeGateway.ID) 28 } 29 30 // Update updates the DNS configuration for the underlying Edge Gateway 31 func (dns *NsxtEdgeGatewayDns) Update(updatedConfig *types.NsxtEdgeGatewayDns) (*NsxtEdgeGatewayDns, error) { 32 return updateDnsConfig(updatedConfig, dns.client, dns.EdgeGatewayId) 33 } 34 35 // Refresh refreshes the DNS configuration for the Edge Gateway 36 func (dns *NsxtEdgeGatewayDns) Refresh() error { 37 updatedDns, err := getDnsConfig(dns.client, dns.EdgeGatewayId) 38 if err != nil { 39 return err 40 } 41 dns.NsxtEdgeGatewayDns = updatedDns.NsxtEdgeGatewayDns 42 43 return nil 44 } 45 46 // Delete deletes the DNS configuration for the Edge Gateway 47 func (dns *NsxtEdgeGatewayDns) Delete() error { 48 client := dns.client 49 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGatewayDns 50 apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint) 51 if err != nil { 52 return err 53 } 54 55 urlRef, err := client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, dns.EdgeGatewayId)) 56 if err != nil { 57 return err 58 } 59 60 err = client.OpenApiDeleteItem(apiVersion, urlRef, nil, nil) 61 if err != nil { 62 return err 63 } 64 65 return nil 66 } 67 68 func getDnsConfig(client *Client, edgeGatewayId string) (*NsxtEdgeGatewayDns, error) { 69 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGatewayDns 70 apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint) 71 if err != nil { 72 return nil, err 73 } 74 75 urlRef, err := client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, edgeGatewayId)) 76 if err != nil { 77 return nil, err 78 } 79 80 dnsConfig := &NsxtEdgeGatewayDns{ 81 client: client, 82 EdgeGatewayId: edgeGatewayId, 83 } 84 err = client.OpenApiGetItem(apiVersion, urlRef, nil, &dnsConfig.NsxtEdgeGatewayDns, nil) 85 if err != nil { 86 return nil, err 87 } 88 89 return dnsConfig, nil 90 91 } 92 93 func updateDnsConfig(updatedConfig *types.NsxtEdgeGatewayDns, client *Client, edgeGatewayId string) (*NsxtEdgeGatewayDns, error) { 94 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGatewayDns 95 apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint) 96 if err != nil { 97 return nil, err 98 } 99 100 urlRef, err := client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, edgeGatewayId)) 101 if err != nil { 102 return nil, err 103 } 104 105 dns := &NsxtEdgeGatewayDns{ 106 client: client, 107 EdgeGatewayId: edgeGatewayId, 108 } 109 err = client.OpenApiPutItem(apiVersion, urlRef, nil, updatedConfig, &dns.NsxtEdgeGatewayDns, nil) 110 if err != nil { 111 return nil, err 112 } 113 114 return dns, nil 115 }