Skip to content

Commit da1f099

Browse files
authored
create and update custom event and deploy integrations (#334)
* create and update custom event and deploy integrations * use "kind" field for cec integration type * update integration update docs * go mod tidy
1 parent fface3d commit da1f099

3 files changed

Lines changed: 83 additions & 34 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
kind: Feature
2+
body: create and update custom event and deploy integrations
3+
time: 2024-10-04T14:53:06.263811-05:00

src/cmd/integration.go

Lines changed: 79 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"encoding/json"
55
"fmt"
6+
"slices"
67

78
"github.com/mitchellh/mapstructure"
89

@@ -30,7 +31,10 @@ type IntegrationInputType struct {
3031
}
3132

3233
type IntegrationInput interface {
33-
opslevel.AWSIntegrationInput | opslevel.AzureResourcesIntegrationInput | opslevel.GoogleCloudIntegrationInput
34+
opslevel.AWSIntegrationInput |
35+
opslevel.AzureResourcesIntegrationInput |
36+
opslevel.EventIntegrationInput |
37+
opslevel.GoogleCloudIntegrationInput
3438
}
3539

3640
func validateIntegrationInput() (*IntegrationInputType, error) {
@@ -42,6 +46,10 @@ func validateIntegrationInput() (*IntegrationInputType, error) {
4246
return nil, fmt.Errorf("supported config version is '%s' but found '%s'",
4347
IntegrationConfigCurrentVersion, input.Version)
4448
}
49+
50+
if slices.Contains(opslevel.AllEventIntegrationEnum, string(input.Kind)) {
51+
return input, nil
52+
}
4553
switch input.Kind {
4654
case IntegrationTypeAWS, IntegrationTypeAzure, IntegrationTypeGCP:
4755
return input, nil
@@ -99,30 +107,49 @@ spec:
99107
clientEmail: "service-account-123@appspot.gserviceaccount.com"
100108
tagsOverrideOwnership: false
101109
EOF
110+
111+
cat << EOF | opslevel create integration -f -
112+
version: 1
113+
kind: githubActions
114+
spec:
115+
name: "GHA New"
116+
EOF
102117
`,
103118
Run: func(cmd *cobra.Command, args []string) {
104119
input, validateErr := validateIntegrationInput()
105120
cobra.CheckErr(validateErr)
106121

107122
var result *opslevel.Integration
108-
switch input.Kind {
109-
case IntegrationTypeAWS:
110-
awsInput, err := readIntegrationInput[opslevel.AWSIntegrationInput](input)
111-
cobra.CheckErr(err)
112-
result, err = getClientGQL().CreateIntegrationAWS(awsInput)
113-
cobra.CheckErr(err)
114-
case IntegrationTypeAzure:
115-
azureInput, err := readIntegrationInput[opslevel.AzureResourcesIntegrationInput](input)
123+
if slices.Contains(opslevel.AllEventIntegrationEnum, string(input.Kind)) {
124+
input.Spec["type"] = input.Kind
125+
eventIntegrationInput, err := readIntegrationInput[opslevel.EventIntegrationInput](input)
126+
integrationTypeEnum := opslevel.EventIntegrationEnum(eventIntegrationInput.Type)
116127
cobra.CheckErr(err)
117-
result, err = getClientGQL().CreateIntegrationAzureResources(azureInput)
128+
result, err = getClientGQL().CreateEventIntegration(opslevel.EventIntegrationInput{
129+
Name: eventIntegrationInput.Name,
130+
Type: integrationTypeEnum,
131+
})
118132
cobra.CheckErr(err)
119-
case IntegrationTypeGCP:
120-
gcpInput, err := readIntegrationInput[opslevel.GoogleCloudIntegrationInput](input)
121-
cobra.CheckErr(err)
122-
result, err = getClientGQL().CreateIntegrationGCP(gcpInput)
123-
cobra.CheckErr(err)
124-
default:
125-
cobra.CheckErr(fmt.Errorf("cannot use unexpected input kind: '%s'", input.Kind))
133+
} else {
134+
switch input.Kind {
135+
case IntegrationTypeAWS:
136+
awsInput, err := readIntegrationInput[opslevel.AWSIntegrationInput](input)
137+
cobra.CheckErr(err)
138+
result, err = getClientGQL().CreateIntegrationAWS(awsInput)
139+
cobra.CheckErr(err)
140+
case IntegrationTypeAzure:
141+
azureInput, err := readIntegrationInput[opslevel.AzureResourcesIntegrationInput](input)
142+
cobra.CheckErr(err)
143+
result, err = getClientGQL().CreateIntegrationAzureResources(azureInput)
144+
cobra.CheckErr(err)
145+
case IntegrationTypeGCP:
146+
gcpInput, err := readIntegrationInput[opslevel.GoogleCloudIntegrationInput](input)
147+
cobra.CheckErr(err)
148+
result, err = getClientGQL().CreateIntegrationGCP(gcpInput)
149+
cobra.CheckErr(err)
150+
default:
151+
cobra.CheckErr(fmt.Errorf("cannot use unexpected input kind: '%s'", input.Kind))
152+
}
126153
}
127154

128155
fmt.Printf("Created %s integration '%s' with id '%s'\n", input.Kind, result.Name, result.Id)
@@ -199,6 +226,14 @@ spec:
199226
privateKey: "XXX_NEW_PRIVATE_KEY_XXX"
200227
tagsOverrideOwnership: true
201228
EOF
229+
230+
cat << EOF | opslevel update integration Z2lkOi8vb123456789 -f -
231+
version: 1
232+
kind: githubActions
233+
spec:
234+
name: "GHA Updated"
235+
EOF
236+
202237
`,
203238
Args: cobra.ExactArgs(1),
204239
ArgAliases: []string{"ID"},
@@ -207,24 +242,35 @@ EOF
207242
cobra.CheckErr(validateErr)
208243

209244
var result *opslevel.Integration
210-
switch input.Kind {
211-
case IntegrationTypeAWS:
212-
awsInput, err := readIntegrationInput[opslevel.AWSIntegrationInput](input)
245+
if slices.Contains(opslevel.AllEventIntegrationEnum, string(input.Kind)) {
246+
input.Spec["type"] = input.Kind
247+
eventIntegrationInput, err := readIntegrationInput[opslevel.EventIntegrationInput](input)
213248
cobra.CheckErr(err)
214-
result, err = getClientGQL().UpdateIntegrationAWS(args[0], awsInput)
249+
result, err = getClientGQL().UpdateEventIntegration(opslevel.EventIntegrationUpdateInput{
250+
Id: opslevel.ID(args[0]),
251+
Name: *eventIntegrationInput.Name,
252+
})
215253
cobra.CheckErr(err)
216-
case IntegrationTypeAzure:
217-
azureInput, err := readIntegrationInput[opslevel.AzureResourcesIntegrationInput](input)
218-
cobra.CheckErr(err)
219-
result, err = getClientGQL().UpdateIntegrationAzureResources(args[0], azureInput)
220-
cobra.CheckErr(err)
221-
case IntegrationTypeGCP:
222-
gcpInput, err := readIntegrationInput[opslevel.GoogleCloudIntegrationInput](input)
223-
cobra.CheckErr(err)
224-
result, err = getClientGQL().UpdateIntegrationGCP(args[0], gcpInput)
225-
cobra.CheckErr(err)
226-
default:
227-
cobra.CheckErr(fmt.Errorf("cannot use unexpected input kind: '%s'", input.Kind))
254+
} else {
255+
switch input.Kind {
256+
case IntegrationTypeAWS:
257+
awsInput, err := readIntegrationInput[opslevel.AWSIntegrationInput](input)
258+
cobra.CheckErr(err)
259+
result, err = getClientGQL().UpdateIntegrationAWS(args[0], awsInput)
260+
cobra.CheckErr(err)
261+
case IntegrationTypeAzure:
262+
azureInput, err := readIntegrationInput[opslevel.AzureResourcesIntegrationInput](input)
263+
cobra.CheckErr(err)
264+
result, err = getClientGQL().UpdateIntegrationAzureResources(args[0], azureInput)
265+
cobra.CheckErr(err)
266+
case IntegrationTypeGCP:
267+
gcpInput, err := readIntegrationInput[opslevel.GoogleCloudIntegrationInput](input)
268+
cobra.CheckErr(err)
269+
result, err = getClientGQL().UpdateIntegrationGCP(args[0], gcpInput)
270+
cobra.CheckErr(err)
271+
default:
272+
cobra.CheckErr(fmt.Errorf("cannot use unexpected input kind: '%s'", input.Kind))
273+
}
228274
}
229275

230276
fmt.Printf("Updated %s integration '%s' with id '%s'\n", input.Kind, result.Name, result.Id)

0 commit comments

Comments
 (0)