github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/autoscaling/v1/groups/requests.go (about)

     1  package groups
     2  
     3  import (
     4  	"github.com/chnsz/golangsdk"
     5  	"github.com/chnsz/golangsdk/pagination"
     6  )
     7  
     8  // CreateOptsBuilder is an interface from which can build the request of creating group
     9  type CreateOptsBuilder interface {
    10  	ToGroupCreateMap() (map[string]interface{}, error)
    11  }
    12  
    13  // CreateOpts is a struct contains the parameters of creating group
    14  type CreateOpts struct {
    15  	Name                      string              `json:"scaling_group_name" required:"true"`
    16  	ConfigurationID           string              `json:"scaling_configuration_id,omitempty"`
    17  	DesireInstanceNumber      int                 `json:"desire_instance_number,omitempty"`
    18  	MinInstanceNumber         int                 `json:"min_instance_number,omitempty"`
    19  	MaxInstanceNumber         int                 `json:"max_instance_number,omitempty"`
    20  	CoolDownTime              int                 `json:"cool_down_time,omitempty"`
    21  	LBListenerID              string              `json:"lb_listener_id,omitempty"`
    22  	LBaaSListeners            []LBaaSListenerOpts `json:"lbaas_listeners,omitempty"`
    23  	AvailableZones            []string            `json:"available_zones,omitempty"`
    24  	VpcID                     string              `json:"vpc_id" required:"ture"`
    25  	Networks                  []NetworkOpts       `json:"networks" required:"ture"`
    26  	SecurityGroup             []SecurityGroupOpts `json:"security_groups,omitempty"`
    27  	HealthPeriodicAuditMethod string              `json:"health_periodic_audit_method,omitempty"`
    28  	HealthPeriodicAuditTime   int                 `json:"health_periodic_audit_time,omitempty"`
    29  	HealthPeriodicAuditGrace  int                 `json:"health_periodic_audit_grace_period,omitempty"`
    30  	InstanceTerminatePolicy   string              `json:"instance_terminate_policy,omitempty"`
    31  	Notifications             []string            `json:"notifications,omitempty"`
    32  	IsDeletePublicip          bool                `json:"delete_publicip,omitempty"`
    33  	IsDeleteVolume            bool                `json:"delete_volume,omitempty"`
    34  	MultiAZPriorityPolicy     string              `json:"multi_az_priority_policy,omitempty"`
    35  	Description               string              `json:"description,omitempty"`
    36  	IamAgencyName             string              `json:"iam_agency_name,omitempty"`
    37  	EnterpriseProjectID       string              `json:"enterprise_project_id,omitempty"`
    38  }
    39  
    40  type NetworkOpts struct {
    41  	ID                  string            `json:"id,omitempty"`
    42  	IPv6Enable          bool              `json:"ipv6_enable,omitempty"`
    43  	IPv6BandWidth       *BandWidthOpts    `json:"ipv6_bandwidth,omitempty"`
    44  	AllowedAddressPairs []AddressPairOpts `json:"allowed_address_pairs,omitempty"`
    45  }
    46  
    47  type BandWidthOpts struct {
    48  	ID string `json:"id" required:"true"`
    49  }
    50  
    51  type AddressPairOpts struct {
    52  	IpAddress string `json:"ip_address,omitempty"`
    53  }
    54  
    55  type SecurityGroupOpts struct {
    56  	ID string `json:"id,omitempty"`
    57  }
    58  
    59  type LBaaSListenerOpts struct {
    60  	PoolID       string `json:"pool_id" required:"true"`
    61  	ProtocolPort int    `json:"protocol_port" required:"true"`
    62  	Weight       int    `json:"weight,omitempty"`
    63  }
    64  
    65  func (opts CreateOpts) ToGroupCreateMap() (map[string]interface{}, error) {
    66  	return golangsdk.BuildRequestBody(opts, "")
    67  }
    68  
    69  // Create is a method of creating group
    70  func Create(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
    71  	b, err := opts.ToGroupCreateMap()
    72  	if err != nil {
    73  		r.Err = err
    74  		return
    75  	}
    76  	_, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{
    77  		OkCodes: []int{200},
    78  	})
    79  	return
    80  }
    81  
    82  // Delete is a method of deleting a group by group id
    83  func Delete(client *golangsdk.ServiceClient, id string) (r DeleteResult) {
    84  	_, r.Err = client.Delete(deleteURL(client, id), nil)
    85  	return
    86  }
    87  
    88  // ForceDelete is a method of force deleting a group by group id
    89  func ForceDelete(client *golangsdk.ServiceClient, id string) (r DeleteResult) {
    90  	_, r.Err = client.Delete(forceDeleteURL(client, id), nil)
    91  	return
    92  }
    93  
    94  // Get is a method of getting the detailed information of the group by id
    95  func Get(client *golangsdk.ServiceClient, id string) (r GetResult) {
    96  	_, r.Err = client.Get(getURL(client, id), &r.Body, nil)
    97  	return
    98  }
    99  
   100  type ListOptsBuilder interface {
   101  	ToGroupListQuery() (string, error)
   102  }
   103  
   104  type ListOpts struct {
   105  	Name                string `q:"scaling_group_name"`
   106  	ConfigurationID     string `q:"scaling_configuration_id"`
   107  	Status              string `q:"scaling_group_status"`
   108  	EnterpriseProjectID string `q:"enterprise_project_id"`
   109  }
   110  
   111  // ToGroupListQuery formats a ListOpts into a query string.
   112  func (opts ListOpts) ToGroupListQuery() (string, error) {
   113  	q, err := golangsdk.BuildQueryString(opts)
   114  	return q.String(), err
   115  }
   116  
   117  func List(client *golangsdk.ServiceClient, ops ListOptsBuilder) pagination.Pager {
   118  	url := listURL(client)
   119  	if ops != nil {
   120  		q, err := ops.ToGroupListQuery()
   121  		if err != nil {
   122  			return pagination.Pager{Err: err}
   123  		}
   124  		url += q
   125  	}
   126  
   127  	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
   128  		return GroupPage{pagination.SinglePageBase(r)}
   129  	})
   130  }
   131  
   132  // UpdateOptsBuilder is an interface which can build the map paramter of update function
   133  type UpdateOptsBuilder interface {
   134  	ToGroupUpdateMap() (map[string]interface{}, error)
   135  }
   136  
   137  // UpdateOpts is a struct which represents the parameters of update function
   138  type UpdateOpts struct {
   139  	Name                      string              `json:"scaling_group_name,omitempty"`
   140  	DesireInstanceNumber      int                 `json:"desire_instance_number"`
   141  	MinInstanceNumber         int                 `json:"min_instance_number"`
   142  	MaxInstanceNumber         int                 `json:"max_instance_number"`
   143  	CoolDownTime              int                 `json:"cool_down_time,omitempty"`
   144  	LBListenerID              string              `json:"lb_listener_id,omitempty"`
   145  	LBaaSListeners            []LBaaSListenerOpts `json:"lbaas_listeners,omitempty"`
   146  	AvailableZones            []string            `json:"available_zones,omitempty"`
   147  	Networks                  []NetworkOpts       `json:"networks,omitempty"`
   148  	SecurityGroup             []SecurityGroupOpts `json:"security_groups,omitempty"`
   149  	HealthPeriodicAuditMethod string              `json:"health_periodic_audit_method,omitempty"`
   150  	HealthPeriodicAuditTime   int                 `json:"health_periodic_audit_time,omitempty"`
   151  	HealthPeriodicAuditGrace  int                 `json:"health_periodic_audit_grace_period,omitempty"`
   152  	InstanceTerminatePolicy   string              `json:"instance_terminate_policy,omitempty"`
   153  	Notifications             []string            `json:"notifications,omitempty"`
   154  	IsDeletePublicip          bool                `json:"delete_publicip,omitempty"`
   155  	ConfigurationID           string              `json:"scaling_configuration_id,omitempty"`
   156  	MultiAZPriorityPolicy     string              `json:"multi_az_priority_policy,omitempty"`
   157  	Description               *string             `json:"description,omitempty"`
   158  	IamAgencyName             string              `json:"iam_agency_name,omitempty"`
   159  	EnterpriseProjectID       string              `json:"enterprise_project_id,omitempty"`
   160  }
   161  
   162  func (opts UpdateOpts) ToGroupUpdateMap() (map[string]interface{}, error) {
   163  	return golangsdk.BuildRequestBody(opts, "")
   164  }
   165  
   166  // Update is a method which can be able to update the group via accessing to the
   167  // autoscaling service with Put method and parameters
   168  func Update(client *golangsdk.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
   169  	body, err := opts.ToGroupUpdateMap()
   170  	if err != nil {
   171  		r.Err = err
   172  		return
   173  	}
   174  
   175  	_, r.Err = client.Put(updateURL(client, id), body, &r.Body, &golangsdk.RequestOpts{
   176  		OkCodes: []int{200},
   177  	})
   178  	return
   179  }
   180  
   181  type ActionOptsBuilder interface {
   182  	ToActionMap() (map[string]interface{}, error)
   183  }
   184  
   185  type ActionOpts struct {
   186  	Action string `json:"action" required:"true"`
   187  }
   188  
   189  func (opts ActionOpts) ToActionMap() (map[string]interface{}, error) {
   190  	return golangsdk.BuildRequestBody(opts, "")
   191  }
   192  
   193  func doAction(client *golangsdk.ServiceClient, id string, opts ActionOptsBuilder) (r ActionResult) {
   194  	b, err := opts.ToActionMap()
   195  	if err != nil {
   196  		r.Err = err
   197  		return
   198  	}
   199  	_, r.Err = client.Post(enableURL(client, id), &b, nil, &golangsdk.RequestOpts{
   200  		OkCodes: []int{204},
   201  	})
   202  	return
   203  }
   204  
   205  // Enable is an operation by which can make the group enable service
   206  func Enable(client *golangsdk.ServiceClient, id string) (r ActionResult) {
   207  	opts := ActionOpts{
   208  		Action: "resume",
   209  	}
   210  	return doAction(client, id, opts)
   211  }
   212  
   213  // Disable is an operation by which can be able to pause the group
   214  func Disable(client *golangsdk.ServiceClient, id string) (r ActionResult) {
   215  	opts := ActionOpts{
   216  		Action: "pause",
   217  	}
   218  	return doAction(client, id, opts)
   219  }