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 }