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  }