Skip to content

Commit 374a655

Browse files
authored
Merge pull request #588 from replicatedhq/oci-specs
Support for oci:// retreival of specs
2 parents 156965f + 5da8466 commit 374a655

File tree

7 files changed

+398
-51
lines changed

7 files changed

+398
-51
lines changed

cmd/preflight/cli/run.go

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io/ioutil"
77
"net/http"
8+
"net/url"
89
"os"
910
"os/signal"
1011
"strings"
@@ -19,6 +20,7 @@ import (
1920
troubleshootclientsetscheme "github.com/replicatedhq/troubleshoot/pkg/client/troubleshootclientset/scheme"
2021
"github.com/replicatedhq/troubleshoot/pkg/docrewrite"
2122
"github.com/replicatedhq/troubleshoot/pkg/k8sutil"
23+
"github.com/replicatedhq/troubleshoot/pkg/oci"
2224
"github.com/replicatedhq/troubleshoot/pkg/preflight"
2325
"github.com/replicatedhq/troubleshoot/pkg/specs"
2426
"github.com/spf13/viper"
@@ -65,27 +67,45 @@ func runPreflights(v *viper.Viper, arg string) error {
6567

6668
preflightContent = b
6769
} else {
68-
if !util.IsURL(arg) {
69-
return fmt.Errorf("%s is not a URL and was not found (err %s)", arg, err)
70-
}
71-
72-
req, err := http.NewRequest("GET", arg, nil)
73-
if err != nil {
74-
return err
75-
}
76-
req.Header.Set("User-Agent", "Replicated_Preflight/v1beta2")
77-
resp, err := http.DefaultClient.Do(req)
70+
u, err := url.Parse(arg)
7871
if err != nil {
7972
return err
8073
}
81-
defer resp.Body.Close()
8274

83-
body, err := ioutil.ReadAll(resp.Body)
84-
if err != nil {
85-
return err
86-
}
75+
if u.Scheme == "oci" {
76+
content, err := oci.PullPreflightFromOCI(arg)
77+
if err != nil {
78+
if err == oci.ErrNoRelease {
79+
return errors.Errorf("no release found for %s.\nCheck the oci:// uri for errors or contact the application vendor for support.", arg)
80+
}
81+
82+
return err
83+
}
8784

88-
preflightContent = body
85+
preflightContent = content
86+
} else {
87+
if !util.IsURL(arg) {
88+
return fmt.Errorf("%s is not a URL and was not found (err %s)", arg, err)
89+
}
90+
91+
req, err := http.NewRequest("GET", arg, nil)
92+
if err != nil {
93+
return err
94+
}
95+
req.Header.Set("User-Agent", "Replicated_Preflight/v1beta2")
96+
resp, err := http.DefaultClient.Do(req)
97+
if err != nil {
98+
return err
99+
}
100+
defer resp.Body.Close()
101+
102+
body, err := ioutil.ReadAll(resp.Body)
103+
if err != nil {
104+
return err
105+
}
106+
107+
preflightContent = body
108+
}
89109
}
90110

91111
preflightContent, err = docrewrite.ConvertToV1Beta2(preflightContent)

go.mod

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/ahmetalpbalkan/go-cursor v0.0.0-20131010032410-8136607ea412
77
github.com/blang/semver v3.5.1+incompatible
88
github.com/containers/image/v5 v5.19.3
9-
github.com/docker/distribution v2.7.1+incompatible
9+
github.com/docker/distribution v2.8.1+incompatible
1010
github.com/fatih/color v1.13.0
1111
github.com/go-redis/redis/v7 v7.4.1
1212
github.com/go-sql-driver/mysql v1.6.0
@@ -27,33 +27,35 @@ require (
2727
github.com/segmentio/ksuid v1.0.4
2828
github.com/shirou/gopsutil v3.21.11+incompatible
2929
github.com/sirupsen/logrus v1.8.1
30-
github.com/spf13/cobra v1.3.0
30+
github.com/spf13/cobra v1.4.0
3131
github.com/spf13/pflag v1.0.5
3232
github.com/spf13/viper v1.10.0
33-
github.com/stretchr/testify v1.7.0
33+
github.com/stretchr/testify v1.7.1
3434
github.com/tj/go-spin v1.1.0
3535
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
3636
gopkg.in/yaml.v2 v2.4.0
37-
k8s.io/api v0.23.1
38-
k8s.io/apiextensions-apiserver v0.23.0
39-
k8s.io/apimachinery v0.23.1
40-
k8s.io/apiserver v0.23.0
41-
k8s.io/cli-runtime v0.23.1
42-
k8s.io/client-go v0.23.1
37+
k8s.io/api v0.24.0
38+
k8s.io/apiextensions-apiserver v0.24.0
39+
k8s.io/apimachinery v0.24.0
40+
k8s.io/apiserver v0.24.0
41+
k8s.io/cli-runtime v0.24.0
42+
k8s.io/client-go v0.24.0
4343
periph.io/x/periph v3.6.8+incompatible
4444
sigs.k8s.io/controller-runtime v0.11.0
4545
)
4646

4747
require (
4848
cloud.google.com/go v0.99.0 // indirect
4949
cloud.google.com/go/storage v1.10.0 // indirect
50+
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
5051
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
51-
github.com/Azure/go-autorest/autorest v0.11.18 // indirect
52-
github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect
52+
github.com/Azure/go-autorest/autorest v0.11.20 // indirect
53+
github.com/Azure/go-autorest/autorest/adal v0.9.15 // indirect
5354
github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
5455
github.com/Azure/go-autorest/logger v0.2.1 // indirect
5556
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
5657
github.com/BurntSushi/toml v1.0.0 // indirect
58+
github.com/Masterminds/semver/v3 v3.1.1 // indirect
5759
github.com/Microsoft/go-winio v0.5.1 // indirect
5860
github.com/Microsoft/hcsshim v0.9.2 // indirect
5961
github.com/PuerkitoBio/purell v1.1.1 // indirect
@@ -65,46 +67,50 @@ require (
6567
github.com/cespare/xxhash/v2 v2.1.2 // indirect
6668
github.com/chzyer/logex v1.1.11-0.20160617073814-96a4d311aa9b // indirect
6769
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
68-
github.com/containerd/cgroups v1.0.1 // indirect
69-
github.com/containerd/containerd v1.5.10 // indirect
70+
github.com/containerd/cgroups v1.0.3 // indirect
71+
github.com/containerd/containerd v1.6.3 // indirect
7072
github.com/containerd/stargz-snapshotter/estargz v0.11.0 // indirect
7173
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b // indirect
7274
github.com/containers/ocicrypt v1.1.4 // indirect
7375
github.com/containers/storage v1.38.3 // indirect
7476
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
7577
github.com/davecgh/go-spew v1.1.1 // indirect
76-
github.com/docker/docker v20.10.12+incompatible // indirect
78+
github.com/docker/cli v20.10.11+incompatible // indirect
79+
github.com/docker/docker v20.10.14+incompatible // indirect
7780
github.com/docker/docker-credential-helpers v0.6.4 // indirect
7881
github.com/docker/go-connections v0.4.0 // indirect
7982
github.com/docker/go-metrics v0.0.1 // indirect
8083
github.com/docker/go-units v0.4.0 // indirect
8184
github.com/dsnet/compress v0.0.1 // indirect
8285
github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect
86+
github.com/emicklei/go-restful v2.9.5+incompatible // indirect
8387
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
8488
github.com/felixge/httpsnoop v1.0.1 // indirect
8589
github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect
8690
github.com/frankban/quicktest v1.14.0 // indirect
8791
github.com/fsnotify/fsnotify v1.5.1 // indirect
8892
github.com/ghodss/yaml v1.0.0 // indirect
8993
github.com/go-errors/errors v1.0.1 // indirect
90-
github.com/go-logr/logr v1.2.0 // indirect
94+
github.com/go-logr/logr v1.2.2 // indirect
9195
github.com/go-ole/go-ole v1.2.6 // indirect
9296
github.com/go-openapi/jsonpointer v0.19.5 // indirect
9397
github.com/go-openapi/jsonreference v0.19.5 // indirect
9498
github.com/go-openapi/swag v0.19.14 // indirect
9599
github.com/gogo/protobuf v1.3.2 // indirect
100+
github.com/golang-jwt/jwt/v4 v4.0.0 // indirect
96101
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
97102
github.com/golang/protobuf v1.5.2 // indirect
98103
github.com/golang/snappy v0.0.4 // indirect
99104
github.com/google/btree v1.0.1 // indirect
105+
github.com/google/gnostic v0.5.7-v3refs // indirect
100106
github.com/google/go-cmp v0.5.6 // indirect
101107
github.com/google/go-intervals v0.0.2 // indirect
102108
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
103109
github.com/googleapis/gax-go/v2 v2.1.1 // indirect
104110
github.com/googleapis/gnostic v0.5.5 // indirect
105111
github.com/gorilla/mux v1.8.0 // indirect
106112
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
107-
github.com/hashicorp/errwrap v1.0.0 // indirect
113+
github.com/hashicorp/errwrap v1.1.0 // indirect
108114
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
109115
github.com/hashicorp/go-safetemp v1.0.0 // indirect
110116
github.com/hashicorp/go-version v1.3.0 // indirect
@@ -126,29 +132,33 @@ require (
126132
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
127133
github.com/mitchellh/go-homedir v1.1.0 // indirect
128134
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
129-
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect
135+
github.com/mitchellh/go-wordwrap v1.0.0 // indirect
130136
github.com/mitchellh/mapstructure v1.4.3 // indirect
137+
github.com/moby/locker v1.0.1 // indirect
131138
github.com/moby/spdystream v0.2.0 // indirect
132139
github.com/moby/sys/mountinfo v0.5.0 // indirect
140+
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
133141
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
134142
github.com/modern-go/reflect2 v1.0.2 // indirect
135143
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
144+
github.com/morikuni/aec v1.0.0 // indirect
145+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
136146
github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d // indirect
137147
github.com/nwaples/rardecode v1.1.2 // indirect
138148
github.com/opencontainers/go-digest v1.0.0 // indirect
139149
github.com/opencontainers/image-spec v1.0.3-0.20211202193544-a5463b7f9c84 // indirect
140-
github.com/opencontainers/runc v1.1.0 // indirect
150+
github.com/opencontainers/runc v1.1.1 // indirect
141151
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect
142152
github.com/opencontainers/selinux v1.10.0 // indirect
143153
github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913 // indirect
144154
github.com/pelletier/go-toml v1.9.4 // indirect
145155
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
146156
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
147157
github.com/pmezard/go-difflib v1.0.0 // indirect
148-
github.com/prometheus/client_golang v1.11.0 // indirect
158+
github.com/prometheus/client_golang v1.12.1 // indirect
149159
github.com/prometheus/client_model v0.2.0 // indirect
150-
github.com/prometheus/common v0.28.0 // indirect
151-
github.com/prometheus/procfs v0.6.0 // indirect
160+
github.com/prometheus/common v0.32.1 // indirect
161+
github.com/prometheus/procfs v0.7.3 // indirect
152162
github.com/rivo/uniseg v0.2.0 // indirect
153163
github.com/spf13/afero v1.6.0 // indirect
154164
github.com/spf13/cast v1.4.1 // indirect
@@ -167,28 +177,30 @@ require (
167177
go.opencensus.io v0.23.0 // indirect
168178
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
169179
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect
170-
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
180+
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
171181
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
172-
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect
173-
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
182+
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
183+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
174184
golang.org/x/text v0.3.7 // indirect
175-
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
185+
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
176186
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
177187
google.golang.org/api v0.62.0 // indirect
178188
google.golang.org/appengine v1.6.7 // indirect
179-
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect
180-
google.golang.org/grpc v1.42.0 // indirect
189+
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 // indirect
190+
google.golang.org/grpc v1.43.0 // indirect
181191
google.golang.org/protobuf v1.27.1 // indirect
182192
gopkg.in/inf.v0 v0.9.1 // indirect
183193
gopkg.in/ini.v1 v1.66.2 // indirect
184194
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
185-
k8s.io/klog/v2 v2.30.0 // indirect
186-
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
187-
k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b // indirect
188-
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
189-
sigs.k8s.io/kustomize/api v0.10.1 // indirect
190-
sigs.k8s.io/kustomize/kyaml v0.13.0 // indirect
191-
sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect
195+
helm.sh/helm/v3 v3.9.0 // indirect
196+
k8s.io/klog/v2 v2.60.1 // indirect
197+
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect
198+
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect
199+
oras.land/oras-go v1.1.1 // indirect
200+
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect
201+
sigs.k8s.io/kustomize/api v0.11.4 // indirect
202+
sigs.k8s.io/kustomize/kyaml v0.13.6 // indirect
203+
sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect
192204
sigs.k8s.io/yaml v1.3.0 // indirect
193205
)
194206

0 commit comments

Comments
 (0)