Skip to content

Commit

Permalink
Merge pull request #36 from kubewarden/renovate/go-1.x
Browse files Browse the repository at this point in the history
chore(deps): update dependency go to v1.23.1
  • Loading branch information
flavio authored Sep 9, 2024
2 parents 50817fe + 4e69036 commit c8974f9
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 24 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ jobs:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
with:
go-version: "1.21"
go-version: "1.22"
- name: golangci-lint
uses: golangci/golangci-lint-action@aaa42aa0628b4ae2578232a66b541047968fac86 # v6.1.0
with:
version: v1.55.2
version: v1.60.3
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ BIN_DIR := $(abspath $(ROOT_DIR)/bin)
SOURCE_FILES := $(shell find . -type f -name '*.go')
VERSION ?= $(shell git describe | cut -c2-)

GOLANGCI_LINT_VER := v1.55.2
GOLANGCI_LINT_VER := v1.60.3
GOLANGCI_LINT_BIN := golangci-lint
GOLANGCI_LINT := $(BIN_DIR)/$(GOLANGCI_LINT_BIN)

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module github.com/kubewarden/go-wasi-policy-template

go 1.22

toolchain go1.22.6
toolchain go1.23.1

require (
github.com/deckarep/golang-set/v2 v2.6.0
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
)

func main() {
//nolint:mnd
if len(os.Args) != 2 {
log.Fatalln("Wrong usage, expected either 'validate' or `validate-settings'")
}
Expand Down
2 changes: 1 addition & 1 deletion settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func validateCliSettings(settings *Settings) ([]byte, error) {

if forbiddenButRequired.Cardinality() > 0 {
return kubewarden.RejectSettings(kubewarden.Message(
fmt.Sprintf("The following annotations are forbidden and required at the same time: %s", forbiddenButRequired.String())))
"The following annotations are forbidden and required at the same time: " + forbiddenButRequired.String()))
}

return kubewarden.AcceptSettings()
Expand Down
44 changes: 25 additions & 19 deletions validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ type LookupError struct {
Message kubewarden.Message
}

const (
BadRequestError = 400
NotFoundError = 404
InternalError = 500
)

func (l *LookupError) Error() string {
return fmt.Sprintf("status %d: err %v", l.StatusCode, l.Message)
}
Expand All @@ -29,13 +35,13 @@ func validate(input []byte) ([]byte, error) {
if err != nil {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("Error deserializing validation request: %v", err)),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}
settings, err := NewSettingsFromValidationReq(&validationRequest)
if err != nil {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("Error serializing RawMessage: %v", err)),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}

return validateAdmissionReview(settings, validationRequest.Request)
Expand All @@ -48,7 +54,7 @@ func validateAdmissionReview(_ Settings, request kubewardenProtocol.KubernetesAd
if err != nil {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("Error deserializing request object into unstructured: %v", err)),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}

labels := deployment.Metadata.Labels
Expand All @@ -68,7 +74,7 @@ func validateAdmissionReview(_ Settings, request kubewardenProtocol.KubernetesAd
if !found {
return kubewarden.RejectRequest(
kubewarden.Message("Label customer-id is required for API deployments"),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}

host := capabilities.NewHost()
Expand All @@ -77,45 +83,45 @@ func validateAdmissionReview(_ Settings, request kubewardenProtocol.KubernetesAd
if err != nil {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("cannot query Namespaces: %v", err)),
kubewarden.Code(500))
kubewarden.Code(InternalError))
}

if namespaceList.Items == nil || len(namespaceList.Items) == 0 {
if len(namespaceList.Items) == 0 {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("Label customer-id (%s) must match namespace label", customerID)),
kubewarden.Code(404))
kubewarden.Code(NotFoundError))
}

if len(namespaceList.Items) > 1 {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("Multiple namespaces found with label 'customer-id=%s'", customerID)),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}

namespace := namespaceList.Items[0]
if deployment.Metadata.Namespace != namespace.Metadata.Name {
return kubewarden.RejectRequest(
kubewarden.Message("Deployment must be created in the matching customer namespace"),
kubewarden.Code(400))
kubewarden.Code(BadRequestError))
}

deploymentList, err := findDeploymentsByNamespace(&host, namespace.Metadata.Name)
if err != nil {
return kubewarden.RejectRequest(
kubewarden.Message(fmt.Sprintf("cannot query Deployments: %v", err)),
kubewarden.Code(500))
kubewarden.Code(InternalError))
}

// Check if the namespace has a database and a frontend component deployed
if !componentDeployed(&deploymentList, "database") {
return kubewarden.RejectRequest(
kubewarden.Message("No database component found"),
kubewarden.Code(404))
kubewarden.Code(NotFoundError))
}
if !componentDeployed(&deploymentList, "frontend") {
return kubewarden.RejectRequest(
kubewarden.Message("No frontend component found"),
kubewarden.Code(404))
kubewarden.Code(NotFoundError))
}

// Check if the namespace has an authentication service deployed
Expand All @@ -130,13 +136,13 @@ func validateAdmissionReview(_ Settings, request kubewardenProtocol.KubernetesAd
if service.Metadata.Labels != nil && service.Metadata.Labels["app.kubernetes.io/part-of"] != "api" {
return kubewarden.RejectRequest(
kubewarden.Message("No API authentication service found"),
kubewarden.Code(404),
kubewarden.Code(NotFoundError),
)
}
if service.Metadata.Labels == nil || len(service.Metadata.Labels) == 0 {
if len(service.Metadata.Labels) == 0 {
return kubewarden.RejectRequest(
kubewarden.Message("API authentication service must have labels"),
kubewarden.Code(404),
kubewarden.Code(NotFoundError),
)
}

Expand All @@ -163,14 +169,14 @@ func findAPIAuthService(host *capabilities.Host, namespace string) (corev1.Servi
if err != nil {
return corev1.Service{}, &LookupError{
Message: kubewarden.Message(fmt.Sprintf("cannot query Service: %v", err)),
StatusCode: kubewarden.Code(500),
StatusCode: kubewarden.Code(InternalError),
}
}

if len(serviceRaw) == 0 {
return corev1.Service{}, &LookupError{
Message: kubewarden.Message("No API authentication service found"),
StatusCode: kubewarden.Code(404),
StatusCode: kubewarden.Code(NotFoundError),
}
}

Expand All @@ -181,15 +187,15 @@ func findAPIAuthService(host *capabilities.Host, namespace string) (corev1.Servi
&LookupError{
Message: kubewarden.Message(
fmt.Sprintf("cannot unmarshall response into Service: %v", err)),
StatusCode: kubewarden.Code(404),
StatusCode: kubewarden.Code(NotFoundError),
}
}

return service, nil
}

func findNamespacesByCustomerID(host *capabilities.Host, customerID string) (corev1.NamespaceList, error) {
labelSelector := fmt.Sprintf("customer-id=%s", customerID)
labelSelector := "customer-id=" + customerID
kubeRequest := kubernetes.ListAllResourcesRequest{
APIVersion: "v1",
Kind: "Namespace",
Expand Down

0 comments on commit c8974f9

Please sign in to comment.