github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/cci/v1/networks/requests.go (about) 1 package networks 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 ) 6 7 var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ 8 MoreHeaders: map[string]string{"Content-Type": "application/json"}, 9 } 10 11 // CreateOptsBuilder allows extensions to add additional parameters to the 12 // Create request. 13 type CreateOptsBuilder interface { 14 ToNetworkCreateMap() (map[string]interface{}, error) 15 } 16 17 // CreateOpts contains all the values needed to create a new network 18 type CreateOpts struct { 19 // API type, fixed value Network 20 Kind string `json:"kind" required:"true"` 21 // API version, fixed value networking.cci.io 22 ApiVersion string `json:"apiVersion" required:"true"` 23 // Metadata required to create a network 24 Metadata CreateMetaData `json:"metadata" required:"true"` 25 // Specifications to create a network 26 Spec Spec `json:"spec" required:"true"` 27 } 28 29 // Metadata required to create a network 30 type CreateMetaData struct { 31 //Network unique name 32 Name string `json:"name" required:"true"` 33 //Network annotation, key/value pair format 34 Annotations map[string]string `json:"annotations" required:"true"` 35 } 36 37 // Specifications to create a network 38 type Spec struct { 39 // Network VPC ID 40 AttachedVPC string `json:"attachedVPC" required:"true"` 41 // Network Type 42 NetworkType string `json:"networkType" required:"true"` 43 // Network ID 44 NetworkID string `json:"networkID" required:"true"` 45 // Network AZ 46 AvailableZone string `json:"availableZone" required:"true"` 47 // Network CIDR 48 Cidr string `json:"cidr,omitempty"` 49 // Subnet ID 50 SubnetID string `json:"subnetID,omitempty"` 51 } 52 53 // ToNetworkCreateMap builds a create request body from CreateOpts. 54 func (opts CreateOpts) ToNetworkCreateMap() (map[string]interface{}, error) { 55 return golangsdk.BuildRequestBody(opts, "") 56 } 57 58 // Create accepts a CreateOpts struct and uses the values to create a new network. 59 func Create(c *golangsdk.ServiceClient, ns string, opts CreateOptsBuilder) (r CreateResult) { 60 b, err := opts.ToNetworkCreateMap() 61 if err != nil { 62 r.Err = err 63 return 64 } 65 reqOpt := &golangsdk.RequestOpts{OkCodes: []int{201}} 66 _, r.Err = c.Post(rootURL(c, ns), b, &r.Body, reqOpt) 67 return 68 } 69 70 // Get retrieves a particular network based on its unique ID. 71 func Get(c *golangsdk.ServiceClient, ns, id string) (r GetResult) { 72 _, r.Err = c.Get(resourceURL(c, ns, id), &r.Body, &golangsdk.RequestOpts{ 73 OkCodes: []int{200}, 74 MoreHeaders: RequestOpts.MoreHeaders, JSONBody: nil, 75 }) 76 return 77 } 78 79 // List is a method to obtain namespace networks. 80 func List(c *golangsdk.ServiceClient, ns string) ([]Network, error) { 81 var rst golangsdk.Result 82 _, err := c.Get(rootURL(c, ns), &rst.Body, nil) 83 if err == nil { 84 var r []Network 85 rst.ExtractIntoSlicePtr(&r, "items") 86 return r, nil 87 } 88 return nil, err 89 } 90 91 // Delete will permanently delete a particular network based on its unique ID. 92 func Delete(c *golangsdk.ServiceClient, ns, id string) (r DeleteResult) { 93 _, r.Err = c.Delete(resourceURL(c, ns, id), &golangsdk.RequestOpts{ 94 OkCodes: []int{200}, 95 MoreHeaders: RequestOpts.MoreHeaders, JSONBody: nil, 96 }) 97 return 98 }