Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
#1919 Switch to apiVersion, use re-organized remediation types (#1966)
Browse files Browse the repository at this point in the history
* #1919 Switch to apiVersion, use re-organized go-utils structs

* #1919 Correct spec version to v0.1.4

* #1919 Update go-utils to master version
  • Loading branch information
agrimmer committed Jun 30, 2020
1 parent 39bd9a1 commit 2bb5983
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 27 deletions.
2 changes: 1 addition & 1 deletion remediation-service/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ require (
github.com/gophercloud/gophercloud v0.9.0 // indirect
github.com/json-iterator/go v1.1.9 // indirect
github.com/kelseyhightower/envconfig v1.4.0
github.com/keptn/go-utils v0.6.3-0.20200617060337-e48e5452bfe9
github.com/keptn/go-utils v0.6.3-0.20200629141955-247b98ef868c
github.com/mitchellh/mapstructure v1.1.2
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
Expand Down
6 changes: 6 additions & 0 deletions remediation-service/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,12 @@ github.com/keptn/go-utils v0.6.3-0.20200615074910-2565441cb79d h1:VtFkwEEXBCKnp6
github.com/keptn/go-utils v0.6.3-0.20200615074910-2565441cb79d/go.mod h1:hf2FU6JFuOzLP5rEAlA1/XnNS28pDZbVfxDESeQsq1g=
github.com/keptn/go-utils v0.6.3-0.20200617060337-e48e5452bfe9 h1:K36NQ1/DwTBU/3EGJnlKVNYKLnnVcHEzhaZ4qNb2wkU=
github.com/keptn/go-utils v0.6.3-0.20200617060337-e48e5452bfe9/go.mod h1:hf2FU6JFuOzLP5rEAlA1/XnNS28pDZbVfxDESeQsq1g=
github.com/keptn/go-utils v0.6.3-0.20200626082025-f9d70007df67 h1:dPwC+U8wTf8JKXVj4J4IwudZbPmKi46FkmGnWfx3CC8=
github.com/keptn/go-utils v0.6.3-0.20200626082025-f9d70007df67/go.mod h1:hf2FU6JFuOzLP5rEAlA1/XnNS28pDZbVfxDESeQsq1g=
github.com/keptn/go-utils v0.6.3-0.20200626150941-b642b0b7fb33 h1:umo/7YHLHaTrBvnC7sdJuZvSEPvvoQP1ml5IGgD1fGA=
github.com/keptn/go-utils v0.6.3-0.20200626150941-b642b0b7fb33/go.mod h1:hf2FU6JFuOzLP5rEAlA1/XnNS28pDZbVfxDESeQsq1g=
github.com/keptn/go-utils v0.6.3-0.20200629141955-247b98ef868c h1:CKfLclehTn16hU/wlHQuKHdSb+1a2+lx/YUuRPvlwbs=
github.com/keptn/go-utils v0.6.3-0.20200629141955-247b98ef868c/go.mod h1:hf2FU6JFuOzLP5rEAlA1/XnNS28pDZbVfxDESeQsq1g=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
Expand Down
33 changes: 18 additions & 15 deletions remediation-service/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,28 @@ import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"os"
"strings"
"time"

"github.com/keptn/go-utils/pkg/lib/v0_1_4"

cloudevents "github.com/cloudevents/sdk-go"
"github.com/cloudevents/sdk-go/pkg/cloudevents/types"
"github.com/ghodss/yaml"
"github.com/google/uuid"
configmodels "github.com/keptn/go-utils/pkg/api/models"
configutils "github.com/keptn/go-utils/pkg/api/utils"
keptn "github.com/keptn/go-utils/pkg/lib"
"io/ioutil"
"net/http"
"net/url"
"os"
"strings"
"time"
)

const remediationFileName = "remediation.yaml"
const configurationserviceconnection = "CONFIGURATION_SERVICE" //"localhost:6060" // "configuration-service:8080"
const datastoreConnection = "MONGODB_DATASTORE"
const remediationSpecVersion = "0.2.0"
const remediationSpecVersion = "spec.keptn.sh/0.1.4"

// Handler handles incoming Keptn events
type Handler interface {
Expand Down Expand Up @@ -114,7 +117,7 @@ type Remediation struct {
Keptn *keptn.Keptn
}

func (r *Remediation) getActionForProblemType(remediationData keptn.RemediationV02, problemType string, index int) *keptn.RemediationV02ActionsOnOpen {
func (r *Remediation) getActionForProblemType(remediationData v0_1_4.Remediation, problemType string, index int) *v0_1_4.RemediationActionsOnOpen {
for _, remediation := range remediationData.Spec.Remediations {
if strings.HasPrefix(problemType, remediation.ProblemType) {
r.Keptn.Logger.Info("Found remediation for problem type " + remediation.ProblemType)
Expand Down Expand Up @@ -394,7 +397,7 @@ func (r *Remediation) sendRemediationFinishedEvent(status keptn.RemediationStatu
return nil
}

func (r *Remediation) getActionTriggeredEventData(problemDetails keptn.ProblemDetails, action *keptn.RemediationV02ActionsOnOpen) (keptn.ActionTriggeredEventData, error) {
func (r *Remediation) getActionTriggeredEventData(problemDetails keptn.ProblemDetails, action *v0_1_4.RemediationActionsOnOpen) (keptn.ActionTriggeredEventData, error) {
return keptn.ActionTriggeredEventData{
Project: r.Keptn.KeptnBase.Project,
Service: r.Keptn.KeptnBase.Service,
Expand Down Expand Up @@ -435,7 +438,7 @@ func (r *Remediation) sendActionTriggeredEvent(actionTriggeredEventData keptn.Ac
return nil
}

func (r *Remediation) sendRemediationStatusChangedEvent(action *keptn.RemediationV02ActionsOnOpen, actionIndex int) error {
func (r *Remediation) sendRemediationStatusChangedEvent(action *v0_1_4.RemediationActionsOnOpen, actionIndex int) error {

remediationStatusChangedEventData := &keptn.RemediationStatusChangedEventData{
Project: r.Keptn.KeptnBase.Project,
Expand Down Expand Up @@ -505,8 +508,8 @@ func (r *Remediation) getRemediationFile() (*configmodels.Resource, error) {
return resource, nil
}

func (r *Remediation) getRemediation(resource *configmodels.Resource) (*keptn.RemediationV02, error) {
remediationData := &keptn.RemediationV02{}
func (r *Remediation) getRemediation(resource *configmodels.Resource) (*v0_1_4.Remediation, error) {
remediationData := &v0_1_4.Remediation{}
err := yaml.Unmarshal([]byte(resource.ResourceContent), remediationData)
if err != nil {
msg := "could not parse remediation.yaml"
Expand All @@ -515,16 +518,16 @@ func (r *Remediation) getRemediation(resource *configmodels.Resource) (*keptn.Re
return nil, err
}

if remediationData.Version != remediationSpecVersion {
msg := "remediation.yaml file does not conform to remediation spec v0.2.0"
if remediationData.ApiVersion != remediationSpecVersion {
msg := "remediation.yaml file does not conform to remediation spec " + remediationSpecVersion
r.Keptn.Logger.Error(msg)
_ = r.sendRemediationFinishedEvent(keptn.RemediationStatusErrored, keptn.RemediationResultFailed, msg)
return nil, errors.New(msg)
}
return remediationData, nil
}

func (r *Remediation) triggerAction(action *keptn.RemediationV02ActionsOnOpen, actionIndex int, problemDetails keptn.ProblemDetails) error {
func (r *Remediation) triggerAction(action *v0_1_4.RemediationActionsOnOpen, actionIndex int, problemDetails keptn.ProblemDetails) error {
err := r.sendRemediationStatusChangedEvent(action, actionIndex)
if err != nil {
msg := "could not send remediation.status.changed event"
Expand Down
21 changes: 11 additions & 10 deletions remediation-service/handler/problem_open_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ package handler

import (
"encoding/json"
cloudevents "github.com/cloudevents/sdk-go"
"github.com/cloudevents/sdk-go/pkg/cloudevents/types"
"github.com/go-openapi/strfmt"
keptnapi "github.com/keptn/go-utils/pkg/api/models"
keptn "github.com/keptn/go-utils/pkg/lib"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"

cloudevents "github.com/cloudevents/sdk-go"
"github.com/cloudevents/sdk-go/pkg/cloudevents/types"
"github.com/go-openapi/strfmt"
keptnapi "github.com/keptn/go-utils/pkg/api/models"
keptn "github.com/keptn/go-utils/pkg/lib"
)

const shipyardContent = `stages:
Expand All @@ -31,7 +32,7 @@ const shipyardResource = `{
"resourceURI": "shipyard.yaml"
}`

const remediationYamlContent = `version: 0.2.0
const remediationYamlContent = `apiVersion: spec.keptn.sh/0.1.4
kind: Remediation
metadata:
name: remediation-configuration
Expand All @@ -54,22 +55,22 @@ spec:
description: Escalate the problem`

const remediationYamlResourceWithValidRemediation = `{
"resourceContent": "dmVyc2lvbjogMC4yLjAKa2luZDogUmVtZWRpYXRpb24KbWV0YWRhdGE6CiAgbmFtZTogcmVtZWRpYXRpb24tY29uZmlndXJhdGlvbgpzcGVjOgogIHJlbWVkaWF0aW9uczogCiAgLSBwcm9ibGVtVHlwZTogIlJlc3BvbnNlIHRpbWUgZGVncmFkYXRpb24iCiAgICBhY3Rpb25zT25PcGVuOgogICAgLSBuYW1lOiBUb29nbGUgZmVhdHVyZSBmbGFnCiAgICAgIGFjdGlvbjogdG9nZ2xlZmVhdHVyZQogICAgICBkZXNjcmlwdGlvbjogVG9nZ2xlIGZlYXR1cmUgZmxhZyBFbmFibGVQcm9tb3Rpb24gZnJvbSBPTiB0byBPRkYKICAgICAgdmFsdWU6CiAgICAgICAgRW5hYmxlUHJvbW90aW9uOiBvZmYKICAtIHByb2JsZW1UeXBlOiAnKicKICAgIGFjdGlvbnNPbk9wZW46CiAgICAtIG5hbWU6CiAgICAgIGFjdGlvbjogZXNjYWxhdGUKICAgICAgZGVzY3JpcHRpb246IEVzY2FsYXRlIHRoZSBwcm9ibGVt",
"resourceContent": "YXBpVmVyc2lvbjogc3BlYy5rZXB0bi5zaC8wLjEuNApraW5kOiBSZW1lZGlhdGlvbgptZXRhZGF0YToKICBuYW1lOiByZW1lZGlhdGlvbi1jb25maWd1cmF0aW9uCnNwZWM6CiAgcmVtZWRpYXRpb25zOiAKICAtIHByb2JsZW1UeXBlOiAiUmVzcG9uc2UgdGltZSBkZWdyYWRhdGlvbiIKICAgIGFjdGlvbnNPbk9wZW46CiAgICAtIG5hbWU6IFRvb2dsZSBmZWF0dXJlIGZsYWcKICAgICAgYWN0aW9uOiB0b2dnbGVmZWF0dXJlCiAgICAgIGRlc2NyaXB0aW9uOiBUb2dnbGUgZmVhdHVyZSBmbGFnIEVuYWJsZVByb21vdGlvbiBmcm9tIE9OIHRvIE9GRgogICAgICB2YWx1ZToKICAgICAgICBFbmFibGVQcm9tb3Rpb246IG9mZgogIC0gcHJvYmxlbVR5cGU6ICcqJwogICAgYWN0aW9uc09uT3BlbjoKICAgIC0gbmFtZToKICAgICAgYWN0aW9uOiBlc2NhbGF0ZQogICAgICBkZXNjcmlwdGlvbjogRXNjYWxhdGUgdGhlIHByb2Js",
"resourceURI": "remediation.yaml"
}`

const remediationYamlResourceWithValidRemediationAndMultipleActions = `{
"resourceContent": "dmVyc2lvbjogMC4yLjAKa2luZDogUmVtZWRpYXRpb24KbWV0YWRhdGE6CiAgbmFtZTogcmVtZWRpYXRpb24tY29uZmlndXJhdGlvbgpzcGVjOgogIHJlbWVkaWF0aW9uczogCiAgLSBwcm9ibGVtVHlwZTogIlJlc3BvbnNlIHRpbWUgZGVncmFkYXRpb24iCiAgICBhY3Rpb25zT25PcGVuOgogICAgLSBuYW1lOiBUb29nbGUgZmVhdHVyZSBmbGFnCiAgICAgIGFjdGlvbjogdG9nZ2xlZmVhdHVyZQogICAgICBkZXNjcmlwdGlvbjogVG9nZ2xlIGZlYXR1cmUgZmxhZyBFbmFibGVQcm9tb3Rpb24gZnJvbSBPTiB0byBPRkYKICAgICAgdmFsdWU6CiAgICAgICAgRW5hYmxlUHJvbW90aW9uOiBvZmYKICAgIC0gbmFtZTogbXkgc2Vjb25kIGFjdGlvbgogICAgICBhY3Rpb246IGVzY2FsYXRlCiAgICAgIGRlc2NyaXB0aW9uOiBlc2NhbGF0ZSB0aGUgcHJvYmxlbQogIC0gcHJvYmxlbVR5cGU6ICcqJwogICAgYWN0aW9uc09uT3BlbjoKICAgIC0gbmFtZToKICAgICAgYWN0aW9uOiBlc2NhbGF0ZQogICAgICBkZXNjcmlwdGlvbjogRXNjYWxhdGUgdGhlIHByb2JsZW0=",
"resourceContent": "YXBpVmVyc2lvbjogc3BlYy5rZXB0bi5zaC8wLjEuNApraW5kOiBSZW1lZGlhdGlvbgptZXRhZGF0YToKICBuYW1lOiByZW1lZGlhdGlvbi1jb25maWd1cmF0aW9uCnNwZWM6CiAgcmVtZWRpYXRpb25zOiAKICAtIHByb2JsZW1UeXBlOiAiUmVzcG9uc2UgdGltZSBkZWdyYWRhdGlvbiIKICAgIGFjdGlvbnNPbk9wZW46CiAgICAtIG5hbWU6IFRvb2dsZSBmZWF0dXJlIGZsYWcKICAgICAgYWN0aW9uOiB0b2dnbGVmZWF0dXJlCiAgICAgIGRlc2NyaXB0aW9uOiBUb2dnbGUgZmVhdHVyZSBmbGFnIEVuYWJsZVByb21vdGlvbiBmcm9tIE9OIHRvIE9GRgogICAgICB2YWx1ZToKICAgICAgICBFbmFibGVQcm9tb3Rpb246IG9mZgogICAgLSBuYW1lOiBteSBzZWNvbmQgYWN0aW9uCiAgICAgIGFjdGlvbjogZXNjYWxhdGUKICAgICAgZGVzY3JpcHRpb246IGVzY2FsYXRlIHRoZSBwcm9ibGVtCiAgLSBwcm9ibGVtVHlwZTogJyonCiAgICBhY3Rpb25zT25PcGVuOgogICAgLSBuYW1lOgogICAgICBhY3Rpb246IGVzY2FsYXRlCiAgICAgIGRlc2NyaXB0aW9uOiBFc2NhbGF0ZSB0aGUgcHJvYmxlbQ==",
"resourceURI": "remediation.yaml"
}`

const remediationYamlResourceWithInvalidSpecVersion = `{
"resourceContent": "a2luZDogUmVtZWRpYXRpb24KbWV0YWRhdGE6CiAgbmFtZTogcmVtZWRpYXRpb24tY29uZmlndXJhdGlvbgpzcGVjOgogIHJlbWVkaWF0aW9uczogCiAgLSBwcm9ibGVtVHlwZTogIlJlc3BvbnNlIHRpbWUgZGVncmFkYXRpb24iCiAgICBhY3Rpb25zT25PcGVuOgogICAgLSBuYW1lOiBUb29nbGUgZmVhdHVyZSBmbGFnCiAgICAgIGFjdGlvbjogdG9nZ2xlZmVhdHVyZQogICAgICBkZXNjcmlwdGlvbjogVG9nZ2xlIGZlYXR1cmUgZmxhZyBFbmFibGVQcm9tb3Rpb24gZnJvbSBPTiB0byBPRkYKICAgICAgdmFsdWU6CiAgICAgICAgRW5hYmxlUHJvbW90aW9uOiBvZmYKICAtIHByb2JsZW1UeXBlOiAnKicKICAgIGFjdGlvbnNPbk9wZW46CiAgICAtIG5hbWU6CiAgICAgIGFjdGlvbjogZXNjYWxhdGUKICAgICAgZGVzY3JpcHRpb246IEVzY2FsYXRlIHRoZSBwcm9ibGVt",
"resourceContent": "",
"resourceURI": "remediation.yaml"
}`

const remediationYamlResourceWithNoRemediations = `{
"resourceContent": "dmVyc2lvbjogMC4yLjAKa2luZDogUmVtZWRpYXRpb24KbWV0YWRhdGE6CiAgbmFtZTogcmVtZWRpYXRpb24tY29uZmlndXJhdGlvbgpzcGVjOgogIHJlbWVkaWF0aW9uczo=",
"resourceContent": "YXBpVmVyc2lvbjogc3BlYy5rZXB0bi5zaC8wLjEuNApraW5kOiBSZW1lZGlhdGlvbgptZXRhZGF0YToKICBuYW1lOiByZW1lZGlhdGlvbi1jb25maWd1cmF0aW9uCnNwZWM6CiAgcmVtZWRpYXRpb25zOg==",
"resourceURI": "remediation.yaml"
}`

Expand Down
2 changes: 1 addition & 1 deletion test/assets/self_healing_remediation.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 0.2.0
apiVersion: spec.keptn.sh/0.1.4
kind: Remediation
metadata:
name: service-remediation
Expand Down

0 comments on commit 2bb5983

Please sign in to comment.