@@ -3,6 +3,7 @@ package cmd
33import (
44 "encoding/json"
55 "fmt"
6+ "slices"
67
78 "github.com/mitchellh/mapstructure"
89
@@ -30,7 +31,10 @@ type IntegrationInputType struct {
3031}
3132
3233type IntegrationInput interface {
33- opslevel.AWSIntegrationInput | opslevel.AzureResourcesIntegrationInput | opslevel.GoogleCloudIntegrationInput
34+ opslevel.AWSIntegrationInput |
35+ opslevel.AzureResourcesIntegrationInput |
36+ opslevel.EventIntegrationInput |
37+ opslevel.GoogleCloudIntegrationInput
3438}
3539
3640func 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
101109EOF
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
201228EOF
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