Skip to content

Commit 84b9f2d

Browse files
committed
Datasource version matching the resource definition
1 parent 0b25158 commit 84b9f2d

File tree

5 files changed

+60
-113
lines changed

5 files changed

+60
-113
lines changed

codefresh/data_step_types.go

+39-32
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package codefresh
22

33
import (
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 {
3139
func 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
}

codefresh/data_step_types_versions.go

-45
This file was deleted.

codefresh/provider.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@ func Provider() *schema.Provider {
2727
},
2828
},
2929
DataSourcesMap: map[string]*schema.Resource{
30-
"codefresh_account": dataSourceAccount(),
31-
"codefresh_context": dataSourceContext(),
32-
"codefresh_current_account": dataSourceCurrentAccount(),
33-
"codefresh_idps": dataSourceIdps(),
34-
"codefresh_step_types": dataSourceStepTypes(),
35-
"codefresh_step_types_versions": dataSourceStepTypesVersions(),
36-
"codefresh_team": dataSourceTeam(),
37-
"codefresh_user": dataSourceUser(),
38-
"codefresh_users": dataSourceUsers(),
30+
"codefresh_account": dataSourceAccount(),
31+
"codefresh_context": dataSourceContext(),
32+
"codefresh_current_account": dataSourceCurrentAccount(),
33+
"codefresh_idps": dataSourceIdps(),
34+
"codefresh_step_types": dataSourceStepTypes(),
35+
"codefresh_team": dataSourceTeam(),
36+
"codefresh_user": dataSourceUser(),
37+
"codefresh_users": dataSourceUsers(),
3938
},
4039
ResourcesMap: map[string]*schema.Resource{
4140
"codefresh_account": resourceAccount(),

docs/data/step-types-versions.md

-23
This file was deleted.

docs/data/step-types.md

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Data Source: codefresh_step_types
2-
This data source allows to retrieve the latest published version of a step-types
2+
This data source allows to retrieve the published versions of a step-types
33

44
## Example Usage
55

@@ -8,18 +8,27 @@ data "codefresh_step_types" "freestyle" {
88
name = "freestyle"
99
}
1010
11+
local {
12+
freestyle_map = { for step_definition in data.codefresh_step_types.freestyle.version: step_definition.version_number => step_definition }
13+
}
14+
1115
output "test" {
1216
# Value is return as YAML
13-
value = yamldecode(data.codefresh_step_types.freestyle.step_types_yaml).metadata.updated_at
17+
value = local.freestyle_map[keys(local.freestyle_map)[0]].version_number
1418
}
1519
1620
```
1721

1822
## Argument Reference
1923

2024
* `name` - (Required) Name of the step-types to be retrieved
21-
* `version` - (Optional) Version to be retrieved. If not specified, the latest published will be returned
2225

2326
## Attributes Reference
2427

25-
* `step_types_yaml` - The yaml string representing the custom plugin (step-types).
28+
- `version` - A Set of `version` blocks as documented below.
29+
30+
---
31+
32+
`version` provides the following:
33+
- `version_number` - String representing the semVer for the step
34+
- `step_types_yaml` - YAML String containing the definition of a typed plugin

0 commit comments

Comments
 (0)