Skip to content

Commit 7dcd8d1

Browse files
Merge pull request #33 from sandrogattuso/feature/step-types
Introduce support for step-types
2 parents ae3f213 + 84b9f2d commit 7dcd8d1

File tree

13 files changed

+1082
-11
lines changed

13 files changed

+1082
-11
lines changed

client/step_types.go

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package client
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/url"
7+
8+
"github.com/iancoleman/orderedmap"
9+
)
10+
11+
type StepTypesVersions struct {
12+
Name string
13+
Versions []StepTypesVersion
14+
}
15+
type StepTypesVersion struct {
16+
VersionNumber string
17+
StepTypes StepTypes
18+
}
19+
20+
type StepTypes struct {
21+
Version string `json:"version,omitempty"`
22+
Kind string `json:"kind,omitempty"`
23+
Metadata map[string]interface{} `json:"metadata,omitempty"`
24+
Spec SpecStepTypes `json:"spec,omitempty"`
25+
}
26+
27+
type SpecStepTypes struct {
28+
Arguments string `json:"arguments,omitempty"`
29+
Delimiters map[string]interface{} `json:"delimiters,omitempty"`
30+
Returns string `json:"returns,omitempty"`
31+
Steps *orderedmap.OrderedMap `json:"steps,omitempty"`
32+
StepsTemplate string `json:"stepsTemplate,omitempty"`
33+
}
34+
35+
func (stepTypes *StepTypes) GetID() string {
36+
return stepTypes.Metadata["name"].(string)
37+
}
38+
39+
func (client *Client) GetStepTypesVersions(name string) ([]string, error) {
40+
fullPath := fmt.Sprintf("/step-types/%s/versions", url.PathEscape(name))
41+
opts := RequestOptions{
42+
Path: fullPath,
43+
Method: "GET",
44+
}
45+
46+
resp, err := client.RequestAPI(&opts)
47+
48+
if err != nil {
49+
return nil, err
50+
}
51+
var respStepTypesVersions []string
52+
err = DecodeResponseInto(resp, &respStepTypesVersions)
53+
if err != nil {
54+
return nil, err
55+
}
56+
return respStepTypesVersions, nil
57+
}
58+
59+
func (client *Client) GetStepTypes(identifier string) (*StepTypes, error) {
60+
fullPath := fmt.Sprintf("/step-types/%s", url.PathEscape(identifier))
61+
opts := RequestOptions{
62+
Path: fullPath,
63+
Method: "GET",
64+
}
65+
66+
resp, err := client.RequestAPI(&opts)
67+
68+
if err != nil {
69+
return nil, err
70+
}
71+
var respStepTypes StepTypes
72+
err = DecodeResponseInto(resp, &respStepTypes)
73+
if err != nil {
74+
return nil, err
75+
}
76+
77+
return &respStepTypes, nil
78+
79+
}
80+
81+
func (client *Client) CreateStepTypes(stepTypes *StepTypes) (*StepTypes, error) {
82+
83+
body, err := EncodeToJSON(stepTypes)
84+
85+
if err != nil {
86+
return nil, err
87+
}
88+
opts := RequestOptions{
89+
Path: "/step-types",
90+
Method: "POST",
91+
Body: body,
92+
}
93+
94+
resp, err := client.RequestAPI(&opts)
95+
if err != nil {
96+
return nil, err
97+
}
98+
99+
var respStepTypes StepTypes
100+
err = DecodeResponseInto(resp, &respStepTypes)
101+
if err != nil {
102+
log.Printf("[DEBUG] Error while decoding step types. Error = %v, Response: %v", err, respStepTypes)
103+
return nil, err
104+
}
105+
return &respStepTypes, nil
106+
107+
}
108+
109+
func (client *Client) UpdateStepTypes(stepTypes *StepTypes) (*StepTypes, error) {
110+
111+
body, err := EncodeToJSON(stepTypes)
112+
113+
if err != nil {
114+
return nil, err
115+
}
116+
117+
fullPath := fmt.Sprintf("/step-types/%s", url.PathEscape(stepTypes.Metadata["name"].(string)+":"+stepTypes.Metadata["version"].(string)))
118+
opts := RequestOptions{
119+
Path: fullPath,
120+
Method: "PUT",
121+
Body: body,
122+
}
123+
124+
resp, err := client.RequestAPI(&opts)
125+
126+
if err != nil {
127+
return nil, err
128+
}
129+
130+
var respStepTypes StepTypes
131+
err = DecodeResponseInto(resp, &respStepTypes)
132+
if err != nil {
133+
return nil, err
134+
}
135+
136+
return &respStepTypes, nil
137+
138+
}
139+
140+
func (client *Client) DeleteStepTypes(name string) error {
141+
142+
fullPath := fmt.Sprintf("/step-types/%s", url.PathEscape(name))
143+
opts := RequestOptions{
144+
Path: fullPath,
145+
Method: "DELETE",
146+
}
147+
148+
_, err := client.RequestAPI(&opts)
149+
150+
if err != nil {
151+
return err
152+
}
153+
154+
return nil
155+
}

codefresh/data_step_types.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package codefresh
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func dataSourceStepTypes() *schema.Resource {
12+
return &schema.Resource{
13+
Read: dataSourceStepTypesRead,
14+
Schema: map[string]*schema.Schema{
15+
"name": {
16+
Type: schema.TypeString,
17+
Required: true,
18+
},
19+
"version": {
20+
Type: schema.TypeSet,
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+
},
34+
},
35+
},
36+
}
37+
}
38+
39+
func dataSourceStepTypesRead(d *schema.ResourceData, meta interface{}) error {
40+
41+
client := meta.(*cfClient.Client)
42+
var err error
43+
var versions []string
44+
stepTypesIdentifier := d.Get("name").(string)
45+
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)
64+
}
65+
66+
return fmt.Errorf("data.codefresh_step_types - was unable to retrieve the versions for step_type %s", stepTypesIdentifier)
67+
68+
}
69+
70+
func mapDataSetTypesToResource(stepTypesVersions cfClient.StepTypesVersions, d *schema.ResourceData) error {
71+
err := d.Set("name", stepTypesVersions.Name)
72+
if err != nil {
73+
return err
74+
}
75+
err = d.Set("version", flattenVersions(stepTypesVersions.Name, stepTypesVersions.Versions))
76+
return err
77+
}

codefresh/provider.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,27 @@ func Provider() *schema.Provider {
2727
},
2828
},
2929
DataSourcesMap: map[string]*schema.Resource{
30-
"codefresh_users": dataSourceUsers(),
31-
"codefresh_user": dataSourceUser(),
32-
"codefresh_idps": dataSourceIdps(),
3330
"codefresh_account": dataSourceAccount(),
34-
"codefresh_team": dataSourceTeam(),
35-
"codefresh_current_account": dataSourceCurrentAccount(),
3631
"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(),
3738
},
3839
ResourcesMap: map[string]*schema.Resource{
39-
"codefresh_project": resourceProject(),
40-
"codefresh_pipeline": resourcePipeline(),
41-
"codefresh_context": resourceContext(),
42-
"codefresh_team": resourceTeam(),
4340
"codefresh_account": resourceAccount(),
41+
"codefresh_account_admins": resourceAccountAdmins(),
4442
"codefresh_api_key": resourceApiKey(),
43+
"codefresh_context": resourceContext(),
4544
"codefresh_idp_accounts": resourceIDPAccounts(),
46-
"codefresh_account_admins": resourceAccountAdmins(),
47-
"codefresh_user": resourceUser(),
4845
"codefresh_permission": resourcePermission(),
46+
"codefresh_pipeline": resourcePipeline(),
47+
"codefresh_project": resourceProject(),
48+
"codefresh_step_types": resourceStepTypes(),
49+
"codefresh_user": resourceUser(),
50+
"codefresh_team": resourceTeam(),
4951
},
5052
ConfigureFunc: configureProvider,
5153
}

0 commit comments

Comments
 (0)