Skip to content

Commit b100284

Browse files
committed
Update --preflight command line option
Fix carvel-dev#893 The `--preflight` command line options now only specifies those preflight checks that are to be enables. Signed-off-by: Todd Short <todd.short@me.com>
1 parent 63faf8a commit b100284

File tree

2 files changed

+26
-36
lines changed

2 files changed

+26
-36
lines changed

pkg/kapp/preflight/registry.go

+20-20
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package preflight
66
import (
77
"context"
88
"fmt"
9-
"strconv"
109
"strings"
1110

1211
"github.com/spf13/pflag"
@@ -31,16 +30,18 @@ func NewRegistry(checks map[string]Check) *Registry {
3130
}
3231

3332
// String returns a string representation of the
34-
// preflight checks. It follows the format:
35-
// CheckName={true||false},...
33+
// enabled preflight checks. It follows the format:
34+
// CheckName,...
3635
// This method is needed so Registry implements
3736
// the pflag.Value interface
3837
func (c *Registry) String() string {
39-
defaults := []string{}
38+
enabled := []string{}
4039
for k, v := range c.known {
41-
defaults = append(defaults, fmt.Sprintf("%s=%v", k, v.Enabled()))
40+
if v.Enabled() {
41+
enabled = append(enabled, k)
42+
}
4243
}
43-
return strings.Join(defaults, ",")
44+
return strings.Join(enabled, ",")
4445
}
4546

4647
// Type returns a string representing the type
@@ -51,33 +52,32 @@ func (c *Registry) Type() string {
5152
}
5253

5354
// Set takes in a string in the format of
54-
// CheckName={true||false},...
55+
// CheckName,...
5556
// and sets the specified preflight check
56-
// as enabled if true, disabled if false
57+
// as enabled if listed, otherwise, sets as
58+
// disabled if not listed.
5759
// Returns an error if there is a problem
5860
// parsing the preflight checks
5961
func (c *Registry) Set(s string) error {
6062
if c.known == nil {
6163
return nil
6264
}
6365

66+
enabled := map[string]struct{}{}
67+
// enable those specified
6468
mappings := strings.Split(s, ",")
65-
for _, mapping := range mappings {
66-
set := strings.SplitN(mapping, "=", 2)
67-
if len(set) != 2 {
68-
return fmt.Errorf("unable to parse check definition %q, too many '='. Must follow the format check={true||false}", mapping)
69-
}
70-
key, value := set[0], set[1]
71-
69+
for _, key := range mappings {
7270
if _, ok := c.known[key]; !ok {
7371
return fmt.Errorf("unknown preflight check %q specified", key)
7472
}
75-
76-
enabled, err := strconv.ParseBool(value)
77-
if err != nil {
78-
return fmt.Errorf("unable to parse boolean representation of %q: %w", mapping, err)
73+
c.known[key].SetEnabled(true)
74+
enabled[key] = struct{}{}
75+
}
76+
// disable unspecified validators
77+
for key := range c.known {
78+
if _, ok := enabled[key]; !ok {
79+
c.known[key].SetEnabled(false)
7980
}
80-
c.known[key].SetEnabled(enabled)
8181
}
8282
return nil
8383
}

pkg/kapp/preflight/registry_test.go

+6-16
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,32 @@ func TestRegistrySet(t *testing.T) {
2020
}{
2121
{
2222
name: "no preflight checks registered, parsing skipped, any value can be provided",
23-
preflights: "someCheck=true",
23+
preflights: "someCheck",
2424
registry: &Registry{},
2525
},
2626
{
2727
name: "preflight checks registered, invalid check format in flag, error returned",
28-
preflights: "some=check=something=true",
28+
preflights: ",",
2929
registry: &Registry{
3030
known: map[string]Check{
31-
"some": nil,
31+
"some": NewCheck(func(_ context.Context, _ *diffgraph.ChangeGraph) error { return nil }, true),
3232
},
3333
},
3434
shouldErr: true,
3535
},
3636
{
3737
name: "preflight checks registered, unknown preflight check specified, error returned",
38-
preflights: "nonexistent=true",
38+
preflights: "nonexistent",
3939
registry: &Registry{
4040
known: map[string]Check{
41-
"exists": nil,
42-
},
43-
},
44-
shouldErr: true,
45-
},
46-
{
47-
name: "preflight checks registered, known check specified, non-boolean value provided, error returned",
48-
preflights: "someCheck=enabled",
49-
registry: &Registry{
50-
known: map[string]Check{
51-
"someCheck": nil,
41+
"exists": NewCheck(func(_ context.Context, _ *diffgraph.ChangeGraph) error { return nil }, true),
5242
},
5343
},
5444
shouldErr: true,
5545
},
5646
{
5747
name: "preflight checks registered, valid input, no error returned",
58-
preflights: "someCheck=true",
48+
preflights: "someCheck",
5949
registry: &Registry{
6050
known: map[string]Check{
6151
"someCheck": NewCheck(func(_ context.Context, _ *diffgraph.ChangeGraph) error { return nil }, true),

0 commit comments

Comments
 (0)