Skip to content

Commit

Permalink
Plan verifier checks for mandatory deploy plan (#1342)
Browse files Browse the repository at this point in the history
Summary:
- removed verifying that a plan is not referenced by any parameter. In the light of upcoming KEP-18 allowing triggering plans manually, some plans e.g. backup won be referenced by any parameter
- added verifying that at least deploy plan exists in the operator

Signed-off-by: Aleksey Dukhovniy <alex.dukhovniy@googlemail.com>
  • Loading branch information
Aleksey Dukhovniy committed Feb 13, 2020
1 parent 539513f commit 95ca08f
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 25 deletions.
2 changes: 1 addition & 1 deletion pkg/apis/kudo/v1beta1/instance_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ const (
)

var (
ReservedPlanNames = []string{
SpecialPlanNames = []string{
DeployPlanName,
UpgradePlanName,
UpdatePlanName,
Expand Down
2 changes: 1 addition & 1 deletion pkg/kudoctl/cmd/package_verify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ func TestOperatorVerify(t *testing.T) {
t.Fatalf("failed reading .golden: %s", err)
}

assert.Equal(t, out.String(), string(g), "yaml does not match .golden file %s", gp)
assert.Equal(t, string(g), out.String(), "yaml does not match .golden file %s", gp)
}
1 change: 0 additions & 1 deletion pkg/kudoctl/cmd/testdata/invalid-params.golden
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
Warnings
plan "validation" defined but not used
parameter "Cpus" defined but not used.
parameter "comma," defined but not used.
Errors
Expand Down
28 changes: 8 additions & 20 deletions pkg/kudoctl/packages/verifier/plan/verify_references.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,37 +8,25 @@ import (
"github.com/kudobuilder/kudo/pkg/kudoctl/packages/verifier"
)

// ReferenceVerifier verifies plans producing errors for plans referenced in param triggers that do not exist and warnings for plans which are not used in a param
// ReferenceVerifier verifies plans producing errors for plans referenced in param triggers that do not exist
// and warnings for missing mandatory plans.
type ReferenceVerifier struct{}

func (ReferenceVerifier) Verify(pf *packages.Files) verifier.Result {
res := verifier.NewResult()
res.Merge(plansNotDefined(pf))
res.Merge(plansDefinedNotUsed(pf))
res.Merge(hasMandatoryPlans(pf))

return res
}

func plansDefinedNotUsed(pf *packages.Files) verifier.Result {
func hasMandatoryPlans(pf *packages.Files) verifier.Result {
res := verifier.NewResult()
usedPlans := make(map[string]bool)

// Mark reserved plan names as used
for _, plan := range v1beta1.ReservedPlanNames {
usedPlans[plan] = true
}

// Mark plans in param triggers as used
for _, param := range pf.Params.Parameters {
if param.Trigger != "" {
usedPlans[param.Trigger] = true
}
}
plans := pf.Operator.Plans

for name := range pf.Operator.Plans {
if _, ok := usedPlans[name]; !ok {
res.AddWarnings(fmt.Sprintf("plan %q defined but not used", name))
}
// Currently only 'deploy' plan is mandatory
if _, ok := plans[v1beta1.DeployPlanName]; !ok {
res.AddErrors(fmt.Sprintf("an operator is required to have '%s' plan", v1beta1.DeployPlanName))
}

return res
Expand Down
2 changes: 0 additions & 2 deletions pkg/kudoctl/packages/verifier/plan/verify_references_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@ func TestPlanReferenceVerifier(t *testing.T) {
verifier := ReferenceVerifier{}
res := verifier.Verify(&pf)

assert.Equal(t, 1, len(res.Warnings))
assert.Equal(t, `plan "unused-plan" defined but not used`, res.Warnings[0])
assert.Equal(t, 1, len(res.Errors))
assert.Equal(t, `plan "not-existing-plan" used in parameter "PARAM2" is not defined`, res.Errors[0])
}

0 comments on commit 95ca08f

Please sign in to comment.