Skip to content

Commit 0cb775a

Browse files
committed
add kots lint
1 parent 79be0f5 commit 0cb775a

File tree

3 files changed

+677
-91
lines changed

3 files changed

+677
-91
lines changed

cmd/troubleshoot/cli/run.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"github.com/fatih/color"
2020
"github.com/mattn/go-isatty"
2121
"github.com/pkg/errors"
22+
kjs "github.com/replicatedhq/kots-lint/kubernetes_json_schema"
23+
"github.com/replicatedhq/kots-lint/pkg/kots"
2224
"github.com/replicatedhq/troubleshoot/internal/specs"
2325
"github.com/replicatedhq/troubleshoot/internal/util"
2426
analyzer "github.com/replicatedhq/troubleshoot/pkg/analyze"
@@ -46,14 +48,38 @@ func runTroubleshoot(v *viper.Viper, args []string) error {
4648
// Read from stdin
4749
scanner := bufio.NewScanner(os.Stdin)
4850
specYaml := ""
51+
specYamlWithLineNumber := ""
52+
lineNumber := 1
4953
for scanner.Scan() {
5054
input := scanner.Text()
5155
specYaml = fmt.Sprintf("%s\n%s", specYaml, input)
56+
specYamlWithLineNumber = fmt.Sprintf("%s\n%d: %s", specYamlWithLineNumber, lineNumber, input)
57+
lineNumber++
5258
}
5359
if err := scanner.Err(); err != nil {
5460
return fmt.Errorf("error reading standard input: %v", err)
5561
}
56-
fmt.Println(specYaml)
62+
schemaDir, err := kjs.InitKubernetesJsonSchemaDir()
63+
if err != nil {
64+
return errors.Wrap(err, "failed to init kubernetes json schema dir")
65+
}
66+
67+
if err := kots.InitOPALinting(); err != nil {
68+
return errors.Wrap(err, "failed to init opa linting")
69+
}
70+
71+
defer os.RemoveAll(schemaDir)
72+
results, err := kots.TroubleshootLintSpec(specYaml)
73+
if err != nil {
74+
return errors.Wrap(err, "failed to lint spec")
75+
}
76+
77+
fmt.Println(specYamlWithLineNumber)
78+
for _, result := range results {
79+
for i := range result.Positions {
80+
fmt.Printf("Line %d | %s\n", result.Positions[i].Start.Line, result.Message)
81+
}
82+
}
5783
return nil
5884
} else if len(args) > 1 && args[0] == "lint" {
5985
supportBundles, err := validateSpecs(args[1:], "")

go.mod

Lines changed: 75 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ require (
2727
github.com/microsoft/go-mssqldb v1.7.1
2828
github.com/opencontainers/image-spec v1.1.0
2929
github.com/pkg/errors v0.9.1
30+
github.com/replicatedhq/kots-lint v0.3.9
3031
github.com/replicatedhq/termui/v3 v3.1.1-0.20200811145416-f40076d26851
3132
github.com/segmentio/ksuid v1.0.4
3233
github.com/shirou/gopsutil/v3 v3.24.3
@@ -64,81 +65,127 @@ require (
6465
github.com/Masterminds/semver/v3 v3.2.1 // indirect
6566
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
6667
github.com/Masterminds/squirrel v1.5.4 // indirect
68+
github.com/OneOfOne/xxhash v1.2.8 // indirect
69+
github.com/VividCortex/ewma v1.2.0 // indirect
70+
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
71+
github.com/agnivade/levenshtein v1.1.1 // indirect
6772
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
73+
github.com/blang/semver v3.5.1+incompatible // indirect
6874
github.com/chai2010/gettext-go v1.0.2 // indirect
6975
github.com/containerd/cgroups/v3 v3.0.2 // indirect
7076
github.com/containerd/errdefs v0.1.0 // indirect
7177
github.com/containerd/log v0.1.0 // indirect
7278
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
73-
github.com/distribution/reference v0.5.0 // indirect
79+
github.com/cyberphone/json-canonicalization v0.0.0-20231217050601-ba74d44ecf5f // indirect
80+
github.com/distribution/reference v0.6.0 // indirect
7481
github.com/docker/distribution v2.8.3+incompatible // indirect
7582
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
7683
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
7784
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
7885
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
86+
github.com/go-ini/ini v1.67.0 // indirect
87+
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
7988
github.com/go-logr/stdr v1.2.2 // indirect
89+
github.com/go-openapi/analysis v0.21.4 // indirect
90+
github.com/go-openapi/errors v0.21.1 // indirect
91+
github.com/go-openapi/loads v0.21.2 // indirect
92+
github.com/go-openapi/runtime v0.26.0 // indirect
93+
github.com/go-openapi/spec v0.20.9 // indirect
94+
github.com/go-openapi/strfmt v0.22.2 // indirect
95+
github.com/go-openapi/validate v0.22.1 // indirect
8096
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
8197
github.com/golang-sql/sqlexp v0.1.0 // indirect
8298
github.com/google/gnostic-models v0.6.8 // indirect
8399
github.com/google/go-containerregistry v0.19.0 // indirect
84100
github.com/google/s2a-go v0.1.7 // indirect
85101
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
86-
github.com/gorilla/websocket v1.5.0 // indirect
102+
github.com/gorilla/websocket v1.5.1 // indirect
87103
github.com/gosuri/uitable v0.0.4 // indirect
88104
github.com/huandu/xstrings v1.4.0 // indirect
105+
github.com/instrumenta/kubeval v0.0.0-20190918223246-8d013ec9fc56 // indirect
89106
github.com/jackc/pgpassfile v1.0.0 // indirect
90107
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
91108
github.com/jmoiron/sqlx v1.3.5 // indirect
109+
github.com/k0sproject/k0s v1.28.5-0.20231116142149-82f76181191c // indirect
92110
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
93111
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
112+
github.com/letsencrypt/boulder v0.0.0-20230907030200-6d76a0f91e1e // indirect
94113
github.com/lib/pq v1.10.9 // indirect
95114
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
96-
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
115+
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
116+
github.com/miekg/pkcs11 v1.1.1 // indirect
97117
github.com/mistifyio/go-zfs/v3 v3.0.1 // indirect
98118
github.com/mitchellh/copystructure v1.2.0 // indirect
99119
github.com/mitchellh/reflectwalk v1.0.2 // indirect
100120
github.com/moby/sys/user v0.1.0 // indirect
101121
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
122+
github.com/oklog/ulid v1.3.1 // indirect
123+
github.com/open-policy-agent/opa v0.60.0 // indirect
124+
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect
102125
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
126+
github.com/proglottis/gpgme v0.1.3 // indirect
127+
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
128+
github.com/replicatedhq/embedded-cluster-kinds v1.1.2 // indirect
129+
github.com/replicatedhq/kots v1.108.8 // indirect
130+
github.com/replicatedhq/kotskinds v0.0.0-20240416132840-4e646b87f7a1 // indirect
131+
github.com/replicatedhq/kurlkinds v1.5.0 // indirect
132+
github.com/replicatedhq/yaml/v3 v3.0.0-beta5-replicatedhq // indirect
103133
github.com/rubenv/sql-migrate v1.5.2 // indirect
104134
github.com/russross/blackfriday/v2 v2.1.0 // indirect
105135
github.com/sagikazarmark/locafero v0.4.0 // indirect
106136
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
137+
github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect
107138
github.com/shoenig/go-m1cpu v0.1.6 // indirect
108139
github.com/shopspring/decimal v1.3.1 // indirect
140+
github.com/sigstore/fulcio v1.4.3 // indirect
141+
github.com/sigstore/rekor v1.2.2 // indirect
142+
github.com/sigstore/sigstore v1.8.2 // indirect
109143
github.com/sirupsen/logrus v1.9.3 // indirect
110144
github.com/sourcegraph/conc v0.3.0 // indirect
145+
github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 // indirect
111146
github.com/sylabs/sif/v2 v2.15.1 // indirect
112147
github.com/tchap/go-patricia/v2 v2.3.1 // indirect
148+
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
149+
github.com/vbauerster/mpb/v8 v8.7.2 // indirect
113150
github.com/vladimirvivien/gexe v0.2.0 // indirect
114151
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
115152
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
116-
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
117-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect
153+
github.com/xeipuuv/gojsonschema v1.2.1-0.20200118195451-b537c054d4b4 // indirect
154+
github.com/yashtewari/glob-intersection v0.2.0 // indirect
155+
go.mongodb.org/mongo-driver v1.14.0 // indirect
156+
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
157+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
158+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
118159
go.opentelemetry.io/otel/metric v1.26.0 // indirect
119160
go.opentelemetry.io/otel/trace v1.26.0 // indirect
120161
go.uber.org/multierr v1.11.0 // indirect
162+
go.uber.org/zap v1.27.0 // indirect
121163
golang.org/x/tools v0.18.0 // indirect
122-
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
123-
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
164+
google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 // indirect
165+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
166+
gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect
167+
gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect
168+
k8s.io/cluster-bootstrap v0.29.3 // indirect
124169
k8s.io/component-base v0.30.0 // indirect
125170
k8s.io/kubectl v0.29.0 // indirect
171+
oras.land/oras-go/v2 v2.4.0 // indirect
172+
sigs.k8s.io/application v0.8.3 // indirect
126173
)
127174

128175
require (
129-
cloud.google.com/go v0.110.10 // indirect
130-
cloud.google.com/go/compute v1.23.3 // indirect
131-
cloud.google.com/go/iam v1.1.5 // indirect
132-
cloud.google.com/go/storage v1.35.1 // indirect
176+
cloud.google.com/go v0.112.1 // indirect
177+
cloud.google.com/go/compute v1.24.0 // indirect
178+
cloud.google.com/go/iam v1.1.6 // indirect
179+
cloud.google.com/go/storage v1.39.1 // indirect
133180
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
134181
github.com/BurntSushi/toml v1.3.2 // indirect
135182
github.com/Microsoft/go-winio v0.6.1 // indirect
136183
github.com/Microsoft/hcsshim v0.12.0-rc.3 // indirect
137184
github.com/andybalholm/brotli v1.0.1 // indirect
138-
github.com/aws/aws-sdk-go v1.48.10 // indirect
185+
github.com/aws/aws-sdk-go v1.50.30 // indirect
139186
github.com/beorn7/perks v1.0.1 // indirect
140187
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
141-
github.com/c9s/goprocinfo v0.0.0-20170724085704-0010a05ce49f // indirect
188+
github.com/c9s/goprocinfo v0.0.0-20190309065803-0b2ad9ac246b // indirect
142189
github.com/cespare/xxhash/v2 v2.2.0 // indirect
143190
github.com/chzyer/readline v1.5.1 // indirect
144191
github.com/containerd/containerd v1.7.13 // indirect
@@ -159,27 +206,27 @@ require (
159206
github.com/felixge/httpsnoop v1.0.4 // indirect
160207
github.com/fsnotify/fsnotify v1.7.0 // indirect
161208
github.com/go-errors/errors v1.4.2 // indirect
162-
github.com/go-ole/go-ole v1.2.6 // indirect
163-
github.com/go-openapi/jsonpointer v0.19.6 // indirect
209+
github.com/go-ole/go-ole v1.3.0 // indirect
210+
github.com/go-openapi/jsonpointer v0.20.0 // indirect
164211
github.com/go-openapi/jsonreference v0.20.2 // indirect
165212
github.com/go-openapi/swag v0.22.10 // indirect
166213
github.com/gogo/protobuf v1.3.2 // indirect
167214
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
168215
github.com/golang/protobuf v1.5.4 // indirect
169216
github.com/golang/snappy v0.0.4 // indirect
170-
github.com/google/btree v1.0.1 // indirect
217+
github.com/google/btree v1.1.2 // indirect
171218
github.com/google/go-cmp v0.6.0 // indirect
172219
github.com/google/go-intervals v0.0.2 // indirect
173220
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
174-
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
221+
github.com/googleapis/gax-go/v2 v2.12.3 // indirect
175222
github.com/gorilla/mux v1.8.1 // indirect
176-
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
223+
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
177224
github.com/hashicorp/errwrap v1.1.0 // indirect
178225
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
179226
github.com/hashicorp/go-safetemp v1.0.0 // indirect
180227
github.com/hashicorp/go-version v1.6.0
181228
github.com/hashicorp/hcl v1.0.0 // indirect
182-
github.com/imdario/mergo v0.3.15 // indirect
229+
github.com/imdario/mergo v0.3.16 // indirect
183230
github.com/inconshreveable/mousetrap v1.1.0 // indirect
184231
github.com/jmespath/go-jmespath v0.4.0 // indirect
185232
github.com/josharian/intern v1.0.0 // indirect
@@ -214,9 +261,9 @@ require (
214261
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
215262
github.com/pierrec/lz4/v4 v4.1.2 // indirect
216263
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
217-
github.com/prometheus/client_golang v1.18.0 // indirect
218-
github.com/prometheus/client_model v0.5.0 // indirect
219-
github.com/prometheus/common v0.45.0 // indirect
264+
github.com/prometheus/client_golang v1.19.0 // indirect
265+
github.com/prometheus/client_model v0.6.0 // indirect
266+
github.com/prometheus/common v0.50.0 // indirect
220267
github.com/prometheus/procfs v0.12.0 // indirect
221268
github.com/rivo/uniseg v0.4.4 // indirect
222269
github.com/spf13/afero v1.11.0 // indirect
@@ -239,24 +286,23 @@ require (
239286
golang.org/x/term v0.19.0 // indirect
240287
golang.org/x/text v0.14.0
241288
golang.org/x/time v0.5.0 // indirect
242-
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
243-
google.golang.org/api v0.153.0 // indirect
289+
google.golang.org/api v0.172.0 // indirect
244290
google.golang.org/appengine v1.6.8 // indirect
245-
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect
246-
google.golang.org/grpc v1.59.0 // indirect
291+
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
292+
google.golang.org/grpc v1.62.1 // indirect
247293
google.golang.org/protobuf v1.33.0 // indirect
248294
gopkg.in/inf.v0 v0.9.1 // indirect
249295
gopkg.in/ini.v1 v1.67.0 // indirect
250-
gopkg.in/yaml.v3 v3.0.1 // indirect
296+
gopkg.in/yaml.v3 v3.0.1
251297
helm.sh/helm/v3 v3.14.4
252298
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
253299
k8s.io/kubelet v0.30.0
254300
k8s.io/metrics v0.30.0
255301
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
256302
periph.io/x/host/v3 v3.8.2
257303
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
258-
sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect
259-
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect
304+
sigs.k8s.io/kustomize/api v0.16.0 // indirect
305+
sigs.k8s.io/kustomize/kyaml v0.16.0 // indirect
260306
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
261307
sigs.k8s.io/yaml v1.4.0
262308
)

0 commit comments

Comments
 (0)