github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/externalnetwork.go (about)

     1  /*
     2   * Copyright 2019 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     3   */
     4  
     5  package govcd
     6  
     7  import (
     8  	"errors"
     9  	"fmt"
    10  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    11  	"github.com/vmware/go-vcloud-director/v2/util"
    12  	"net/http"
    13  )
    14  
    15  type ExternalNetwork struct {
    16  	ExternalNetwork *types.ExternalNetwork
    17  	client          *Client
    18  }
    19  
    20  func NewExternalNetwork(cli *Client) *ExternalNetwork {
    21  	return &ExternalNetwork{
    22  		ExternalNetwork: new(types.ExternalNetwork),
    23  		client:          cli,
    24  	}
    25  }
    26  
    27  func getExternalNetworkHref(client *Client) (string, error) {
    28  	extensions, err := getExtension(client)
    29  	if err != nil {
    30  		return "", err
    31  	}
    32  
    33  	for _, extensionLink := range extensions.Link {
    34  		if extensionLink.Type == "application/vnd.vmware.admin.vmwExternalNetworkReferences+xml" {
    35  			return extensionLink.HREF, nil
    36  		}
    37  	}
    38  
    39  	return "", errors.New("external network link wasn't found")
    40  }
    41  
    42  func (externalNetwork ExternalNetwork) Refresh() error {
    43  
    44  	if !externalNetwork.client.IsSysAdmin {
    45  		return fmt.Errorf("functionality requires System Administrator privileges")
    46  	}
    47  
    48  	_, err := externalNetwork.client.ExecuteRequest(externalNetwork.ExternalNetwork.HREF, http.MethodGet,
    49  		"", "error refreshing external network: %s", nil, externalNetwork.ExternalNetwork)
    50  
    51  	return err
    52  }
    53  
    54  func validateExternalNetwork(externalNetwork *types.ExternalNetwork) error {
    55  	if externalNetwork.Name == "" {
    56  		return errors.New("external Network missing required field: Name")
    57  	}
    58  	return nil
    59  }
    60  
    61  func (externalNetwork *ExternalNetwork) Delete() (Task, error) {
    62  	util.Logger.Printf("[TRACE] ExternalNetwork.Delete")
    63  
    64  	if !externalNetwork.client.IsSysAdmin {
    65  		return Task{}, fmt.Errorf("functionality requires System Administrator privileges")
    66  	}
    67  
    68  	// Return the task
    69  	return externalNetwork.client.ExecuteTaskRequest(externalNetwork.ExternalNetwork.HREF, http.MethodDelete,
    70  		"", "error deleting external network: %s", nil)
    71  }
    72  
    73  func (externalNetwork *ExternalNetwork) DeleteWait() error {
    74  	task, err := externalNetwork.Delete()
    75  	if err != nil {
    76  		return err
    77  	}
    78  	err = task.WaitTaskCompletion()
    79  	if err != nil {
    80  		return fmt.Errorf("couldn't finish removing external network %#v", err)
    81  	}
    82  	return nil
    83  }