github.com/sacloud/iaas-api-go@v1.12.0/internal/define/auto_scale.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package define 16 17 import ( 18 "net/http" 19 20 "github.com/sacloud/iaas-api-go/internal/define/names" 21 "github.com/sacloud/iaas-api-go/internal/define/ops" 22 "github.com/sacloud/iaas-api-go/internal/dsl" 23 "github.com/sacloud/iaas-api-go/internal/dsl/meta" 24 "github.com/sacloud/iaas-api-go/naked" 25 ) 26 27 const ( 28 autoScaleAPIName = "AutoScale" 29 autoScaleAPIPathName = "commonserviceitem" 30 ) 31 32 var autoScaleAPI = &dsl.Resource{ 33 Name: autoScaleAPIName, 34 PathName: autoScaleAPIPathName, 35 PathSuffix: dsl.CloudAPISuffix, 36 IsGlobal: true, 37 Operations: dsl.Operations{ 38 // find 39 ops.FindCommonServiceItem(autoScaleAPIName, autoScaleNakedType, findParameter, autoScaleView), 40 41 // create 42 ops.CreateCommonServiceItem(autoScaleAPIName, autoScaleNakedType, autoScaleCreateParam, autoScaleView), 43 44 // read 45 ops.ReadCommonServiceItem(autoScaleAPIName, autoScaleNakedType, autoScaleView), 46 47 // update 48 ops.UpdateCommonServiceItem(autoScaleAPIName, autoScaleNakedType, autoScaleUpdateParam, autoScaleView), 49 // updateSettings 50 ops.UpdateCommonServiceItemSettings(autoScaleAPIName, autoScaleUpdateSettingsNakedType, autoScaleUpdateSettingsParam, autoScaleView), 51 52 // delete 53 ops.Delete(autoScaleAPIName), 54 55 // status 56 { 57 ResourceName: autoScaleAPIName, 58 Name: "Status", 59 PathFormat: dsl.DefaultPathFormatWithID + "/autoscale/status", 60 Method: http.MethodGet, 61 Arguments: dsl.Arguments{ 62 dsl.ArgumentID, 63 }, 64 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 65 Type: meta.Static(naked.AutoScaleRunningStatus{}), 66 Name: "AutoScale", 67 }), 68 Results: dsl.Results{ 69 { 70 SourceField: "AutoScale", 71 DestField: autoScaleStatusView.Name, 72 IsPlural: false, 73 Model: autoScaleStatusView, 74 }, 75 }, 76 }, 77 78 // scale up 79 { 80 ResourceName: autoScaleAPIName, 81 Name: "ScaleUp", 82 Method: http.MethodPut, 83 PathFormat: dsl.DefaultPathFormatWithID + "/autoscale/up", 84 Arguments: dsl.Arguments{ 85 dsl.ArgumentID, 86 }, 87 }, 88 // scale down 89 { 90 ResourceName: autoScaleAPIName, 91 Name: "ScaleDown", 92 Method: http.MethodPut, 93 PathFormat: dsl.DefaultPathFormatWithID + "/autoscale/down", 94 Arguments: dsl.Arguments{ 95 dsl.ArgumentID, 96 }, 97 }, 98 }, 99 } 100 101 var ( 102 autoScaleNakedType = meta.Static(naked.AutoScale{}) 103 autoScaleUpdateSettingsNakedType = meta.Static(naked.AutoScaleSettingsUpdate{}) 104 105 autoScaleView = &dsl.Model{ 106 Name: autoScaleAPIName, 107 NakedType: autoScaleNakedType, 108 Fields: []*dsl.FieldDesc{ 109 fields.ID(), 110 fields.Name(), 111 fields.Description(), 112 fields.Tags(), 113 fields.Availability(), 114 fields.IconID(), 115 fields.CreatedAt(), 116 fields.ModifiedAt(), 117 118 // settings 119 fields.AutoScaleDisabled(), 120 fields.AutoScaleZones(), 121 fields.AutoScaleConfig(), 122 fields.AutoScaleTriggerType(), 123 fields.AutoScaleCPUThreshold(), 124 fields.AutoScaleRouterThreshold(), 125 fields.AutoScaleScheduleScaling(), 126 fields.SettingsHash(), 127 128 // status 129 fields.AutoScaleAPIKeyID(), 130 }, 131 } 132 133 autoScaleCreateParam = &dsl.Model{ 134 Name: names.CreateParameterName(autoScaleAPIName), 135 NakedType: autoScaleNakedType, 136 ConstFields: []*dsl.ConstFieldDesc{ 137 { 138 Name: "Class", 139 Type: meta.TypeString, 140 Tags: &dsl.FieldTags{ 141 MapConv: "Provider.Class", 142 }, 143 Value: `"autoscale"`, 144 }, 145 { 146 Name: "ServiceClass", 147 Type: meta.TypeString, 148 Value: `"cloud/autoscale/1"`, 149 }, 150 }, 151 Fields: []*dsl.FieldDesc{ 152 // common fields 153 fields.Name(), 154 fields.Description(), 155 fields.Tags(), 156 fields.IconID(), 157 158 // settings 159 fields.AutoScaleDisabled(), 160 fields.AutoScaleZones(), 161 fields.AutoScaleConfig(), 162 fields.AutoScaleTriggerType(), 163 fields.AutoScaleCPUThreshold(), 164 fields.AutoScaleRouterThreshold(), 165 fields.AutoScaleScheduleScaling(), 166 167 // status 168 fields.AutoScaleAPIKeyID(), 169 }, 170 } 171 172 autoScaleUpdateParam = &dsl.Model{ 173 Name: names.UpdateParameterName(autoScaleAPIName), 174 NakedType: autoScaleNakedType, 175 Fields: []*dsl.FieldDesc{ 176 // common fields 177 fields.Name(), 178 fields.Description(), 179 fields.Tags(), 180 fields.IconID(), 181 182 // settings 183 fields.AutoScaleDisabled(), 184 fields.AutoScaleZones(), 185 fields.AutoScaleConfig(), 186 fields.AutoScaleTriggerType(), 187 fields.AutoScaleCPUThreshold(), 188 fields.AutoScaleRouterThreshold(), 189 fields.AutoScaleScheduleScaling(), 190 // settings hash 191 fields.SettingsHash(), 192 }, 193 } 194 195 autoScaleUpdateSettingsParam = &dsl.Model{ 196 Name: names.UpdateSettingsParameterName(autoScaleAPIName), 197 NakedType: autoScaleNakedType, 198 Fields: []*dsl.FieldDesc{ 199 // settings 200 fields.AutoScaleDisabled(), 201 fields.AutoScaleZones(), 202 fields.AutoScaleConfig(), 203 fields.AutoScaleTriggerType(), 204 fields.AutoScaleCPUThreshold(), 205 fields.AutoScaleRouterThreshold(), 206 fields.AutoScaleScheduleScaling(), 207 // settings hash 208 fields.SettingsHash(), 209 }, 210 } 211 212 autoScaleStatusView = &dsl.Model{ 213 Name: "AutoScaleStatus", 214 NakedType: meta.Static(naked.AutoScaleRunningStatus{}), 215 Fields: []*dsl.FieldDesc{ 216 { 217 Name: "LatestLogs", 218 Type: meta.TypeStringSlice, 219 }, 220 { 221 Name: "ResourcesText", 222 Type: meta.TypeString, 223 }, 224 }, 225 } 226 )