From b65379f92df708c223a272ae54947ba87c6d4998 Mon Sep 17 00:00:00 2001 From: khanhtc1202 Date: Fri, 24 Jan 2025 10:41:01 +0700 Subject: [PATCH] Remove PlatformProvider from pipedv1 config Signed-off-by: khanhtc1202 --- pkg/app/pipedv1/cmd/piped/piped.go | 40 +- pkg/configv1/piped.go | 184 ---------- pkg/configv1/piped_test.go | 341 ------------------ pkg/configv1/testdata/piped/piped-config.yaml | 42 --- 4 files changed, 13 insertions(+), 594 deletions(-) diff --git a/pkg/app/pipedv1/cmd/piped/piped.go b/pkg/app/pipedv1/cmd/piped/piped.go index 62ac99db63..12f3cfe7c5 100644 --- a/pkg/app/pipedv1/cmd/piped/piped.go +++ b/pkg/app/pipedv1/cmd/piped/piped.go @@ -89,17 +89,16 @@ type piped struct { configGCPSecret string configAWSSecret string - insecure bool - certFile string - adminPort int - pluginServicePort int - toolsDir string - pluginsDir string - enableDefaultKubernetesCloudProvider bool - gracePeriod time.Duration - addLoginUserToPasswd bool - launcherVersion string - maxRecvMsgSize int + insecure bool + certFile string + adminPort int + pluginServicePort int + toolsDir string + pluginsDir string + gracePeriod time.Duration + addLoginUserToPasswd bool + launcherVersion string + maxRecvMsgSize int } func NewCommand() *cobra.Command { @@ -132,7 +131,6 @@ func NewCommand() *cobra.Command { cmd.Flags().IntVar(&p.pluginServicePort, "plugin-service-port", p.pluginServicePort, "The port number used to run a gRPC server for plugin services.") cmd.Flags().StringVar(&p.toolsDir, "tools-dir", p.toolsDir, "The path to directory where to install needed tools such as kubectl, helm, kustomize.") - cmd.Flags().BoolVar(&p.enableDefaultKubernetesCloudProvider, "enable-default-kubernetes-cloud-provider", p.enableDefaultKubernetesCloudProvider, "Whether the default kubernetes provider is enabled or not. This feature is deprecated.") cmd.Flags().BoolVar(&p.addLoginUserToPasswd, "add-login-user-to-passwd", p.addLoginUserToPasswd, "Whether to add login user to $HOME/passwd. This is typically for applications running as a random user ID.") cmd.Flags().DurationVar(&p.gracePeriod, "grace-period", p.gracePeriod, "How long to wait for graceful shutdown.") @@ -607,9 +605,6 @@ func (p *piped) loadConfig(ctx context.Context) (*config.PipedSpec, error) { if cfg.Kind != config.KindPiped { return nil, fmt.Errorf("wrong configuration kind for piped: %v", cfg.Kind) } - if p.enableDefaultKubernetesCloudProvider { - cfg.Spec.EnableDefaultKubernetesPlatformProvider() - } return cfg.Spec, nil } @@ -744,18 +739,9 @@ func (p *piped) sendPipedMeta(ctx context.Context, client pipedservice.Client, c } req := &pipedservice.ReportPipedMetaRequest{ - Version: version.Get().Version, - Config: string(maskedCfg), - Repositories: repos, - PlatformProviders: make([]*model.Piped_PlatformProvider, 0, len(cfg.PlatformProviders)), - } - - // Configure the list of specified platform providers. - for _, cp := range cfg.PlatformProviders { - req.PlatformProviders = append(req.PlatformProviders, &model.Piped_PlatformProvider{ - Name: cp.Name, - Type: cp.Type.String(), - }) + Version: version.Get().Version, + Config: string(maskedCfg), + Repositories: repos, } // Configure secret management. diff --git a/pkg/configv1/piped.go b/pkg/configv1/piped.go index 27d971e1b7..7b6273c2cc 100644 --- a/pkg/configv1/piped.go +++ b/pkg/configv1/piped.go @@ -30,12 +30,6 @@ const ( maskString = "******" ) -var defaultKubernetesPlatformProvider = PipedPlatformProvider{ - Name: "kubernetes-default", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{}, -} - // PipedSpec contains configurable data used to while running Piped. type PipedSpec struct { // The identifier of the PipeCD project where this piped belongs to. @@ -66,11 +60,6 @@ type PipedSpec struct { ChartRepositories []HelmChartRepository `json:"chartRepositories,omitempty"` // List of helm chart registries that should be logged in while starting up. ChartRegistries []HelmChartRegistry `json:"chartRegistries,omitempty"` - // List of cloud providers can be used by this piped. - // Deprecated: use PlatformProvider instead. - CloudProviders []PipedPlatformProvider `json:"cloudProviders,omitempty"` - // List of platform providers can be used by this piped. - PlatformProviders []PipedPlatformProvider `json:"platformProviders,omitempty"` // List of plugiin configs Plugins []PipedPlugin `json:"plugins,omitempty"` // List of analysis providers can be used by this piped. @@ -96,9 +85,6 @@ func (s *PipedSpec) UnmarshalJSON(data []byte) error { return err } - // Add all CloudProviders configuration as PlatformProviders configuration. - s.PlatformProviders = append(s.PlatformProviders, ps.CloudProviders...) - s.CloudProviders = nil return nil } @@ -188,9 +174,6 @@ func (s *PipedSpec) Mask() { for i := 0; i < len(s.ChartRegistries); i++ { s.ChartRegistries[i].Mask() } - for _, p := range s.PlatformProviders { - p.Mask() - } for _, p := range s.AnalysisProviders { p.Mask() } @@ -200,67 +183,6 @@ func (s *PipedSpec) Mask() { } } -// EnableDefaultKubernetesPlatformProvider adds the default kubernetes cloud provider if it was not specified. -func (s *PipedSpec) EnableDefaultKubernetesPlatformProvider() { - for _, cp := range s.PlatformProviders { - if cp.Name == defaultKubernetesPlatformProvider.Name { - return - } - } - s.PlatformProviders = append(s.PlatformProviders, defaultKubernetesPlatformProvider) -} - -// HasPlatformProvider checks whether the given provider is configured or not. -func (s *PipedSpec) HasPlatformProvider(name string, t model.ApplicationKind) bool { - _, contains := s.FindPlatformProvider(name, t) - return contains -} - -// FindPlatformProvider finds and returns a Platform Provider by name and type. -func (s *PipedSpec) FindPlatformProvider(name string, t model.ApplicationKind) (PipedPlatformProvider, bool) { - requiredProviderType := t.CompatiblePlatformProviderType() - for _, p := range s.PlatformProviders { - if p.Name != name { - continue - } - if p.Type != requiredProviderType { - continue - } - return p, true - } - return PipedPlatformProvider{}, false -} - -// FindPlatformProvidersByLabels finds all PlatformProviders which match the provided labels. -func (s *PipedSpec) FindPlatformProvidersByLabels(labels map[string]string, t model.ApplicationKind) []PipedPlatformProvider { - requiredProviderType := t.CompatiblePlatformProviderType() - out := make([]PipedPlatformProvider, 0) - - labelMatch := func(providerLabels map[string]string) bool { - if len(providerLabels) < len(labels) { - return false - } - - for k, v := range labels { - if v != providerLabels[k] { - return false - } - } - return true - } - - for _, p := range s.PlatformProviders { - if p.Type != requiredProviderType { - continue - } - if !labelMatch(p.Labels) { - continue - } - out = append(out, p) - } - return out -} - // GetRepositoryMap returns a map of repositories where key is repo id. func (s *PipedSpec) GetRepositoryMap() map[string]PipedRepository { m := make(map[string]PipedRepository, len(s.Repositories)) @@ -536,112 +458,6 @@ func (r *HelmChartRegistry) Mask() { } } -type PipedPlatformProvider struct { - Name string `json:"name"` - Type model.PlatformProviderType `json:"type"` - Labels map[string]string `json:"labels,omitempty"` - - KubernetesConfig *PlatformProviderKubernetesConfig - TerraformConfig *PlatformProviderTerraformConfig - CloudRunConfig *PlatformProviderCloudRunConfig - LambdaConfig *PlatformProviderLambdaConfig - ECSConfig *PlatformProviderECSConfig -} - -type genericPipedPlatformProvider struct { - Name string `json:"name"` - Type model.PlatformProviderType `json:"type"` - Labels map[string]string `json:"labels,omitempty"` - Config json.RawMessage `json:"config"` -} - -func (p *PipedPlatformProvider) MarshalJSON() ([]byte, error) { - var ( - err error - config json.RawMessage - ) - - switch p.Type { - case model.PlatformProviderKubernetes: - config, err = json.Marshal(p.KubernetesConfig) - case model.PlatformProviderTerraform: - config, err = json.Marshal(p.TerraformConfig) - case model.PlatformProviderCloudRun: - config, err = json.Marshal(p.CloudRunConfig) - case model.PlatformProviderLambda: - config, err = json.Marshal(p.LambdaConfig) - case model.PlatformProviderECS: - config, err = json.Marshal(p.ECSConfig) - default: - err = fmt.Errorf("unsupported platform provider type: %s", p.Name) - } - - if err != nil { - return nil, err - } - - return json.Marshal(&genericPipedPlatformProvider{ - Name: p.Name, - Type: p.Type, - Labels: p.Labels, - Config: config, - }) -} - -func (p *PipedPlatformProvider) UnmarshalJSON(data []byte) error { - var err error - gp := genericPipedPlatformProvider{} - if err = json.Unmarshal(data, &gp); err != nil { - return err - } - p.Name = gp.Name - p.Type = gp.Type - p.Labels = gp.Labels - - switch p.Type { - case model.PlatformProviderKubernetes: - p.KubernetesConfig = &PlatformProviderKubernetesConfig{} - if len(gp.Config) > 0 { - err = json.Unmarshal(gp.Config, p.KubernetesConfig) - } - case model.PlatformProviderTerraform: - p.TerraformConfig = &PlatformProviderTerraformConfig{} - if len(gp.Config) > 0 { - err = json.Unmarshal(gp.Config, p.TerraformConfig) - } - case model.PlatformProviderCloudRun: - p.CloudRunConfig = &PlatformProviderCloudRunConfig{} - if len(gp.Config) > 0 { - err = json.Unmarshal(gp.Config, p.CloudRunConfig) - } - case model.PlatformProviderLambda: - p.LambdaConfig = &PlatformProviderLambdaConfig{} - if len(gp.Config) > 0 { - err = json.Unmarshal(gp.Config, p.LambdaConfig) - } - case model.PlatformProviderECS: - p.ECSConfig = &PlatformProviderECSConfig{} - if len(gp.Config) > 0 { - err = json.Unmarshal(gp.Config, p.ECSConfig) - } - default: - err = fmt.Errorf("unsupported platform provider type: %s", p.Name) - } - return err -} - -func (p *PipedPlatformProvider) Mask() { - if p.CloudRunConfig != nil { - p.CloudRunConfig.Mask() - } - if p.LambdaConfig != nil { - p.LambdaConfig.Mask() - } - if p.ECSConfig != nil { - p.ECSConfig.Mask() - } -} - type PlatformProviderKubernetesConfig struct { // The master URL of the kubernetes cluster. // Empty means in-cluster. diff --git a/pkg/configv1/piped_test.go b/pkg/configv1/piped_test.go index 96f7b54d4e..2453d9ca9c 100644 --- a/pkg/configv1/piped_test.go +++ b/pkg/configv1/piped_test.go @@ -85,71 +85,6 @@ func TestPipedConfig(t *testing.T) { Password: "sample-password", }, }, - PlatformProviders: []PipedPlatformProvider{ - { - Name: "kubernetes-default", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "workload", - }, - KubernetesConfig: &PlatformProviderKubernetesConfig{ - MasterURL: "https://example.com", - KubeConfigPath: "/etc/kube/config", - AppStateInformer: KubernetesAppStateInformer{ - IncludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "pipecd.dev/v1beta1", - }, - { - APIVersion: "networking.gke.io/v1beta1", - Kind: "ManagedCertificate", - }, - }, - ExcludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "v1", - Kind: "Endpoints", - }, - }, - }, - }, - }, - { - Name: "kubernetes-dev", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "config", - }, - KubernetesConfig: &PlatformProviderKubernetesConfig{}, - }, - { - Name: "terraform", - Type: model.PlatformProviderTerraform, - TerraformConfig: &PlatformProviderTerraformConfig{ - Vars: []string{ - "project=gcp-project", - "region=us-centra1", - }, - DriftDetectionEnabled: newBoolPointer(false), - }, - }, - { - Name: "cloudrun", - Type: model.PlatformProviderCloudRun, - CloudRunConfig: &PlatformProviderCloudRunConfig{ - Project: "gcp-project-id", - Region: "cloud-run-region", - CredentialsFile: "/etc/piped-secret/gcp-service-account.json", - }, - }, - { - Name: "lambda", - Type: model.PlatformProviderLambda, - LambdaConfig: &PlatformProviderLambdaConfig{ - Region: "us-east-1", - }, - }, - }, AnalysisProviders: []PipedAnalysisProvider{ { Name: "prometheus-dev", @@ -637,40 +572,6 @@ func TestPipedConfigMask(t *testing.T) { Password: "foo", }, }, - PlatformProviders: []PipedPlatformProvider{ - { - Name: "foo", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{ - MasterURL: "foo", - KubeConfigPath: "foo", - AppStateInformer: KubernetesAppStateInformer{ - Namespace: "", - IncludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "foo", - Kind: "foo", - }, - }, - ExcludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "foo", - Kind: "foo", - }, - }, - }, - }, - }, - { - Name: "bar", - Type: model.PlatformProviderCloudRun, - CloudRunConfig: &PlatformProviderCloudRunConfig{ - Project: "bar", - Region: "bar", - CredentialsFile: "/etc/cloudrun/credentials", - }, - }, - }, AnalysisProviders: []PipedAnalysisProvider{ { Name: "foo", @@ -801,40 +702,6 @@ func TestPipedConfigMask(t *testing.T) { Password: maskString, }, }, - PlatformProviders: []PipedPlatformProvider{ - { - Name: "foo", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{ - MasterURL: "foo", - KubeConfigPath: "foo", - AppStateInformer: KubernetesAppStateInformer{ - Namespace: "", - IncludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "foo", - Kind: "foo", - }, - }, - ExcludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "foo", - Kind: "foo", - }, - }, - }, - }, - }, - { - Name: "bar", - Type: model.PlatformProviderCloudRun, - CloudRunConfig: &PlatformProviderCloudRunConfig{ - Project: "bar", - Region: "bar", - CredentialsFile: "******", - }, - }, - }, AnalysisProviders: []PipedAnalysisProvider{ { Name: "foo", @@ -988,64 +855,6 @@ func TestPipedSpecClone(t *testing.T) { Password: "sample-password", }, }, - PlatformProviders: []PipedPlatformProvider{ - { - Name: "kubernetes-default", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{ - MasterURL: "https://example.com", - KubeConfigPath: "/etc/kube/config", - AppStateInformer: KubernetesAppStateInformer{ - IncludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "pipecd.dev/v1beta1", - }, - { - APIVersion: "networking.gke.io/v1beta1", - Kind: "ManagedCertificate", - }, - }, - ExcludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "v1", - Kind: "Endpoints", - }, - }, - }, - }, - }, - { - Name: "kubernetes-dev", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{}, - }, - { - Name: "terraform", - Type: model.PlatformProviderTerraform, - TerraformConfig: &PlatformProviderTerraformConfig{ - Vars: []string{ - "project=gcp-project", - "region=us-centra1", - }, - }, - }, - { - Name: "cloudrun", - Type: model.PlatformProviderCloudRun, - CloudRunConfig: &PlatformProviderCloudRunConfig{ - Project: "gcp-project-id", - Region: "cloud-run-region", - CredentialsFile: "/etc/piped-secret/gcp-service-account.json", - }, - }, - { - Name: "lambda", - Type: model.PlatformProviderLambda, - LambdaConfig: &PlatformProviderLambdaConfig{ - Region: "us-east-1", - }, - }, - }, AnalysisProviders: []PipedAnalysisProvider{ { Name: "prometheus-dev", @@ -1186,64 +995,6 @@ func TestPipedSpecClone(t *testing.T) { Password: "sample-password", }, }, - PlatformProviders: []PipedPlatformProvider{ - { - Name: "kubernetes-default", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{ - MasterURL: "https://example.com", - KubeConfigPath: "/etc/kube/config", - AppStateInformer: KubernetesAppStateInformer{ - IncludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "pipecd.dev/v1beta1", - }, - { - APIVersion: "networking.gke.io/v1beta1", - Kind: "ManagedCertificate", - }, - }, - ExcludeResources: []KubernetesResourceMatcher{ - { - APIVersion: "v1", - Kind: "Endpoints", - }, - }, - }, - }, - }, - { - Name: "kubernetes-dev", - Type: model.PlatformProviderKubernetes, - KubernetesConfig: &PlatformProviderKubernetesConfig{}, - }, - { - Name: "terraform", - Type: model.PlatformProviderTerraform, - TerraformConfig: &PlatformProviderTerraformConfig{ - Vars: []string{ - "project=gcp-project", - "region=us-centra1", - }, - }, - }, - { - Name: "cloudrun", - Type: model.PlatformProviderCloudRun, - CloudRunConfig: &PlatformProviderCloudRunConfig{ - Project: "gcp-project-id", - Region: "cloud-run-region", - CredentialsFile: "/etc/piped-secret/gcp-service-account.json", - }, - }, - { - Name: "lambda", - Type: model.PlatformProviderLambda, - LambdaConfig: &PlatformProviderLambdaConfig{ - Region: "us-east-1", - }, - }, - }, AnalysisProviders: []PipedAnalysisProvider{ { Name: "prometheus-dev", @@ -1349,98 +1100,6 @@ func TestPipedSpecClone(t *testing.T) { } } -func TestFindPlatformProvidersByLabel(t *testing.T) { - pipedSpec := &PipedSpec{ - PlatformProviders: []PipedPlatformProvider{ - { - Name: "provider-1", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "group-1", - "foo": "foo-1", - }, - }, - { - Name: "provider-2", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "group-2", - "foo": "foo-2", - }, - }, - { - Name: "provider-3", - Type: model.PlatformProviderCloudRun, - Labels: map[string]string{ - "group": "group-1", - "foo": "foo-3", - }, - }, - { - Name: "provider-4", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "group-2", - "foo": "foo-4", - }, - }, - }, - } - - testcases := []struct { - name string - labels map[string]string - want []PipedPlatformProvider - }{ - { - name: "empty due to missing label", - labels: map[string]string{ - "group": "group-4", - }, - want: []PipedPlatformProvider{}, - }, - { - name: "found exactly one provider", - labels: map[string]string{ - "group": "group-1", - }, - want: []PipedPlatformProvider{ - { - Name: "provider-1", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "group-1", - "foo": "foo-1", - }, - }, - }, - }, - { - name: "found multiple providers", - labels: map[string]string{ - "group": "group-1", - }, - want: []PipedPlatformProvider{ - { - Name: "provider-1", - Type: model.PlatformProviderKubernetes, - Labels: map[string]string{ - "group": "group-1", - "foo": "foo-1", - }, - }, - }, - }, - } - - for _, tc := range testcases { - t.Run(tc.name, func(t *testing.T) { - got := pipedSpec.FindPlatformProvidersByLabels(tc.labels, model.ApplicationKind_KUBERNETES) - assert.Equal(t, tc.want, got) - }) - } -} - func TestPipeGitValidate(t *testing.T) { t.Parallel() testcases := []struct { diff --git a/pkg/configv1/testdata/piped/piped-config.yaml b/pkg/configv1/testdata/piped/piped-config.yaml index 9f92f437d9..143007daa5 100644 --- a/pkg/configv1/testdata/piped/piped-config.yaml +++ b/pkg/configv1/testdata/piped/piped-config.yaml @@ -36,48 +36,6 @@ spec: username: sample-username password: sample-password - platformProviders: - - name: kubernetes-default - type: KUBERNETES - labels: - group: workload - config: - masterURL: https://example.com - kubeConfigPath: /etc/kube/config - appStateInformer: - includeResources: - - apiVersion: pipecd.dev/v1beta1 - - apiVersion: networking.gke.io/v1beta1 - kind: ManagedCertificate - excludeResources: - - apiVersion: v1 - kind: Endpoints - - - name: kubernetes-dev - type: KUBERNETES - labels: - group: config - - - name: terraform - type: TERRAFORM - config: - vars: - - "project=gcp-project" - - "region=us-centra1" - driftDetectionEnabled: false - - - name: cloudrun - type: CLOUDRUN - config: - project: gcp-project-id - region: cloud-run-region - credentialsFile: /etc/piped-secret/gcp-service-account.json - - - name: lambda - type: LAMBDA - config: - region: us-east-1 - analysisProviders: - name: prometheus-dev type: PROMETHEUS