-
Notifications
You must be signed in to change notification settings - Fork 132
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: webhook patch method * fix: update webhook cli * fix: update doc * fix: golint
- Loading branch information
Showing
16 changed files
with
493 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
package webhooks | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
|
||
"github.com/spf13/cobra" | ||
|
||
apiv1 "github.com/kubeshop/testkube/pkg/api/v1/client" | ||
"github.com/kubeshop/testkube/pkg/api/v1/testkube" | ||
webhooksmapper "github.com/kubeshop/testkube/pkg/mapper/webhooks" | ||
"github.com/kubeshop/testkube/pkg/ui" | ||
) | ||
|
||
// NewCreateWebhookOptionsFromFlags creates create webhook options from command flags | ||
func NewCreateWebhookOptionsFromFlags(cmd *cobra.Command) (options apiv1.CreateWebhookOptions, err error) { | ||
name := cmd.Flag("name").Value.String() | ||
namespace := cmd.Flag("namespace").Value.String() | ||
events, err := cmd.Flags().GetStringArray("events") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
payloadObjectField := cmd.Flag("payload-field").Value.String() | ||
payloadTemplate := cmd.Flag("payload-template").Value.String() | ||
payloadTemplateContent := "" | ||
if payloadTemplate != "" { | ||
b, err := os.ReadFile(payloadTemplate) | ||
ui.ExitOnError("reading payload template", err) | ||
payloadTemplateContent = string(b) | ||
} | ||
|
||
uri := cmd.Flag("uri").Value.String() | ||
selector := cmd.Flag("selector").Value.String() | ||
labels, err := cmd.Flags().GetStringToString("label") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
headers, err := cmd.Flags().GetStringToString("header") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
options = apiv1.CreateWebhookOptions{ | ||
Name: name, | ||
Namespace: namespace, | ||
Events: webhooksmapper.MapStringArrayToCRDEvents(events), | ||
Uri: uri, | ||
Selector: selector, | ||
Labels: labels, | ||
PayloadObjectField: payloadObjectField, | ||
PayloadTemplate: payloadTemplateContent, | ||
Headers: headers, | ||
} | ||
|
||
return options, nil | ||
} | ||
|
||
// NewUpdateWebhookOptionsFromFlags creates update webhook options from command flags | ||
func NewUpdateWebhookOptionsFromFlags(cmd *cobra.Command) (options apiv1.UpdateWebhookOptions, err error) { | ||
var fields = []struct { | ||
name string | ||
destination **string | ||
}{ | ||
{ | ||
"name", | ||
&options.Name, | ||
}, | ||
{ | ||
"uri", | ||
&options.Uri, | ||
}, | ||
{ | ||
"selector", | ||
&options.Selector, | ||
}, | ||
{ | ||
"payload-field", | ||
&options.PayloadObjectField, | ||
}, | ||
} | ||
|
||
for _, field := range fields { | ||
if cmd.Flag(field.name).Changed { | ||
value := cmd.Flag(field.name).Value.String() | ||
*field.destination = &value | ||
} | ||
} | ||
|
||
if cmd.Flag("payload-template").Changed { | ||
payloadTemplate := cmd.Flag("payload-template").Value.String() | ||
b, err := os.ReadFile(payloadTemplate) | ||
if err != nil { | ||
return options, fmt.Errorf("reading payload template %w", err) | ||
} | ||
|
||
value := string(b) | ||
options.PayloadTemplate = &value | ||
} | ||
|
||
if cmd.Flag("events").Changed { | ||
events, err := cmd.Flags().GetStringArray("events") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
var eventTypes []testkube.EventType | ||
for _, event := range events { | ||
eventTypes = append(eventTypes, testkube.EventType(event)) | ||
} | ||
|
||
options.Events = &eventTypes | ||
} | ||
|
||
if cmd.Flag("label").Changed { | ||
labels, err := cmd.Flags().GetStringToString("label") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
options.Labels = &labels | ||
} | ||
|
||
if cmd.Flag("header").Changed { | ||
headers, err := cmd.Flags().GetStringToString("header") | ||
if err != nil { | ||
return options, err | ||
} | ||
|
||
options.Headers = &headers | ||
} | ||
|
||
return options, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package webhooks | ||
|
||
import ( | ||
"github.com/spf13/cobra" | ||
|
||
"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common" | ||
"github.com/kubeshop/testkube/pkg/ui" | ||
) | ||
|
||
func UpdateWebhookCmd() *cobra.Command { | ||
var ( | ||
events []string | ||
name, uri string | ||
selector string | ||
labels map[string]string | ||
payloadObjectField string | ||
payloadTemplate string | ||
headers map[string]string | ||
) | ||
|
||
cmd := &cobra.Command{ | ||
Use: "webhook", | ||
Aliases: []string{"webhooks", "wh"}, | ||
Short: "Update Webhook", | ||
Long: `Update Webhook Custom Resource`, | ||
Run: func(cmd *cobra.Command, args []string) { | ||
if name == "" { | ||
ui.Failf("pass valid name (in '--name' flag)") | ||
} | ||
|
||
client, namespace, err := common.GetClient(cmd) | ||
ui.ExitOnError("getting client", err) | ||
|
||
webhook, _ := client.GetWebhook(name) | ||
if name != webhook.Name { | ||
ui.Failf("Webhook with name '%s' not exists in namespace %s", name, namespace) | ||
} | ||
|
||
options, err := NewUpdateWebhookOptionsFromFlags(cmd) | ||
ui.ExitOnError("getting webhook options", err) | ||
|
||
_, err = client.UpdateWebhook(options) | ||
ui.ExitOnError("updating webhook "+name+" in namespace "+namespace, err) | ||
|
||
ui.Success("Webhook updated", name) | ||
}, | ||
} | ||
|
||
cmd.Flags().StringVarP(&name, "name", "n", "", "unique webhook name - mandatory") | ||
cmd.Flags().StringArrayVarP(&events, "events", "e", []string{}, "event types handled by webhook e.g. start-test|end-test") | ||
cmd.Flags().StringVarP(&uri, "uri", "u", "", "URI which should be called when given event occurs") | ||
cmd.Flags().StringVarP(&selector, "selector", "", "", "expression to select tests and test suites for webhook events: --selector app=backend") | ||
cmd.Flags().StringToStringVarP(&labels, "label", "l", nil, "label key value pair: --label key1=value1") | ||
cmd.Flags().StringVarP(&payloadObjectField, "payload-field", "", "", "field to use for notification object payload") | ||
cmd.Flags().StringVarP(&payloadTemplate, "payload-template", "", "", "if webhook needs to send a custom notification, then a path to template file should be provided") | ||
cmd.Flags().StringToStringVarP(&headers, "header", "", nil, "webhook header value pair: --header Content-Type=application/xml") | ||
|
||
return cmd | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.