Skip to content

Commit a65e76b

Browse files
committed
instance spot changes
1 parent be970f6 commit a65e76b

16 files changed

+831
-22
lines changed

ibm/service/vpc/data_source_ibm_is_instance.go

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,38 @@ func DataSourceIBMISInstance() *schema.Resource {
5151
ReadContext: dataSourceIBMISInstanceRead,
5252

5353
Schema: map[string]*schema.Schema{
54-
54+
"availability": &schema.Schema{
55+
Type: schema.TypeList,
56+
Computed: true,
57+
Elem: &schema.Resource{
58+
Schema: map[string]*schema.Schema{
59+
"class": &schema.Schema{
60+
Type: schema.TypeString,
61+
Computed: true,
62+
Description: "The availability class for the virtual server instance.- `spot`: The virtual server instance may be preempted.- `standard`: The virtual server instance will not be preempted.See [virtual server instance availability class](https://cloud.ibm.com/docs/vpc?topic=__TBD__) for details.The enumerated values for this property may[expand](https://cloud.ibm.com/apidocs/vpc#property-value-expansion) in the future.",
63+
},
64+
},
65+
},
66+
},
67+
"availability_policy": &schema.Schema{
68+
Type: schema.TypeList,
69+
Computed: true,
70+
Description: "The availability policy for this virtual server instance.",
71+
Elem: &schema.Resource{
72+
Schema: map[string]*schema.Schema{
73+
"host_failure": &schema.Schema{
74+
Type: schema.TypeString,
75+
Computed: true,
76+
Description: "The action to perform if the compute host experiences a failure:- `restart`: Restart the virtual server instance- `stop`: Leave the virtual server instance stoppedSee [handling host failures](https://cloud.ibm.com/docs/vpc?topic=vpc-host-failure-recovery-policies) for details.The enumerated values for this property may[expand](https://cloud.ibm.com/apidocs/vpc#property-value-expansion) in the future.",
77+
},
78+
"preemption": &schema.Schema{
79+
Type: schema.TypeString,
80+
Computed: true,
81+
Description: "The action to perform if the virtual server instance is preempted:- `delete`: Delete the virtual server instance- `stop`: Leave the virtual server instance stoppedSee [virtual server instance preemption](https://cloud.ibm.com/docs/vpc?topic=__TBD__) for details.The enumerated values for this property may[expand](https://cloud.ibm.com/apidocs/vpc#property-value-expansion) in the future.",
82+
},
83+
},
84+
},
85+
},
5586
isInstanceAvailablePolicyHostFailure: {
5687
Type: schema.TypeString,
5788
Computed: true,
@@ -1349,6 +1380,27 @@ func instanceGetByName(context context.Context, d *schema.ResourceData, meta int
13491380
d.SetId(*instance.ID)
13501381
id := *instance.ID
13511382

1383+
// spot changes
1384+
availability := []map[string]interface{}{}
1385+
availabilityMap, err := DataSourceIBMIsInstanceInstanceAvailabilityToMap(instance.Availability)
1386+
if err != nil {
1387+
return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_instance", "read", "availability-to-map").GetDiag()
1388+
}
1389+
availability = append(availability, availabilityMap)
1390+
if err = d.Set("availability", availability); err != nil {
1391+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting availability: %s", err), "(Data) ibm_is_instance", "read", "set-availability").GetDiag()
1392+
}
1393+
1394+
availabilityPolicy := []map[string]interface{}{}
1395+
availabilityPolicyMap, err := DataSourceIBMIsInstanceInstanceAvailabilityPolicyToMap(instance.AvailabilityPolicy)
1396+
if err != nil {
1397+
return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_instance", "read", "availability_policy-to-map").GetDiag()
1398+
}
1399+
availabilityPolicy = append(availabilityPolicy, availabilityPolicyMap)
1400+
if err = d.Set("availability_policy", availabilityPolicy); err != nil {
1401+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting availability_policy: %s", err), "(Data) ibm_is_instance", "read", "set-availability_policy").GetDiag()
1402+
}
1403+
13521404
// cluster changes
13531405

13541406
clusterNetwork := []map[string]interface{}{}
@@ -2173,3 +2225,15 @@ func DataSourceIBMIsInstanceDeletedToMap(model *vpcv1.Deleted) (map[string]inter
21732225
modelMap["more_info"] = *model.MoreInfo
21742226
return modelMap, nil
21752227
}
2228+
func DataSourceIBMIsInstanceInstanceAvailabilityToMap(model *vpcv1.InstanceAvailability) (map[string]interface{}, error) {
2229+
modelMap := make(map[string]interface{})
2230+
modelMap["class"] = *model.Class
2231+
return modelMap, nil
2232+
}
2233+
2234+
func DataSourceIBMIsInstanceInstanceAvailabilityPolicyToMap(model *vpcv1.InstanceAvailabilityPolicy) (map[string]interface{}, error) {
2235+
modelMap := make(map[string]interface{})
2236+
modelMap["host_failure"] = *model.HostFailure
2237+
modelMap["preemption"] = *model.Preemption
2238+
return modelMap, nil
2239+
}

ibm/service/vpc/data_source_ibm_is_instance_profile.go

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,38 @@ func DataSourceIBMISInstanceProfile() *schema.Resource {
3232
Type: schema.TypeString,
3333
Required: true,
3434
},
35-
35+
// spot changes
36+
"availability_class": &schema.Schema{
37+
Type: schema.TypeList,
38+
Computed: true,
39+
Elem: &schema.Resource{
40+
Schema: map[string]*schema.Schema{
41+
"default": &schema.Schema{
42+
Type: schema.TypeString,
43+
Computed: true,
44+
Description: "The default availability class for an instance with this profile.",
45+
},
46+
"type": &schema.Schema{
47+
Type: schema.TypeString,
48+
Computed: true,
49+
Description: "The type for this profile field.",
50+
},
51+
"values": &schema.Schema{
52+
Type: schema.TypeList,
53+
Computed: true,
54+
Description: "The permitted values for this profile field.",
55+
Elem: &schema.Schema{
56+
Type: schema.TypeString,
57+
},
58+
},
59+
"value": &schema.Schema{
60+
Type: schema.TypeString,
61+
Computed: true,
62+
Description: "The value for this profile field.",
63+
},
64+
},
65+
},
66+
},
3667
// cluster changes
3768
"cluster_network_attachment_count": &schema.Schema{
3869
Type: schema.TypeList,
@@ -812,6 +843,14 @@ func instanceProfileGet(context context.Context, d *schema.ResourceData, meta in
812843
}
813844
// For lack of anything better, compose our id from profile name.
814845
d.SetId(*profile.Name)
846+
// spot changes
847+
availabilityClassMap, err := DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassToMap(profile.AvailabilityClass)
848+
if err != nil {
849+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_is_instance_profile", "read", "availability_class-to-map").GetDiag()
850+
}
851+
if err = d.Set("availability_class", []map[string]interface{}{availabilityClassMap}); err != nil {
852+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_is_instance_profile", "read", "set-availability_class").GetDiag()
853+
}
815854
if err = d.Set(isInstanceProfileName, *profile.Name); err != nil {
816855
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_is_instance_profile", "read", "set-name").GetDiag()
817856
}
@@ -1597,3 +1636,44 @@ func DataSourceIBMIsInstanceProfileClusterNetworkProfileReferenceToMap(model *vp
15971636
modelMap["resource_type"] = *model.ResourceType
15981637
return modelMap, nil
15991638
}
1639+
1640+
func DataSourceIBMIsInstanceProfileInstanceProfileAvailabilityClassToMap(model vpcv1.InstanceProfileAvailabilityClassIntf) (map[string]interface{}, error) {
1641+
if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClassEnum); ok {
1642+
return DataSourceIBMIsInstanceProfileInstanceProfileAvailabilityClassEnumToMap(model.(*vpcv1.InstanceProfileAvailabilityClassEnum))
1643+
} else if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClassFixed); ok {
1644+
return DataSourceIBMIsInstanceProfileInstanceProfileAvailabilityClassFixedToMap(model.(*vpcv1.InstanceProfileAvailabilityClassFixed))
1645+
} else if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClass); ok {
1646+
modelMap := make(map[string]interface{})
1647+
model := model.(*vpcv1.InstanceProfileAvailabilityClass)
1648+
if model.Default != nil {
1649+
modelMap["default"] = *model.Default
1650+
}
1651+
if model.Type != nil {
1652+
modelMap["type"] = *model.Type
1653+
}
1654+
if model.Values != nil {
1655+
modelMap["values"] = model.Values
1656+
}
1657+
if model.Value != nil {
1658+
modelMap["value"] = *model.Value
1659+
}
1660+
return modelMap, nil
1661+
} else {
1662+
return nil, fmt.Errorf("Unrecognized vpcv1.InstanceProfileAvailabilityClassIntf subtype encountered")
1663+
}
1664+
}
1665+
1666+
func DataSourceIBMIsInstanceProfileInstanceProfileAvailabilityClassEnumToMap(model *vpcv1.InstanceProfileAvailabilityClassEnum) (map[string]interface{}, error) {
1667+
modelMap := make(map[string]interface{})
1668+
modelMap["default"] = *model.Default
1669+
modelMap["type"] = *model.Type
1670+
modelMap["values"] = model.Values
1671+
return modelMap, nil
1672+
}
1673+
1674+
func DataSourceIBMIsInstanceProfileInstanceProfileAvailabilityClassFixedToMap(model *vpcv1.InstanceProfileAvailabilityClassFixed) (map[string]interface{}, error) {
1675+
modelMap := make(map[string]interface{})
1676+
modelMap["type"] = *model.Type
1677+
modelMap["value"] = *model.Value
1678+
return modelMap, nil
1679+
}

ibm/service/vpc/data_source_ibm_is_instance_profiles.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,38 @@ func DataSourceIBMISInstanceProfiles() *schema.Resource {
4141
Description: "The product family this virtual server instance profile belongs to.",
4242
},
4343

44+
// spot changes
45+
"availability_class": &schema.Schema{
46+
Type: schema.TypeList,
47+
Computed: true,
48+
Elem: &schema.Resource{
49+
Schema: map[string]*schema.Schema{
50+
"default": &schema.Schema{
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "The default availability class for an instance with this profile.",
54+
},
55+
"type": &schema.Schema{
56+
Type: schema.TypeString,
57+
Computed: true,
58+
Description: "The type for this profile field.",
59+
},
60+
"values": &schema.Schema{
61+
Type: schema.TypeList,
62+
Computed: true,
63+
Description: "The permitted values for this profile field.",
64+
Elem: &schema.Schema{
65+
Type: schema.TypeString,
66+
},
67+
},
68+
"value": &schema.Schema{
69+
Type: schema.TypeString,
70+
Computed: true,
71+
Description: "The value for this profile field.",
72+
},
73+
},
74+
},
75+
},
4476
// cluster changes
4577
"cluster_network_attachment_count": &schema.Schema{
4678
Type: schema.TypeList,
@@ -813,6 +845,12 @@ func instanceProfilesList(context context.Context, d *schema.ResourceData, meta
813845
"name": *profile.Name,
814846
"family": *profile.Family,
815847
}
848+
availabilityClassMap, err := DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassToMap(profile.AvailabilityClass)
849+
if err != nil {
850+
return flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_instance_profiles", "read", "availability_class-to-map").GetDiag()
851+
}
852+
l["availability_class"] = []map[string]interface{}{availabilityClassMap}
853+
816854
if profile.OsArchitecture != nil {
817855
if profile.OsArchitecture.Default != nil {
818856
l["architecture"] = *profile.OsArchitecture.Default
@@ -1046,3 +1084,44 @@ func DataSourceIBMIsInstanceProfilesInstanceProfileClusterNetworkAttachmentCount
10461084
modelMap["type"] = *model.Type
10471085
return modelMap, nil
10481086
}
1087+
1088+
func DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassToMap(model vpcv1.InstanceProfileAvailabilityClassIntf) (map[string]interface{}, error) {
1089+
if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClassEnum); ok {
1090+
return DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassEnumToMap(model.(*vpcv1.InstanceProfileAvailabilityClassEnum))
1091+
} else if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClassFixed); ok {
1092+
return DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassFixedToMap(model.(*vpcv1.InstanceProfileAvailabilityClassFixed))
1093+
} else if _, ok := model.(*vpcv1.InstanceProfileAvailabilityClass); ok {
1094+
modelMap := make(map[string]interface{})
1095+
model := model.(*vpcv1.InstanceProfileAvailabilityClass)
1096+
if model.Default != nil {
1097+
modelMap["default"] = *model.Default
1098+
}
1099+
if model.Type != nil {
1100+
modelMap["type"] = *model.Type
1101+
}
1102+
if model.Values != nil {
1103+
modelMap["values"] = model.Values
1104+
}
1105+
if model.Value != nil {
1106+
modelMap["value"] = *model.Value
1107+
}
1108+
return modelMap, nil
1109+
} else {
1110+
return nil, fmt.Errorf("Unrecognized vpcv1.InstanceProfileAvailabilityClassIntf subtype encountered")
1111+
}
1112+
}
1113+
1114+
func DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassEnumToMap(model *vpcv1.InstanceProfileAvailabilityClassEnum) (map[string]interface{}, error) {
1115+
modelMap := make(map[string]interface{})
1116+
modelMap["default"] = *model.Default
1117+
modelMap["type"] = *model.Type
1118+
modelMap["values"] = model.Values
1119+
return modelMap, nil
1120+
}
1121+
1122+
func DataSourceIBMIsInstanceProfilesInstanceProfileAvailabilityClassFixedToMap(model *vpcv1.InstanceProfileAvailabilityClassFixed) (map[string]interface{}, error) {
1123+
modelMap := make(map[string]interface{})
1124+
modelMap["type"] = *model.Type
1125+
modelMap["value"] = *model.Value
1126+
return modelMap, nil
1127+
}

0 commit comments

Comments
 (0)