Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f58d951
Support advanced settings in fleet policy
dimuon Dec 11, 2025
aefa851
Update docs
dimuon Dec 11, 2025
68a0a16
test configs
dimuon Dec 11, 2025
6fad9b7
Merge remote-tracking branch 'upstream/main' into fleet-policy-advanc…
dimuon Dec 12, 2025
6b5aab3
fmt
dimuon Dec 12, 2025
b6ca114
Update agent policy tests to use the new minimum version for advanced…
dimuon Dec 12, 2025
c1d287a
Add support for advanced settings validation in agent policy
dimuon Dec 12, 2025
a933cbc
Check import in acc test
dimuon Dec 12, 2025
6da0434
Add remove and set_to_default steps to acc tests, adjust schema defau…
dimuon Dec 12, 2025
b5e8292
fmt
dimuon Dec 12, 2025
ce9471a
update changelog
dimuon Dec 12, 2025
3a37d92
fix space_id issue
dimuon Dec 12, 2025
ea440c7
fix issue with monitoring_runtime_experimental
dimuon Dec 12, 2025
f077dd5
remove space_ids from new acc tests
dimuon Dec 12, 2025
e812fbd
fix space_ids issue
dimuon Dec 15, 2025
f9160cd
Update golang
dimuon Dec 15, 2025
7ba5f05
Merge remote-tracking branch 'upstream/main' into fleet-policy-advanc…
dimuon Dec 15, 2025
734a88a
Add missing field
dimuon Dec 15, 2025
4d5c30d
remove space_ids from config
dimuon Dec 15, 2025
904d828
remove space_ids from config
dimuon Dec 15, 2025
3f884f8
remove obsolete test configs
dimuon Dec 15, 2025
82424f8
Move advanced_settings and monitoring to dedicated files.
dimuon Dec 15, 2025
439e511
fmt
dimuon Dec 15, 2025
accc9bc
Add setup-synthetics target to Makefile
dimuon Dec 15, 2025
c489dca
Update stack versions in CI tests
dimuon Dec 15, 2025
595153b
Temp remove 9.2.2
dimuon Dec 15, 2025
cfcdca1
Merge branch 'main' of github.com:elastic/terraform-provider-elastics…
dimuon Dec 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## [Unreleased]

### Added

- Add `advanced_settings` to `elasticstack_fleet_agent_policy` to configure agent logging, CPU limits, and download settings ([#1116](https://github.com/elastic/terraform-provider-elasticstack/issues/1116))

### Breaking changes

#### `elasticstack_fleet_integration_policy` input block has changed to a map attribute.
Expand Down
18 changes: 18 additions & 0 deletions docs/resources/fleet_agent_policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ resource "elasticstack_fleet_agent_policy" "test_policy" {
### Optional

- `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))
- `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))
- `data_output_id` (String) The identifier for the data output.
- `description` (String) The description of the agent policy.
- `download_source_id` (String) The identifier for the Elastic Agent binary download server.
Expand Down Expand Up @@ -145,6 +146,23 @@ Optional:



<a id="nestedatt--advanced_settings"></a>
### Nested Schema for `advanced_settings`

Optional:

- `download_target_directory` (String) Target directory for downloading agent updates.
- `download_timeout` (String) Timeout for downloading agent updates (e.g., '2h', '30m').
- `go_max_procs` (Number) Maximum number of CPUs that the agent can use (GOMAXPROCS). Set to 0 to use all available CPUs.
- `logging_files_interval` (String) Interval for log file rotation (e.g., '30s', '1m', '1h').
- `logging_files_keepfiles` (Number) Number of rotated log files to keep.
- `logging_files_rotateeverybytes` (Number) Rotate log files when they reach this size in bytes.
- `logging_level` (String) Logging level for the agent. Valid values: debug, info, warning, error.
- `logging_metrics_period` (String) Period for logging agent metrics (e.g., '30s', '1m').
- `logging_to_files` (Boolean) Enable logging to files.
- `monitoring_runtime_experimental` (Boolean) Enable experimental runtime monitoring.


<a id="nestedatt--global_data_tags"></a>
### Nested Schema for `global_data_tags`

Expand Down
138 changes: 138 additions & 0 deletions internal/fleet/agent_policy/acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,102 @@ func TestAccResourceAgentPolicyWithRequiredVersions(t *testing.T) {
})
}

func TestAccResourceAgentPolicyWithAdvancedSettings(t *testing.T) {
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(t) },
CheckDestroy: checkResourceAgentPolicyDestroy,
Steps: []resource.TestStep{
// Step 1: Create with logging settings
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
ConfigDirectory: acctest.NamedTestCaseDirectory("create_with_logging"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "debug"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "2"),
),
},
// Step 2: Update settings
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
ConfigDirectory: acctest.NamedTestCaseDirectory("update_settings"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "info"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_keepfiles", "7"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_rotateeverybytes", "10485760"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "4"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.download_target_directory", "/tmp/elastic-agent"),
),
},
// Step 3: Import state verification
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
ConfigDirectory: acctest.NamedTestCaseDirectory("update_settings"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
},
ResourceName: "elasticstack_fleet_agent_policy.test_policy",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"skip_destroy"},
},
// Step 4: Remove settings
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
ConfigDirectory: acctest.NamedTestCaseDirectory("remove_settings"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
),
},
// Step 5: Set empty block - advanced_settings = {} applies schema defaults
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedSettings),
ConfigDirectory: acctest.NamedTestCaseDirectory("set_to_defaults"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy with Default Advanced Settings"),
// Empty block applies schema defaults for flat attributes
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_level", "info"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_to_files", "true"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_interval", "30s"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_keepfiles", "7"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_files_rotateeverybytes", "10485760"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.logging_metrics_period", "30s"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.go_max_procs", "0"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.download_timeout", "2h"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_settings.monitoring_runtime_experimental", ""),
),
},
},
})
}

func TestAccResourceAgentPolicyWithAdvancedMonitoring(t *testing.T) {
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)

Expand Down Expand Up @@ -731,6 +827,48 @@ func TestAccResourceAgentPolicyWithAdvancedMonitoring(t *testing.T) {
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"skip_destroy"},
},
{
// Step 4: Remove advanced_monitoring_options from config
// UseStateForUnknown should preserve existing state values
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedMonitoring),
ConfigDirectory: acctest.NamedTestCaseDirectory("remove_advanced_monitoring"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
"skip_destroy": config.BoolVariable(false),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy - No Advanced Monitoring"),
),
},
{
// Step 5: Set empty nested blocks - schema defaults are applied
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionAdvancedMonitoring),
ConfigDirectory: acctest.NamedTestCaseDirectory("set_to_defaults"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
"skip_destroy": config.BoolVariable(false),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy with Default Advanced Monitoring"),
// Empty nested blocks apply schema defaults for leaf attributes
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.enabled", "false"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.host", "localhost"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.port", "6791"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.buffer_enabled", "false"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.http_monitoring_endpoint.pprof_enabled", "false"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.rate_limits.interval", "1m"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.rate_limits.burst", "1"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.init_duration", "1s"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.backoff_duration", "1m"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "advanced_monitoring_options.diagnostics.file_uploader.max_retries", "10"),
),
},
},
})
}
Loading
Loading