github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/cbr/v3/policies/requests.go (about)

     1  package policies
     2  
     3  import (
     4  	"github.com/huaweicloud/golangsdk"
     5  	"github.com/huaweicloud/golangsdk/pagination"
     6  )
     7  
     8  type CreateOpts struct {
     9  	Name                string          `json:"name" required:"true"`
    10  	OperationDefinition *PolicyODCreate `json:"operation_definition" required:"true"`
    11  	OperationType       string          `json:"operation_type" required:"true"`
    12  	Trigger             *Trigger        `json:"trigger" required:"true"`
    13  	Enabled             *bool           `json:"enabled,omitempty"`
    14  }
    15  
    16  // PolicyODCreate is policy operation definition
    17  type PolicyODCreate struct {
    18  	DailyBackups          int    `json:"day_backups,omitempty"`
    19  	WeekBackups           int    `json:"week_backups,omitempty"`
    20  	YearBackups           int    `json:"year_backups,omitempty"`
    21  	MonthBackups          int    `json:"month_backups,omitempty"`
    22  	MaxBackups            int    `json:"max_backups,omitempty"`
    23  	RetentionDurationDays int    `json:"retention_duration_days,omitempty"`
    24  	Timezone              string `json:"timezone,omitempty"`
    25  	EnableAcceleration    bool   `json:"enable_acceleration,omitempty"`
    26  	DestinationProjectID  string `json:"destination_project_id,omitempty"`
    27  	DestinationRegion     string `json:"destination_region,omitempty"`
    28  }
    29  
    30  type TriggerProperties struct {
    31  	Pattern []string `json:"pattern"  required:"true"`
    32  }
    33  
    34  type Trigger struct {
    35  	Properties TriggerProperties `json:"properties"  required:"true"`
    36  }
    37  
    38  type CreateOptsBuilder interface {
    39  	ToPolicyCreateMap() (map[string]interface{}, error)
    40  }
    41  
    42  func (opts CreateOpts) ToPolicyCreateMap() (map[string]interface{}, error) {
    43  	return golangsdk.BuildRequestBody(opts, "policy")
    44  }
    45  
    46  //Create is a method by which to create function that create a CBR policy
    47  func Create(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
    48  	reqBody, err := opts.ToPolicyCreateMap()
    49  	if err != nil {
    50  		r.Err = err
    51  		return
    52  	}
    53  	_, err = client.Post(rootURL(client), reqBody, &r.Body, &golangsdk.RequestOpts{
    54  		OkCodes: []int{200},
    55  	})
    56  	r.Err = err
    57  	return
    58  }
    59  
    60  type ListOpts struct {
    61  	OperationType string `q:"operation_type"`
    62  	VaultID       string `q:"vault_id"`
    63  }
    64  
    65  type ListOptsBuilder interface {
    66  	ToPolicyListQuery() (string, error)
    67  }
    68  
    69  func (opts ListOpts) ToPolicyListQuery() (string, error) {
    70  	q, err := golangsdk.BuildQueryString(opts)
    71  	if err != nil {
    72  		return "", err
    73  	}
    74  	return q.String(), err
    75  }
    76  
    77  //List is a method to obtain the specified CBR policy according to the vault ID or operation type.
    78  //This method can also obtain all the CBR policies through the default parameter settings.
    79  func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager {
    80  	url := rootURL(client)
    81  	if opts != nil {
    82  		query, err := opts.ToPolicyListQuery()
    83  		if err != nil {
    84  			return pagination.Pager{Err: err}
    85  		}
    86  		url += query
    87  	}
    88  
    89  	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
    90  		return PolicyPage{pagination.SinglePageBase(r)}
    91  	})
    92  }
    93  
    94  //Get is a method to obtain the specified CBR policy according to the policy ID.
    95  func Get(client *golangsdk.ServiceClient, id string) (r GetResult) {
    96  	_, r.Err = client.Get(resourceURL(client, id), &r.Body, nil)
    97  	return
    98  }
    99  
   100  type UpdateOpts struct {
   101  	Enabled             *bool           `json:"enabled,omitempty"`
   102  	Name                string          `json:"name,omitempty"`
   103  	OperationDefinition *PolicyODCreate `json:"operation_definition,omitempty"`
   104  	Trigger             *Trigger        `json:"trigger,omitempty"`
   105  }
   106  
   107  type UpdateOptsBuilder interface {
   108  	ToPolicyUpdateMap() (map[string]interface{}, error)
   109  }
   110  
   111  func (opts UpdateOpts) ToPolicyUpdateMap() (map[string]interface{}, error) {
   112  	return golangsdk.BuildRequestBody(opts, "policy")
   113  }
   114  
   115  //Delete is a method to update an existing CBR policy
   116  func Update(client *golangsdk.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
   117  	reqBody, err := opts.ToPolicyUpdateMap()
   118  	if err != nil {
   119  		r.Err = err
   120  		return
   121  	}
   122  	_, err = client.Put(resourceURL(client, id), reqBody, &r.Body, &golangsdk.RequestOpts{
   123  		OkCodes: []int{200},
   124  	})
   125  	r.Err = err
   126  	return
   127  }
   128  
   129  //Delete is a method to delete an existing CBR policy
   130  func Delete(client *golangsdk.ServiceClient, id string) (r DeleteResult) {
   131  	_, r.Err = client.Delete(resourceURL(client, id), nil)
   132  	return
   133  }