From 0c4d8b80bfaac82b2b77a476b1289d221b94ef46 Mon Sep 17 00:00:00 2001 From: Ruslan Aliev Date: Thu, 27 May 2021 09:54:41 -0500 Subject: [PATCH] Allow to configure timeout for k8s client It would be helpful to have a possibility to configure Timeout field, as well as others allowed. Change-Id: I1e0e895b7ca6a17e86a6ad36f405e2538775cbbb Closes: #553 Signed-off-by: Ruslan Aliev --- pkg/k8s/utils/utils.go | 16 +++++++++++++++- pkg/k8s/utils/utils_test.go | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/k8s/utils/utils.go b/pkg/k8s/utils/utils.go index 70da642f5..f90cc9250 100644 --- a/pkg/k8s/utils/utils.go +++ b/pkg/k8s/utils/utils.go @@ -30,12 +30,26 @@ import ( "opendev.org/airship/airshipctl/pkg/document" ) +// ClientOption is a function that allows to modify ConfigFlags object which is used to create Client +type ClientOption func(*genericclioptions.ConfigFlags) + +// SetTimeout sets Timeout option in ConfigFlags object +func SetTimeout(timeout string) ClientOption { + return func(co *genericclioptions.ConfigFlags) { + *co.Timeout = timeout + } +} + // FactoryFromKubeConfig returns a factory with the // default Kubernetes resources for the given kube config path and context -func FactoryFromKubeConfig(path, context string) cmdutil.Factory { +func FactoryFromKubeConfig(path, context string, opts ...ClientOption) cmdutil.Factory { kf := genericclioptions.NewConfigFlags(false) kf.KubeConfig = &path kf.Context = &context + for _, o := range opts { + o(kf) + } + return cmdutil.NewFactory(cmdutil.NewMatchVersionFlags(&factory.CachingRESTClientGetter{ Delegate: kf, })) diff --git a/pkg/k8s/utils/utils_test.go b/pkg/k8s/utils/utils_test.go index 30cb0585c..22ae19917 100644 --- a/pkg/k8s/utils/utils_test.go +++ b/pkg/k8s/utils/utils_test.go @@ -29,7 +29,7 @@ import ( func TestDefaultManifestFactory(t *testing.T) { bundle, err := document.NewBundleByPath("testdata/source_bundle") require.NoError(t, err) - mapper, err := FactoryFromKubeConfig("testdata/kubeconfig.yaml", "").ToRESTMapper() + mapper, err := FactoryFromKubeConfig("testdata/kubeconfig.yaml", "", SetTimeout("30s")).ToRESTMapper() require.NoError(t, err) reader := DefaultManifestReaderFactory(false, bundle, mapper) require.NotNil(t, reader)