github.com/gophercloud/gophercloud@v1.11.0/openstack/keymanager/v1/containers/requests.go (about) 1 package containers 2 3 import ( 4 "github.com/gophercloud/gophercloud" 5 "github.com/gophercloud/gophercloud/pagination" 6 ) 7 8 // ContainerType represents the valid types of containers. 9 type ContainerType string 10 11 const ( 12 GenericContainer ContainerType = "generic" 13 RSAContainer ContainerType = "rsa" 14 CertificateContainer ContainerType = "certificate" 15 ) 16 17 // ListOptsBuilder allows extensions to add additional parameters to 18 // the List request 19 type ListOptsBuilder interface { 20 ToContainerListQuery() (string, error) 21 } 22 23 // ListOpts provides options to filter the List results. 24 type ListOpts struct { 25 // Limit is the amount of containers to retrieve. 26 Limit int `q:"limit"` 27 28 // Name is the name of the container 29 Name string `q:"name"` 30 31 // Offset is the index within the list to retrieve. 32 Offset int `q:"offset"` 33 } 34 35 // ToContainerListQuery formats a ListOpts into a query string. 36 func (opts ListOpts) ToContainerListQuery() (string, error) { 37 q, err := gophercloud.BuildQueryString(opts) 38 return q.String(), err 39 } 40 41 // List retrieves a list of containers. 42 func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager { 43 url := listURL(client) 44 if opts != nil { 45 query, err := opts.ToContainerListQuery() 46 if err != nil { 47 return pagination.Pager{Err: err} 48 } 49 url += query 50 } 51 return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 52 return ContainerPage{pagination.LinkedPageBase{PageResult: r}} 53 }) 54 } 55 56 // Get retrieves details of a container. 57 func Get(client *gophercloud.ServiceClient, id string) (r GetResult) { 58 resp, err := client.Get(getURL(client, id), &r.Body, nil) 59 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 60 return 61 } 62 63 // CreateOptsBuilder allows extensions to add additional parameters to 64 // the Create request. 65 type CreateOptsBuilder interface { 66 ToContainerCreateMap() (map[string]interface{}, error) 67 } 68 69 // CreateOpts provides options used to create a container. 70 type CreateOpts struct { 71 // Type represents the type of container. 72 Type ContainerType `json:"type" required:"true"` 73 74 // Name is the name of the container. 75 Name string `json:"name"` 76 77 // SecretRefs is a list of secret refs for the container. 78 SecretRefs []SecretRef `json:"secret_refs,omitempty"` 79 } 80 81 // ToContainerCreateMap formats a CreateOpts into a create request. 82 func (opts CreateOpts) ToContainerCreateMap() (map[string]interface{}, error) { 83 return gophercloud.BuildRequestBody(opts, "") 84 } 85 86 // Create creates a new container. 87 func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { 88 b, err := opts.ToContainerCreateMap() 89 if err != nil { 90 r.Err = err 91 return 92 } 93 resp, err := client.Post(createURL(client), &b, &r.Body, &gophercloud.RequestOpts{ 94 OkCodes: []int{201}, 95 }) 96 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 97 return 98 } 99 100 // Delete deletes a container. 101 func Delete(client *gophercloud.ServiceClient, id string) (r DeleteResult) { 102 resp, err := client.Delete(deleteURL(client, id), nil) 103 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 104 return 105 } 106 107 // ListConsumersOptsBuilder allows extensions to add additional parameters to 108 // the ListConsumers request 109 type ListConsumersOptsBuilder interface { 110 ToContainerListConsumersQuery() (string, error) 111 } 112 113 // ListConsumersOpts provides options to filter the List results. 114 type ListConsumersOpts struct { 115 // Limit is the amount of consumers to retrieve. 116 Limit int `q:"limit"` 117 118 // Offset is the index within the list to retrieve. 119 Offset int `q:"offset"` 120 } 121 122 // ToContainerListConsumersQuery formats a ListConsumersOpts into a query 123 // string. 124 func (opts ListOpts) ToContainerListConsumersQuery() (string, error) { 125 q, err := gophercloud.BuildQueryString(opts) 126 return q.String(), err 127 } 128 129 // ListConsumers retrieves a list of consumers from a container. 130 func ListConsumers(client *gophercloud.ServiceClient, containerID string, opts ListConsumersOptsBuilder) pagination.Pager { 131 url := listConsumersURL(client, containerID) 132 if opts != nil { 133 query, err := opts.ToContainerListConsumersQuery() 134 if err != nil { 135 return pagination.Pager{Err: err} 136 } 137 url += query 138 } 139 return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 140 return ConsumerPage{pagination.LinkedPageBase{PageResult: r}} 141 }) 142 } 143 144 // CreateConsumerOptsBuilder allows extensions to add additional parameters to 145 // the Create request. 146 type CreateConsumerOptsBuilder interface { 147 ToContainerConsumerCreateMap() (map[string]interface{}, error) 148 } 149 150 // CreateConsumerOpts provides options used to create a container. 151 type CreateConsumerOpts struct { 152 // Name is the name of the consumer. 153 Name string `json:"name"` 154 155 // URL is the URL to the consumer resource. 156 URL string `json:"URL"` 157 } 158 159 // ToContainerConsumerCreateMap formats a CreateConsumerOpts into a create 160 // request. 161 func (opts CreateConsumerOpts) ToContainerConsumerCreateMap() (map[string]interface{}, error) { 162 return gophercloud.BuildRequestBody(opts, "") 163 } 164 165 // CreateConsumer creates a new consumer. 166 func CreateConsumer(client *gophercloud.ServiceClient, containerID string, opts CreateConsumerOptsBuilder) (r CreateConsumerResult) { 167 b, err := opts.ToContainerConsumerCreateMap() 168 if err != nil { 169 r.Err = err 170 return 171 } 172 resp, err := client.Post(createConsumerURL(client, containerID), &b, &r.Body, &gophercloud.RequestOpts{ 173 OkCodes: []int{200}, 174 }) 175 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 176 return 177 } 178 179 // DeleteConsumerOptsBuilder allows extensions to add additional parameters to 180 // the Delete request. 181 type DeleteConsumerOptsBuilder interface { 182 ToContainerConsumerDeleteMap() (map[string]interface{}, error) 183 } 184 185 // DeleteConsumerOpts represents options used for deleting a consumer. 186 type DeleteConsumerOpts struct { 187 // Name is the name of the consumer. 188 Name string `json:"name"` 189 190 // URL is the URL to the consumer resource. 191 URL string `json:"URL"` 192 } 193 194 // ToContainerConsumerDeleteMap formats a DeleteConsumerOpts into a create 195 // request. 196 func (opts DeleteConsumerOpts) ToContainerConsumerDeleteMap() (map[string]interface{}, error) { 197 return gophercloud.BuildRequestBody(opts, "") 198 } 199 200 // DeleteConsumer deletes a consumer. 201 func DeleteConsumer(client *gophercloud.ServiceClient, containerID string, opts DeleteConsumerOptsBuilder) (r DeleteConsumerResult) { 202 url := deleteConsumerURL(client, containerID) 203 204 b, err := opts.ToContainerConsumerDeleteMap() 205 if err != nil { 206 r.Err = err 207 return 208 } 209 210 resp, err := client.Request("DELETE", url, &gophercloud.RequestOpts{ 211 JSONBody: b, 212 JSONResponse: &r.Body, 213 OkCodes: []int{200}, 214 }) 215 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 216 return 217 } 218 219 // SecretRefBuilder allows extensions to add additional parameters to the 220 // Create request. 221 type SecretRefBuilder interface { 222 ToContainerSecretRefMap() (map[string]interface{}, error) 223 } 224 225 // ToContainerSecretRefMap formats a SecretRefBuilder into a create 226 // request. 227 func (opts SecretRef) ToContainerSecretRefMap() (map[string]interface{}, error) { 228 return gophercloud.BuildRequestBody(opts, "") 229 } 230 231 // CreateSecret creates a new consumer. 232 func CreateSecretRef(client *gophercloud.ServiceClient, containerID string, opts SecretRefBuilder) (r CreateSecretRefResult) { 233 b, err := opts.ToContainerSecretRefMap() 234 if err != nil { 235 r.Err = err 236 return 237 } 238 resp, err := client.Post(createSecretRefURL(client, containerID), &b, &r.Body, &gophercloud.RequestOpts{ 239 OkCodes: []int{201}, 240 }) 241 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 242 return 243 } 244 245 // DeleteSecret deletes a consumer. 246 func DeleteSecretRef(client *gophercloud.ServiceClient, containerID string, opts SecretRefBuilder) (r DeleteSecretRefResult) { 247 url := deleteSecretRefURL(client, containerID) 248 249 b, err := opts.ToContainerSecretRefMap() 250 if err != nil { 251 r.Err = err 252 return 253 } 254 255 resp, err := client.Request("DELETE", url, &gophercloud.RequestOpts{ 256 JSONBody: b, 257 OkCodes: []int{204}, 258 }) 259 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 260 return 261 }