From cca333d1db052fe2c6f1089da4ccb898e9c4ef95 Mon Sep 17 00:00:00 2001 From: Richard Wall Date: Wed, 20 Mar 2024 11:35:10 +0000 Subject: [PATCH] Supply User-Agent string to the Venafi controllers Signed-off-by: Richard Wall --- .../certificaterequests/venafi/venafi.go | 6 ++++- .../certificaterequests/venafi/venafi_test.go | 2 +- .../venafi/venafi.go | 6 ++++- .../venafi/venafi_test.go | 24 +++++++++---------- pkg/issuer/venafi/client/venaficlient.go | 10 ++++---- pkg/issuer/venafi/client/venaficlient_test.go | 2 +- pkg/issuer/venafi/setup.go | 2 +- pkg/issuer/venafi/setup_test.go | 10 ++++---- pkg/issuer/venafi/venafi.go | 4 ++++ 9 files changed, 39 insertions(+), 27 deletions(-) diff --git a/pkg/controller/certificaterequests/venafi/venafi.go b/pkg/controller/certificaterequests/venafi/venafi.go index d75537fa3..657ba6a34 100644 --- a/pkg/controller/certificaterequests/venafi/venafi.go +++ b/pkg/controller/certificaterequests/venafi/venafi.go @@ -54,6 +54,9 @@ type Venafi struct { clientBuilder venaficlient.VenafiClientBuilder metrics *metrics.Metrics + + // userAgent is the string used as the UserAgent when making HTTP calls. + userAgent string } func init() { @@ -73,6 +76,7 @@ func NewVenafi(ctx *controllerpkg.Context) certificaterequests.Issuer { clientBuilder: venaficlient.New, metrics: ctx.Metrics, cmClient: ctx.CMClient, + userAgent: ctx.RESTConfig.UserAgent, } } @@ -80,7 +84,7 @@ func (v *Venafi) Sign(ctx context.Context, cr *cmapi.CertificateRequest, issuerO log := logf.FromContext(ctx, "sign") log = logf.WithRelatedResource(log, issuerObj) - client, err := v.clientBuilder(v.issuerOptions.ResourceNamespace(issuerObj), v.secretsLister, issuerObj, v.metrics, log) + client, err := v.clientBuilder(v.issuerOptions.ResourceNamespace(issuerObj), v.secretsLister, issuerObj, v.metrics, log, v.userAgent) if k8sErrors.IsNotFound(err) { message := "Required secret resource not found" diff --git a/pkg/controller/certificaterequests/venafi/venafi_test.go b/pkg/controller/certificaterequests/venafi/venafi_test.go index 2fc7dee6e..ccee780f2 100644 --- a/pkg/controller/certificaterequests/venafi/venafi_test.go +++ b/pkg/controller/certificaterequests/venafi/venafi_test.go @@ -824,7 +824,7 @@ func runTest(t *testing.T, test testT) { if test.fakeClient != nil { v.clientBuilder = func(namespace string, secretsLister internalinformers.SecretLister, - issuer cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (client.Interface, error) { + issuer cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (client.Interface, error) { return test.fakeClient, nil } } diff --git a/pkg/controller/certificatesigningrequests/venafi/venafi.go b/pkg/controller/certificatesigningrequests/venafi/venafi.go index fa7ce524e..282399ffe 100644 --- a/pkg/controller/certificatesigningrequests/venafi/venafi.go +++ b/pkg/controller/certificatesigningrequests/venafi/venafi.go @@ -63,6 +63,9 @@ type Venafi struct { // fieldManager is the manager name used for the Apply operations. fieldManager string + + // userAgent is the string used as the UserAgent when making HTTP calls. + userAgent string } func init() { @@ -82,6 +85,7 @@ func NewVenafi(ctx *controllerpkg.Context) certificatesigningrequests.Signer { clientBuilder: venaficlient.New, fieldManager: ctx.FieldManager, metrics: ctx.Metrics, + userAgent: ctx.RESTConfig.UserAgent, } } @@ -99,7 +103,7 @@ func (v *Venafi) Sign(ctx context.Context, csr *certificatesv1.CertificateSignin resourceNamespace := v.issuerOptions.ResourceNamespace(issuerObj) - client, err := v.clientBuilder(resourceNamespace, v.secretsLister, issuerObj, v.metrics, log) + client, err := v.clientBuilder(resourceNamespace, v.secretsLister, issuerObj, v.metrics, log, v.userAgent) if apierrors.IsNotFound(err) { message := "Required secret resource not found" v.recorder.Event(csr, corev1.EventTypeWarning, "SecretNotFound", message) diff --git a/pkg/controller/certificatesigningrequests/venafi/venafi_test.go b/pkg/controller/certificatesigningrequests/venafi/venafi_test.go index b9f7016c4..534836fbe 100644 --- a/pkg/controller/certificatesigningrequests/venafi/venafi_test.go +++ b/pkg/controller/certificatesigningrequests/venafi/venafi_test.go @@ -164,7 +164,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return nil, apierrors.NewNotFound(schema.GroupResource{}, "test-secret") }, builder: &testpkg.Builder{ @@ -206,7 +206,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return nil, errors.New("generic error") }, expectedErr: true, @@ -252,7 +252,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{}, nil }, builder: &testpkg.Builder{ @@ -320,7 +320,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{}, nil }, builder: &testpkg.Builder{ @@ -388,7 +388,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RequestCertificateFn: func(_ []byte, _ time.Duration, _ []venafiapi.CustomField) (string, error) { return "", venaficlient.ErrCustomFieldsType{Type: "test-type"} @@ -459,7 +459,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RequestCertificateFn: func(_ []byte, _ time.Duration, _ []venafiapi.CustomField) (string, error) { return "", errors.New("generic error") @@ -530,7 +530,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RequestCertificateFn: func(_ []byte, _ time.Duration, _ []venafiapi.CustomField) (string, error) { return "test-pickup-id", nil @@ -592,7 +592,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RetrieveCertificateFn: func(_ string, _ []byte, _ time.Duration, _ []venafiapi.CustomField) ([]byte, error) { return nil, endpoint.ErrCertificatePending{} @@ -643,7 +643,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RetrieveCertificateFn: func(_ string, _ []byte, _ time.Duration, _ []venafiapi.CustomField) ([]byte, error) { return nil, endpoint.ErrRetrieveCertificateTimeout{} @@ -694,7 +694,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RetrieveCertificateFn: func(_ string, _ []byte, _ time.Duration, _ []venafiapi.CustomField) ([]byte, error) { return nil, errors.New("generic error") @@ -745,7 +745,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RetrieveCertificateFn: func(_ string, _ []byte, _ time.Duration, _ []venafiapi.CustomField) ([]byte, error) { return []byte("garbage"), nil @@ -818,7 +818,7 @@ func TestProcessItem(t *testing.T) { Status: corev1.ConditionTrue, }), ), - clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger) (venaficlient.Interface, error) { + clientBuilder: func(_ string, _ internalinformers.SecretLister, _ cmapi.GenericIssuer, _ *metrics.Metrics, _ logr.Logger, _ string) (venaficlient.Interface, error) { return &fakevenaficlient.Venafi{ RetrieveCertificateFn: func(_ string, _ []byte, _ time.Duration, _ []venafiapi.CustomField) ([]byte, error) { return []byte(fmt.Sprintf("%s%s", certBundle.ChainPEM, certBundle.CAPEM)), nil diff --git a/pkg/issuer/venafi/client/venaficlient.go b/pkg/issuer/venafi/client/venaficlient.go index acfad2f31..d53bdbcb6 100644 --- a/pkg/issuer/venafi/client/venaficlient.go +++ b/pkg/issuer/venafi/client/venaficlient.go @@ -47,7 +47,7 @@ const ( ) type VenafiClientBuilder func(namespace string, secretsLister internalinformers.SecretLister, - issuer cmapi.GenericIssuer, metrics *metrics.Metrics, logger logr.Logger) (Interface, error) + issuer cmapi.GenericIssuer, metrics *metrics.Metrics, logger logr.Logger, userAgent string) (Interface, error) // Interface implements a Venafi client type Interface interface { @@ -86,8 +86,8 @@ type connector interface { // New constructs a Venafi client Interface. Errors may be network errors and // should be considered for retrying. -func New(namespace string, secretsLister internalinformers.SecretLister, issuer cmapi.GenericIssuer, metrics *metrics.Metrics, logger logr.Logger) (Interface, error) { - cfg, err := configForIssuer(issuer, secretsLister, namespace) +func New(namespace string, secretsLister internalinformers.SecretLister, issuer cmapi.GenericIssuer, metrics *metrics.Metrics, logger logr.Logger, userAgent string) (Interface, error) { + cfg, err := configForIssuer(issuer, secretsLister, namespace, userAgent) if err != nil { return nil, err } @@ -127,7 +127,7 @@ func New(namespace string, secretsLister internalinformers.SecretLister, issuer // configForIssuer will convert a cert-manager Venafi issuer into a vcert.Config // that can be used to instantiate an API client. -func configForIssuer(iss cmapi.GenericIssuer, secretsLister internalinformers.SecretLister, namespace string) (*vcert.Config, error) { +func configForIssuer(iss cmapi.GenericIssuer, secretsLister internalinformers.SecretLister, namespace string, userAgent string) (*vcert.Config, error) { venCfg := iss.GetSpec().Venafi var vcertConfig *vcert.Config @@ -195,7 +195,7 @@ func configForIssuer(iss cmapi.GenericIssuer, secretsLister internalinformers.Se } // Set the user-agent header - vcertConfig.Client.Transport = util.UserAgentRoundTripper(vcertConfig.Client.Transport, "cert-manager/v0.0.0") + vcertConfig.Client.Transport = util.UserAgentRoundTripper(vcertConfig.Client.Transport, userAgent) return vcertConfig, nil diff --git a/pkg/issuer/venafi/client/venaficlient_test.go b/pkg/issuer/venafi/client/venaficlient_test.go index 1fe8e72fe..9a44ea042 100644 --- a/pkg/issuer/venafi/client/venaficlient_test.go +++ b/pkg/issuer/venafi/client/venaficlient_test.go @@ -223,7 +223,7 @@ type testConfigForIssuerT struct { } func (c *testConfigForIssuerT) runTest(t *testing.T) { - resp, err := configForIssuer(c.iss, c.secretsLister, "test-namespace") + resp, err := configForIssuer(c.iss, c.secretsLister, "test-namespace", "cert-manager/v0.0.0") if err != nil && !c.expectedErr { t.Errorf("expected to not get an error, but got: %v", err) } diff --git a/pkg/issuer/venafi/setup.go b/pkg/issuer/venafi/setup.go index cbdc72ba5..1e92cbc8c 100644 --- a/pkg/issuer/venafi/setup.go +++ b/pkg/issuer/venafi/setup.go @@ -38,7 +38,7 @@ func (v *Venafi) Setup(ctx context.Context) (err error) { } }() - client, err := v.clientBuilder(v.resourceNamespace, v.secretsLister, v.issuer, v.Metrics, v.log) + client, err := v.clientBuilder(v.resourceNamespace, v.secretsLister, v.issuer, v.Metrics, v.log, v.userAgent) if err != nil { return fmt.Errorf("error building client: %v", err) } diff --git a/pkg/issuer/venafi/setup_test.go b/pkg/issuer/venafi/setup_test.go index 681d7ed25..a8ee70d95 100644 --- a/pkg/issuer/venafi/setup_test.go +++ b/pkg/issuer/venafi/setup_test.go @@ -41,12 +41,12 @@ func TestSetup(t *testing.T) { baseIssuer := gen.Issuer("test-issuer") failingClientBuilder := func(string, internalinformers.SecretLister, - cmapi.GenericIssuer, *metrics.Metrics, logr.Logger) (client.Interface, error) { + cmapi.GenericIssuer, *metrics.Metrics, logr.Logger, string) (client.Interface, error) { return nil, errors.New("this is an error") } failingPingClient := func(string, internalinformers.SecretLister, - cmapi.GenericIssuer, *metrics.Metrics, logr.Logger) (client.Interface, error) { + cmapi.GenericIssuer, *metrics.Metrics, logr.Logger, string) (client.Interface, error) { return &internalvenafifake.Venafi{ PingFn: func() error { return errors.New("this is a ping error") @@ -55,7 +55,7 @@ func TestSetup(t *testing.T) { } pingClient := func(string, internalinformers.SecretLister, - cmapi.GenericIssuer, *metrics.Metrics, logr.Logger) (client.Interface, error) { + cmapi.GenericIssuer, *metrics.Metrics, logr.Logger, string) (client.Interface, error) { return &internalvenafifake.Venafi{ PingFn: func() error { return nil @@ -63,7 +63,7 @@ func TestSetup(t *testing.T) { }, nil } - verifyCredentialsClient := func(string, internalinformers.SecretLister, cmapi.GenericIssuer, *metrics.Metrics, logr.Logger) (client.Interface, error) { + verifyCredentialsClient := func(string, internalinformers.SecretLister, cmapi.GenericIssuer, *metrics.Metrics, logr.Logger, string) (client.Interface, error) { return &internalvenafifake.Venafi{ PingFn: func() error { return nil @@ -74,7 +74,7 @@ func TestSetup(t *testing.T) { }, nil } - failingVerifyCredentialsClient := func(string, internalinformers.SecretLister, cmapi.GenericIssuer, *metrics.Metrics, logr.Logger) (client.Interface, error) { + failingVerifyCredentialsClient := func(string, internalinformers.SecretLister, cmapi.GenericIssuer, *metrics.Metrics, logr.Logger, string) (client.Interface, error) { return &internalvenafifake.Venafi{ PingFn: func() error { return nil diff --git a/pkg/issuer/venafi/venafi.go b/pkg/issuer/venafi/venafi.go index d18fbe189..7fba4cfee 100644 --- a/pkg/issuer/venafi/venafi.go +++ b/pkg/issuer/venafi/venafi.go @@ -43,6 +43,9 @@ type Venafi struct { clientBuilder client.VenafiClientBuilder log logr.Logger + + // userAgent is the string used as the UserAgent when making HTTP calls. + userAgent string } func NewVenafi(ctx *controller.Context, issuer cmapi.GenericIssuer) (issuer.Interface, error) { @@ -53,6 +56,7 @@ func NewVenafi(ctx *controller.Context, issuer cmapi.GenericIssuer) (issuer.Inte clientBuilder: client.New, Context: ctx, log: logf.Log.WithName("venafi"), + userAgent: ctx.RESTConfig.UserAgent, }, nil }