Skip to content

Commit 494d30b

Browse files
committed
edit resource
1 parent aa670f1 commit 494d30b

File tree

2 files changed

+66
-4
lines changed

2 files changed

+66
-4
lines changed

pkg/configDiff/DeploymentConfigurationService.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,8 @@ func (impl *DeploymentConfigurationServiceImpl) getConfigDataForAppConfiguration
375375
return configDataDto, nil
376376
}
377377

378-
func (impl *DeploymentConfigurationServiceImpl) getCmCsEditDataForPublishedOnly(configDataQueryParams *bean2.ConfigDataQueryParams, envId, appId int) (*bean2.DeploymentAndCmCsConfigDto, error) {
378+
func (impl *DeploymentConfigurationServiceImpl) getCmCsEditDataForPublishedOnly(ctx context.Context, configDataQueryParams *bean2.ConfigDataQueryParams, envId,
379+
appId int, clusterId int, userHasAdminAccess bool, systemMetadata *resourceQualifiers.SystemMetadata) (*bean2.DeploymentAndCmCsConfigDto, error) {
379380
configDataDto := &bean2.DeploymentAndCmCsConfigDto{}
380381

381382
var resourceType bean.ResourceType
@@ -401,11 +402,29 @@ func (impl *DeploymentConfigurationServiceImpl) getCmCsEditDataForPublishedOnly(
401402
impl.logger.Errorw("getCmCsEditDataForPublishedOnly, error in converting to json raw message", "configDataQueryParams", configDataQueryParams, "err", err)
402403
return nil, err
403404
}
405+
resolvedCmCsMetadataDto, err := impl.ResolveCmCs(ctx, envId, appId, clusterId, userHasAdminAccess, configDataQueryParams.ResourceName, resourceType, systemMetadata)
406+
if err != nil {
407+
impl.logger.Errorw("error in resolving cm and cs for published only config only response", "appId", appId, "envId", envId, "err", err)
408+
return nil, err
409+
}
404410

405411
cmCsConfig := bean2.NewDeploymentAndCmCsConfig().WithConfigData(respJson).WithResourceType(resourceType)
412+
406413
if resourceType == bean.CS {
414+
resolvedConfigDataStringJson, err := utils.ConvertToJsonRawMessage(resolvedCmCsMetadataDto.ResolvedSecretData)
415+
if err != nil {
416+
impl.logger.Errorw("getCmCsPublishedConfigResponse, error in ConvertToJsonRawMessage ", "err", err)
417+
return nil, err
418+
}
419+
cmCsConfig.WithResolvedValue(resolvedConfigDataStringJson).WithVariableSnapshot(resolvedCmCsMetadataDto.VariableMapCS)
407420
configDataDto.WithSecretData(cmCsConfig)
408421
} else if resourceType == bean.CM {
422+
resolvedConfigDataStringJson, err := utils.ConvertToJsonRawMessage(resolvedCmCsMetadataDto.ResolvedConfigMapData)
423+
if err != nil {
424+
impl.logger.Errorw("getCmCsPublishedConfigResponse, error in ConvertToJsonRawMessage for resolvedJson", "ResolvedConfigMapData", resolvedCmCsMetadataDto.ResolvedConfigMapData, "err", err)
425+
return nil, err
426+
}
427+
cmCsConfig.WithResolvedValue(resolvedConfigDataStringJson).WithVariableSnapshot(resolvedCmCsMetadataDto.VariableMapCM)
409428
configDataDto.WithConfigMapData(cmCsConfig)
410429
}
411430
return configDataDto, nil
@@ -439,7 +458,7 @@ func (impl *DeploymentConfigurationServiceImpl) getCmCsPublishedConfigResponse(c
439458
return nil, err
440459
}
441460

442-
resolvedCmCsMetadataDto, err := impl.ResolveCmCs(ctx, envId, appId, clusterId, userHasAdminAccess, systemMetadata)
461+
resolvedCmCsMetadataDto, err := impl.ResolveCmCs(ctx, envId, appId, clusterId, userHasAdminAccess, "", "", systemMetadata)
443462
if err != nil {
444463
impl.logger.Errorw("error in resolving cm and cs for published only config only response", "appId", appId, "envId", envId, "err", err)
445464
return nil, err
@@ -508,7 +527,8 @@ func (impl *DeploymentConfigurationServiceImpl) getMergedCmCs(envId, appId int)
508527
}, nil
509528
}
510529

511-
func (impl *DeploymentConfigurationServiceImpl) ResolveCmCs(ctx context.Context, envId, appId, clusterId int, userHasAdminAccess bool, systemMetadata *resourceQualifiers.SystemMetadata) (*bean2.ResolvedCmCsMetadataDto, error) {
530+
func (impl *DeploymentConfigurationServiceImpl) ResolveCmCs(ctx context.Context, envId, appId, clusterId int, userHasAdminAccess bool,
531+
resourceName string, resourceType bean.ResourceType, systemMetadata *resourceQualifiers.SystemMetadata) (*bean2.ResolvedCmCsMetadataDto, error) {
512532
scope := resourceQualifiers.Scope{
513533
AppId: appId,
514534
EnvId: envId,
@@ -520,6 +540,10 @@ func (impl *DeploymentConfigurationServiceImpl) ResolveCmCs(ctx context.Context,
520540
impl.logger.Errorw("error in getting merged cm cs", "appId", appId, "envId", envId, "err", err)
521541
return nil, err
522542
}
543+
// if resourceName is provided then, resolve cmcs request is for single resource, then remove other data from merged cmCs
544+
if len(resourceName) > 0 {
545+
helper.FilterOutMergedCmCsForResourceName(cmcsMetadataDto, resourceName, resourceType)
546+
}
523547
resolvedConfigList, resolvedSecretList, variableMapCM, variableMapCS, err := impl.scopedVariableManager.ResolveCMCS(ctx, scope, cmcsMetadataDto.ConfigAppLevelId, cmcsMetadataDto.ConfigEnvLevelId, cmcsMetadataDto.CmMap, cmcsMetadataDto.SecretMap)
524548
if err != nil {
525549
impl.logger.Errorw("error in resolving CM/CS", "scope", scope, "appId", appId, "envId", envId, "err", err)
@@ -617,7 +641,7 @@ func (impl *DeploymentConfigurationServiceImpl) getPublishedConfigData(ctx conte
617641
appId, envId, clusterId int, userHasAdminAccess bool, systemMetadata *resourceQualifiers.SystemMetadata) (*bean2.DeploymentAndCmCsConfigDto, error) {
618642

619643
if configDataQueryParams.IsRequestMadeForOneResource() {
620-
return impl.getCmCsEditDataForPublishedOnly(configDataQueryParams, envId, appId)
644+
return impl.getCmCsEditDataForPublishedOnly(ctx, configDataQueryParams, envId, appId, clusterId, userHasAdminAccess, systemMetadata)
621645
}
622646
//ConfigMapsData and SecretsData are populated here
623647
configData, err := impl.getCmCsPublishedConfigResponse(ctx, envId, appId, clusterId, userHasAdminAccess, systemMetadata)

pkg/configDiff/helper/helper.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package helper
22

33
import (
4+
bean3 "github.com/devtron-labs/devtron/pkg/bean"
45
bean2 "github.com/devtron-labs/devtron/pkg/configDiff/bean"
6+
"github.com/devtron-labs/devtron/pkg/pipeline/bean"
57
)
68

79
func GetCombinedPropertiesMap(cmcsKeyPropertyAppLevelMap, cmcsKeyPropertyEnvLevelMap map[string]*bean2.ConfigProperty) []*bean2.ConfigProperty {
@@ -18,3 +20,39 @@ func GetCombinedPropertiesMap(cmcsKeyPropertyAppLevelMap, cmcsKeyPropertyEnvLeve
1820
}
1921
return combinedProperties
2022
}
23+
24+
func GetKeysToDelete(cmcsData map[string]*bean3.ConfigData, resourceName string) []string {
25+
keysToDelete := make([]string, 0, len(cmcsData))
26+
for key, _ := range cmcsData {
27+
if key != resourceName {
28+
keysToDelete = append(keysToDelete, key)
29+
}
30+
}
31+
return keysToDelete
32+
}
33+
34+
func FilterOutMergedCmCsForResourceName(cmcsMerged *bean2.CmCsMetadataDto, resourceName string, resourceType bean.ResourceType) {
35+
for _, key := range GetKeysToDelete(cmcsMerged.SecretMap, resourceName) {
36+
delete(cmcsMerged.SecretMap, key)
37+
}
38+
for _, key := range GetKeysToDelete(cmcsMerged.CmMap, resourceName) {
39+
delete(cmcsMerged.CmMap, key)
40+
}
41+
42+
// handle the case when a cm and a cs can have a same name, in that case, check from resource type if correct key is filtered out or not
43+
if resourceType == bean.CS {
44+
if len(cmcsMerged.CmMap) > 0 {
45+
// delete all elements from cmMap as requested resource is of secret type
46+
for key, _ := range cmcsMerged.CmMap {
47+
delete(cmcsMerged.CmMap, key)
48+
}
49+
}
50+
} else if resourceType == bean.CM {
51+
if len(cmcsMerged.SecretMap) > 0 {
52+
// delete all elements from secretMap as requested resource is of secret type
53+
for key, _ := range cmcsMerged.SecretMap {
54+
delete(cmcsMerged.SecretMap, key)
55+
}
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)