Skip to content

Commit

Permalink
enhancement(changed): changed list logic in datasource by name
Browse files Browse the repository at this point in the history
  • Loading branch information
uibm committed Apr 13, 2022
1 parent 5acf57f commit b7e7996
Show file tree
Hide file tree
Showing 7 changed files with 462 additions and 507 deletions.
36 changes: 14 additions & 22 deletions ibm/service/vpc/data_source_ibm_is_flow_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,32 +207,24 @@ func dataSourceIBMIsFlowLogRead(context context.Context, d *schema.ResourceData,
var flowLogCollector *vpcv1.FlowLogCollector

if name != "" {
start := ""
allrecs := []vpcv1.FlowLogCollector{}
for {
listOptions := &vpcv1.ListFlowLogCollectorsOptions{}
if start != "" {
listOptions.Start = &start
}
flowlogCollectors, response, err := sess.ListFlowLogCollectors(listOptions)
if err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error Fetching Flow Logs for VPC %s\n%s", err, response))
}
start = flex.GetNext(flowlogCollectors.Next)
allrecs = append(allrecs, flowlogCollectors.FlowLogCollectors...)
if start == "" {
break
}

listOptions := &vpcv1.ListFlowLogCollectorsOptions{
Name: &name,
}
for _, flowlogCollector := range allrecs {
if *flowlogCollector.Name == name {
flowLogCollector = &flowlogCollector
break
}

flowlogCollectors, response, err := sess.ListFlowLogCollectors(listOptions)
if err != nil {
return diag.FromErr(fmt.Errorf("Error Fetching Flow Logs for VPC %s\n%s", err, response))
}
if flowLogCollector == nil {

allrecs := flowlogCollectors.FlowLogCollectors

if len(allrecs) == 0 {
return diag.FromErr(fmt.Errorf("[ERROR] No flow log collector found with name (%s)", name))
}
flc := allrecs[0]
flowLogCollector = &flc

} else if identifier != "" {
getFlowLogCollectorOptions := &vpcv1.GetFlowLogCollectorOptions{}

Expand Down
22 changes: 16 additions & 6 deletions ibm/service/vpc/data_source_ibm_is_flow_log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ func TestAccIBMIsFlowLogDataSourceBasic(t *testing.T) {
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log", "storage_bucket.#"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log", "target.#"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log", "vpc.#"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "vpc.#"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "target.#"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "name"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "lifecycle_state"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "href"),
resource.TestCheckResourceAttrSet("data.ibm_is_flow_log.is_flow_log_name", "crn"),
),
},
},
Expand Down Expand Up @@ -104,16 +110,20 @@ func testAccCheckIBMISFlowLogDataSourceConfig(vpcname, name, flowlogname, sshnam
}
resource "ibm_is_flow_log" "test_flow_log" {
name = "%s"
target = ibm_is_instance.testacc_instance.id
storage_bucket = ibm_cos_bucket.bucket2.bucket_name
active = %v
name = "%s"
target = ibm_is_instance.testacc_instance.id
storage_bucket = ibm_cos_bucket.bucket2.bucket_name
active = %v
}
data "ibm_is_flow_log" "is_flow_log" {
identifier = ibm_is_flow_log.test_flow_log.id
}
}
data "ibm_is_flow_log" "is_flow_log_name" {
name = ibm_is_flow_log.test_flow_log.name
}
`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, publicKey, name, "r006-13938c0a-89e4-4370-b59b-55cd1402562d", acc.InstanceProfileName, acc.ISZoneName, serviceName, bucketName, bucketRegion, bucketClass, flowlogname, isActive)
`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, publicKey, name, acc.IsImage, acc.InstanceProfileName, acc.ISZoneName, serviceName, bucketName, bucketRegion, bucketClass, flowlogname, isActive)

}
84 changes: 37 additions & 47 deletions ibm/service/vpc/data_source_ibm_is_image.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package vpc
import (
"fmt"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate"
"github.com/IBM/vpc-go-sdk/vpcv1"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -112,56 +111,47 @@ func imageGetByName(d *schema.ResourceData, meta interface{}, name, visibility s
if err != nil {
return err
}
start := ""
allrecs := []vpcv1.Image{}
for {
listImagesOptions := &vpcv1.ListImagesOptions{}
if start != "" {
listImagesOptions.Start = &start
}
if visibility != "" {
listImagesOptions.Visibility = &visibility
}
availableImages, response, err := sess.ListImages(listImagesOptions)
if err != nil {
return fmt.Errorf("[ERROR] Error Fetching Images %s\n%s", err, response)
}
start = flex.GetNext(availableImages.Next)
allrecs = append(allrecs, availableImages.Images...)
if start == "" {
break
}
listImagesOptions := &vpcv1.ListImagesOptions{
Name: &name,
}

for _, image := range allrecs {
if *image.Name == name {
d.SetId(*image.ID)
d.Set("status", *image.Status)
if *image.Status == "deprecated" {
fmt.Printf("[WARN] Given image %s is deprecated and soon will be obsolete.", name)
}
d.Set("name", *image.Name)
d.Set("visibility", *image.Visibility)
d.Set("os", *image.OperatingSystem.Name)
d.Set("architecture", *image.OperatingSystem.Architecture)
d.Set("crn", *image.CRN)
if image.Encryption != nil {
d.Set("encryption", *image.Encryption)
}
if image.EncryptionKey != nil {
d.Set("encryption_key", *image.EncryptionKey.CRN)
}
if image.File != nil && image.File.Checksums != nil {
d.Set(isImageCheckSum, *image.File.Checksums.Sha256)
}
if image.SourceVolume != nil {
d.Set("source_volume", *image.SourceVolume.ID)
}
return nil
}
if visibility != "" {
listImagesOptions.Visibility = &visibility
}
availableImages, response, err := sess.ListImages(listImagesOptions)
if err != nil {
return fmt.Errorf("[ERROR] Error Fetching Images %s\n%s", err, response)
}
allrecs := availableImages.Images

if len(allrecs) == 0 {
return fmt.Errorf("[ERROR] No image found with name %s", name)
}
image := allrecs[0]
d.SetId(*image.ID)
d.Set("status", *image.Status)
if *image.Status == "deprecated" {
fmt.Printf("[WARN] Given image %s is deprecated and soon will be obsolete.", name)
}
d.Set("name", *image.Name)
d.Set("visibility", *image.Visibility)
d.Set("os", *image.OperatingSystem.Name)
d.Set("architecture", *image.OperatingSystem.Architecture)
d.Set("crn", *image.CRN)
if image.Encryption != nil {
d.Set("encryption", *image.Encryption)
}
if image.EncryptionKey != nil {
d.Set("encryption_key", *image.EncryptionKey.CRN)
}
if image.File != nil && image.File.Checksums != nil {
d.Set(isImageCheckSum, *image.File.Checksums.Sha256)
}
if image.SourceVolume != nil {
d.Set("source_volume", *image.SourceVolume.ID)
}
return nil

return fmt.Errorf("[ERROR] No image found with name %s", name)
}
func imageGetById(d *schema.ResourceData, meta interface{}, identifier string) error {
sess, err := vpcClient(meta)
Expand Down
Loading

0 comments on commit b7e7996

Please sign in to comment.