Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: Deployment strategy for custom charts #1823

Merged
merged 11 commits into from
Jun 8, 2022
7 changes: 4 additions & 3 deletions Wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ import (
appStoreDeploymentGitopsTool "github.com/devtron-labs/devtron/pkg/appStore/deployment/tool/gitops"
"github.com/devtron-labs/devtron/pkg/appWorkflow"
"github.com/devtron-labs/devtron/pkg/attributes"
"github.com/devtron-labs/devtron/pkg/chart"
chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
"github.com/devtron-labs/devtron/pkg/commonService"
delete2 "github.com/devtron-labs/devtron/pkg/delete"
Expand Down Expand Up @@ -139,7 +140,7 @@ func InitializeApp() (*App, error) {
util3.GetACDAuthConfig,
wire.Value(chartRepoRepository.RefChartDir("scripts/devtron-reference-helm-charts")),
wire.Value(appStoreBean.RefChartProxyDir("scripts/devtron-reference-helm-charts")),
wire.Value(pipeline.DefaultChart("reference-app-rolling")),
wire.Value(chart.DefaultChart("reference-app-rolling")),
wire.Value(util.ChartWorkingDir("/tmp/charts/")),
session.SettingsManager,
session.CDSettingsManager,
Expand Down Expand Up @@ -216,8 +217,8 @@ func InitializeApp() (*App, error) {
wire.Bind(new(repository.DockerArtifactStoreRepository), new(*repository.DockerArtifactStoreRepositoryImpl)),
util.NewChartTemplateServiceImpl,
wire.Bind(new(util.ChartTemplateService), new(*util.ChartTemplateServiceImpl)),
pipeline.NewChartServiceImpl,
wire.Bind(new(pipeline.ChartService), new(*pipeline.ChartServiceImpl)),
chart.NewChartServiceImpl,
wire.Bind(new(chart.ChartService), new(*chart.ChartServiceImpl)),
pipeline.NewBulkUpdateServiceImpl,
wire.Bind(new(pipeline.BulkUpdateService), new(*pipeline.BulkUpdateServiceImpl)),

Expand Down
6 changes: 3 additions & 3 deletions api/deployment/DeploymentConfigRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"encoding/json"
"fmt"
"github.com/devtron-labs/devtron/api/restHandler/common"
"github.com/devtron-labs/devtron/pkg/chart"
chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/sql"
"github.com/devtron-labs/devtron/pkg/user"
"github.com/devtron-labs/devtron/pkg/user/casbin"
Expand All @@ -32,7 +32,7 @@ type DeploymentConfigRestHandlerImpl struct {
enforcer casbin.Enforcer
validator *validator.Validate
refChartDir chartRepoRepository.RefChartDir
chartService pipeline.ChartService
chartService chart.ChartService
chartRefRepository chartRepoRepository.ChartRefRepository
}

Expand All @@ -46,7 +46,7 @@ type DeploymentChartInfo struct {
}

func NewDeploymentConfigRestHandlerImpl(Logger *zap.SugaredLogger, userAuthService user.UserService, enforcer casbin.Enforcer, validator *validator.Validate,
refChartDir chartRepoRepository.RefChartDir, chartService pipeline.ChartService, chartRefRepository chartRepoRepository.ChartRefRepository) *DeploymentConfigRestHandlerImpl {
refChartDir chartRepoRepository.RefChartDir, chartService chart.ChartService, chartRefRepository chartRepoRepository.ChartRefRepository) *DeploymentConfigRestHandlerImpl {
return &DeploymentConfigRestHandlerImpl{
Logger: Logger,
userAuthService: userAuthService,
Expand Down
5 changes: 3 additions & 2 deletions api/restHandler/BulkUpdateRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/devtron-labs/devtron/internal/sql/repository/security"
"github.com/devtron-labs/devtron/pkg/appClone"
"github.com/devtron-labs/devtron/pkg/appWorkflow"
"github.com/devtron-labs/devtron/pkg/chart"
request "github.com/devtron-labs/devtron/pkg/cluster"
"github.com/devtron-labs/devtron/pkg/pipeline"
security2 "github.com/devtron-labs/devtron/pkg/security"
Expand All @@ -34,7 +35,7 @@ type BulkUpdateRestHandlerImpl struct {
ciHandler pipeline.CiHandler
logger *zap.SugaredLogger
bulkUpdateService pipeline.BulkUpdateService
chartService pipeline.ChartService
chartService chart.ChartService
propertiesConfigService pipeline.PropertiesConfigService
dbMigrationService pipeline.DbMigrationService
application application.ServiceClient
Expand All @@ -58,7 +59,7 @@ type BulkUpdateRestHandlerImpl struct {

func NewBulkUpdateRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, logger *zap.SugaredLogger,
bulkUpdateService pipeline.BulkUpdateService,
chartService pipeline.ChartService,
chartService chart.ChartService,
propertiesConfigService pipeline.PropertiesConfigService,
dbMigrationService pipeline.DbMigrationService,
application application.ServiceClient,
Expand Down
6 changes: 3 additions & 3 deletions api/restHandler/ChartRefRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package restHandler

import (
"github.com/devtron-labs/devtron/api/restHandler/common"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/chart"
"github.com/gorilla/mux"
"go.uber.org/zap"
"net/http"
Expand All @@ -33,11 +33,11 @@ type ChartRefRestHandler interface {
}

type ChartRefRestHandlerImpl struct {
chartService pipeline.ChartService
chartService chart.ChartService
logger *zap.SugaredLogger
}

func NewChartRefRestHandlerImpl(chartService pipeline.ChartService, logger *zap.SugaredLogger) *ChartRefRestHandlerImpl {
func NewChartRefRestHandlerImpl(chartService chart.ChartService, logger *zap.SugaredLogger) *ChartRefRestHandlerImpl {
handler := &ChartRefRestHandlerImpl{chartService: chartService, logger: logger}
return handler
}
Expand Down
5 changes: 3 additions & 2 deletions api/restHandler/ConfigMapRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/devtron-labs/devtron/api/bean"
"github.com/devtron-labs/devtron/api/restHandler/common"
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
"github.com/devtron-labs/devtron/pkg/chart"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/team"
"github.com/devtron-labs/devtron/pkg/user"
Expand Down Expand Up @@ -58,7 +59,7 @@ type ConfigMapRestHandler interface {
type ConfigMapRestHandlerImpl struct {
pipelineBuilder pipeline.PipelineBuilder
Logger *zap.SugaredLogger
chartService pipeline.ChartService
chartService chart.ChartService
userAuthService user.UserService
teamService team.TeamService
enforcer casbin.Enforcer
Expand All @@ -68,7 +69,7 @@ type ConfigMapRestHandlerImpl struct {
}

func NewConfigMapRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, Logger *zap.SugaredLogger,
chartService pipeline.ChartService, userAuthService user.UserService, teamService team.TeamService,
chartService chart.ChartService, userAuthService user.UserService, teamService team.TeamService,
enforcer casbin.Enforcer, pipelineRepository pipelineConfig.PipelineRepository,
enforcerUtil rbac.EnforcerUtil, configMapService pipeline.ConfigMapService) *ConfigMapRestHandlerImpl {
return &ConfigMapRestHandlerImpl{
Expand Down
11 changes: 6 additions & 5 deletions api/restHandler/CoreAppRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"github.com/devtron-labs/devtron/pkg/app"
"github.com/devtron-labs/devtron/pkg/appWorkflow"
"github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/chart"
chartRepoRepository "github.com/devtron-labs/devtron/pkg/chartRepo/repository"
repository2 "github.com/devtron-labs/devtron/pkg/cluster/repository"
"github.com/devtron-labs/devtron/pkg/pipeline"
Expand Down Expand Up @@ -73,7 +74,7 @@ type CoreAppRestHandlerImpl struct {
appLabelService app.AppLabelService
pipelineBuilder pipeline.PipelineBuilder
gitRegistryService pipeline.GitRegistryConfig
chartService pipeline.ChartService
chartService chart.ChartService
configMapService pipeline.ConfigMapService
appListingService app.AppListingService
propertiesConfigService pipeline.PropertiesConfigService
Expand All @@ -90,7 +91,7 @@ type CoreAppRestHandlerImpl struct {

func NewCoreAppRestHandlerImpl(logger *zap.SugaredLogger, userAuthService user.UserService, validator *validator.Validate, enforcerUtil rbac.EnforcerUtil,
enforcer casbin.Enforcer, appLabelService app.AppLabelService, pipelineBuilder pipeline.PipelineBuilder, gitRegistryService pipeline.GitRegistryConfig,
chartService pipeline.ChartService, configMapService pipeline.ConfigMapService, appListingService app.AppListingService,
chartService chart.ChartService, configMapService pipeline.ConfigMapService, appListingService app.AppListingService,
propertiesConfigService pipeline.PropertiesConfigService, appWorkflowService appWorkflow.AppWorkflowService,
materialRepository pipelineConfig.MaterialRepository, gitProviderRepo repository.GitProviderRepository,
appWorkflowRepository appWorkflow2.AppWorkflowRepository, environmentRepository repository2.EnvironmentRepository, configMapRepository chartConfig.ConfigMapRepository,
Expand Down Expand Up @@ -1262,7 +1263,7 @@ func (handler CoreAppRestHandlerImpl) createDockerConfig(appId int, dockerConfig
func (handler CoreAppRestHandlerImpl) createDeploymentTemplate(ctx context.Context, appId int, deploymentTemplate *appBean.DeploymentTemplate, userId int32) (error, int) {
handler.logger.Infow("Create App - creating deployment template", "appId", appId, "DeploymentTemplate", deploymentTemplate)

createDeploymentTemplateRequest := pipeline.TemplateRequest{
createDeploymentTemplateRequest := chart.TemplateRequest{
AppId: appId,
ChartRefId: deploymentTemplate.ChartRefId,
IsAppMetricsEnabled: deploymentTemplate.ShowAppMetrics,
Expand All @@ -1286,7 +1287,7 @@ func (handler CoreAppRestHandlerImpl) createDeploymentTemplate(ctx context.Conte
}

//updating app metrics
appMetricsRequest := pipeline.AppMetricEnableDisableRequest{
appMetricsRequest := chart.AppMetricEnableDisableRequest{
AppId: appId,
UserId: userId,
IsAppMetricsEnabled: deploymentTemplate.ShowAppMetrics,
Expand Down Expand Up @@ -1712,7 +1713,7 @@ func (handler CoreAppRestHandlerImpl) createEnvDeploymentTemplate(appId int, use
}

//updating app metrics
appMetricsRequest := &pipeline.AppMetricEnableDisableRequest{
appMetricsRequest := &chart.AppMetricEnableDisableRequest{
AppId: appId,
UserId: userId,
EnvironmentId: envId,
Expand Down
22 changes: 16 additions & 6 deletions api/restHandler/app/DeploymentPipelineRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/devtron-labs/devtron/internal/sql/repository/security"
"github.com/devtron-labs/devtron/internal/util"
"github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/chart"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/user/casbin"
"github.com/go-pg/pg"
Expand Down Expand Up @@ -77,7 +78,7 @@ func (handler PipelineConfigRestHandlerImpl) ConfigureDeploymentTemplateForApp(w
common.WriteJsonResp(w, err, "Unauthorized User", http.StatusUnauthorized)
return
}
var templateRequest pipeline.TemplateRequest
var templateRequest chart.TemplateRequest
err = decoder.Decode(&templateRequest)
templateRequest.UserId = userId
if err != nil {
Expand All @@ -86,11 +87,13 @@ func (handler PipelineConfigRestHandlerImpl) ConfigureDeploymentTemplateForApp(w
return
}
chartRefId := templateRequest.ChartRefId

validate, err2 := handler.chartService.DeploymentTemplateValidate(templateRequest.ValuesOverride, chartRefId)
if !validate {
common.WriteJsonResp(w, err2, nil, http.StatusBadRequest)
return
}

handler.Logger.Infow("request payload, ConfigureDeploymentTemplateForApp", "payload", templateRequest)
err = handler.validator.Struct(templateRequest)
if err != nil {
Expand Down Expand Up @@ -322,7 +325,7 @@ func (handler PipelineConfigRestHandlerImpl) EnvConfigOverrideCreate(w http.Resp
}(ctx.Done(), cn.CloseNotify())
}
ctx = context.WithValue(r.Context(), "token", token)
templateRequest := pipeline.TemplateRequest{
templateRequest := chart.TemplateRequest{
AppId: appId,
ChartRefId: envConfigProperties.ChartRefId,
ValuesOverride: []byte("{}"),
Expand Down Expand Up @@ -486,6 +489,13 @@ func (handler PipelineConfigRestHandlerImpl) GetDeploymentTemplate(w http.Respon
appConfigResponse := make(map[string]interface{})
appConfigResponse["globalConfig"] = nil

err = handler.chartService.CheckChartExists(chartRefId)
if err != nil {
handler.Logger.Errorw("refChartDir Not Found err, JsonSchemaExtractFromFile", err)
common.WriteJsonResp(w, err, nil, http.StatusForbidden)
return
}

schema, readme, err := handler.chartService.GetSchemaAndReadmeForTemplateByChartRefId(chartRefId)
if err != nil {
handler.Logger.Errorw("err in getting schema and readme, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
Expand Down Expand Up @@ -761,7 +771,7 @@ func (handler PipelineConfigRestHandlerImpl) UpdateAppOverride(w http.ResponseWr
return
}

var templateRequest pipeline.TemplateRequest
var templateRequest chart.TemplateRequest
err = decoder.Decode(&templateRequest)
templateRequest.UserId = userId
if err != nil {
Expand Down Expand Up @@ -1043,7 +1053,7 @@ func (handler PipelineConfigRestHandlerImpl) AppMetricsEnableDisable(w http.Resp
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
var appMetricEnableDisableRequest pipeline.AppMetricEnableDisableRequest
var appMetricEnableDisableRequest chart.AppMetricEnableDisableRequest
err = decoder.Decode(&appMetricEnableDisableRequest)
appMetricEnableDisableRequest.AppId = appId
appMetricEnableDisableRequest.UserId = userId
Expand Down Expand Up @@ -1102,7 +1112,7 @@ func (handler PipelineConfigRestHandlerImpl) EnvMetricsEnableDisable(w http.Resp
return
}
decoder := json.NewDecoder(r.Body)
var appMetricEnableDisableRequest pipeline.AppMetricEnableDisableRequest
var appMetricEnableDisableRequest chart.AppMetricEnableDisableRequest
err = decoder.Decode(&appMetricEnableDisableRequest)
appMetricEnableDisableRequest.UserId = userId
appMetricEnableDisableRequest.AppId = appId
Expand Down Expand Up @@ -1678,7 +1688,7 @@ func (handler PipelineConfigRestHandlerImpl) UpgradeForAllApps(w http.ResponseWr
}

decoder := json.NewDecoder(r.Body)
var chartUpgradeRequest pipeline.ChartUpgradeRequest
var chartUpgradeRequest chart.ChartUpgradeRequest
err = decoder.Decode(&chartUpgradeRequest)
if err != nil {
handler.Logger.Errorw("request err, UpgradeForAllApps", "err", err, "payload", chartUpgradeRequest)
Expand Down
5 changes: 3 additions & 2 deletions api/restHandler/app/PipelineConfigRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/devtron-labs/devtron/pkg/chart"
"io"
"net/http"
"strconv"
Expand Down Expand Up @@ -89,7 +90,7 @@ type PipelineConfigRestHandlerImpl struct {
ciPipelineRepository pipelineConfig.CiPipelineRepository
ciHandler pipeline.CiHandler
Logger *zap.SugaredLogger
chartService pipeline.ChartService
chartService chart.ChartService
propertiesConfigService pipeline.PropertiesConfigService
dbMigrationService pipeline.DbMigrationService
application application.ServiceClient
Expand All @@ -113,7 +114,7 @@ type PipelineConfigRestHandlerImpl struct {
}

func NewPipelineRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, Logger *zap.SugaredLogger,
chartService pipeline.ChartService,
chartService chart.ChartService,
propertiesConfigService pipeline.PropertiesConfigService,
dbMigrationService pipeline.DbMigrationService,
application application.ServiceClient,
Expand Down
36 changes: 20 additions & 16 deletions internal/util/ChartService.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,40 +315,44 @@ func (impl ChartTemplateServiceImpl) getValues(directory string) (values *ChartV
appOverrideByte, err = ioutil.ReadFile(filepath.Clean(filepath.Join(directory, file.Name())))
if err != nil {
impl.logger.Errorw("failed reading data from file", "err", err)
}
appOverrideByte, err = yaml.YAMLToJSON(appOverrideByte)
if err != nil {
return nil, err
} else {
appOverrideByte, err = yaml.YAMLToJSON(appOverrideByte)
if err != nil {
return nil, err
}
}
}
if name == "env-values.yaml" || name == "env-values.yml" {
envOverrideByte, err = ioutil.ReadFile(filepath.Clean(filepath.Join(directory, file.Name())))
if err != nil {
impl.logger.Errorw("failed reading data from file", "err", err)
}
envOverrideByte, err = yaml.YAMLToJSON(envOverrideByte)
if err != nil {
return nil, err
} else {
envOverrideByte, err = yaml.YAMLToJSON(envOverrideByte)
if err != nil {
return nil, err
}
}
}
if name == "release-values.yaml" || name == "release-values.yml" {
releaseOverrideByte, err = ioutil.ReadFile(filepath.Clean(filepath.Join(directory, file.Name())))
if err != nil {
impl.logger.Errorw("failed reading data from file", "err", err)
}
releaseOverrideByte, err = yaml.YAMLToJSON(releaseOverrideByte)
if err != nil {
return nil, err
} else {
releaseOverrideByte, err = yaml.YAMLToJSON(releaseOverrideByte)
if err != nil {
return nil, err
}
}
}
if name == "pipeline-values.yaml" || name == "pipeline-values.yml" {
pipelineOverrideByte, err = ioutil.ReadFile(filepath.Clean(filepath.Join(directory, file.Name())))
if err != nil {
impl.logger.Errorw("failed reading data from file", "err", err)
}
pipelineOverrideByte, err = yaml.YAMLToJSON(pipelineOverrideByte)
if err != nil {
return nil, err
} else {
pipelineOverrideByte, err = yaml.YAMLToJSON(pipelineOverrideByte)
if err != nil {
return nil, err
}
}
}
}
Expand Down
Loading