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  }