github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/boom/application/applications/reconciling/helm.go (about)

     1  package reconciling
     2  
     3  import (
     4  	"github.com/caos/orbos/internal/utils/helper"
     5  	"strings"
     6  
     7  	toolsetslatest "github.com/caos/orbos/internal/operator/boom/api/latest"
     8  	"github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/config/credential"
     9  	"github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/config/repository"
    10  
    11  	"github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/config"
    12  	"github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/customimage"
    13  	"github.com/caos/orbos/internal/operator/boom/application/applications/reconciling/helm"
    14  	"github.com/caos/orbos/internal/operator/boom/templator/helm/chart"
    15  	"github.com/caos/orbos/mntr"
    16  )
    17  
    18  func (a *Argocd) HelmPreApplySteps(monitor mntr.Monitor, toolsetCRDSpec *toolsetslatest.ToolsetSpec) ([]interface{}, error) {
    19  	secrets := make([]interface{}, 0)
    20  	if toolsetCRDSpec.Reconciling == nil {
    21  		return secrets, nil
    22  	}
    23  	customimagesecrets := customimage.GetSecrets(toolsetCRDSpec.Reconciling)
    24  	repoSecrets := repository.GetSecrets(toolsetCRDSpec.Reconciling)
    25  	credSecrets := credential.GetSecrets(toolsetCRDSpec.Reconciling)
    26  
    27  	secrets = append(secrets, customimagesecrets...)
    28  	secrets = append(secrets, repoSecrets...)
    29  	secrets = append(secrets, credSecrets...)
    30  	return secrets, nil
    31  }
    32  
    33  func (a *Argocd) HelmMutate(monitor mntr.Monitor, toolsetCRDSpec *toolsetslatest.ToolsetSpec, resultFilePath string) error {
    34  	if toolsetCRDSpec.Reconciling != nil && toolsetCRDSpec.Reconciling.CustomImage != nil && toolsetCRDSpec.Reconciling.CustomImage.Enabled {
    35  		spec := toolsetCRDSpec.Reconciling
    36  
    37  		if spec.CustomImage.GopassStores != nil && len(spec.CustomImage.GopassStores) > 0 {
    38  			if err := customimage.AddPostStartFromSpec(spec, resultFilePath); err != nil {
    39  				return err
    40  			}
    41  		}
    42  	}
    43  
    44  	return nil
    45  }
    46  
    47  func (a *Argocd) SpecToHelmValues(monitor mntr.Monitor, toolsetCRDSpec *toolsetslatest.ToolsetSpec) interface{} {
    48  	imageTags := a.GetImageTags()
    49  	image := "argoproj/argocd"
    50  
    51  	if toolsetCRDSpec != nil && toolsetCRDSpec.Reconciling != nil {
    52  		helper.OverwriteExistingValues(imageTags, map[string]string{
    53  			image: toolsetCRDSpec.Reconciling.OverwriteVersion,
    54  		})
    55  		helper.OverwriteExistingKey(imageTags, &image, toolsetCRDSpec.Reconciling.OverwriteImage)
    56  	}
    57  	values := helm.DefaultValues(imageTags, image)
    58  
    59  	spec := toolsetCRDSpec.Reconciling
    60  	if spec == nil {
    61  		return values
    62  	}
    63  
    64  	if spec.CustomImage != nil && spec.CustomImage.Enabled {
    65  		conf := customimage.FromSpec(spec, imageTags)
    66  		values.RepoServer.Image = &helm.Image{
    67  			Repository:      conf.ImageRepository,
    68  			Tag:             conf.ImageTag,
    69  			ImagePullPolicy: "IfNotPresent",
    70  		}
    71  		if conf.AddSecretVolumes != nil {
    72  			for _, v := range conf.AddSecretVolumes {
    73  				items := make([]*helm.Item, 0)
    74  				for _, item := range v.Secret.Items {
    75  					items = append(items, &helm.Item{Key: item.Key, Path: item.Path})
    76  				}
    77  
    78  				values.RepoServer.Volumes = append(values.RepoServer.Volumes, &helm.Volume{
    79  					Secret: &helm.VolumeSecret{
    80  						SecretName:  v.Secret.SecretName,
    81  						Items:       items,
    82  						DefaultMode: v.DefaultMode,
    83  					},
    84  					Name: v.Name,
    85  				})
    86  			}
    87  		}
    88  		if conf.AddVolumeMounts != nil {
    89  			for _, v := range conf.AddVolumeMounts {
    90  				values.RepoServer.VolumeMounts = append(values.RepoServer.VolumeMounts, &helm.VolumeMount{
    91  					Name:      v.Name,
    92  					MountPath: v.MountPath,
    93  					SubPath:   v.SubPath,
    94  					ReadOnly:  v.ReadOnly,
    95  				})
    96  			}
    97  		}
    98  	}
    99  
   100  	conf := config.GetFromSpec(monitor, spec)
   101  	if conf.Repositories != "" && conf.Repositories != "[]\n" {
   102  		values.Server.Config.Repositories = conf.Repositories
   103  	}
   104  	if conf.Credentials != "" && conf.Credentials != "[]\n" {
   105  		values.Server.Config.RepositoryCredentials = conf.Credentials
   106  	}
   107  
   108  	if conf.ConfigManagementPlugins != "" {
   109  		values.Server.Config.ConfigManagementPlugins = conf.ConfigManagementPlugins
   110  	}
   111  
   112  	if spec.Network != nil && spec.Network.Domain != "" {
   113  
   114  		if conf.OIDC != "" {
   115  			values.Server.Config.OIDC = conf.OIDC
   116  		}
   117  
   118  		if conf.Connectors != "" && conf.Connectors != "{}\n" {
   119  			values.Server.Config.Dex = conf.Connectors
   120  
   121  			values.Dex = helm.DefaultDexValues(imageTags)
   122  
   123  			if spec.NodeSelector != nil {
   124  				for k, v := range spec.NodeSelector {
   125  					values.Dex.NodeSelector[k] = v
   126  				}
   127  			}
   128  			values.Server.Config.URL = strings.Join([]string{"https://", spec.Network.Domain}, "")
   129  		}
   130  	}
   131  
   132  	if spec.AdditionalParameters != nil {
   133  		if spec.AdditionalParameters.Server != nil {
   134  			for _, param := range spec.AdditionalParameters.Server {
   135  				values.Server.ExtraArgs = append(values.Server.ExtraArgs, param)
   136  			}
   137  		}
   138  		if spec.AdditionalParameters.ApplicationController != nil {
   139  			for _, param := range spec.AdditionalParameters.ApplicationController {
   140  				values.Controller.ExtraArgs = append(values.Controller.ExtraArgs, param)
   141  			}
   142  		}
   143  		if spec.AdditionalParameters.RepoServer != nil {
   144  			for _, param := range spec.AdditionalParameters.RepoServer {
   145  				values.RepoServer.ExtraArgs = append(values.RepoServer.ExtraArgs, param)
   146  			}
   147  		}
   148  	}
   149  
   150  	if spec.Rbac != nil {
   151  		scopes := ""
   152  		for _, scope := range spec.Rbac.Scopes {
   153  			if scopes == "" {
   154  				scopes = scope
   155  			} else {
   156  				scopes = strings.Join([]string{scopes, scope}, ", ")
   157  			}
   158  		}
   159  		if scopes != "" {
   160  			scopes = strings.Join([]string{"[", scopes, "]"}, "")
   161  		}
   162  
   163  		values.Server.RbacConfig = &helm.RbacConfig{
   164  			Csv:     spec.Rbac.Csv,
   165  			Default: spec.Rbac.Default,
   166  			Scopes:  scopes,
   167  		}
   168  	}
   169  
   170  	if spec.KnownHosts != nil && len(spec.KnownHosts) > 0 {
   171  		knownHostsStr := values.Configs.KnownHosts.Data["ssh_known_hosts"]
   172  
   173  		for _, v := range spec.KnownHosts {
   174  			knownHostsStr = strings.Join([]string{knownHostsStr, v}, "\n")
   175  		}
   176  
   177  		values.Configs.KnownHosts.Data["ssh_known_hosts"] = knownHostsStr
   178  	}
   179  
   180  	if spec.NodeSelector != nil {
   181  		for k, v := range spec.NodeSelector {
   182  			values.Dex.NodeSelector[k] = v
   183  			values.RepoServer.NodeSelector[k] = v
   184  			values.Redis.NodeSelector[k] = v
   185  			values.Controller.NodeSelector[k] = v
   186  			values.Server.NodeSelector[k] = v
   187  		}
   188  	}
   189  
   190  	if spec.Tolerations != nil {
   191  		for _, tol := range spec.Tolerations {
   192  			t := tol
   193  			values.Dex.Tolerations = append(values.Dex.Tolerations, t)
   194  			values.RepoServer.Tolerations = append(values.RepoServer.Tolerations, t)
   195  			values.Redis.Tolerations = append(values.Redis.Tolerations, t)
   196  			values.Controller.Tolerations = append(values.Controller.Tolerations, t)
   197  			values.Server.Tolerations = append(values.Server.Tolerations, t)
   198  		}
   199  	}
   200  
   201  	if spec.Redis != nil && spec.Redis.Resources != nil {
   202  		values.Redis.Resources = spec.Redis.Resources
   203  	}
   204  
   205  	if spec.Dex != nil && spec.Dex.Resources != nil {
   206  		values.Dex.Resources = spec.Dex.Resources
   207  	}
   208  
   209  	if spec.RepoServer != nil && spec.RepoServer.Resources != nil {
   210  		values.RepoServer.Resources = spec.RepoServer.Resources
   211  	}
   212  
   213  	if spec.Server != nil && spec.Server.Resources != nil {
   214  		values.Server.Resources = spec.Server.Resources
   215  	}
   216  
   217  	if spec.Controller != nil && spec.Controller.Resources != nil {
   218  		values.Controller.Resources = spec.Controller.Resources
   219  	}
   220  
   221  	return values
   222  }
   223  
   224  func (a *Argocd) GetChartInfo() *chart.Chart {
   225  	return helm.GetChartInfo()
   226  }
   227  
   228  func (a *Argocd) GetImageTags() map[string]string {
   229  	return helm.GetImageTags()
   230  }