github.com/argoproj-labs/argocd-operator@v0.10.0/api/v1alpha1/argocd_conversion.go (about)

     1  package v1alpha1
     2  
     3  import (
     4  	"reflect"
     5  
     6  	ctrl "sigs.k8s.io/controller-runtime"
     7  	"sigs.k8s.io/controller-runtime/pkg/conversion"
     8  
     9  	"github.com/argoproj-labs/argocd-operator/api/v1beta1"
    10  )
    11  
    12  var conversionLogger = ctrl.Log.WithName("conversion-webhook")
    13  
    14  // ConvertTo converts this (v1alpha1) ArgoCD to the Hub version (v1beta1).
    15  func (src *ArgoCD) ConvertTo(dstRaw conversion.Hub) error {
    16  	conversionLogger.Info("v1alpha1 to v1beta1 conversion requested.")
    17  	dst := dstRaw.(*v1beta1.ArgoCD)
    18  
    19  	// ObjectMeta conversion
    20  	dst.ObjectMeta = src.ObjectMeta
    21  
    22  	// Spec conversion
    23  
    24  	// sso field
    25  	sso := ConvertAlphaToBetaSSO(src.Spec.SSO)
    26  
    27  	// in case of conflict, deprecated fields will have more priority during conversion to beta
    28  	// deprecated keycloak configs set in alpha (.spec.sso.image, .spec.sso.version, .spec.sso.verifyTLS, .spec.sso.resources),
    29  	// override .spec.sso.keycloak in beta
    30  	if src.Spec.SSO != nil && !reflect.DeepEqual(src.Spec.SSO, &ArgoCDSSOSpec{}) {
    31  		if src.Spec.SSO.Image != "" || src.Spec.SSO.Version != "" || src.Spec.SSO.VerifyTLS != nil || src.Spec.SSO.Resources != nil {
    32  			if sso.Keycloak == nil {
    33  				sso.Keycloak = &v1beta1.ArgoCDKeycloakSpec{}
    34  			}
    35  			sso.Keycloak.Image = src.Spec.SSO.Image
    36  			sso.Keycloak.Version = src.Spec.SSO.Version
    37  			sso.Keycloak.VerifyTLS = src.Spec.SSO.VerifyTLS
    38  			sso.Keycloak.Resources = src.Spec.SSO.Resources
    39  		}
    40  	}
    41  
    42  	// deprecated dex configs set in alpha (.spec.dex), override .spec.sso.dex in beta
    43  	if src.Spec.Dex != nil && !reflect.DeepEqual(src.Spec.Dex, &ArgoCDDexSpec{}) && (src.Spec.Dex.Config != "" || src.Spec.Dex.OpenShiftOAuth) {
    44  		if sso == nil {
    45  			sso = &v1beta1.ArgoCDSSOSpec{}
    46  		}
    47  		sso.Provider = v1beta1.SSOProviderTypeDex
    48  		sso.Dex = ConvertAlphaToBetaDex(src.Spec.Dex)
    49  	}
    50  
    51  	dst.Spec.SSO = sso
    52  
    53  	// rest of the fields
    54  	dst.Spec.ApplicationSet = ConvertAlphaToBetaApplicationSet(src.Spec.ApplicationSet)
    55  	dst.Spec.ExtraConfig = src.Spec.ExtraConfig
    56  	dst.Spec.ApplicationInstanceLabelKey = src.Spec.ApplicationInstanceLabelKey
    57  	dst.Spec.ConfigManagementPlugins = src.Spec.ConfigManagementPlugins
    58  	dst.Spec.Controller = *ConvertAlphaToBetaController(&src.Spec.Controller)
    59  	dst.Spec.DisableAdmin = src.Spec.DisableAdmin
    60  	dst.Spec.ExtraConfig = src.Spec.ExtraConfig
    61  	dst.Spec.GATrackingID = src.Spec.GATrackingID
    62  	dst.Spec.GAAnonymizeUsers = src.Spec.GAAnonymizeUsers
    63  	dst.Spec.Grafana = *ConvertAlphaToBetaGrafana(&src.Spec.Grafana)
    64  	dst.Spec.HA = *ConvertAlphaToBetaHA(&src.Spec.HA)
    65  	dst.Spec.HelpChatURL = src.Spec.HelpChatURL
    66  	dst.Spec.HelpChatText = src.Spec.HelpChatText
    67  	dst.Spec.Image = src.Spec.Image
    68  	dst.Spec.Import = (*v1beta1.ArgoCDImportSpec)(src.Spec.Import)
    69  	dst.Spec.InitialRepositories = src.Spec.InitialRepositories
    70  	dst.Spec.InitialSSHKnownHosts = v1beta1.SSHHostsSpec(src.Spec.InitialSSHKnownHosts)
    71  	dst.Spec.KustomizeBuildOptions = src.Spec.KustomizeBuildOptions
    72  	dst.Spec.KustomizeVersions = ConvertAlphaToBetaKustomizeVersions(src.Spec.KustomizeVersions)
    73  	dst.Spec.OIDCConfig = src.Spec.OIDCConfig
    74  	dst.Spec.Monitoring = v1beta1.ArgoCDMonitoringSpec(src.Spec.Monitoring)
    75  	dst.Spec.NodePlacement = (*v1beta1.ArgoCDNodePlacementSpec)(src.Spec.NodePlacement)
    76  	dst.Spec.Notifications = v1beta1.ArgoCDNotifications(src.Spec.Notifications)
    77  	dst.Spec.Prometheus = *ConvertAlphaToBetaPrometheus(&src.Spec.Prometheus)
    78  	dst.Spec.RBAC = v1beta1.ArgoCDRBACSpec(src.Spec.RBAC)
    79  	dst.Spec.Redis = *ConvertAlphaToBetaRedis(&src.Spec.Redis)
    80  	dst.Spec.Repo = *ConvertAlphaToBetaRepo(&src.Spec.Repo)
    81  	dst.Spec.RepositoryCredentials = src.Spec.RepositoryCredentials
    82  	dst.Spec.ResourceHealthChecks = ConvertAlphaToBetaResourceHealthChecks(src.Spec.ResourceHealthChecks)
    83  	dst.Spec.ResourceIgnoreDifferences = ConvertAlphaToBetaResourceIgnoreDifferences(src.Spec.ResourceIgnoreDifferences)
    84  	dst.Spec.ResourceActions = ConvertAlphaToBetaResourceActions(src.Spec.ResourceActions)
    85  	dst.Spec.ResourceExclusions = src.Spec.ResourceExclusions
    86  	dst.Spec.ResourceInclusions = src.Spec.ResourceInclusions
    87  	dst.Spec.ResourceTrackingMethod = src.Spec.ResourceTrackingMethod
    88  	dst.Spec.Server = *ConvertAlphaToBetaServer(&src.Spec.Server)
    89  	dst.Spec.SourceNamespaces = src.Spec.SourceNamespaces
    90  	dst.Spec.StatusBadgeEnabled = src.Spec.StatusBadgeEnabled
    91  	dst.Spec.TLS = *ConvertAlphaToBetaTLS(&src.Spec.TLS)
    92  	dst.Spec.UsersAnonymousEnabled = src.Spec.UsersAnonymousEnabled
    93  	dst.Spec.Version = src.Spec.Version
    94  	dst.Spec.Banner = (*v1beta1.Banner)(src.Spec.Banner)
    95  
    96  	// Status conversion
    97  	dst.Status = v1beta1.ArgoCDStatus(src.Status)
    98  
    99  	return nil
   100  }
   101  
   102  // ConvertFrom converts from the Hub version (v1beta1) to this (v1alpha1) version.
   103  func (dst *ArgoCD) ConvertFrom(srcRaw conversion.Hub) error {
   104  	conversionLogger.Info("v1beta1 to v1alpha1 conversion requested.")
   105  
   106  	src := srcRaw.(*v1beta1.ArgoCD)
   107  
   108  	// ObjectMeta conversion
   109  	dst.ObjectMeta = src.ObjectMeta
   110  
   111  	// Spec conversion
   112  
   113  	// sso field
   114  	// ignoring conversions of sso fields from v1beta1 to deprecated v1alpha1 as
   115  	// there is no data loss since the new fields in v1beta1 are also present in v1alpha1 &
   116  	// v1alpha1 is not used in business logic & only exists for presentation
   117  	sso := ConvertBetaToAlphaSSO(src.Spec.SSO)
   118  	dst.Spec.SSO = sso
   119  
   120  	// rest of the fields
   121  	dst.Spec.ApplicationSet = ConvertBetaToAlphaApplicationSet(src.Spec.ApplicationSet)
   122  	dst.Spec.ExtraConfig = src.Spec.ExtraConfig
   123  	dst.Spec.ApplicationInstanceLabelKey = src.Spec.ApplicationInstanceLabelKey
   124  	dst.Spec.ConfigManagementPlugins = src.Spec.ConfigManagementPlugins
   125  	dst.Spec.Controller = *ConvertBetaToAlphaController(&src.Spec.Controller)
   126  	dst.Spec.DisableAdmin = src.Spec.DisableAdmin
   127  	dst.Spec.ExtraConfig = src.Spec.ExtraConfig
   128  	dst.Spec.GATrackingID = src.Spec.GATrackingID
   129  	dst.Spec.GAAnonymizeUsers = src.Spec.GAAnonymizeUsers
   130  	dst.Spec.Grafana = *ConvertBetaToAlphaGrafana(&src.Spec.Grafana)
   131  	dst.Spec.HA = *ConvertBetaToAlphaHA(&src.Spec.HA)
   132  	dst.Spec.HelpChatURL = src.Spec.HelpChatURL
   133  	dst.Spec.HelpChatText = src.Spec.HelpChatText
   134  	dst.Spec.Image = src.Spec.Image
   135  	dst.Spec.Import = (*ArgoCDImportSpec)(src.Spec.Import)
   136  	dst.Spec.InitialRepositories = src.Spec.InitialRepositories
   137  	dst.Spec.InitialSSHKnownHosts = SSHHostsSpec(src.Spec.InitialSSHKnownHosts)
   138  	dst.Spec.KustomizeBuildOptions = src.Spec.KustomizeBuildOptions
   139  	dst.Spec.KustomizeVersions = ConvertBetaToAlphaKustomizeVersions(src.Spec.KustomizeVersions)
   140  	dst.Spec.OIDCConfig = src.Spec.OIDCConfig
   141  	dst.Spec.Monitoring = ArgoCDMonitoringSpec(src.Spec.Monitoring)
   142  	dst.Spec.NodePlacement = (*ArgoCDNodePlacementSpec)(src.Spec.NodePlacement)
   143  	dst.Spec.Notifications = ArgoCDNotifications(src.Spec.Notifications)
   144  	dst.Spec.Prometheus = *ConvertBetaToAlphaPrometheus(&src.Spec.Prometheus)
   145  	dst.Spec.RBAC = ArgoCDRBACSpec(src.Spec.RBAC)
   146  	dst.Spec.Redis = *ConvertBetaToAlphaRedis(&src.Spec.Redis)
   147  	dst.Spec.Repo = *ConvertBetaToAlphaRepo(&src.Spec.Repo)
   148  	dst.Spec.RepositoryCredentials = src.Spec.RepositoryCredentials
   149  	dst.Spec.ResourceHealthChecks = ConvertBetaToAlphaResourceHealthChecks(src.Spec.ResourceHealthChecks)
   150  	dst.Spec.ResourceIgnoreDifferences = ConvertBetaToAlphaResourceIgnoreDifferences(src.Spec.ResourceIgnoreDifferences)
   151  	dst.Spec.ResourceActions = ConvertBetaToAlphaResourceActions(src.Spec.ResourceActions)
   152  	dst.Spec.ResourceExclusions = src.Spec.ResourceExclusions
   153  	dst.Spec.ResourceInclusions = src.Spec.ResourceInclusions
   154  	dst.Spec.ResourceTrackingMethod = src.Spec.ResourceTrackingMethod
   155  	dst.Spec.Server = *ConvertBetaToAlphaServer(&src.Spec.Server)
   156  	dst.Spec.SourceNamespaces = src.Spec.SourceNamespaces
   157  	dst.Spec.StatusBadgeEnabled = src.Spec.StatusBadgeEnabled
   158  	dst.Spec.TLS = *ConvertBetaToAlphaTLS(&src.Spec.TLS)
   159  	dst.Spec.UsersAnonymousEnabled = src.Spec.UsersAnonymousEnabled
   160  	dst.Spec.Version = src.Spec.Version
   161  	dst.Spec.Banner = (*Banner)(src.Spec.Banner)
   162  
   163  	// Status conversion
   164  	dst.Status = ArgoCDStatus(src.Status)
   165  
   166  	return nil
   167  }
   168  
   169  // Conversion funcs for v1alpha1 to v1beta1.
   170  func ConvertAlphaToBetaController(src *ArgoCDApplicationControllerSpec) *v1beta1.ArgoCDApplicationControllerSpec {
   171  	var dst *v1beta1.ArgoCDApplicationControllerSpec
   172  	if src != nil {
   173  		dst = &v1beta1.ArgoCDApplicationControllerSpec{
   174  			Processors:       v1beta1.ArgoCDApplicationControllerProcessorsSpec(src.Processors),
   175  			LogLevel:         src.LogLevel,
   176  			LogFormat:        src.LogFormat,
   177  			Resources:        src.Resources,
   178  			ParallelismLimit: src.ParallelismLimit,
   179  			AppSync:          src.AppSync,
   180  			Sharding:         v1beta1.ArgoCDApplicationControllerShardSpec(src.Sharding),
   181  			Env:              src.Env,
   182  		}
   183  	}
   184  	return dst
   185  }
   186  
   187  func ConvertAlphaToBetaRedis(src *ArgoCDRedisSpec) *v1beta1.ArgoCDRedisSpec {
   188  	var dst *v1beta1.ArgoCDRedisSpec
   189  	if src != nil {
   190  		dst = &v1beta1.ArgoCDRedisSpec{
   191  			AutoTLS:                src.AutoTLS,
   192  			DisableTLSVerification: src.DisableTLSVerification,
   193  			Image:                  src.Image,
   194  			Resources:              src.Resources,
   195  			Version:                src.Version,
   196  		}
   197  	}
   198  	return dst
   199  }
   200  
   201  func ConvertAlphaToBetaRepo(src *ArgoCDRepoSpec) *v1beta1.ArgoCDRepoSpec {
   202  	var dst *v1beta1.ArgoCDRepoSpec
   203  	if src != nil {
   204  		dst = &v1beta1.ArgoCDRepoSpec{
   205  			AutoTLS:              src.AutoTLS,
   206  			Env:                  src.Env,
   207  			ExecTimeout:          src.ExecTimeout,
   208  			ExtraRepoCommandArgs: src.ExtraRepoCommandArgs,
   209  			Image:                src.Image,
   210  			InitContainers:       src.InitContainers,
   211  			LogFormat:            src.LogFormat,
   212  			LogLevel:             src.LogLevel,
   213  			MountSAToken:         src.MountSAToken,
   214  			Replicas:             src.Replicas,
   215  			Resources:            src.Resources,
   216  			ServiceAccount:       src.ServiceAccount,
   217  			SidecarContainers:    src.SidecarContainers,
   218  			VerifyTLS:            src.VerifyTLS,
   219  			Version:              src.Version,
   220  			VolumeMounts:         src.VolumeMounts,
   221  			Volumes:              src.Volumes,
   222  		}
   223  	}
   224  	return dst
   225  }
   226  
   227  func ConvertAlphaToBetaWebhookServer(src *WebhookServerSpec) *v1beta1.WebhookServerSpec {
   228  	var dst *v1beta1.WebhookServerSpec
   229  	if src != nil {
   230  		dst = &v1beta1.WebhookServerSpec{
   231  			Host:    src.Host,
   232  			Ingress: v1beta1.ArgoCDIngressSpec(src.Ingress),
   233  			Route:   v1beta1.ArgoCDRouteSpec(src.Route),
   234  		}
   235  	}
   236  	return dst
   237  }
   238  
   239  func ConvertAlphaToBetaApplicationSet(src *ArgoCDApplicationSet) *v1beta1.ArgoCDApplicationSet {
   240  	var dst *v1beta1.ArgoCDApplicationSet
   241  	if src != nil {
   242  		dst = &v1beta1.ArgoCDApplicationSet{
   243  			Env:              src.Env,
   244  			ExtraCommandArgs: src.ExtraCommandArgs,
   245  			Image:            src.Image,
   246  			Version:          src.Version,
   247  			Resources:        src.Resources,
   248  			LogLevel:         src.LogLevel,
   249  			WebhookServer:    *ConvertAlphaToBetaWebhookServer(&src.WebhookServer),
   250  		}
   251  	}
   252  	return dst
   253  }
   254  
   255  func ConvertAlphaToBetaGrafana(src *ArgoCDGrafanaSpec) *v1beta1.ArgoCDGrafanaSpec {
   256  	var dst *v1beta1.ArgoCDGrafanaSpec
   257  	if src != nil {
   258  		dst = &v1beta1.ArgoCDGrafanaSpec{
   259  			Enabled: src.Enabled,
   260  			Host:    src.Host,
   261  			Image:   src.Image,
   262  			Ingress: v1beta1.ArgoCDIngressSpec(src.Ingress),
   263  		}
   264  	}
   265  	return dst
   266  }
   267  
   268  func ConvertAlphaToBetaPrometheus(src *ArgoCDPrometheusSpec) *v1beta1.ArgoCDPrometheusSpec {
   269  	var dst *v1beta1.ArgoCDPrometheusSpec
   270  	if src != nil {
   271  		dst = &v1beta1.ArgoCDPrometheusSpec{
   272  			Enabled: src.Enabled,
   273  			Host:    src.Host,
   274  			Ingress: v1beta1.ArgoCDIngressSpec(src.Ingress),
   275  			Route:   v1beta1.ArgoCDRouteSpec(src.Route),
   276  			Size:    src.Size,
   277  		}
   278  	}
   279  	return dst
   280  }
   281  
   282  func ConvertAlphaToBetaSSO(src *ArgoCDSSOSpec) *v1beta1.ArgoCDSSOSpec {
   283  	var dst *v1beta1.ArgoCDSSOSpec
   284  	if src != nil {
   285  		dst = &v1beta1.ArgoCDSSOSpec{
   286  			Provider: v1beta1.SSOProviderType(src.Provider),
   287  			Dex:      ConvertAlphaToBetaDex(src.Dex),
   288  			Keycloak: (*v1beta1.ArgoCDKeycloakSpec)(src.Keycloak),
   289  		}
   290  	}
   291  	return dst
   292  }
   293  
   294  func ConvertAlphaToBetaDex(src *ArgoCDDexSpec) *v1beta1.ArgoCDDexSpec {
   295  	var dst *v1beta1.ArgoCDDexSpec
   296  	if src != nil {
   297  		dst = &v1beta1.ArgoCDDexSpec{
   298  			Config:         src.Config,
   299  			Groups:         src.Groups,
   300  			Image:          src.Image,
   301  			OpenShiftOAuth: src.OpenShiftOAuth,
   302  			Resources:      src.Resources,
   303  			Version:        src.Version,
   304  			Env:            nil,
   305  		}
   306  	}
   307  	return dst
   308  }
   309  
   310  func ConvertAlphaToBetaHA(src *ArgoCDHASpec) *v1beta1.ArgoCDHASpec {
   311  	var dst *v1beta1.ArgoCDHASpec
   312  	if src != nil {
   313  		dst = &v1beta1.ArgoCDHASpec{
   314  			Enabled:           src.Enabled,
   315  			RedisProxyImage:   src.RedisProxyImage,
   316  			RedisProxyVersion: src.RedisProxyVersion,
   317  			Resources:         src.Resources,
   318  		}
   319  	}
   320  	return dst
   321  }
   322  
   323  func ConvertAlphaToBetaTLS(src *ArgoCDTLSSpec) *v1beta1.ArgoCDTLSSpec {
   324  	var dst *v1beta1.ArgoCDTLSSpec
   325  	if src != nil {
   326  		dst = &v1beta1.ArgoCDTLSSpec{
   327  			CA:           v1beta1.ArgoCDCASpec(src.CA),
   328  			InitialCerts: src.InitialCerts,
   329  		}
   330  	}
   331  	return dst
   332  }
   333  
   334  func ConvertAlphaToBetaServer(src *ArgoCDServerSpec) *v1beta1.ArgoCDServerSpec {
   335  	var dst *v1beta1.ArgoCDServerSpec
   336  	if src != nil {
   337  		dst = &v1beta1.ArgoCDServerSpec{
   338  			Autoscale:        v1beta1.ArgoCDServerAutoscaleSpec(src.Autoscale),
   339  			GRPC:             *ConvertAlphaToBetaGRPC(&src.GRPC),
   340  			Host:             src.Host,
   341  			Ingress:          v1beta1.ArgoCDIngressSpec(src.Ingress),
   342  			Insecure:         src.Insecure,
   343  			LogLevel:         src.LogLevel,
   344  			LogFormat:        src.LogFormat,
   345  			Replicas:         src.Replicas,
   346  			Resources:        src.Resources,
   347  			Route:            v1beta1.ArgoCDRouteSpec(src.Route),
   348  			Service:          v1beta1.ArgoCDServerServiceSpec(src.Service),
   349  			Env:              src.Env,
   350  			ExtraCommandArgs: src.ExtraCommandArgs,
   351  		}
   352  	}
   353  	return dst
   354  }
   355  
   356  func ConvertAlphaToBetaGRPC(src *ArgoCDServerGRPCSpec) *v1beta1.ArgoCDServerGRPCSpec {
   357  	var dst *v1beta1.ArgoCDServerGRPCSpec
   358  	if src != nil {
   359  		dst = &v1beta1.ArgoCDServerGRPCSpec{
   360  			Host:    src.Host,
   361  			Ingress: v1beta1.ArgoCDIngressSpec(src.Ingress),
   362  		}
   363  	}
   364  	return dst
   365  }
   366  
   367  func ConvertAlphaToBetaKustomizeVersions(src []KustomizeVersionSpec) []v1beta1.KustomizeVersionSpec {
   368  	var dst []v1beta1.KustomizeVersionSpec
   369  	for _, s := range src {
   370  		dst = append(dst, v1beta1.KustomizeVersionSpec{
   371  			Version: s.Version,
   372  			Path:    s.Path,
   373  		},
   374  		)
   375  	}
   376  	return dst
   377  }
   378  
   379  func ConvertAlphaToBetaResourceIgnoreDifferences(src *ResourceIgnoreDifference) *v1beta1.ResourceIgnoreDifference {
   380  	var dst *v1beta1.ResourceIgnoreDifference
   381  	if src != nil {
   382  		dst = &v1beta1.ResourceIgnoreDifference{
   383  			All:                 (*v1beta1.IgnoreDifferenceCustomization)(src.All),
   384  			ResourceIdentifiers: ConvertAlphaToBetaResourceIdentifiers(src.ResourceIdentifiers),
   385  		}
   386  	}
   387  	return dst
   388  }
   389  
   390  func ConvertAlphaToBetaResourceIdentifiers(src []ResourceIdentifiers) []v1beta1.ResourceIdentifiers {
   391  	var dst []v1beta1.ResourceIdentifiers
   392  	for _, s := range src {
   393  		dst = append(dst, v1beta1.ResourceIdentifiers{
   394  			Group:         s.Group,
   395  			Kind:          s.Kind,
   396  			Customization: v1beta1.IgnoreDifferenceCustomization(s.Customization),
   397  		},
   398  		)
   399  	}
   400  	return dst
   401  }
   402  
   403  func ConvertAlphaToBetaResourceActions(src []ResourceAction) []v1beta1.ResourceAction {
   404  	var dst []v1beta1.ResourceAction
   405  	for _, s := range src {
   406  		dst = append(dst, v1beta1.ResourceAction{
   407  			Group:  s.Group,
   408  			Kind:   s.Kind,
   409  			Action: s.Action,
   410  		},
   411  		)
   412  	}
   413  	return dst
   414  }
   415  
   416  func ConvertAlphaToBetaResourceHealthChecks(src []ResourceHealthCheck) []v1beta1.ResourceHealthCheck {
   417  	var dst []v1beta1.ResourceHealthCheck
   418  	for _, s := range src {
   419  		dst = append(dst, v1beta1.ResourceHealthCheck{
   420  			Group: s.Group,
   421  			Kind:  s.Kind,
   422  			Check: s.Check,
   423  		},
   424  		)
   425  	}
   426  	return dst
   427  }
   428  
   429  // Conversion funcs for v1beta1 to v1alpha1.
   430  func ConvertBetaToAlphaController(src *v1beta1.ArgoCDApplicationControllerSpec) *ArgoCDApplicationControllerSpec {
   431  	var dst *ArgoCDApplicationControllerSpec
   432  	if src != nil {
   433  		dst = &ArgoCDApplicationControllerSpec{
   434  			Processors:       ArgoCDApplicationControllerProcessorsSpec(src.Processors),
   435  			LogLevel:         src.LogLevel,
   436  			LogFormat:        src.LogFormat,
   437  			Resources:        src.Resources,
   438  			ParallelismLimit: src.ParallelismLimit,
   439  			AppSync:          src.AppSync,
   440  			Sharding:         ArgoCDApplicationControllerShardSpec(src.Sharding),
   441  			Env:              src.Env,
   442  		}
   443  	}
   444  	return dst
   445  }
   446  
   447  func ConvertBetaToAlphaWebhookServer(src *v1beta1.WebhookServerSpec) *WebhookServerSpec {
   448  	var dst *WebhookServerSpec
   449  	if src != nil {
   450  		dst = &WebhookServerSpec{
   451  			Host:    src.Host,
   452  			Ingress: ArgoCDIngressSpec(src.Ingress),
   453  			Route:   ArgoCDRouteSpec(src.Route),
   454  		}
   455  	}
   456  	return dst
   457  }
   458  
   459  func ConvertBetaToAlphaApplicationSet(src *v1beta1.ArgoCDApplicationSet) *ArgoCDApplicationSet {
   460  	var dst *ArgoCDApplicationSet
   461  	if src != nil {
   462  		dst = &ArgoCDApplicationSet{
   463  			Env:              src.Env,
   464  			ExtraCommandArgs: src.ExtraCommandArgs,
   465  			Image:            src.Image,
   466  			Version:          src.Version,
   467  			Resources:        src.Resources,
   468  			LogLevel:         src.LogLevel,
   469  			WebhookServer:    *ConvertBetaToAlphaWebhookServer(&src.WebhookServer),
   470  		}
   471  	}
   472  	return dst
   473  }
   474  
   475  func ConvertBetaToAlphaGrafana(src *v1beta1.ArgoCDGrafanaSpec) *ArgoCDGrafanaSpec {
   476  	var dst *ArgoCDGrafanaSpec
   477  	if src != nil {
   478  		dst = &ArgoCDGrafanaSpec{
   479  			Enabled: src.Enabled,
   480  			Host:    src.Host,
   481  			Image:   src.Image,
   482  			Ingress: ArgoCDIngressSpec(src.Ingress),
   483  		}
   484  	}
   485  	return dst
   486  }
   487  
   488  func ConvertBetaToAlphaPrometheus(src *v1beta1.ArgoCDPrometheusSpec) *ArgoCDPrometheusSpec {
   489  	var dst *ArgoCDPrometheusSpec
   490  	if src != nil {
   491  		dst = &ArgoCDPrometheusSpec{
   492  			Enabled: src.Enabled,
   493  			Host:    src.Host,
   494  			Ingress: ArgoCDIngressSpec(src.Ingress),
   495  			Route:   ArgoCDRouteSpec(src.Route),
   496  			Size:    src.Size,
   497  		}
   498  	}
   499  	return dst
   500  }
   501  
   502  func ConvertBetaToAlphaSSO(src *v1beta1.ArgoCDSSOSpec) *ArgoCDSSOSpec {
   503  	var dst *ArgoCDSSOSpec
   504  	if src != nil {
   505  		dst = &ArgoCDSSOSpec{
   506  			Provider: SSOProviderType(src.Provider),
   507  			Dex:      ConvertBetaToAlphaDex(src.Dex),
   508  			Keycloak: (*ArgoCDKeycloakSpec)(src.Keycloak),
   509  		}
   510  	}
   511  	return dst
   512  }
   513  
   514  func ConvertBetaToAlphaDex(src *v1beta1.ArgoCDDexSpec) *ArgoCDDexSpec {
   515  	var dst *ArgoCDDexSpec
   516  	if src != nil {
   517  		dst = &ArgoCDDexSpec{
   518  			Config:         src.Config,
   519  			Groups:         src.Groups,
   520  			Image:          src.Image,
   521  			OpenShiftOAuth: src.OpenShiftOAuth,
   522  			Resources:      src.Resources,
   523  			Version:        src.Version,
   524  		}
   525  	}
   526  	return dst
   527  }
   528  
   529  func ConvertBetaToAlphaHA(src *v1beta1.ArgoCDHASpec) *ArgoCDHASpec {
   530  	var dst *ArgoCDHASpec
   531  	if src != nil {
   532  		dst = &ArgoCDHASpec{
   533  			Enabled:           src.Enabled,
   534  			RedisProxyImage:   src.RedisProxyImage,
   535  			RedisProxyVersion: src.RedisProxyVersion,
   536  			Resources:         src.Resources,
   537  		}
   538  	}
   539  	return dst
   540  }
   541  
   542  func ConvertBetaToAlphaTLS(src *v1beta1.ArgoCDTLSSpec) *ArgoCDTLSSpec {
   543  	var dst *ArgoCDTLSSpec
   544  	if src != nil {
   545  		dst = &ArgoCDTLSSpec{
   546  			CA:           ArgoCDCASpec(src.CA),
   547  			InitialCerts: src.InitialCerts,
   548  		}
   549  	}
   550  	return dst
   551  }
   552  
   553  func ConvertBetaToAlphaServer(src *v1beta1.ArgoCDServerSpec) *ArgoCDServerSpec {
   554  	var dst *ArgoCDServerSpec
   555  	if src != nil {
   556  		dst = &ArgoCDServerSpec{
   557  			Autoscale:        ArgoCDServerAutoscaleSpec(src.Autoscale),
   558  			GRPC:             *ConvertBetaToAlphaGRPC(&src.GRPC),
   559  			Host:             src.Host,
   560  			Ingress:          ArgoCDIngressSpec(src.Ingress),
   561  			Insecure:         src.Insecure,
   562  			LogLevel:         src.LogLevel,
   563  			LogFormat:        src.LogFormat,
   564  			Replicas:         src.Replicas,
   565  			Resources:        src.Resources,
   566  			Route:            ArgoCDRouteSpec(src.Route),
   567  			Service:          ArgoCDServerServiceSpec(src.Service),
   568  			Env:              src.Env,
   569  			ExtraCommandArgs: src.ExtraCommandArgs,
   570  		}
   571  	}
   572  	return dst
   573  }
   574  
   575  func ConvertBetaToAlphaGRPC(src *v1beta1.ArgoCDServerGRPCSpec) *ArgoCDServerGRPCSpec {
   576  	var dst *ArgoCDServerGRPCSpec
   577  	if src != nil {
   578  		dst = &ArgoCDServerGRPCSpec{
   579  			Host:    src.Host,
   580  			Ingress: ArgoCDIngressSpec(src.Ingress),
   581  		}
   582  	}
   583  	return dst
   584  }
   585  
   586  func ConvertBetaToAlphaKustomizeVersions(src []v1beta1.KustomizeVersionSpec) []KustomizeVersionSpec {
   587  	var dst []KustomizeVersionSpec
   588  	for _, s := range src {
   589  		dst = append(dst, KustomizeVersionSpec{
   590  			Version: s.Version,
   591  			Path:    s.Path,
   592  		},
   593  		)
   594  	}
   595  	return dst
   596  }
   597  
   598  func ConvertBetaToAlphaResourceIgnoreDifferences(src *v1beta1.ResourceIgnoreDifference) *ResourceIgnoreDifference {
   599  	var dst *ResourceIgnoreDifference
   600  	if src != nil {
   601  		dst = &ResourceIgnoreDifference{
   602  			All:                 (*IgnoreDifferenceCustomization)(src.All),
   603  			ResourceIdentifiers: ConvertBetaToAlphaResourceIdentifiers(src.ResourceIdentifiers),
   604  		}
   605  	}
   606  	return dst
   607  }
   608  
   609  func ConvertBetaToAlphaResourceIdentifiers(src []v1beta1.ResourceIdentifiers) []ResourceIdentifiers {
   610  	var dst []ResourceIdentifiers
   611  	for _, s := range src {
   612  		dst = append(dst, ResourceIdentifiers{
   613  			Group:         s.Group,
   614  			Kind:          s.Kind,
   615  			Customization: IgnoreDifferenceCustomization(s.Customization),
   616  		},
   617  		)
   618  	}
   619  	return dst
   620  }
   621  
   622  func ConvertBetaToAlphaResourceActions(src []v1beta1.ResourceAction) []ResourceAction {
   623  	var dst []ResourceAction
   624  	for _, s := range src {
   625  		dst = append(dst, ResourceAction{
   626  			Group:  s.Group,
   627  			Kind:   s.Kind,
   628  			Action: s.Action,
   629  		},
   630  		)
   631  	}
   632  	return dst
   633  }
   634  
   635  func ConvertBetaToAlphaResourceHealthChecks(src []v1beta1.ResourceHealthCheck) []ResourceHealthCheck {
   636  	var dst []ResourceHealthCheck
   637  	for _, s := range src {
   638  		dst = append(dst, ResourceHealthCheck{
   639  			Group: s.Group,
   640  			Kind:  s.Kind,
   641  			Check: s.Check,
   642  		},
   643  		)
   644  	}
   645  	return dst
   646  }
   647  
   648  func ConvertBetaToAlphaRedis(src *v1beta1.ArgoCDRedisSpec) *ArgoCDRedisSpec {
   649  	var dst *ArgoCDRedisSpec
   650  	if src != nil {
   651  		dst = &ArgoCDRedisSpec{
   652  			AutoTLS:                src.AutoTLS,
   653  			DisableTLSVerification: src.DisableTLSVerification,
   654  			Image:                  src.Image,
   655  			Resources:              src.Resources,
   656  			Version:                src.Version,
   657  		}
   658  	}
   659  	return dst
   660  }
   661  
   662  func ConvertBetaToAlphaRepo(src *v1beta1.ArgoCDRepoSpec) *ArgoCDRepoSpec {
   663  	var dst *ArgoCDRepoSpec
   664  	if src != nil {
   665  		dst = &ArgoCDRepoSpec{
   666  			AutoTLS:              src.AutoTLS,
   667  			Env:                  src.Env,
   668  			ExecTimeout:          src.ExecTimeout,
   669  			ExtraRepoCommandArgs: src.ExtraRepoCommandArgs,
   670  			Image:                src.Image,
   671  			InitContainers:       src.InitContainers,
   672  			LogFormat:            src.LogFormat,
   673  			LogLevel:             src.LogLevel,
   674  			MountSAToken:         src.MountSAToken,
   675  			Replicas:             src.Replicas,
   676  			Resources:            src.Resources,
   677  			ServiceAccount:       src.ServiceAccount,
   678  			SidecarContainers:    src.SidecarContainers,
   679  			VerifyTLS:            src.VerifyTLS,
   680  			Version:              src.Version,
   681  			VolumeMounts:         src.VolumeMounts,
   682  			Volumes:              src.Volumes,
   683  		}
   684  	}
   685  	return dst
   686  }