diff --git a/e2e-tests/playwright/support/server/default_config.ts b/e2e-tests/playwright/support/server/default_config.ts index 73542029d8..1caad2e2d2 100644 --- a/e2e-tests/playwright/support/server/default_config.ts +++ b/e2e-tests/playwright/support/server/default_config.ts @@ -566,6 +566,7 @@ const defaultServerConfig: AdminConfig = { ClientCert: '', ClientKey: '', Trace: '', + IgnoredPurgeIndexes: '', }, BleveSettings: { IndexDir: '', diff --git a/server/i18n/en.json b/server/i18n/en.json index 409430c3cb..7b4b555d02 100644 --- a/server/i18n/en.json +++ b/server/i18n/en.json @@ -8687,6 +8687,10 @@ "id": "model.config.is_valid.elastic_search.enable_searching.app_error", "translation": "Elasticsearch EnableIndexing setting must be set to true when Elasticsearch EnableSearching is set to true" }, + { + "id": "model.config.is_valid.elastic_search.ignored_indexes_dash_prefix.app_error", + "translation": "Ignored indexes for purge should not start with dash." + }, { "id": "model.config.is_valid.elastic_search.live_indexing_batch_size.app_error", "translation": "Elasticsearch Live Indexing Batch Size must be at least 1." diff --git a/server/public/model/config.go b/server/public/model/config.go index 8ad1d72d0a..095f2f4548 100644 --- a/server/public/model/config.go +++ b/server/public/model/config.go @@ -2628,6 +2628,7 @@ type ElasticsearchSettings struct { ClientCert *string `access:"environment_elasticsearch,write_restrictable,cloud_restrictable"` ClientKey *string `access:"environment_elasticsearch,write_restrictable,cloud_restrictable"` Trace *string `access:"environment_elasticsearch,write_restrictable,cloud_restrictable"` + IgnoredPurgeIndexes *string `access:"environment_elasticsearch,write_restrictable,cloud_restrictable"` // telemetry: none } func (s *ElasticsearchSettings) SetDefaults() { @@ -2726,6 +2727,10 @@ func (s *ElasticsearchSettings) SetDefaults() { if s.Trace == nil { s.Trace = NewString("") } + + if s.IgnoredPurgeIndexes == nil { + s.IgnoredPurgeIndexes = NewString("") + } } type BleveSettings struct { @@ -3874,6 +3879,15 @@ func (s *ElasticsearchSettings) isValid() *AppError { return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.request_timeout_seconds.app_error", nil, "", http.StatusBadRequest) } + if ign := *s.IgnoredPurgeIndexes; ign != "" { + s := strings.Split(ign, ",") + for _, ix := range s { + if strings.HasPrefix(ix, "-") { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.ignored_indexes_dash_prefix.app_error", nil, "", http.StatusBadRequest) + } + } + } + return nil } diff --git a/webapp/channels/src/components/admin_console/__snapshots__/elasticsearch_settings.test.jsx.snap b/webapp/channels/src/components/admin_console/__snapshots__/elasticsearch_settings.test.jsx.snap index eb330530b7..d2a5b76c64 100644 --- a/webapp/channels/src/components/admin_console/__snapshots__/elasticsearch_settings.test.jsx.snap +++ b/webapp/channels/src/components/admin_console/__snapshots__/elasticsearch_settings.test.jsx.snap @@ -362,6 +362,25 @@ exports[`components/ElasticSearchSettings should match snapshot, disabled 1`] = } } /> + + } + id="ignoredPurgeIndexes" + label={ + + } + onChange={[Function]} + placeholder="E.g.: .opendistro*,.security*" + setByEnv={false} + /> + + } + id="ignoredPurgeIndexes" + label={ + + } + onChange={[Function]} + placeholder="E.g.: .opendistro*,.security*" + setByEnv={false} + /> )} /> + + } + placeholder={'E.g.: .opendistro*,.security*'} + helpText={ + + } + value={this.state.ignoredPurgeIndexes} + disabled={this.props.isDisabled || !this.state.enableIndexing} + onChange={this.handleSettingChanged} + setByEnv={this.isSetByEnv('ElasticsearchSettings.IgnoredPurgeIndexes')} + />