Skip to content

Commit

Permalink
#81 calculate StateDiff by new GlobalConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-dammeier committed Oct 7, 2024
1 parent 059e39c commit 469073d
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 73 deletions.
9 changes: 4 additions & 5 deletions pkg/application/stateDiffUseCase.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@ import (
"fmt"
"github.com/cloudogu/k8s-blueprint-operator/pkg/domain"
"github.com/cloudogu/k8s-blueprint-operator/pkg/domain/ecosystem"
"sigs.k8s.io/controller-runtime/pkg/log"

"github.com/cloudogu/k8s-blueprint-operator/pkg/domainservice"
"sigs.k8s.io/controller-runtime/pkg/log"
)

type StateDiffUseCase struct {
blueprintSpecRepo blueprintSpecRepository
doguInstallationRepo doguInstallationRepository
componentInstallationRepo componentInstallationRepository
globalConfigRepo globalConfigEntryRepository
globalConfigRepo globalConfigRepository
doguConfigRepo doguConfigEntryRepository
sensitiveDoguConfigRepo sensitiveDoguConfigEntryRepository
}
Expand All @@ -24,7 +23,7 @@ func NewStateDiffUseCase(
blueprintSpecRepo domainservice.BlueprintSpecRepository,
doguInstallationRepo domainservice.DoguInstallationRepository,
componentInstallationRepo domainservice.ComponentInstallationRepository,
globalConfigRepo domainservice.GlobalConfigEntryRepository,
globalConfigRepo domainservice.GlobalConfigRepository,
doguConfigRepo domainservice.DoguConfigEntryRepository,
sensitiveDoguConfigRepo domainservice.SensitiveDoguConfigEntryRepository,
) *StateDiffUseCase {
Expand Down Expand Up @@ -91,7 +90,7 @@ func (useCase *StateDiffUseCase) collectEcosystemState(ctx context.Context, effe
installedComponents, componentErr := useCase.componentInstallationRepo.GetAll(ctx)
// load current config
logger.Info("collect needed global config")
globalConfig, globalConfigErr := useCase.globalConfigRepo.GetAllByKey(ctx, effectiveBlueprint.Config.Global.GetGlobalConfigKeys())
globalConfig, globalConfigErr := useCase.globalConfigRepo.Get(ctx)
logger.Info("collect needed dogu config")
doguConfig, doguConfigErr := useCase.doguConfigRepo.GetAllByKey(ctx, effectiveBlueprint.Config.GetDoguConfigKeys())
logger.Info("collect needed sensitive dogu config")
Expand Down
122 changes: 81 additions & 41 deletions pkg/application/stateDiffUseCase_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/cloudogu/k8s-blueprint-operator/pkg/domain/common"
"github.com/cloudogu/k8s-blueprint-operator/pkg/domain/ecosystem"
"github.com/cloudogu/k8s-blueprint-operator/pkg/domainservice"
"github.com/cloudogu/k8s-registry-lib/config"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"testing"
Expand Down Expand Up @@ -69,8 +70,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, internalTestError)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.GlobalConfigKey(nil)).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -98,8 +103,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(map[common.SimpleDoguName]*ecosystem.DoguInstallation{}, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, internalTestError)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.GlobalConfigKey(nil)).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -127,10 +136,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(map[common.SimpleDoguName]*ecosystem.DoguInstallation{}, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().
GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).
Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, domainservice.NewInternalError(assert.AnError, "internal error"))

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, domainservice.NewInternalError(assert.AnError, "internal error"))

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -160,8 +171,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(map[common.SimpleDoguName]*ecosystem.DoguInstallation{}, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().
GetAllByKey(testCtx, []common.DoguConfigKey(nil)).
Expand Down Expand Up @@ -193,8 +208,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(map[common.SimpleDoguName]*ecosystem.DoguInstallation{}, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -226,8 +245,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand All @@ -254,8 +277,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(map[common.SimpleDoguName]*ecosystem.DoguInstallation{}, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -315,8 +342,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(installedDogus, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.GlobalConfigKey(nil)).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -414,10 +445,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(installedDogus, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().
GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).
Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{}, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -483,8 +516,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(installedDogus, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().
GetAllByKey(testCtx, []common.DoguConfigKey{
Expand Down Expand Up @@ -570,8 +607,12 @@ func TestStateDiffUseCase_DetermineStateDiff(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(installedDogus, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().GetAllByKey(testCtx, blueprint.EffectiveBlueprint.Config.Global.GetGlobalConfigKeys()).Return(map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{}, nil)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, nil)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().GetAllByKey(testCtx, []common.DoguConfigKey(nil)).Return(nil, nil)
sensitiveDoguConfigRepoMock := newMockSensitiveDoguConfigEntryRepository(t)
Expand Down Expand Up @@ -679,13 +720,12 @@ func TestStateDiffUseCase_collectEcosystemState(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().
GetAllByKey(testCtx, effectiveBlueprint.Config.Global.GetGlobalConfigKeys()).
Return(
map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{},
globalConfigNotFoundError,
)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, globalConfigNotFoundError)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().
GetAllByKey(testCtx, effectiveBlueprint.Config.GetDoguConfigKeys()).
Expand All @@ -710,8 +750,9 @@ func TestStateDiffUseCase_collectEcosystemState(t *testing.T) {

// then
assert.NoError(t, err)

assert.Equal(t, ecosystem.EcosystemState{
GlobalConfig: map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{},
GlobalConfig: globalConfig,
DoguConfig: map[common.DoguConfigKey]*ecosystem.DoguConfigEntry{},
SensitiveDoguConfig: map[common.SensitiveDoguConfigKey]*ecosystem.SensitiveDoguConfigEntry{
nginxStaticSensitiveConfigKeyNginxKey1: encryptedEntry,
Expand Down Expand Up @@ -761,13 +802,12 @@ func TestStateDiffUseCase_collectEcosystemState(t *testing.T) {
doguInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
componentInstallRepoMock := newMockComponentInstallationRepository(t)
componentInstallRepoMock.EXPECT().GetAll(testCtx).Return(nil, nil)
globalConfigRepoMock := newMockGlobalConfigEntryRepository(t)
globalConfigRepoMock.EXPECT().
GetAllByKey(testCtx, effectiveBlueprint.Config.Global.GetGlobalConfigKeys()).
Return(
map[common.GlobalConfigKey]*ecosystem.GlobalConfigEntry{},
globalConfigNotFoundError,
)

globalConfigRepoMock := newMockGlobalConfigRepository(t)
entries, _ := config.MapToEntries(map[string]any{})
globalConfig := config.CreateGlobalConfig(entries)
globalConfigRepoMock.EXPECT().Get(testCtx).Return(globalConfig, globalConfigNotFoundError)

doguConfigRepoMock := newMockDoguConfigEntryRepository(t)
doguConfigRepoMock.EXPECT().
GetAllByKey(testCtx, effectiveBlueprint.Config.GetDoguConfigKeys()).
Expand Down
4 changes: 2 additions & 2 deletions pkg/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ func Bootstrap(restConfig *rest.Config, eventRecorder record.EventRecorder, name
return nil, err
}

//TODO: move maintenance mode adapter to registry lib
maintenanceMode := maintenance.New(configRegistry.GlobalConfig())

remoteDoguRegistry, err := createRemoteDoguRegistry()
Expand All @@ -82,7 +83,6 @@ func Bootstrap(restConfig *rest.Config, eventRecorder record.EventRecorder, name

doguConfigAdapter := adapterconfigetcd.NewDoguConfigRepository(configRegistry)
sensitiveDoguConfigAdapter := adapterconfigetcd.NewSensitiveDoguConfigRepository(configRegistry)
globalConfigEntryRepoAdapter := adapterconfigetcd.NewGlobalConfigRepository(configRegistry.GlobalConfig())
k8sGlobalConfigRepo := repository.NewGlobalConfigRepository(ecosystemClientSet.CoreV1().ConfigMaps(namespace))
globalConfigRepoAdapter := adapterconfigk8s.NewGlobalConfigRepository(*k8sGlobalConfigRepo)

Expand All @@ -95,7 +95,7 @@ func Bootstrap(restConfig *rest.Config, eventRecorder record.EventRecorder, name
blueprintSpecDomainUseCase := domainservice.NewValidateDependenciesDomainUseCase(remoteDoguRegistry)
blueprintValidationUseCase := application.NewBlueprintSpecValidationUseCase(blueprintSpecRepository, blueprintSpecDomainUseCase)
effectiveBlueprintUseCase := application.NewEffectiveBlueprintUseCase(blueprintSpecRepository)
stateDiffUseCase := application.NewStateDiffUseCase(blueprintSpecRepository, doguInstallationRepo, componentInstallationRepo, globalConfigEntryRepoAdapter, doguConfigAdapter, sensitiveDoguConfigAdapter)
stateDiffUseCase := application.NewStateDiffUseCase(blueprintSpecRepository, doguInstallationRepo, componentInstallationRepo, globalConfigRepoAdapter, doguConfigAdapter, sensitiveDoguConfigAdapter)
doguInstallationUseCase := application.NewDoguInstallationUseCase(blueprintSpecRepository, doguInstallationRepo, healthConfigRepo)
componentInstallationUseCase := application.NewComponentInstallationUseCase(blueprintSpecRepository, componentInstallationRepo, healthConfigRepo)
ecosystemHealthUseCase := application.NewEcosystemHealthUseCase(doguInstallationUseCase, componentInstallationUseCase, healthConfigRepo)
Expand Down
3 changes: 2 additions & 1 deletion pkg/domain/ecosystem/EcosystemState.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ package ecosystem

import (
"github.com/cloudogu/k8s-blueprint-operator/pkg/domain/common"
"github.com/cloudogu/k8s-registry-lib/config"
"golang.org/x/exp/maps"
)

type EcosystemState struct {
InstalledDogus map[common.SimpleDoguName]*DoguInstallation
InstalledComponents map[common.SimpleComponentName]*ComponentInstallation
GlobalConfig map[common.GlobalConfigKey]*GlobalConfigEntry
GlobalConfig config.GlobalConfig
DoguConfig map[common.DoguConfigKey]*DoguConfigEntry
SensitiveDoguConfig map[common.SensitiveDoguConfigKey]*SensitiveDoguConfigEntry
}
Expand Down
Loading

0 comments on commit 469073d

Please sign in to comment.