Skip to content

Commit

Permalink
feat(ocean/aws): added BlockDeviceMappings block in `LaunchSpecific…
Browse files Browse the repository at this point in the history
…ation` (#240)
  • Loading branch information
sharadkesarwani authored Mar 22, 2023
1 parent bdf7c8b commit b977400
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 18 deletions.
25 changes: 22 additions & 3 deletions examples/service/ocean/providers/aws/create/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,28 @@ func main() {
"subnet-67890",
},
LaunchSpecification: &aws.LaunchSpecification{
ImageID: spotinst.String("ami-12345"),
Monitoring: spotinst.Bool(false),
SecurityGroupIDs: []string{"sg-foo"},
ImageID: spotinst.String("ami-12345"),
Monitoring: spotinst.Bool(false),
SecurityGroupIDs: []string{"sg-foo"},
BlockDeviceMappings: []*aws.ClusterBlockDeviceMappings{
&aws.ClusterBlockDeviceMappings{
DeviceName: spotinst.String("/dev/sdf"),
EBS: &aws.ClusterEBS{
DeleteOnTermination: spotinst.Bool(true),
Encrypted: spotinst.Bool(false),
IOPS: spotinst.Int(100),
Throughput: spotinst.Int(125),
VolumeType: spotinst.String("gp3"),
SnapshotID: spotinst.String("snap-12345"),
VolumeSize: spotinst.Int(35),
DynamicVolumeSize: &aws.ClusterDynamicVolumeSize{
BaseSize: spotinst.Int(20),
Resource: spotinst.String("CPU"),
SizePerResourceUnit: spotinst.Int(2),
},
},
},
},
AssociateIPv6Address: spotinst.Bool(true),
},
},
Expand Down
196 changes: 181 additions & 15 deletions service/ocean/providers/aws/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,21 +162,22 @@ type Filters struct {
}

type LaunchSpecification struct {
AssociatePublicIPAddress *bool `json:"associatePublicIpAddress,omitempty"`
AssociateIPv6Address *bool `json:"associateIpv6Address,omitempty"`
SecurityGroupIDs []string `json:"securityGroupIds,omitempty"`
ImageID *string `json:"imageId,omitempty"`
KeyPair *string `json:"keyPair,omitempty"`
UserData *string `json:"userData,omitempty"`
IAMInstanceProfile *IAMInstanceProfile `json:"iamInstanceProfile,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
LoadBalancers []*LoadBalancer `json:"loadBalancers,omitempty"`
RootVolumeSize *int `json:"rootVolumeSize,omitempty"`
Monitoring *bool `json:"monitoring,omitempty"`
EBSOptimized *bool `json:"ebsOptimized,omitempty"`
UseAsTemplateOnly *bool `json:"useAsTemplateOnly,omitempty"`
InstanceMetadataOptions *InstanceMetadataOptions `json:"instanceMetadataOptions,omitempty"`
LaunchSpecScheduling *LaunchSpecScheduling `json:"scheduling,omitempty"`
AssociatePublicIPAddress *bool `json:"associatePublicIpAddress,omitempty"`
AssociateIPv6Address *bool `json:"associateIpv6Address,omitempty"`
SecurityGroupIDs []string `json:"securityGroupIds,omitempty"`
ImageID *string `json:"imageId,omitempty"`
KeyPair *string `json:"keyPair,omitempty"`
UserData *string `json:"userData,omitempty"`
IAMInstanceProfile *IAMInstanceProfile `json:"iamInstanceProfile,omitempty"`
Tags []*Tag `json:"tags,omitempty"`
LoadBalancers []*LoadBalancer `json:"loadBalancers,omitempty"`
RootVolumeSize *int `json:"rootVolumeSize,omitempty"`
Monitoring *bool `json:"monitoring,omitempty"`
EBSOptimized *bool `json:"ebsOptimized,omitempty"`
UseAsTemplateOnly *bool `json:"useAsTemplateOnly,omitempty"`
InstanceMetadataOptions *InstanceMetadataOptions `json:"instanceMetadataOptions,omitempty"`
BlockDeviceMappings []*ClusterBlockDeviceMappings `json:"blockDeviceMappings,omitempty"`
LaunchSpecScheduling *LaunchSpecScheduling `json:"scheduling,omitempty"`

forceSendFields []string
nullFields []string
Expand Down Expand Up @@ -2030,3 +2031,168 @@ func (o *Filters) SetVirtualizationTypes(v []string) *Filters {
}
return o
}

func (o *LaunchSpecification) SetClusterBlockDeviceMappings(v []*ClusterBlockDeviceMappings) *LaunchSpecification {
if o.BlockDeviceMappings = v; o.BlockDeviceMappings == nil {
o.nullFields = append(o.nullFields, "BlockDeviceMappings")
}
return o
}

type ClusterBlockDeviceMappings struct {
DeviceName *string `json:"deviceName,omitempty"`
EBS *ClusterEBS `json:"ebs,omitempty"`

forceSendFields []string
nullFields []string
}
type ClusterEBS struct {
DeleteOnTermination *bool `json:"deleteOnTermination,omitempty"`
Encrypted *bool `json:"encrypted,omitempty"`
KMSKeyID *string `json:"kmsKeyId,omitempty"`
SnapshotID *string `json:"snapshotId,omitempty"`
VolumeType *string `json:"volumeType,omitempty"`
IOPS *int `json:"iops,omitempty"`
VolumeSize *int `json:"volumeSize,omitempty"`
Throughput *int `json:"throughput,omitempty"`
DynamicVolumeSize *ClusterDynamicVolumeSize `json:"dynamicVolumeSize,omitempty"`

forceSendFields []string
nullFields []string
}
type ClusterDynamicVolumeSize struct {
BaseSize *int `json:"baseSize,omitempty"`
SizePerResourceUnit *int `json:"sizePerResourceUnit,omitempty"`
Resource *string `json:"resource,omitempty"`

forceSendFields []string
nullFields []string
}

// region BlockDeviceMapping

func (o ClusterBlockDeviceMappings) MarshalJSON() ([]byte, error) {
type noMethod ClusterBlockDeviceMappings
raw := noMethod(o)
return jsonutil.MarshalJSON(raw, o.forceSendFields, o.nullFields)
}

func (o *ClusterBlockDeviceMappings) SetDeviceName(v *string) *ClusterBlockDeviceMappings {
if o.DeviceName = v; o.DeviceName == nil {
o.nullFields = append(o.nullFields, "DeviceName")
}
return o
}

func (o *ClusterBlockDeviceMappings) SetEBS(v *ClusterEBS) *ClusterBlockDeviceMappings {
if o.EBS = v; o.EBS == nil {
o.nullFields = append(o.nullFields, "EBS")
}
return o
}

// endregion

// region EBS

func (o ClusterEBS) MarshalJSON() ([]byte, error) {
type noMethod ClusterEBS
raw := noMethod(o)
return jsonutil.MarshalJSON(raw, o.forceSendFields, o.nullFields)
}

func (o *ClusterEBS) SetEncrypted(v *bool) *ClusterEBS {
if o.Encrypted = v; o.Encrypted == nil {
o.nullFields = append(o.nullFields, "Encrypted")
}
return o
}

func (o *ClusterEBS) SetIOPS(v *int) *ClusterEBS {
if o.IOPS = v; o.IOPS == nil {
o.nullFields = append(o.nullFields, "IOPS")
}
return o
}

func (o *ClusterEBS) SetKMSKeyId(v *string) *ClusterEBS {
if o.KMSKeyID = v; o.KMSKeyID == nil {
o.nullFields = append(o.nullFields, "KMSKeyID")
}
return o
}

func (o *ClusterEBS) SetSnapshotId(v *string) *ClusterEBS {
if o.SnapshotID = v; o.SnapshotID == nil {
o.nullFields = append(o.nullFields, "SnapshotID")
}
return o
}

func (o *ClusterEBS) SetVolumeType(v *string) *ClusterEBS {
if o.VolumeType = v; o.VolumeType == nil {
o.nullFields = append(o.nullFields, "VolumeType")
}
return o
}

func (o *ClusterEBS) SetDeleteOnTermination(v *bool) *ClusterEBS {
if o.DeleteOnTermination = v; o.DeleteOnTermination == nil {
o.nullFields = append(o.nullFields, "DeleteOnTermination")
}
return o
}

func (o *ClusterEBS) SetVolumeSize(v *int) *ClusterEBS {
if o.VolumeSize = v; o.VolumeSize == nil {
o.nullFields = append(o.nullFields, "VolumeSize")
}
return o
}

func (o *ClusterEBS) SetDynamicVolumeSize(v *ClusterDynamicVolumeSize) *ClusterEBS {
if o.DynamicVolumeSize = v; o.DynamicVolumeSize == nil {
o.nullFields = append(o.nullFields, "DynamicVolumeSize")
}
return o
}

func (o *ClusterEBS) SetThroughput(v *int) *ClusterEBS {
if o.Throughput = v; o.Throughput == nil {
o.nullFields = append(o.nullFields, "Throughput")
}
return o
}

// endregion

// region DynamicVolumeSize

func (o ClusterDynamicVolumeSize) MarshalJSON() ([]byte, error) {
type noMethod ClusterDynamicVolumeSize
raw := noMethod(o)
return jsonutil.MarshalJSON(raw, o.forceSendFields, o.nullFields)
}

func (o *ClusterDynamicVolumeSize) SetBaseSize(v *int) *ClusterDynamicVolumeSize {
if o.BaseSize = v; o.BaseSize == nil {
o.nullFields = append(o.nullFields, "BaseSize")
}
return o
}

func (o *ClusterDynamicVolumeSize) SetResource(v *string) *ClusterDynamicVolumeSize {
if o.Resource = v; o.Resource == nil {
o.nullFields = append(o.nullFields, "Resource")
}
return o
}

func (o *ClusterDynamicVolumeSize) SetSizePerResourceUnit(v *int) *ClusterDynamicVolumeSize {
if o.SizePerResourceUnit = v; o.SizePerResourceUnit == nil {
o.nullFields = append(o.nullFields, "SizePerResourceUnit")
}
return o
}

// endregion

0 comments on commit b977400

Please sign in to comment.