@@ -2,9 +2,9 @@ package codefresh
22
33import (
44 "fmt"
5+ "log"
56
67 cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
7- "github.com/ghodss/yaml"
88 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
99)
1010
@@ -17,12 +17,20 @@ func dataSourceStepTypes() *schema.Resource {
1717 Required : true ,
1818 },
1919 "version" : {
20- Type : schema .TypeString ,
21- Optional : true ,
22- },
23- "step_types_yaml" : {
24- Type : schema .TypeString ,
20+ Type : schema .TypeSet ,
2521 Computed : true ,
22+ Elem : & schema.Resource {
23+ Schema : map [string ]* schema.Schema {
24+ "version_number" : {
25+ Type : schema .TypeString ,
26+ Computed : true ,
27+ },
28+ "step_types_yaml" : {
29+ Type : schema .TypeString ,
30+ Computed : true ,
31+ },
32+ },
33+ },
2634 },
2735 },
2836 }
@@ -31,40 +39,39 @@ func dataSourceStepTypes() *schema.Resource {
3139func dataSourceStepTypesRead (d * schema.ResourceData , meta interface {}) error {
3240
3341 client := meta .(* cfClient.Client )
34- var stepTypes * cfClient.StepTypes
3542 var err error
36- identifier := d . Get ( "name" ).( string )
37- version , versionOk := d .GetOk ( "version" )
43+ var versions [] string
44+ stepTypesIdentifier := d .Get ( "name" ).( string )
3845
39- if versionOk {
40- identifier = identifier + ":" + version .(string )
41- }
42- stepTypes , err = client .GetStepTypes (identifier )
43- if err != nil {
44- return err
46+ d .SetId (stepTypesIdentifier )
47+ if versions , err = client .GetStepTypesVersions (stepTypesIdentifier ); err == nil {
48+ var stepVersions cfClient.StepTypesVersions
49+ stepVersions .Name = stepTypesIdentifier
50+ d .Set ("versions" , versions )
51+ for _ , version := range versions {
52+ stepTypes , err := client .GetStepTypes (stepTypesIdentifier + ":" + version )
53+ if err != nil {
54+ log .Printf ("[DEBUG] Skipping version %v due to error %v" , version , err )
55+ } else {
56+ stepVersion := cfClient.StepTypesVersion {
57+ VersionNumber : version ,
58+ StepTypes : * stepTypes ,
59+ }
60+ stepVersions .Versions = append (stepVersions .Versions , stepVersion )
61+ }
62+ }
63+ return mapStepTypesVersionsToResource (stepVersions , d )
4564 }
4665
47- if stepTypes == nil {
48- return fmt .Errorf ("data.codefresh_step_types - cannot find step-types" )
49- }
66+ return fmt .Errorf ("data.codefresh_step_types - was unable to retrieve the versions for step_type %s" , stepTypesIdentifier )
5067
51- return mapDataSetTypesToResource (stepTypes , d )
5268}
5369
54- func mapDataSetTypesToResource (stepTypes * cfClient.StepTypes , d * schema.ResourceData ) error {
55-
56- if stepTypes == nil || stepTypes .Metadata ["name" ].(string ) == "" {
57- return fmt .Errorf ("data.codefresh_step_types - failed to mapDataSetTypesToResource" )
58- }
59- d .SetId (stepTypes .Metadata ["name" ].(string ))
60-
61- d .Set ("name" , d .Id ())
62-
63- stepTypesYaml , err := yaml .Marshal (stepTypes )
70+ func mapDataSetTypesToResource (stepTypesVersions cfClient.StepTypesVersions , d * schema.ResourceData ) error {
71+ err := d .Set ("name" , stepTypesVersions .Name )
6472 if err != nil {
6573 return err
6674 }
67- d .Set ("step_types_yaml" , string (stepTypesYaml ))
68-
69- return nil
75+ err = d .Set ("version" , flattenVersions (stepTypesVersions .Name , stepTypesVersions .Versions ))
76+ return err
7077}
0 commit comments