Skip to content

Commit dddb89d

Browse files
authored
Support advanced settings in fleet policy (#1545)
* Support advanced settings in fleet policy * Update docs * test configs * fmt * Update agent policy tests to use the new minimum version for advanced settings * Add support for advanced settings validation in agent policy * Check import in acc test * Add remove and set_to_default steps to acc tests, adjust schema defaults. Change MonitoringRuntimeExperimental type from Bool to String. * fmt * update changelog * fix space_id issue * fix issue with monitoring_runtime_experimental * remove space_ids from new acc tests * fix space_ids issue * Update golang * Add missing field * remove space_ids from config * remove space_ids from config * remove obsolete test configs * Move advanced_settings and monitoring to dedicated files. * fmt * Add setup-synthetics target to Makefile * Update stack versions in CI tests * Temp remove 9.2.2
1 parent a617cd5 commit dddb89d

File tree

26 files changed

+1477
-618
lines changed

26 files changed

+1477
-618
lines changed

.github/workflows/test.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ jobs:
128128
- '8.13.4'
129129
- '8.14.3'
130130
- '8.15.5'
131-
- '8.16.2'
132-
- '8.17.10'
133-
- '8.18.7'
134-
- '8.19.3'
135-
- '9.0.7'
136-
- '9.1.3'
131+
- '8.16.6'
132+
- '8.17.1'
133+
- '8.18.8'
134+
- '8.19.8'
135+
- '9.0.8'
136+
- '9.1.8'
137137
# The default runner image can be overridden for specific versions if needed
138138
# include:
139139
# - version: '8.0.1'

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## [Unreleased]
22

3+
### Added
4+
5+
- Add `advanced_settings` to `elasticstack_fleet_agent_policy` to configure agent logging, CPU limits, and download settings ([#1545](https://github.com/elastic/terraform-provider-elasticstack/pull/1545))
6+
37
### Breaking changes
48

59
#### `elasticstack_fleet_integration_policy` input block has changed to a map attribute.

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ docker-fleet: ## Start Fleet node in docker container
9292
set-kibana-password: ## Sets the ES KIBANA_SYSTEM_USERNAME's password to KIBANA_SYSTEM_PASSWORD. This expects Elasticsearch to be available at localhost:9200
9393
@ curl $(CURL_OPTS) http://localhost:9200/_security/user/$(KIBANA_SYSTEM_USERNAME)/_password -d '{"password":"$(KIBANA_SYSTEM_PASSWORD)"}'
9494

95+
.PHONY: setup-synthetics
96+
setup-synthetics: ## Creates the synthetics policy required to run Synthetics. This expects Kibana to be available at localhost:5601
97+
@ curl $(CURL_OPTS) -H "kbn-xsrf: true" http://localhost:5601/api/fleet/epm/packages/synthetics/1.2.2 -d '{"force": true}'
98+
9599
.PHONY: create-es-api-key
96100
create-es-api-key: ## Creates and outputs a new API Key. This expects Elasticsearch to be available at localhost:9200
97101
@ curl $(CURL_OPTS) http://localhost:9200/_security/api_key -d '{"name":"$(KIBANA_API_KEY_NAME)"}'

docs/resources/fleet_agent_policy.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ resource "elasticstack_fleet_agent_policy" "test_policy" {
7474
### Optional
7575

7676
- `advanced_monitoring_options` (Attributes) Advanced monitoring options for the agent policy. Includes HTTP monitoring endpoint configuration and diagnostic settings. (see [below for nested schema](#nestedatt--advanced_monitoring_options))
77+
- `advanced_settings` (Attributes) Advanced agent settings for logging, resource limits, and downloads. These settings configure the behavior of Elastic Agents enrolled in this policy. (see [below for nested schema](#nestedatt--advanced_settings))
7778
- `data_output_id` (String) The identifier for the data output.
7879
- `description` (String) The description of the agent policy.
7980
- `download_source_id` (String) The identifier for the Elastic Agent binary download server.
@@ -145,6 +146,23 @@ Optional:
145146

146147

147148

149+
<a id="nestedatt--advanced_settings"></a>
150+
### Nested Schema for `advanced_settings`
151+
152+
Optional:
153+
154+
- `download_target_directory` (String) Target directory for downloading agent updates.
155+
- `download_timeout` (String) Timeout for downloading agent updates (e.g., '2h', '30m').
156+
- `go_max_procs` (Number) Maximum number of CPUs that the agent can use (GOMAXPROCS). Set to 0 to use all available CPUs.
157+
- `logging_files_interval` (String) Interval for log file rotation (e.g., '30s', '1m', '1h').
158+
- `logging_files_keepfiles` (Number) Number of rotated log files to keep.
159+
- `logging_files_rotateeverybytes` (Number) Rotate log files when they reach this size in bytes.
160+
- `logging_level` (String) Logging level for the agent. Valid values: debug, info, warning, error.
161+
- `logging_metrics_period` (String) Period for logging agent metrics (e.g., '30s', '1m').
162+
- `logging_to_files` (Boolean) Enable logging to files.
163+
- `monitoring_runtime_experimental` (String) Experimental runtime monitoring mode. Valid values: '' (empty string to disable), 'process', 'otel'.
164+
165+
148166
<a id="nestedatt--global_data_tags"></a>
149167
### Nested Schema for `global_data_tags`
150168

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/elastic/terraform-provider-elasticstack
22

3-
go 1.25.1
3+
go 1.25.4
44

55
require (
66
github.com/disaster37/go-kibana-rest/v8 v8.5.0

internal/fleet/agent_policy/acc_test.go

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,102 @@ func TestAccResourceAgentPolicyWithRequiredVersions(t *testing.T) {
663663
})
664664
}
665665

666+
func TestAccResourceAgentPolicyWithAdvancedSettings(t *testing.T) {
667+
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)
668+
669+
resource.Test(t, resource.TestCase{
670+
PreCheck: func() { acctest.PreCheck(t) },
671+
CheckDestroy: checkResourceAgentPolicyDestroy,
672+
Steps: []resource.TestStep{
673+
// Step 1: Create with logging settings
674+
{
675+
ProtoV6ProviderFactories: acctest.Providers,
676+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
677+
ConfigDirectory: acctest.NamedTestCaseDirectory("create_with_logging"),
678+
ConfigVariables: config.Variables{
679+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
680+
},
681+
Check: resource.ComposeTestCheckFunc(
682+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
683+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
684+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "debug"),
685+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
686+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "2"),
687+
),
688+
},
689+
// Step 2: Update settings
690+
{
691+
ProtoV6ProviderFactories: acctest.Providers,
692+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
693+
ConfigDirectory: acctest.NamedTestCaseDirectory("update_settings"),
694+
ConfigVariables: config.Variables{
695+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
696+
},
697+
Check: resource.ComposeTestCheckFunc(
698+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
699+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
700+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "info"),
701+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
702+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_keepfiles", "7"),
703+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_rotateeverybytes", "10485760"),
704+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "4"),
705+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.download_target_directory", "/tmp/elastic-agent"),
706+
),
707+
},
708+
// Step 3: Import state verification
709+
{
710+
ProtoV6ProviderFactories: acctest.Providers,
711+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
712+
ConfigDirectory: acctest.NamedTestCaseDirectory("update_settings"),
713+
ConfigVariables: config.Variables{
714+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
715+
},
716+
ResourceName: "elasticstack_fleet_agent_policy.test_policy",
717+
ImportState: true,
718+
ImportStateVerify: true,
719+
ImportStateVerifyIgnore: []string{"skip_destroy"},
720+
},
721+
// Step 4: Remove settings
722+
{
723+
ProtoV6ProviderFactories: acctest.Providers,
724+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
725+
ConfigDirectory: acctest.NamedTestCaseDirectory("remove_settings"),
726+
ConfigVariables: config.Variables{
727+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
728+
},
729+
Check: resource.ComposeTestCheckFunc(
730+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
731+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
732+
),
733+
},
734+
// Step 5: Set empty block - advanced_settings = {} applies schema defaults
735+
{
736+
ProtoV6ProviderFactories: acctest.Providers,
737+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
738+
ConfigDirectory: acctest.NamedTestCaseDirectory("set_to_defaults"),
739+
ConfigVariables: config.Variables{
740+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
741+
},
742+
Check: resource.ComposeTestCheckFunc(
743+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
744+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
745+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy with Default Advanced Settings"),
746+
// Empty block applies schema defaults for flat attributes
747+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "info"),
748+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
749+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_interval", "30s"),
750+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_keepfiles", "7"),
751+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_rotateeverybytes", "10485760"),
752+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_metrics_period", "30s"),
753+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "0"),
754+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.download_timeout", "2h"),
755+
// monitoring_runtime_experimental is not checked - it's null when not set (no default, UseStateForUnknown)
756+
),
757+
},
758+
},
759+
})
760+
}
761+
666762
func TestAccResourceAgentPolicyWithAdvancedMonitoring(t *testing.T) {
667763
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)
668764

@@ -731,6 +827,48 @@ func TestAccResourceAgentPolicyWithAdvancedMonitoring(t *testing.T) {
731827
ImportStateVerify: true,
732828
ImportStateVerifyIgnore: []string{"skip_destroy"},
733829
},
830+
{
831+
// Step 4: Remove advanced_monitoring_options from config
832+
// UseStateForUnknown should preserve existing state values
833+
ProtoV6ProviderFactories: acctest.Providers,
834+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedMonitoring),
835+
ConfigDirectory: acctest.NamedTestCaseDirectory("remove_advanced_monitoring"),
836+
ConfigVariables: config.Variables{
837+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
838+
"skip_destroy": config.BoolVariable(false),
839+
},
840+
Check: resource.ComposeTestCheckFunc(
841+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
842+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
843+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy - No Advanced Monitoring"),
844+
),
845+
},
846+
{
847+
// Step 5: Set empty nested blocks - schema defaults are applied
848+
ProtoV6ProviderFactories: acctest.Providers,
849+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedMonitoring),
850+
ConfigDirectory: acctest.NamedTestCaseDirectory("set_to_defaults"),
851+
ConfigVariables: config.Variables{
852+
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
853+
"skip_destroy": config.BoolVariable(false),
854+
},
855+
Check: resource.ComposeTestCheckFunc(
856+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
857+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
858+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy with Default Advanced Monitoring"),
859+
// Empty nested blocks apply schema defaults for leaf attributes
860+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.enabled", "false"),
861+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.host", "localhost"),
862+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.port", "6791"),
863+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.buffer_enabled", "false"),
864+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.pprof_enabled", "false"),
865+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.rate_limits.interval", "1m"),
866+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.rate_limits.burst", "1"),
867+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.init_duration", "1s"),
868+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.backoff_duration", "1m"),
869+
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.max_retries", "10"),
870+
),
871+
},
734872
},
735873
})
736874
}

0 commit comments

Comments
 (0)