Merge pull request #5717 from jdolitsky/feat-v3/oci-registry-loglevel

Helm 3: pass debug option to registry client
pull/5735/head
Matthew Fisher 5 years ago committed by GitHub
commit 31667b6050
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

56
Gopkg.lock generated

@ -242,12 +242,13 @@
version = "v1.1.1" version = "v1.1.1"
[[projects]] [[projects]]
digest = "1:82158435e282da9b23bb1188487fe1c68b17a54ed9dcd557ab6204782ad3ff92" digest = "1:32b33e550e9fba29158153b1881dd46b86593e045564746dcb56557b9061668f"
name = "github.com/deislabs/oras" name = "github.com/deislabs/oras"
packages = [ packages = [
"pkg/auth", "pkg/auth",
"pkg/auth/docker", "pkg/auth/docker",
"pkg/content", "pkg/content",
"pkg/context",
"pkg/oras", "pkg/oras",
] ]
pruneopts = "UT" pruneopts = "UT"
@ -891,12 +892,12 @@
version = "v1.5.2" version = "v1.5.2"
[[projects]] [[projects]]
digest = "1:69b1cc331fca23d702bd72f860c6a647afd0aa9fcbc1d0659b1365e26546dd70" digest = "1:fd61cf4ae1953d55df708acb6b91492d538f49c305b364a014049914495db426"
name = "github.com/sirupsen/logrus" name = "github.com/sirupsen/logrus"
packages = ["."] packages = ["."]
pruneopts = "UT" pruneopts = "UT"
revision = "bcd833dfe83d3cebad139e4a29ed79cb2318bf95" revision = "8bdbc7bcc01dcbb8ec23dc8a28e332258d25251f"
version = "v1.2.0" version = "v1.4.1"
[[projects]] [[projects]]
digest = "1:e01b05ba901239c783dfe56450bcde607fc858908529868259c9a8765dc176d0" digest = "1:e01b05ba901239c783dfe56450bcde607fc858908529868259c9a8765dc176d0"
@ -1404,90 +1405,51 @@
revision = "44a48934c135b31e4f1c0d12e91d384e1cb2304c" revision = "44a48934c135b31e4f1c0d12e91d384e1cb2304c"
[[projects]] [[projects]]
digest = "1:fe724e5bfc9e388624ccf76b77051c0c7da8695a264b3ab4103de270a8965b18" digest = "1:1ac7533fe6c10c68cb17d26bd44975d582cbe4dee89fd0e095d3133c7680416b"
name = "k8s.io/client-go" name = "k8s.io/client-go"
packages = [ packages = [
"discovery", "discovery",
"discovery/cached/disk", "discovery/cached/disk",
"discovery/cached/memory",
"discovery/fake",
"dynamic", "dynamic",
"dynamic/fake", "dynamic/fake",
"kubernetes", "kubernetes",
"kubernetes/fake",
"kubernetes/scheme", "kubernetes/scheme",
"kubernetes/typed/admissionregistration/v1beta1", "kubernetes/typed/admissionregistration/v1beta1",
"kubernetes/typed/admissionregistration/v1beta1/fake",
"kubernetes/typed/apps/v1", "kubernetes/typed/apps/v1",
"kubernetes/typed/apps/v1/fake",
"kubernetes/typed/apps/v1beta1", "kubernetes/typed/apps/v1beta1",
"kubernetes/typed/apps/v1beta1/fake",
"kubernetes/typed/apps/v1beta2", "kubernetes/typed/apps/v1beta2",
"kubernetes/typed/apps/v1beta2/fake",
"kubernetes/typed/auditregistration/v1alpha1", "kubernetes/typed/auditregistration/v1alpha1",
"kubernetes/typed/auditregistration/v1alpha1/fake",
"kubernetes/typed/authentication/v1", "kubernetes/typed/authentication/v1",
"kubernetes/typed/authentication/v1/fake",
"kubernetes/typed/authentication/v1beta1", "kubernetes/typed/authentication/v1beta1",
"kubernetes/typed/authentication/v1beta1/fake",
"kubernetes/typed/authorization/v1", "kubernetes/typed/authorization/v1",
"kubernetes/typed/authorization/v1/fake",
"kubernetes/typed/authorization/v1beta1", "kubernetes/typed/authorization/v1beta1",
"kubernetes/typed/authorization/v1beta1/fake",
"kubernetes/typed/autoscaling/v1", "kubernetes/typed/autoscaling/v1",
"kubernetes/typed/autoscaling/v1/fake",
"kubernetes/typed/autoscaling/v2beta1", "kubernetes/typed/autoscaling/v2beta1",
"kubernetes/typed/autoscaling/v2beta1/fake",
"kubernetes/typed/autoscaling/v2beta2", "kubernetes/typed/autoscaling/v2beta2",
"kubernetes/typed/autoscaling/v2beta2/fake",
"kubernetes/typed/batch/v1", "kubernetes/typed/batch/v1",
"kubernetes/typed/batch/v1/fake",
"kubernetes/typed/batch/v1beta1", "kubernetes/typed/batch/v1beta1",
"kubernetes/typed/batch/v1beta1/fake",
"kubernetes/typed/batch/v2alpha1", "kubernetes/typed/batch/v2alpha1",
"kubernetes/typed/batch/v2alpha1/fake",
"kubernetes/typed/certificates/v1beta1", "kubernetes/typed/certificates/v1beta1",
"kubernetes/typed/certificates/v1beta1/fake",
"kubernetes/typed/coordination/v1", "kubernetes/typed/coordination/v1",
"kubernetes/typed/coordination/v1/fake",
"kubernetes/typed/coordination/v1beta1", "kubernetes/typed/coordination/v1beta1",
"kubernetes/typed/coordination/v1beta1/fake",
"kubernetes/typed/core/v1", "kubernetes/typed/core/v1",
"kubernetes/typed/core/v1/fake",
"kubernetes/typed/events/v1beta1", "kubernetes/typed/events/v1beta1",
"kubernetes/typed/events/v1beta1/fake",
"kubernetes/typed/extensions/v1beta1", "kubernetes/typed/extensions/v1beta1",
"kubernetes/typed/extensions/v1beta1/fake",
"kubernetes/typed/networking/v1", "kubernetes/typed/networking/v1",
"kubernetes/typed/networking/v1/fake",
"kubernetes/typed/networking/v1beta1", "kubernetes/typed/networking/v1beta1",
"kubernetes/typed/networking/v1beta1/fake",
"kubernetes/typed/node/v1alpha1", "kubernetes/typed/node/v1alpha1",
"kubernetes/typed/node/v1alpha1/fake",
"kubernetes/typed/node/v1beta1", "kubernetes/typed/node/v1beta1",
"kubernetes/typed/node/v1beta1/fake",
"kubernetes/typed/policy/v1beta1", "kubernetes/typed/policy/v1beta1",
"kubernetes/typed/policy/v1beta1/fake",
"kubernetes/typed/rbac/v1", "kubernetes/typed/rbac/v1",
"kubernetes/typed/rbac/v1/fake",
"kubernetes/typed/rbac/v1alpha1", "kubernetes/typed/rbac/v1alpha1",
"kubernetes/typed/rbac/v1alpha1/fake",
"kubernetes/typed/rbac/v1beta1", "kubernetes/typed/rbac/v1beta1",
"kubernetes/typed/rbac/v1beta1/fake",
"kubernetes/typed/scheduling/v1", "kubernetes/typed/scheduling/v1",
"kubernetes/typed/scheduling/v1/fake",
"kubernetes/typed/scheduling/v1alpha1", "kubernetes/typed/scheduling/v1alpha1",
"kubernetes/typed/scheduling/v1alpha1/fake",
"kubernetes/typed/scheduling/v1beta1", "kubernetes/typed/scheduling/v1beta1",
"kubernetes/typed/scheduling/v1beta1/fake",
"kubernetes/typed/settings/v1alpha1", "kubernetes/typed/settings/v1alpha1",
"kubernetes/typed/settings/v1alpha1/fake",
"kubernetes/typed/storage/v1", "kubernetes/typed/storage/v1",
"kubernetes/typed/storage/v1/fake",
"kubernetes/typed/storage/v1alpha1", "kubernetes/typed/storage/v1alpha1",
"kubernetes/typed/storage/v1alpha1/fake",
"kubernetes/typed/storage/v1beta1", "kubernetes/typed/storage/v1beta1",
"kubernetes/typed/storage/v1beta1/fake",
"pkg/apis/clientauthentication", "pkg/apis/clientauthentication",
"pkg/apis/clientauthentication/v1alpha1", "pkg/apis/clientauthentication/v1alpha1",
"pkg/apis/clientauthentication/v1beta1", "pkg/apis/clientauthentication/v1beta1",
@ -1780,6 +1742,7 @@
"github.com/deislabs/oras/pkg/auth", "github.com/deislabs/oras/pkg/auth",
"github.com/deislabs/oras/pkg/auth/docker", "github.com/deislabs/oras/pkg/auth/docker",
"github.com/deislabs/oras/pkg/content", "github.com/deislabs/oras/pkg/content",
"github.com/deislabs/oras/pkg/context",
"github.com/deislabs/oras/pkg/oras", "github.com/deislabs/oras/pkg/oras",
"github.com/docker/distribution/configuration", "github.com/docker/distribution/configuration",
"github.com/docker/distribution/registry", "github.com/docker/distribution/registry",
@ -1796,6 +1759,7 @@
"github.com/opencontainers/go-digest", "github.com/opencontainers/go-digest",
"github.com/opencontainers/image-spec/specs-go/v1", "github.com/opencontainers/image-spec/specs-go/v1",
"github.com/pkg/errors", "github.com/pkg/errors",
"github.com/sirupsen/logrus",
"github.com/spf13/cobra", "github.com/spf13/cobra",
"github.com/spf13/cobra/doc", "github.com/spf13/cobra/doc",
"github.com/spf13/pflag", "github.com/spf13/pflag",
@ -1827,17 +1791,15 @@
"k8s.io/apimachinery/pkg/util/strategicpatch", "k8s.io/apimachinery/pkg/util/strategicpatch",
"k8s.io/apimachinery/pkg/util/validation", "k8s.io/apimachinery/pkg/util/validation",
"k8s.io/apimachinery/pkg/util/wait", "k8s.io/apimachinery/pkg/util/wait",
"k8s.io/apimachinery/pkg/version",
"k8s.io/apimachinery/pkg/watch", "k8s.io/apimachinery/pkg/watch",
"k8s.io/cli-runtime/pkg/genericclioptions", "k8s.io/cli-runtime/pkg/genericclioptions",
"k8s.io/cli-runtime/pkg/resource", "k8s.io/cli-runtime/pkg/resource",
"k8s.io/client-go/discovery", "k8s.io/client-go/discovery",
"k8s.io/client-go/discovery/cached/memory",
"k8s.io/client-go/kubernetes", "k8s.io/client-go/kubernetes",
"k8s.io/client-go/kubernetes/fake",
"k8s.io/client-go/kubernetes/scheme", "k8s.io/client-go/kubernetes/scheme",
"k8s.io/client-go/kubernetes/typed/core/v1", "k8s.io/client-go/kubernetes/typed/core/v1",
"k8s.io/client-go/plugin/pkg/client/auth", "k8s.io/client-go/plugin/pkg/client/auth",
"k8s.io/client-go/rest",
"k8s.io/client-go/rest/fake", "k8s.io/client-go/rest/fake",
"k8s.io/client-go/tools/clientcmd", "k8s.io/client-go/tools/clientcmd",
"k8s.io/client-go/tools/watch", "k8s.io/client-go/tools/watch",

@ -46,6 +46,10 @@
name = "github.com/deislabs/oras" name = "github.com/deislabs/oras"
version = "0.4.0" version = "0.4.0"
[[constraint]]
name = "github.com/sirupsen/logrus"
version = "1.3.0"
[[constraint]] [[constraint]]
name = "github.com/docker/go-units" name = "github.com/docker/go-units"
version = "~0.3.3" version = "~0.3.3"

@ -81,6 +81,7 @@ func newRootCmd(actionConfig *action.Configuration, out io.Writer, args []string
panic(err) panic(err)
} }
actionConfig.RegistryClient = registry.NewClient(&registry.ClientOptions{ actionConfig.RegistryClient = registry.NewClient(&registry.ClientOptions{
Debug: settings.Debug,
Out: out, Out: out,
Authorizer: registry.Authorizer{ Authorizer: registry.Authorizer{
Client: client, Client: client,

@ -22,8 +22,10 @@ import (
"io" "io"
orascontent "github.com/deislabs/oras/pkg/content" orascontent "github.com/deislabs/oras/pkg/content"
orascontext "github.com/deislabs/oras/pkg/context"
"github.com/deislabs/oras/pkg/oras" "github.com/deislabs/oras/pkg/oras"
"github.com/gosuri/uitable" "github.com/gosuri/uitable"
"github.com/sirupsen/logrus"
"helm.sh/helm/pkg/chart" "helm.sh/helm/pkg/chart"
) )
@ -35,6 +37,7 @@ const (
type ( type (
// ClientOptions is used to construct a new client // ClientOptions is used to construct a new client
ClientOptions struct { ClientOptions struct {
Debug bool
Out io.Writer Out io.Writer
Authorizer Authorizer Authorizer Authorizer
Resolver Resolver Resolver Resolver
@ -43,6 +46,7 @@ type (
// Client works with OCI-compliant registries and local Helm chart cache // Client works with OCI-compliant registries and local Helm chart cache
Client struct { Client struct {
debug bool
out io.Writer out io.Writer
authorizer Authorizer authorizer Authorizer
resolver Resolver resolver Resolver
@ -53,6 +57,7 @@ type (
// NewClient returns a new registry client with config // NewClient returns a new registry client with config
func NewClient(options *ClientOptions) *Client { func NewClient(options *ClientOptions) *Client {
return &Client{ return &Client{
debug: options.Debug,
out: options.Out, out: options.Out,
resolver: options.Resolver, resolver: options.Resolver,
authorizer: options.Authorizer, authorizer: options.Authorizer,
@ -66,7 +71,7 @@ func NewClient(options *ClientOptions) *Client {
// Login logs into a registry // Login logs into a registry
func (c *Client) Login(hostname string, username string, password string) error { func (c *Client) Login(hostname string, username string, password string) error {
err := c.authorizer.Login(context.Background(), hostname, username, password) err := c.authorizer.Login(c.newContext(), hostname, username, password)
if err != nil { if err != nil {
return err return err
} }
@ -76,7 +81,7 @@ func (c *Client) Login(hostname string, username string, password string) error
// Logout logs out of a registry // Logout logs out of a registry
func (c *Client) Logout(hostname string) error { func (c *Client) Logout(hostname string) error {
err := c.authorizer.Logout(context.Background(), hostname) err := c.authorizer.Logout(c.newContext(), hostname)
if err != nil { if err != nil {
return err return err
} }
@ -92,7 +97,7 @@ func (c *Client) PushChart(ref *Reference) error {
if err != nil { if err != nil {
return err return err
} }
_, err = oras.Push(context.Background(), c.resolver, ref.String(), c.cache.store, layers) _, err = oras.Push(c.newContext(), c.resolver, ref.String(), c.cache.store, layers)
if err != nil { if err != nil {
return err return err
} }
@ -109,7 +114,7 @@ func (c *Client) PushChart(ref *Reference) error {
func (c *Client) PullChart(ref *Reference) error { func (c *Client) PullChart(ref *Reference) error {
c.setDefaultTag(ref) c.setDefaultTag(ref)
fmt.Fprintf(c.out, "%s: Pulling from %s\n", ref.Tag, ref.Repo) fmt.Fprintf(c.out, "%s: Pulling from %s\n", ref.Tag, ref.Repo)
_, layers, err := oras.Pull(context.Background(), c.resolver, ref.String(), c.cache.store, oras.WithAllowedMediaTypes(KnownMediaTypes())) _, layers, err := oras.Pull(c.newContext(), c.resolver, ref.String(), c.cache.store, oras.WithAllowedMediaTypes(KnownMediaTypes()))
if err != nil { if err != nil {
return err return err
} }
@ -184,3 +189,13 @@ func (c *Client) setDefaultTag(ref *Reference) {
fmt.Fprintf(c.out, "Using default tag: %s\n", HelmChartDefaultTag) fmt.Fprintf(c.out, "Using default tag: %s\n", HelmChartDefaultTag)
} }
} }
// disable verbose logging coming from ORAS unless debug is enabled
func (c *Client) newContext() context.Context {
if !c.debug {
return orascontext.Background()
}
ctx := orascontext.WithLoggerFromWriter(context.Background(), c.out)
orascontext.GetLogger(ctx).Logger.SetLevel(logrus.DebugLevel)
return ctx
}

@ -71,6 +71,7 @@ func (suite *RegistryClientTestSuite) SetupSuite() {
// Init test client // Init test client
suite.RegistryClient = NewClient(&ClientOptions{ suite.RegistryClient = NewClient(&ClientOptions{
Debug: false,
Out: suite.Out, Out: suite.Out,
Authorizer: Authorizer{ Authorizer: Authorizer{
Client: client, Client: client,

Loading…
Cancel
Save