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 }