Skip to content

Commit e2c1b7d

Browse files
committed
Introduce support for step-types
1 parent ae3f213 commit e2c1b7d

8 files changed

+502
-13
lines changed

client/step_types.go

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

codefresh/data_step_types.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package codefresh
2+
3+
import (
4+
"fmt"
5+
6+
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
7+
"github.com/ghodss/yaml"
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+
"step_types_yaml": {
20+
Type: schema.TypeString,
21+
Computed: true,
22+
},
23+
},
24+
}
25+
}
26+
27+
func dataSourceStepTypesRead(d *schema.ResourceData, meta interface{}) error {
28+
29+
client := meta.(*cfClient.Client)
30+
var stepTypes *cfClient.StepTypes
31+
var err error
32+
33+
if name, nameOk := d.GetOk("name"); nameOk {
34+
stepTypes, err = client.GetStepTypes(name.(string))
35+
} else {
36+
return fmt.Errorf("data.codefresh_step_types - must specify name")
37+
}
38+
if err != nil {
39+
return err
40+
}
41+
42+
if stepTypes == nil {
43+
return fmt.Errorf("data.codefresh_step_types - cannot find step-types")
44+
}
45+
46+
return mapDataSetTypesToResource(stepTypes, d)
47+
}
48+
49+
func mapDataSetTypesToResource(stepTypes *cfClient.StepTypes, d *schema.ResourceData) error {
50+
51+
if stepTypes == nil || stepTypes.Metadata["name"].(string) == "" {
52+
return fmt.Errorf("data.codefresh_step_types - failed to mapDataSetTypesToResource")
53+
}
54+
d.SetId(stepTypes.Metadata["name"].(string))
55+
56+
d.Set("name", d.Id())
57+
58+
stepTypesYaml, err := yaml.Marshal(stepTypes)
59+
if err != nil {
60+
return err
61+
}
62+
d.Set("step_types_yaml", string(stepTypesYaml))
63+
64+
return nil
65+
}

codefresh/data_step_types_versions.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package codefresh
2+
3+
import (
4+
"fmt"
5+
6+
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func dataSourceStepTypesVersions() *schema.Resource {
11+
return &schema.Resource{
12+
Read: dataSourceStepTypesVersionsRead,
13+
Schema: map[string]*schema.Schema{
14+
"name": {
15+
Type: schema.TypeString,
16+
Required: true,
17+
},
18+
"versions": {
19+
Type: schema.TypeList,
20+
Computed: true,
21+
Elem: &schema.Schema{
22+
Type: schema.TypeString,
23+
},
24+
},
25+
},
26+
}
27+
}
28+
29+
func dataSourceStepTypesVersionsRead(d *schema.ResourceData, meta interface{}) error {
30+
31+
client := meta.(*cfClient.Client)
32+
var versions []string
33+
var err error
34+
35+
if name, nameOk := d.GetOk("name"); nameOk {
36+
if versions, err = client.GetStepTypesVersions(name.(string)); err == nil {
37+
d.SetId(name.(string))
38+
d.Set("name", name.(string))
39+
d.Set("versions", versions)
40+
}
41+
return err
42+
}
43+
return fmt.Errorf("data.codefresh_step_types_versions - must specify name")
44+
45+
}

codefresh/provider.go

+16-13
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,28 @@ func Provider() *schema.Provider {
2727
},
2828
},
2929
DataSourcesMap: map[string]*schema.Resource{
30-
"codefresh_users": dataSourceUsers(),
31-
"codefresh_user": dataSourceUser(),
32-
"codefresh_idps": dataSourceIdps(),
33-
"codefresh_account": dataSourceAccount(),
34-
"codefresh_team": dataSourceTeam(),
35-
"codefresh_current_account": dataSourceCurrentAccount(),
36-
"codefresh_context": dataSourceContext(),
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(),
3739
},
3840
ResourcesMap: map[string]*schema.Resource{
39-
"codefresh_project": resourceProject(),
40-
"codefresh_pipeline": resourcePipeline(),
41-
"codefresh_context": resourceContext(),
42-
"codefresh_team": resourceTeam(),
4341
"codefresh_account": resourceAccount(),
42+
"codefresh_account_admins": resourceAccountAdmins(),
4443
"codefresh_api_key": resourceApiKey(),
44+
"codefresh_context": resourceContext(),
4545
"codefresh_idp_accounts": resourceIDPAccounts(),
46-
"codefresh_account_admins": resourceAccountAdmins(),
47-
"codefresh_user": resourceUser(),
4846
"codefresh_permission": resourcePermission(),
47+
"codefresh_pipeline": resourcePipeline(),
48+
"codefresh_project": resourceProject(),
49+
"codefresh_step_types": resourceStepTypes(),
50+
"codefresh_user": resourceUser(),
51+
"codefresh_team": resourceTeam(),
4952
},
5053
ConfigureFunc: configureProvider,
5154
}

0 commit comments

Comments
 (0)