Skip to content

Commit

Permalink
Update tagging logic in volume attachments in is_instance (IBM-Cloud#…
Browse files Browse the repository at this point in the history
…5029)

* Update resource_ibm_is_instance_volume_attachment.go

* Update resource_ibm_is_instance_volume_attachment.go
  • Loading branch information
uibm authored and benbuchanan committed Jun 18, 2024
1 parent aa73217 commit dc06bcf
Showing 1 changed file with 68 additions and 40 deletions.
108 changes: 68 additions & 40 deletions ibm/service/vpc/resource_ibm_is_instance_volume_attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,24 +302,24 @@ func instanceVolAttachmentCreate(d *schema.ResourceData, meta interface{}, insta
volnamestr := volname.(string)
volProtoVol.Name = &volnamestr
}
var userTags *schema.Set
if v, ok := d.GetOk(isInstanceVolAttTags); ok {
userTags = v.(*schema.Set)
if userTags != nil && userTags.Len() != 0 {
userTagsArray := make([]string, userTags.Len())
for i, userTag := range userTags.List() {
userTagStr := userTag.(string)
userTagsArray[i] = userTagStr
}
schematicTags := os.Getenv("IC_ENV_TAGS")
var envTags []string
if schematicTags != "" {
envTags = strings.Split(schematicTags, ",")
userTagsArray = append(userTagsArray, envTags...)
}
volProtoVol.UserTags = userTagsArray
}
}
// var userTags *schema.Set
// if v, ok := d.GetOk(isInstanceVolAttTags); ok {
// userTags = v.(*schema.Set)
// if userTags != nil && userTags.Len() != 0 {
// userTagsArray := make([]string, userTags.Len())
// for i, userTag := range userTags.List() {
// userTagStr := userTag.(string)
// userTagsArray[i] = userTagStr
// }
// schematicTags := os.Getenv("IC_ENV_TAGS")
// var envTags []string
// if schematicTags != "" {
// envTags = strings.Split(schematicTags, ",")
// userTagsArray = append(userTagsArray, envTags...)
// }
// volProtoVol.UserTags = userTagsArray
// }
// }
volSnapshotStr := ""
volSnapshotCrnStr := ""
if volSnapshot, ok := d.GetOk(isInstanceVolumeSnapshot); ok {
Expand Down Expand Up @@ -407,10 +407,21 @@ func instanceVolAttachmentCreate(d *schema.ResourceData, meta interface{}, insta
return fmt.Errorf("[ERROR] Error while attaching volume for instance %s: %q", instanceId, err)
}
d.SetId(makeTerraformVolAttID(instanceId, *instanceVolAtt.ID))
_, err = isWaitForInstanceVolumeAttached(sess, d, instanceId, *instanceVolAtt.ID)
volAtt, err := isWaitForInstanceVolumeAttached(sess, d, instanceId, *instanceVolAtt.ID)
if err != nil {
return err
}

v := os.Getenv("IC_ENV_TAGS")
if _, ok := d.GetOk(isInstanceVolAttTags); ok || v != "" {
volAttRef := volAtt.(*vpcv1.VolumeAttachment)
oldList, newList := d.GetChange(isInstanceVolAttTags)
err = flex.UpdateGlobalTagsUsingCRN(oldList, newList, meta, *volAttRef.Volume.CRN, "", isInstanceUserTagType)
if err != nil {
log.Printf(
"Error on create of resource instance volume attachment (%s) tags: %s", d.Id(), err)
}
}
log.Printf("[INFO] Instance (%s) volume attachment : %s", instanceId, *instanceVolAtt.ID)
return nil
}
Expand Down Expand Up @@ -496,6 +507,12 @@ func instanceVolumeAttachmentGet(d *schema.ResourceData, meta interface{}, insta
d.Set(isInstanceVolumeSnapshot, *volumeDetail.SourceSnapshot.ID)
d.Set(isInstanceVolumeSnapshotCrn, *volumeDetail.SourceSnapshot.CRN)
}
tags, err := flex.GetGlobalTagsUsingCRN(meta, *volumeDetail.CRN, "", isInstanceUserTagType)
if err != nil {
log.Printf(
"Error on get of resource Instance volume attachment (%s) tags: %s", d.Id(), err)
}
d.Set(isInstanceTags, tags)
return nil
}

Expand All @@ -508,6 +525,17 @@ func instanceVolAttUpdate(d *schema.ResourceData, meta interface{}) error {
if err != nil {
return err
}
if volumecrnok, ok := d.GetOk("volume_crn"); ok {
volumecrn := volumecrnok.(string)
if d.HasChange(isInstanceTags) {
oldList, newList := d.GetChange(isInstanceTags)
err = flex.UpdateTagsUsingCRN(oldList, newList, meta, volumecrn)
if err != nil {
log.Printf(
"Error on update of resource Instance volume attachment (%s) tags: %s", d.Id(), err)
}
}
}
updateInstanceVolAttOptions := &vpcv1.UpdateInstanceVolumeAttachmentOptions{
InstanceID: &instanceId,
ID: &id,
Expand Down Expand Up @@ -568,7 +596,7 @@ func instanceVolAttUpdate(d *schema.ResourceData, meta interface{}) error {
volId = volIdOk.(string)
}

if volId != "" && (d.HasChange(isInstanceVolIops) || d.HasChange(isInstanceVolProfile) || d.HasChange(isInstanceVolAttTags)) {
if volId != "" && (d.HasChange(isInstanceVolIops) || d.HasChange(isInstanceVolProfile)) { // || d.HasChange(isInstanceVolAttTags)
insId := d.Get(isInstanceId).(string)
getinsOptions := &vpcv1.GetInstanceOptions{
ID: &insId,
Expand Down Expand Up @@ -610,26 +638,26 @@ func instanceVolAttUpdate(d *schema.ResourceData, meta interface{}) error {
iops := int64(d.Get(isVolumeIops).(int))
volumeProfilePatchModel.Iops = &iops
}
if d.HasChange(isInstanceVolAttTags) && !d.IsNewResource() {
if v, ok := d.GetOk(isInstanceVolAttTags); ok {
userTags := v.(*schema.Set)
if userTags != nil && userTags.Len() != 0 {
userTagsArray := make([]string, userTags.Len())
for i, userTag := range userTags.List() {
userTagStr := userTag.(string)
userTagsArray[i] = userTagStr
}
schematicTags := os.Getenv("IC_ENV_TAGS")
var envTags []string
if schematicTags != "" {
envTags = strings.Split(schematicTags, ",")
userTagsArray = append(userTagsArray, envTags...)
}
volumeProfilePatchModel.UserTags = userTagsArray
}
}

}
// if d.HasChange(isInstanceVolAttTags) && !d.IsNewResource() {
// if v, ok := d.GetOk(isInstanceVolAttTags); ok {
// userTags := v.(*schema.Set)
// if userTags != nil && userTags.Len() != 0 {
// userTagsArray := make([]string, userTags.Len())
// for i, userTag := range userTags.List() {
// userTagStr := userTag.(string)
// userTagsArray[i] = userTagStr
// }
// schematicTags := os.Getenv("IC_ENV_TAGS")
// var envTags []string
// if schematicTags != "" {
// envTags = strings.Split(schematicTags, ",")
// userTagsArray = append(userTagsArray, envTags...)
// }
// volumeProfilePatchModel.UserTags = userTagsArray
// }
// }

// }

volumeProfilePatch, err := volumeProfilePatchModel.AsPatch()
if err != nil {
Expand Down

0 comments on commit dc06bcf

Please sign in to comment.