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 }