github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/networking/v2/extensions/vpnaas/services/requests.go (about) 1 package services 2 3 import ( 4 "github.com/huaweicloud/golangsdk" 5 "github.com/huaweicloud/golangsdk/pagination" 6 ) 7 8 // CreateOptsBuilder allows extensions to add additional parameters to the 9 // Create request. 10 type CreateOptsBuilder interface { 11 ToServiceCreateMap() (map[string]interface{}, error) 12 } 13 14 // CreateOpts contains all the values needed to create a new VPN service 15 type CreateOpts struct { 16 // TenantID specifies a tenant to own the VPN service. The caller must have 17 // an admin role in order to set this. Otherwise, this field is left unset 18 // and the caller will be the owner. 19 TenantID string `json:"tenant_id,omitempty"` 20 21 // SubnetID is the ID of the subnet. 22 SubnetID string `json:"subnet_id,omitempty"` 23 24 // RouterID is the ID of the router. 25 RouterID string `json:"router_id" required:"true"` 26 27 // Description is the human readable description of the service. 28 Description string `json:"description,omitempty"` 29 30 // AdminStateUp is the administrative state of the resource, which is up (true) or down (false). 31 AdminStateUp *bool `json:"admin_state_up"` 32 33 // Name is the human readable name of the service. 34 Name string `json:"name,omitempty"` 35 36 // The ID of the flavor. 37 FlavorID string `json:"flavor_id,omitempty"` 38 } 39 40 // ToServiceCreateMap casts a CreateOpts struct to a map. 41 func (opts CreateOpts) ToServiceCreateMap() (map[string]interface{}, error) { 42 return golangsdk.BuildRequestBody(opts, "vpnservice") 43 } 44 45 // Create accepts a CreateOpts struct and uses the values to create a new 46 // VPN service. 47 func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 48 b, err := opts.ToServiceCreateMap() 49 if err != nil { 50 r.Err = err 51 return 52 } 53 _, r.Err = c.Post(rootURL(c), b, &r.Body, nil) 54 return 55 } 56 57 // Delete will permanently delete a particular VPN service based on its 58 // unique ID. 59 func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) { 60 _, r.Err = c.Delete(resourceURL(c, id), nil) 61 return 62 } 63 64 // UpdateOptsBuilder allows extensions to add additional parameters to the 65 // Update request. 66 type UpdateOptsBuilder interface { 67 ToServiceUpdateMap() (map[string]interface{}, error) 68 } 69 70 // UpdateOpts contains the values used when updating a VPN service 71 type UpdateOpts struct { 72 // Name is the human readable name of the service. 73 Name *string `json:"name,omitempty"` 74 75 // Description is the human readable description of the service. 76 Description *string `json:"description,omitempty"` 77 78 // AdminStateUp is the administrative state of the resource, which is up (true) or down (false). 79 AdminStateUp *bool `json:"admin_state_up,omitempty"` 80 } 81 82 // ToServiceUpdateMap casts aa UodateOpts struct to a map. 83 func (opts UpdateOpts) ToServiceUpdateMap() (map[string]interface{}, error) { 84 return golangsdk.BuildRequestBody(opts, "vpnservice") 85 } 86 87 // Update allows VPN services to be updated. 88 func Update(c *golangsdk.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) { 89 b, err := opts.ToServiceUpdateMap() 90 if err != nil { 91 r.Err = err 92 return 93 } 94 _, r.Err = c.Put(resourceURL(c, id), b, &r.Body, &golangsdk.RequestOpts{ 95 OkCodes: []int{200}, 96 }) 97 return 98 } 99 100 // ListOptsBuilder allows extensions to add additional parameters to the 101 // List request. 102 type ListOptsBuilder interface { 103 ToServiceListQuery() (string, error) 104 } 105 106 // ListOpts allows the filtering and sorting of paginated collections through 107 // the API. Filtering is achieved by passing in struct field values that map to 108 // the VPN service attributes you want to see returned. 109 type ListOpts struct { 110 TenantID string `q:"tenant_id"` 111 Name string `q:"name"` 112 Description string `q:"description"` 113 AdminStateUp *bool `q:"admin_state_up"` 114 Status string `q:"status"` 115 SubnetID string `q:"subnet_id"` 116 RouterID string `q:"router_id"` 117 ProjectID string `q:"project_id"` 118 ExternalV6IP string `q:"external_v6_ip"` 119 ExternalV4IP string `q:"external_v4_ip"` 120 FlavorID string `q:"flavor_id"` 121 } 122 123 // ToServiceListQuery formats a ListOpts into a query string. 124 func (opts ListOpts) ToServiceListQuery() (string, error) { 125 q, err := golangsdk.BuildQueryString(opts) 126 return q.String(), err 127 } 128 129 // List returns a Pager which allows you to iterate over a collection of 130 // VPN services. It accepts a ListOpts struct, which allows you to filter 131 // and sort the returned collection for greater efficiency. 132 func List(c *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager { 133 url := rootURL(c) 134 if opts != nil { 135 query, err := opts.ToServiceListQuery() 136 if err != nil { 137 return pagination.Pager{Err: err} 138 } 139 url += query 140 } 141 return pagination.NewPager(c, url, func(r pagination.PageResult) pagination.Page { 142 return ServicePage{pagination.LinkedPageBase{PageResult: r}} 143 }) 144 } 145 146 // Get retrieves a particular VPN service based on its unique ID. 147 func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { 148 _, r.Err = c.Get(resourceURL(c, id), &r.Body, nil) 149 return 150 }