@@ -2,9 +2,9 @@ package codefresh
2
2
3
3
import (
4
4
"fmt"
5
+ "log"
5
6
6
7
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
7
- "github.com/ghodss/yaml"
8
8
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9
9
)
10
10
@@ -17,12 +17,20 @@ func dataSourceStepTypes() *schema.Resource {
17
17
Required : true ,
18
18
},
19
19
"version" : {
20
- Type : schema .TypeString ,
21
- Optional : true ,
22
- },
23
- "step_types_yaml" : {
24
- Type : schema .TypeString ,
20
+ Type : schema .TypeSet ,
25
21
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
+ },
26
34
},
27
35
},
28
36
}
@@ -31,40 +39,39 @@ func dataSourceStepTypes() *schema.Resource {
31
39
func dataSourceStepTypesRead (d * schema.ResourceData , meta interface {}) error {
32
40
33
41
client := meta .(* cfClient.Client )
34
- var stepTypes * cfClient.StepTypes
35
42
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 )
38
45
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 )
45
64
}
46
65
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 )
50
67
51
- return mapDataSetTypesToResource (stepTypes , d )
52
68
}
53
69
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 )
64
72
if err != nil {
65
73
return err
66
74
}
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
70
77
}
0 commit comments