/
instance.go
447 lines (362 loc) · 20.6 KB
/
instance.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved.
// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
// Code generated. DO NOT EDIT.
// Core Services API
//
// Use the Core Services API to manage resources such as virtual cloud networks (VCNs),
// compute instances, and block storage volumes. For more information, see the console
// documentation for the Networking (https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/overview.htm),
// Compute (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm), and
// Block Volume (https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/overview.htm) services.
// The required permissions are documented in the
// Details for the Core Services (https://docs.cloud.oracle.com/iaas/Content/Identity/Reference/corepolicyreference.htm) article.
//
package core
import (
"encoding/json"
"fmt"
"github.com/oracle/oci-go-sdk/v65/common"
"strings"
)
// Instance A compute host. The image used to launch the instance determines its operating system and other
// software. The shape specified during the launch process determines the number of CPUs and memory
// allocated to the instance.
// When you launch an instance, it is automatically attached to a virtual
// network interface card (VNIC), called the *primary VNIC*. The VNIC
// has a private IP address from the subnet's CIDR. You can either assign a
// private IP address of your choice or let Oracle automatically assign one.
// You can choose whether the instance has a public IP address. To retrieve the
// addresses, use the ListVnicAttachments
// operation to get the VNIC ID for the instance, and then call
// GetVnic with the VNIC ID.
// For more information, see
// Overview of the Compute Service (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm).
// To use any of the API operations, you must be authorized in an IAM policy. If you're not authorized,
// talk to an administrator. If you're an administrator who needs to write policies to give users access, see
// Getting Started with Policies (https://docs.cloud.oracle.com/iaas/Content/Identity/Concepts/policygetstarted.htm).
// **Warning:** Oracle recommends that you avoid using any confidential information when you
// supply string values using the API.
type Instance struct {
// The availability domain the instance is running in.
// Example: `Uocm:PHX-AD-1`
AvailabilityDomain *string `mandatory:"true" json:"availabilityDomain"`
// The OCID of the compartment that contains the instance.
CompartmentId *string `mandatory:"true" json:"compartmentId"`
// The OCID of the instance.
Id *string `mandatory:"true" json:"id"`
// The current state of the instance.
LifecycleState InstanceLifecycleStateEnum `mandatory:"true" json:"lifecycleState"`
// The region that contains the availability domain the instance is running in.
// For the us-phoenix-1 and us-ashburn-1 regions, `phx` and `iad` are returned, respectively.
// For all other regions, the full region name is returned.
// Examples: `phx`, `eu-frankfurt-1`
Region *string `mandatory:"true" json:"region"`
// The shape of the instance. The shape determines the number of CPUs and the amount of memory
// allocated to the instance. You can enumerate all available shapes by calling
// ListShapes.
Shape *string `mandatory:"true" json:"shape"`
// The date and time the instance was created, in the format defined by RFC3339 (https://tools.ietf.org/html/rfc3339).
// Example: `2016-08-25T21:10:29.600Z`
TimeCreated *common.SDKTime `mandatory:"true" json:"timeCreated"`
// The OCID of the compute capacity reservation this instance is launched under.
// When this field contains an empty string or is null, the instance is not currently in a capacity reservation.
// For more information, see Capacity Reservations (https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
CapacityReservationId *string `mandatory:"false" json:"capacityReservationId"`
// The OCID of the cluster placement group of the instance.
ClusterPlacementGroupId *string `mandatory:"false" json:"clusterPlacementGroupId"`
// The OCID of the dedicated virtual machine host that the instance is placed on.
DedicatedVmHostId *string `mandatory:"false" json:"dedicatedVmHostId"`
// Defined tags for this resource. Each key is predefined and scoped to a
// namespace. For more information, see Resource Tags (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
// Example: `{"Operations": {"CostCenter": "42"}}`
DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"`
// A user-friendly name. Does not have to be unique, and it's changeable.
// Avoid entering confidential information.
DisplayName *string `mandatory:"false" json:"displayName"`
// Additional metadata key/value pairs that you provide. They serve the same purpose and functionality
// as fields in the `metadata` object.
// They are distinguished from `metadata` fields in that these can be nested JSON objects (whereas `metadata`
// fields are string/string maps only).
ExtendedMetadata map[string]interface{} `mandatory:"false" json:"extendedMetadata"`
// The name of the fault domain the instance is running in.
// A fault domain is a grouping of hardware and infrastructure within an availability domain.
// Each availability domain contains three fault domains. Fault domains let you distribute your
// instances so that they are not on the same physical hardware within a single availability domain.
// A hardware failure or Compute hardware maintenance that affects one fault domain does not affect
// instances in other fault domains.
// If you do not specify the fault domain, the system selects one for you.
// Example: `FAULT-DOMAIN-1`
FaultDomain *string `mandatory:"false" json:"faultDomain"`
// Free-form tags for this resource. Each tag is a simple key-value pair with no
// predefined name, type, or namespace. For more information, see Resource Tags (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
// Example: `{"Department": "Finance"}`
FreeformTags map[string]string `mandatory:"false" json:"freeformTags"`
// Deprecated. Use `sourceDetails` instead.
ImageId *string `mandatory:"false" json:"imageId"`
// When a bare metal or virtual machine
// instance boots, the iPXE firmware that runs on the instance is
// configured to run an iPXE script to continue the boot process.
// If you want more control over the boot process, you can provide
// your own custom iPXE script that will run when the instance boots.
// Be aware that the same iPXE script will run
// every time an instance boots, not only after the initial
// LaunchInstance call.
// The default iPXE script connects to the instance's local boot
// volume over iSCSI and performs a network boot. If you use a custom iPXE
// script and want to network-boot from the instance's local boot volume
// over iSCSI the same way as the default iPXE script, use the
// following iSCSI IP address: 169.254.0.2, and boot volume IQN:
// iqn.2015-02.oracle.boot.
// If your instance boot volume attachment type is paravirtualized,
// the boot volume is attached to the instance through virtio-scsi and no iPXE script is used.
// If your instance boot volume attachment type is paravirtualized
// and you use custom iPXE to network boot into your instance,
// the primary boot volume is attached as a data volume through virtio-scsi drive.
// For more information about the Bring Your Own Image feature of
// Oracle Cloud Infrastructure, see
// Bring Your Own Image (https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).
// For more information about iPXE, see http://ipxe.org.
IpxeScript *string `mandatory:"false" json:"ipxeScript"`
// Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
// * `NATIVE` - VM instances launch with iSCSI boot and VFIO devices. The default value for platform images.
// * `EMULATED` - VM instances launch with emulated devices, such as the E1000 network driver and emulated SCSI disk controller.
// * `PARAVIRTUALIZED` - VM instances launch with paravirtualized devices using VirtIO drivers.
// * `CUSTOM` - VM instances launch with custom configuration settings specified in the `LaunchOptions` parameter.
LaunchMode InstanceLaunchModeEnum `mandatory:"false" json:"launchMode,omitempty"`
LaunchOptions *LaunchOptions `mandatory:"false" json:"launchOptions"`
InstanceOptions *InstanceOptions `mandatory:"false" json:"instanceOptions"`
AvailabilityConfig *InstanceAvailabilityConfig `mandatory:"false" json:"availabilityConfig"`
PreemptibleInstanceConfig *PreemptibleInstanceConfigDetails `mandatory:"false" json:"preemptibleInstanceConfig"`
// Custom metadata that you provide.
Metadata map[string]string `mandatory:"false" json:"metadata"`
ShapeConfig *InstanceShapeConfig `mandatory:"false" json:"shapeConfig"`
// Whether the instance’s OCPUs and memory are distributed across multiple NUMA nodes.
IsCrossNumaNode *bool `mandatory:"false" json:"isCrossNumaNode"`
SourceDetails InstanceSourceDetails `mandatory:"false" json:"sourceDetails"`
// System tags for this resource. Each key is predefined and scoped to a namespace.
// Example: `{"foo-namespace": {"bar-key": "value"}}`
SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"`
AgentConfig *InstanceAgentConfig `mandatory:"false" json:"agentConfig"`
// The date and time the instance is expected to be stopped / started, in the format defined by RFC3339 (https://tools.ietf.org/html/rfc3339).
// After that time if instance hasn't been rebooted, Oracle will reboot the instance within 24 hours of the due time.
// Regardless of how the instance was stopped, the flag will be reset to empty as soon as instance reaches Stopped state.
// Example: `2018-05-25T21:10:29.600Z`
TimeMaintenanceRebootDue *common.SDKTime `mandatory:"false" json:"timeMaintenanceRebootDue"`
PlatformConfig PlatformConfig `mandatory:"false" json:"platformConfig"`
// The OCID of the Instance Configuration used to source launch details for this instance. Any other fields supplied in the instance launch request override the details stored in the Instance Configuration for this instance launch.
InstanceConfigurationId *string `mandatory:"false" json:"instanceConfigurationId"`
}
func (m Instance) String() string {
return common.PointerString(m)
}
// ValidateEnumValue returns an error when providing an unsupported enum value
// This function is being called during constructing API request process
// Not recommended for calling this function directly
func (m Instance) ValidateEnumValue() (bool, error) {
errMessage := []string{}
if _, ok := GetMappingInstanceLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" {
errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetInstanceLifecycleStateEnumStringValues(), ",")))
}
if _, ok := GetMappingInstanceLaunchModeEnum(string(m.LaunchMode)); !ok && m.LaunchMode != "" {
errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LaunchMode: %s. Supported values are: %s.", m.LaunchMode, strings.Join(GetInstanceLaunchModeEnumStringValues(), ",")))
}
if len(errMessage) > 0 {
return true, fmt.Errorf(strings.Join(errMessage, "\n"))
}
return false, nil
}
// UnmarshalJSON unmarshals from json
func (m *Instance) UnmarshalJSON(data []byte) (e error) {
model := struct {
CapacityReservationId *string `json:"capacityReservationId"`
ClusterPlacementGroupId *string `json:"clusterPlacementGroupId"`
DedicatedVmHostId *string `json:"dedicatedVmHostId"`
DefinedTags map[string]map[string]interface{} `json:"definedTags"`
DisplayName *string `json:"displayName"`
ExtendedMetadata map[string]interface{} `json:"extendedMetadata"`
FaultDomain *string `json:"faultDomain"`
FreeformTags map[string]string `json:"freeformTags"`
ImageId *string `json:"imageId"`
IpxeScript *string `json:"ipxeScript"`
LaunchMode InstanceLaunchModeEnum `json:"launchMode"`
LaunchOptions *LaunchOptions `json:"launchOptions"`
InstanceOptions *InstanceOptions `json:"instanceOptions"`
AvailabilityConfig *InstanceAvailabilityConfig `json:"availabilityConfig"`
PreemptibleInstanceConfig *PreemptibleInstanceConfigDetails `json:"preemptibleInstanceConfig"`
Metadata map[string]string `json:"metadata"`
ShapeConfig *InstanceShapeConfig `json:"shapeConfig"`
IsCrossNumaNode *bool `json:"isCrossNumaNode"`
SourceDetails instancesourcedetails `json:"sourceDetails"`
SystemTags map[string]map[string]interface{} `json:"systemTags"`
AgentConfig *InstanceAgentConfig `json:"agentConfig"`
TimeMaintenanceRebootDue *common.SDKTime `json:"timeMaintenanceRebootDue"`
PlatformConfig platformconfig `json:"platformConfig"`
InstanceConfigurationId *string `json:"instanceConfigurationId"`
AvailabilityDomain *string `json:"availabilityDomain"`
CompartmentId *string `json:"compartmentId"`
Id *string `json:"id"`
LifecycleState InstanceLifecycleStateEnum `json:"lifecycleState"`
Region *string `json:"region"`
Shape *string `json:"shape"`
TimeCreated *common.SDKTime `json:"timeCreated"`
}{}
e = json.Unmarshal(data, &model)
if e != nil {
return
}
var nn interface{}
m.CapacityReservationId = model.CapacityReservationId
m.ClusterPlacementGroupId = model.ClusterPlacementGroupId
m.DedicatedVmHostId = model.DedicatedVmHostId
m.DefinedTags = model.DefinedTags
m.DisplayName = model.DisplayName
m.ExtendedMetadata = model.ExtendedMetadata
m.FaultDomain = model.FaultDomain
m.FreeformTags = model.FreeformTags
m.ImageId = model.ImageId
m.IpxeScript = model.IpxeScript
m.LaunchMode = model.LaunchMode
m.LaunchOptions = model.LaunchOptions
m.InstanceOptions = model.InstanceOptions
m.AvailabilityConfig = model.AvailabilityConfig
m.PreemptibleInstanceConfig = model.PreemptibleInstanceConfig
m.Metadata = model.Metadata
m.ShapeConfig = model.ShapeConfig
m.IsCrossNumaNode = model.IsCrossNumaNode
nn, e = model.SourceDetails.UnmarshalPolymorphicJSON(model.SourceDetails.JsonData)
if e != nil {
return
}
if nn != nil {
m.SourceDetails = nn.(InstanceSourceDetails)
} else {
m.SourceDetails = nil
}
m.SystemTags = model.SystemTags
m.AgentConfig = model.AgentConfig
m.TimeMaintenanceRebootDue = model.TimeMaintenanceRebootDue
nn, e = model.PlatformConfig.UnmarshalPolymorphicJSON(model.PlatformConfig.JsonData)
if e != nil {
return
}
if nn != nil {
m.PlatformConfig = nn.(PlatformConfig)
} else {
m.PlatformConfig = nil
}
m.InstanceConfigurationId = model.InstanceConfigurationId
m.AvailabilityDomain = model.AvailabilityDomain
m.CompartmentId = model.CompartmentId
m.Id = model.Id
m.LifecycleState = model.LifecycleState
m.Region = model.Region
m.Shape = model.Shape
m.TimeCreated = model.TimeCreated
return
}
// InstanceLaunchModeEnum Enum with underlying type: string
type InstanceLaunchModeEnum string
// Set of constants representing the allowable values for InstanceLaunchModeEnum
const (
InstanceLaunchModeNative InstanceLaunchModeEnum = "NATIVE"
InstanceLaunchModeEmulated InstanceLaunchModeEnum = "EMULATED"
InstanceLaunchModeParavirtualized InstanceLaunchModeEnum = "PARAVIRTUALIZED"
InstanceLaunchModeCustom InstanceLaunchModeEnum = "CUSTOM"
)
var mappingInstanceLaunchModeEnum = map[string]InstanceLaunchModeEnum{
"NATIVE": InstanceLaunchModeNative,
"EMULATED": InstanceLaunchModeEmulated,
"PARAVIRTUALIZED": InstanceLaunchModeParavirtualized,
"CUSTOM": InstanceLaunchModeCustom,
}
var mappingInstanceLaunchModeEnumLowerCase = map[string]InstanceLaunchModeEnum{
"native": InstanceLaunchModeNative,
"emulated": InstanceLaunchModeEmulated,
"paravirtualized": InstanceLaunchModeParavirtualized,
"custom": InstanceLaunchModeCustom,
}
// GetInstanceLaunchModeEnumValues Enumerates the set of values for InstanceLaunchModeEnum
func GetInstanceLaunchModeEnumValues() []InstanceLaunchModeEnum {
values := make([]InstanceLaunchModeEnum, 0)
for _, v := range mappingInstanceLaunchModeEnum {
values = append(values, v)
}
return values
}
// GetInstanceLaunchModeEnumStringValues Enumerates the set of values in String for InstanceLaunchModeEnum
func GetInstanceLaunchModeEnumStringValues() []string {
return []string{
"NATIVE",
"EMULATED",
"PARAVIRTUALIZED",
"CUSTOM",
}
}
// GetMappingInstanceLaunchModeEnum performs case Insensitive comparison on enum value and return the desired enum
func GetMappingInstanceLaunchModeEnum(val string) (InstanceLaunchModeEnum, bool) {
enum, ok := mappingInstanceLaunchModeEnumLowerCase[strings.ToLower(val)]
return enum, ok
}
// InstanceLifecycleStateEnum Enum with underlying type: string
type InstanceLifecycleStateEnum string
// Set of constants representing the allowable values for InstanceLifecycleStateEnum
const (
InstanceLifecycleStateMoving InstanceLifecycleStateEnum = "MOVING"
InstanceLifecycleStateProvisioning InstanceLifecycleStateEnum = "PROVISIONING"
InstanceLifecycleStateRunning InstanceLifecycleStateEnum = "RUNNING"
InstanceLifecycleStateStarting InstanceLifecycleStateEnum = "STARTING"
InstanceLifecycleStateStopping InstanceLifecycleStateEnum = "STOPPING"
InstanceLifecycleStateStopped InstanceLifecycleStateEnum = "STOPPED"
InstanceLifecycleStateCreatingImage InstanceLifecycleStateEnum = "CREATING_IMAGE"
InstanceLifecycleStateTerminating InstanceLifecycleStateEnum = "TERMINATING"
InstanceLifecycleStateTerminated InstanceLifecycleStateEnum = "TERMINATED"
)
var mappingInstanceLifecycleStateEnum = map[string]InstanceLifecycleStateEnum{
"MOVING": InstanceLifecycleStateMoving,
"PROVISIONING": InstanceLifecycleStateProvisioning,
"RUNNING": InstanceLifecycleStateRunning,
"STARTING": InstanceLifecycleStateStarting,
"STOPPING": InstanceLifecycleStateStopping,
"STOPPED": InstanceLifecycleStateStopped,
"CREATING_IMAGE": InstanceLifecycleStateCreatingImage,
"TERMINATING": InstanceLifecycleStateTerminating,
"TERMINATED": InstanceLifecycleStateTerminated,
}
var mappingInstanceLifecycleStateEnumLowerCase = map[string]InstanceLifecycleStateEnum{
"moving": InstanceLifecycleStateMoving,
"provisioning": InstanceLifecycleStateProvisioning,
"running": InstanceLifecycleStateRunning,
"starting": InstanceLifecycleStateStarting,
"stopping": InstanceLifecycleStateStopping,
"stopped": InstanceLifecycleStateStopped,
"creating_image": InstanceLifecycleStateCreatingImage,
"terminating": InstanceLifecycleStateTerminating,
"terminated": InstanceLifecycleStateTerminated,
}
// GetInstanceLifecycleStateEnumValues Enumerates the set of values for InstanceLifecycleStateEnum
func GetInstanceLifecycleStateEnumValues() []InstanceLifecycleStateEnum {
values := make([]InstanceLifecycleStateEnum, 0)
for _, v := range mappingInstanceLifecycleStateEnum {
values = append(values, v)
}
return values
}
// GetInstanceLifecycleStateEnumStringValues Enumerates the set of values in String for InstanceLifecycleStateEnum
func GetInstanceLifecycleStateEnumStringValues() []string {
return []string{
"MOVING",
"PROVISIONING",
"RUNNING",
"STARTING",
"STOPPING",
"STOPPED",
"CREATING_IMAGE",
"TERMINATING",
"TERMINATED",
}
}
// GetMappingInstanceLifecycleStateEnum performs case Insensitive comparison on enum value and return the desired enum
func GetMappingInstanceLifecycleStateEnum(val string) (InstanceLifecycleStateEnum, bool) {
enum, ok := mappingInstanceLifecycleStateEnumLowerCase[strings.ToLower(val)]
return enum, ok
}