diff --git a/pkg/app/piped/cloudprovider/kubernetes/applier.go b/pkg/app/piped/cloudprovider/kubernetes/applier.go index b4a37df32c..c6bce4d2c0 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/applier.go +++ b/pkg/app/piped/cloudprovider/kubernetes/applier.go @@ -38,18 +38,20 @@ type Applier interface { } type applier struct { - input config.KubernetesDeploymentInput - logger *zap.Logger + input config.KubernetesDeploymentInput + cloudProvider config.CloudProviderKubernetesConfig + logger *zap.Logger kubectl *Kubectl initOnce sync.Once initErr error } -func NewApplier(input config.KubernetesDeploymentInput, logger *zap.Logger) Applier { +func NewApplier(input config.KubernetesDeploymentInput, cp config.CloudProviderKubernetesConfig, logger *zap.Logger) Applier { return &applier{ - input: input, - logger: logger.Named("kubernetes-applier"), + input: input, + cloudProvider: cp, + logger: logger.Named("kubernetes-applier"), } } @@ -62,7 +64,12 @@ func (a *applier) ApplyManifest(ctx context.Context, manifest Manifest) error { return a.initErr } - return a.kubectl.Apply(ctx, a.getNamespaceToRun(manifest.Key), manifest) + return a.kubectl.Apply( + ctx, + a.cloudProvider.KubeConfigPath, + a.getNamespaceToRun(manifest.Key), + manifest, + ) } // CreateManifest uses kubectl to create the given manifests. @@ -74,7 +81,12 @@ func (a *applier) CreateManifest(ctx context.Context, manifest Manifest) error { return a.initErr } - return a.kubectl.Create(ctx, a.getNamespaceToRun(manifest.Key), manifest) + return a.kubectl.Create( + ctx, + a.cloudProvider.KubeConfigPath, + a.getNamespaceToRun(manifest.Key), + manifest, + ) } // ReplaceManifest uses kubectl to replace the given manifests. @@ -86,7 +98,12 @@ func (a *applier) ReplaceManifest(ctx context.Context, manifest Manifest) error return a.initErr } - err := a.kubectl.Replace(ctx, a.getNamespaceToRun(manifest.Key), manifest) + err := a.kubectl.Replace( + ctx, + a.cloudProvider.KubeConfigPath, + a.getNamespaceToRun(manifest.Key), + manifest, + ) if err == nil { return nil } @@ -107,7 +124,12 @@ func (a *applier) Delete(ctx context.Context, k ResourceKey) (err error) { return a.initErr } - return a.kubectl.Delete(ctx, a.getNamespaceToRun(k), k) + return a.kubectl.Delete( + ctx, + a.cloudProvider.KubeConfigPath, + a.getNamespaceToRun(k), + k, + ) } // getNamespaceToRun returns namespace used on kubectl apply/delete commands. diff --git a/pkg/app/piped/cloudprovider/kubernetes/kubectl.go b/pkg/app/piped/cloudprovider/kubernetes/kubectl.go index 4717b8648e..1911795cbe 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/kubectl.go +++ b/pkg/app/piped/cloudprovider/kubernetes/kubectl.go @@ -45,7 +45,7 @@ func NewKubectl(version, path string) *Kubectl { } } -func (c *Kubectl) Apply(ctx context.Context, namespace string, manifest Manifest) (err error) { +func (c *Kubectl) Apply(ctx context.Context, kubeconfig, namespace string, manifest Manifest) (err error) { defer func() { kubernetesmetrics.IncKubectlCallsCounter( c.version, @@ -59,9 +59,12 @@ func (c *Kubectl) Apply(ctx context.Context, namespace string, manifest Manifest return err } - args := make([]string, 0, 5) + args := make([]string, 0, 7) + if kubeconfig != "" { + args = append(args, "--kubeconfig", kubeconfig) + } if namespace != "" { - args = append(args, "-n", namespace) + args = append(args, "--namespace", namespace) } args = append(args, "apply", "-f", "-") @@ -76,7 +79,7 @@ func (c *Kubectl) Apply(ctx context.Context, namespace string, manifest Manifest return nil } -func (c *Kubectl) Create(ctx context.Context, namespace string, manifest Manifest) (err error) { +func (c *Kubectl) Create(ctx context.Context, kubeconfig, namespace string, manifest Manifest) (err error) { defer func() { kubernetesmetrics.IncKubectlCallsCounter( c.version, @@ -90,9 +93,12 @@ func (c *Kubectl) Create(ctx context.Context, namespace string, manifest Manifes return err } - args := make([]string, 0, 5) + args := make([]string, 0, 7) + if kubeconfig != "" { + args = append(args, "--kubeconfig", kubeconfig) + } if namespace != "" { - args = append(args, "-n", namespace) + args = append(args, "--namespace", namespace) } args = append(args, "create", "-f", "-") @@ -107,7 +113,7 @@ func (c *Kubectl) Create(ctx context.Context, namespace string, manifest Manifes return nil } -func (c *Kubectl) Replace(ctx context.Context, namespace string, manifest Manifest) (err error) { +func (c *Kubectl) Replace(ctx context.Context, kubeconfig, namespace string, manifest Manifest) (err error) { defer func() { kubernetesmetrics.IncKubectlCallsCounter( c.version, @@ -121,9 +127,12 @@ func (c *Kubectl) Replace(ctx context.Context, namespace string, manifest Manife return err } - args := make([]string, 0, 5) + args := make([]string, 0, 7) + if kubeconfig != "" { + args = append(args, "--kubeconfig", kubeconfig) + } if namespace != "" { - args = append(args, "-n", namespace) + args = append(args, "--namespace", namespace) } args = append(args, "replace", "-f", "-") @@ -143,7 +152,7 @@ func (c *Kubectl) Replace(ctx context.Context, namespace string, manifest Manife return fmt.Errorf("failed to replace: %s (%w)", string(out), err) } -func (c *Kubectl) Delete(ctx context.Context, namespace string, r ResourceKey) (err error) { +func (c *Kubectl) Delete(ctx context.Context, kubeconfig, namespace string, r ResourceKey) (err error) { defer func() { kubernetesmetrics.IncKubectlCallsCounter( c.version, @@ -152,9 +161,12 @@ func (c *Kubectl) Delete(ctx context.Context, namespace string, r ResourceKey) ( ) }() - args := make([]string, 0, 5) + args := make([]string, 0, 7) + if kubeconfig != "" { + args = append(args, "--kubeconfig", kubeconfig) + } if namespace != "" { - args = append(args, "-n", namespace) + args = append(args, "--namespace", namespace) } args = append(args, "delete", r.Kind, r.Name) diff --git a/pkg/app/piped/executor/kubernetes/kubernetes.go b/pkg/app/piped/executor/kubernetes/kubernetes.go index 821a95218f..7ccde1a7b6 100644 --- a/pkg/app/piped/executor/kubernetes/kubernetes.go +++ b/pkg/app/piped/executor/kubernetes/kubernetes.go @@ -94,6 +94,12 @@ func (e *deployExecutor) Execute(sig executor.StopSignal) model.StageStatus { } } + cp, ok := e.PipedConfig.FindCloudProvider(e.Deployment.CloudProvider, model.ApplicationKind_KUBERNETES) + if !ok { + e.LogPersister.Errorf("Not found cloud provider %q", e.Deployment.CloudProvider) + return model.StageStatus_STAGE_FAILURE + } + e.loader = provider.NewLoader( e.Deployment.ApplicationName, ds.AppDir, @@ -105,6 +111,7 @@ func (e *deployExecutor) Execute(sig executor.StopSignal) model.StageStatus { ) e.applier = provider.NewApplier( e.appCfg.Input, + *cp.KubernetesConfig, e.Logger, ) e.Logger.Info("start executing kubernetes stage", diff --git a/pkg/app/piped/executor/kubernetes/rollback.go b/pkg/app/piped/executor/kubernetes/rollback.go index 1e0fa451a3..fd1edf025f 100644 --- a/pkg/app/piped/executor/kubernetes/rollback.go +++ b/pkg/app/piped/executor/kubernetes/rollback.go @@ -135,8 +135,15 @@ func (e *rollbackExecutor) ensureRollback(ctx context.Context) model.StageStatus return model.StageStatus_STAGE_FAILURE } + cp, ok := e.PipedConfig.FindCloudProvider(e.Deployment.CloudProvider, model.ApplicationKind_KUBERNETES) + if !ok { + e.LogPersister.Errorf("Not found cloud provider %q", e.Deployment.CloudProvider) + return model.StageStatus_STAGE_FAILURE + } + applier := provider.NewApplier( appCfg.Input, + *cp.KubernetesConfig, e.Logger, )