Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions env_gen.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
| ARGO_AUTO_SYNC_ENABLED | true | |
| ARGO_GIT_COMMIT_RETRY_COUNT_ON_CONFLICT | 3 | |
| ARGO_GIT_COMMIT_RETRY_DELAY_ON_CONFLICT | 1 | |
| ARGO_REPO_REGISTER_RETRY_COUNT | 3 | |
| ARGO_REPO_REGISTER_RETRY_DELAY | 10 | |
| AZURE_ACCOUNT_KEY | | |
| AZURE_ACCOUNT_NAME | | |
| AZURE_BLOB_CONTAINER_CI_CACHE | | |
Expand Down
19 changes: 19 additions & 0 deletions pkg/app/AppService.go
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,25 @@ type ReleaseAttributes struct {
AppMetrics *bool
}

func NewReleaseAttributes(image, imageTag, pipelineName, deploymentStrategy string, appId, envId, pipelineReleaseCounter int, appMetricsEnabled *bool) *ReleaseAttributes {
releaseAttribute := &ReleaseAttributes{
Name: image,
Tag: imageTag,
PipelineName: pipelineName,
ReleaseVersion: strconv.Itoa(pipelineReleaseCounter),
DeploymentType: deploymentStrategy,
App: strconv.Itoa(appId),
Env: strconv.Itoa(envId),
AppMetrics: appMetricsEnabled,
}
return releaseAttribute
}

func (releaseAttributes *ReleaseAttributes) RenderJson(jsonTemplate string) (string, error) {
override, err := util2.Tprintf(jsonTemplate, releaseAttributes)
return override, err
}

func (impl *AppServiceImpl) UpdateInstalledAppVersionHistoryByACDObject(app *v1alpha1.Application, installedAppVersionHistoryId int, updateTimedOutStatus bool) error {
installedAppVersionHistory, err := impl.installedAppVersionHistoryRepository.GetInstalledAppVersionHistory(installedAppVersionHistoryId)
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions pkg/chart/ChartService.go
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ func (impl *ChartServiceImpl) chartAdaptor(chart *chartRepoRepository.Chart, isA
CurrentViewEditor: chart.CurrentViewEditor,
GitRepoUrl: gitRepoUrl,
IsCustomGitRepository: chart.IsCustomGitRepository,
ImageDescriptorTemplate: chart.ImageDescriptorTemplate,
}
if chart.Latest {
templateRequest.LatestChartVersion = chart.ChartVersion
Expand Down
1 change: 1 addition & 0 deletions pkg/chart/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type TemplateRequest struct {
IsCustomGitRepository bool `json:"-"`
UserId int32 `json:"-"`
LatestChartVersion string `json:"-"`
ImageDescriptorTemplate string `json:"-"`
}

type ChartUpgradeRequest struct {
Expand Down
67 changes: 30 additions & 37 deletions pkg/deployment/manifest/ManifestCreationService.go
Original file line number Diff line number Diff line change
Expand Up @@ -662,54 +662,47 @@ func (impl *ManifestCreationServiceImpl) getConfigMapAndSecretJsonV2(ctx context
func (impl *ManifestCreationServiceImpl) getReleaseOverride(envOverride *chartConfig.EnvConfigOverride, overrideRequest *bean.ValuesOverrideRequest,
artifact *repository.CiArtifact, pipelineReleaseCounter int, strategy *chartConfig.PipelineStrategy, appMetrics *bool) (releaseOverride string, err error) {

artifactImage := artifact.Image
imageTag := strings.Split(artifactImage, ":")

imageTagLen := len(imageTag)
deploymentStrategy := ""
if strategy != nil {
deploymentStrategy = string(strategy.Strategy)
}

imageName := ""
tag := ""
if artifact != nil {
artifactImage := artifact.Image
imageTag := strings.Split(artifactImage, ":")

imageTagLen := len(imageTag)

for i := 0; i < imageTagLen-1; i++ {
if i != imageTagLen-2 {
imageName = imageName + imageTag[i] + ":"
} else {
imageName = imageName + imageTag[i]
}
}

for i := 0; i < imageTagLen-1; i++ {
if i != imageTagLen-2 {
imageName = imageName + imageTag[i] + ":"
} else {
imageName = imageName + imageTag[i]
digestConfigurationRequest := imageDigestPolicy.DigestPolicyConfigurationRequest{PipelineId: overrideRequest.PipelineId}
digestPolicyConfigurations, err := impl.imageDigestPolicyService.GetDigestPolicyConfigurations(digestConfigurationRequest)
if err != nil {
impl.logger.Errorw("error in checking if isImageDigestPolicyConfiguredForPipeline", "err", err, "clusterId", envOverride.Environment.ClusterId, "envId", envOverride.TargetEnvironment, "pipelineId", overrideRequest.PipelineId)
return "", err
}
}

appId := strconv.Itoa(overrideRequest.AppId)
envId := strconv.Itoa(overrideRequest.EnvId)
if digestPolicyConfigurations.UseDigestForTrigger() {
imageTag[imageTagLen-1] = fmt.Sprintf("%s@%s", imageTag[imageTagLen-1], artifact.ImageDigest)
}

deploymentStrategy := ""
if strategy != nil {
deploymentStrategy = string(strategy.Strategy)
tag = imageTag[imageTagLen-1]
}

digestConfigurationRequest := imageDigestPolicy.DigestPolicyConfigurationRequest{PipelineId: overrideRequest.PipelineId}
digestPolicyConfigurations, err := impl.imageDigestPolicyService.GetDigestPolicyConfigurations(digestConfigurationRequest)
override, err := app.NewReleaseAttributes(imageName, tag, overrideRequest.PipelineName, deploymentStrategy,
overrideRequest.AppId, overrideRequest.EnvId, pipelineReleaseCounter, appMetrics).RenderJson(envOverride.Chart.ImageDescriptorTemplate)
if err != nil {
impl.logger.Errorw("error in checking if isImageDigestPolicyConfiguredForPipeline", "err", err, "pipelineId", overrideRequest.PipelineId)
return "", err
return "", &util.ApiError{HttpStatusCode: http.StatusUnprocessableEntity, UserMessage: "unable to render ImageDescriptorTemplate", InternalMessage: err.Error()}
}

if digestPolicyConfigurations.UseDigestForTrigger() {
imageTag[imageTagLen-1] = fmt.Sprintf("%s@%s", imageTag[imageTagLen-1], artifact.ImageDigest)
}
releaseAttribute := app.ReleaseAttributes{
Name: imageName,
Tag: imageTag[imageTagLen-1],
PipelineName: overrideRequest.PipelineName,
ReleaseVersion: strconv.Itoa(pipelineReleaseCounter),
DeploymentType: deploymentStrategy,
App: appId,
Env: envId,
AppMetrics: appMetrics,
}

override, err := util4.Tprintf(envOverride.Chart.ImageDescriptorTemplate, releaseAttribute)
if err != nil {
return "", &util.ApiError{HttpStatusCode: http.StatusUnprocessableEntity, InternalMessage: "unable to render ImageDescriptorTemplate"}
}
if overrideRequest.AdditionalOverride != nil {
userOverride, err := overrideRequest.AdditionalOverride.MarshalJSON()
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ type ChartRefFileOpService interface {
ExtractChartIfMissing(chartData []byte, refChartDir string, location string) (*bean.ChartDataInfo, error)
GetChartInBytes(chartRefId int, deleteChart bool) ([]byte, error)
GetChartBytesForApps(ctx context.Context, appIdToAppName map[int]string) (map[int][]byte, error)
GetChartLocation(chartRefLocation string, chartData []byte) (string, error)
}

type ChartRefServiceImpl struct {
Expand Down Expand Up @@ -316,11 +317,11 @@ func (impl *ChartRefServiceImpl) extractChartInBytes(chartRef *chartRepoReposito
return manifestByteArr, nil
}

func (impl *ChartRefServiceImpl) getChartPath(chartRef *chartRepoRepository.ChartRef) (string, error) {
refChartPath := filepath.Join(bean.RefChartDirPath, chartRef.Location)
func (impl *ChartRefServiceImpl) GetChartLocation(chartRefLocation string, chartData []byte) (string, error) {
refChartPath := filepath.Join(bean.RefChartDirPath, chartRefLocation)
// For user uploaded charts ChartData will be retrieved from DB
if chartRef.ChartData != nil {
chartInfo, err := impl.ExtractChartIfMissing(chartRef.ChartData, bean.RefChartDirPath, chartRef.Location)
if chartData != nil {
chartInfo, err := impl.ExtractChartIfMissing(chartData, bean.RefChartDirPath, chartRefLocation)
if chartInfo != nil && chartInfo.TemporaryFolder != "" {
err1 := os.RemoveAll(chartInfo.TemporaryFolder)
if err1 != nil {
Expand Down Expand Up @@ -367,7 +368,7 @@ func (impl *ChartRefServiceImpl) GetChartBytesForApps(ctx context.Context, appId

// this loops run with O(len(apps)) T.C
for _, chartRef := range chartRefs {
refChartPath, err := impl.getChartPath(chartRef)
refChartPath, err := impl.GetChartLocation(chartRef.Location, chartRef.ChartData)
if err != nil {
impl.logger.Errorw("error in converting chart to bytes", "chartRefId", chartRef.Id, "err", err)
return nil, err
Expand Down
Loading