Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Prev Previous commit
Next Next commit
Update provider for client changes
  • Loading branch information
tobio committed Mar 27, 2026
commit c56e09514933da184ebe0d70978d1c6b9bfa4834
4 changes: 2 additions & 2 deletions internal/fleet/agentpolicy/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ func (model *agentPolicyModel) toAPICreateModel(ctx context.Context, feat featur
),
}
}
body.AdvancedSettings = model.convertAdvancedSettingsToAPI(ctx)
body.AdvancedSettings = model.convertAdvancedSettingsToAPI(ctx).toPostBody()
}

// Handle advanced monitoring options
Expand Down Expand Up @@ -630,7 +630,7 @@ func (model *agentPolicyModel) toAPIUpdateModel(ctx context.Context, feat featur
),
}
}
body.AdvancedSettings = model.convertAdvancedSettingsToAPI(ctx)
body.AdvancedSettings = model.convertAdvancedSettingsToAPI(ctx).toPutBody()
}

// Handle advanced monitoring options
Expand Down
99 changes: 95 additions & 4 deletions internal/fleet/agentpolicy/models_advanced_settings.go
Comment thread
macroscopeapp[bot] marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ func advancedSettingsAttrTypes() map[string]attr.Type {
return getSchema().Attributes["advanced_settings"].GetType().(attr.TypeWithAttributeTypes).AttributeTypes()
}

// advancedSettingsAPIResult is the return type for convertAdvancedSettingsToAPI
type advancedSettingsAPIResult = struct {
type advancedSettingsAPIValues struct {
AgentDownloadTargetDirectory any `json:"agent_download_target_directory,omitempty"`
AgentDownloadTimeout any `json:"agent_download_timeout,omitempty"`
AgentInternal any `json:"agent_internal,omitempty"`
Expand All @@ -63,6 +62,98 @@ type advancedSettingsAPIResult = struct {
AgentMonitoringRuntimeExperimental any `json:"agent_monitoring_runtime_experimental,omitempty"`
}

func (settings *advancedSettingsAPIValues) toPostBody() *struct {
AgentDownloadTargetDirectory any `json:"agent_download_target_directory,omitempty"`
AgentDownloadTimeout any `json:"agent_download_timeout,omitempty"`
AgentFeaturesDisablePolicyChangeAcksEnabled any `json:"agent_features_disable_policy_change_acks_enabled,omitempty"`
AgentInternal any `json:"agent_internal,omitempty"`
AgentLimitsGoMaxProcs any `json:"agent_limits_go_max_procs,omitempty"`
AgentLoggingFilesInterval any `json:"agent_logging_files_interval,omitempty"`
AgentLoggingFilesKeepfiles any `json:"agent_logging_files_keepfiles,omitempty"`
AgentLoggingFilesRotateeverybytes any `json:"agent_logging_files_rotateeverybytes,omitempty"`
AgentLoggingLevel any `json:"agent_logging_level,omitempty"`
AgentLoggingMetricsPeriod any `json:"agent_logging_metrics_period,omitempty"`
AgentLoggingToFiles any `json:"agent_logging_to_files,omitempty"`
AgentMonitoringRuntimeExperimental any `json:"agent_monitoring_runtime_experimental,omitempty"`
} {
if settings == nil {
return nil
}

return &struct {
AgentDownloadTargetDirectory any `json:"agent_download_target_directory,omitempty"`
AgentDownloadTimeout any `json:"agent_download_timeout,omitempty"`
AgentFeaturesDisablePolicyChangeAcksEnabled any `json:"agent_features_disable_policy_change_acks_enabled,omitempty"`
AgentInternal any `json:"agent_internal,omitempty"`
AgentLimitsGoMaxProcs any `json:"agent_limits_go_max_procs,omitempty"`
AgentLoggingFilesInterval any `json:"agent_logging_files_interval,omitempty"`
AgentLoggingFilesKeepfiles any `json:"agent_logging_files_keepfiles,omitempty"`
AgentLoggingFilesRotateeverybytes any `json:"agent_logging_files_rotateeverybytes,omitempty"`
AgentLoggingLevel any `json:"agent_logging_level,omitempty"`
AgentLoggingMetricsPeriod any `json:"agent_logging_metrics_period,omitempty"`
AgentLoggingToFiles any `json:"agent_logging_to_files,omitempty"`
AgentMonitoringRuntimeExperimental any `json:"agent_monitoring_runtime_experimental,omitempty"`
}{
AgentDownloadTargetDirectory: settings.AgentDownloadTargetDirectory,
AgentDownloadTimeout: settings.AgentDownloadTimeout,
AgentInternal: settings.AgentInternal,
AgentLimitsGoMaxProcs: settings.AgentLimitsGoMaxProcs,
AgentLoggingFilesInterval: settings.AgentLoggingFilesInterval,
AgentLoggingFilesKeepfiles: settings.AgentLoggingFilesKeepfiles,
AgentLoggingFilesRotateeverybytes: settings.AgentLoggingFilesRotateeverybytes,
AgentLoggingLevel: settings.AgentLoggingLevel,
AgentLoggingMetricsPeriod: settings.AgentLoggingMetricsPeriod,
AgentLoggingToFiles: settings.AgentLoggingToFiles,
AgentMonitoringRuntimeExperimental: settings.AgentMonitoringRuntimeExperimental,
}
}

func (settings *advancedSettingsAPIValues) toPutBody() *struct {
AgentDownloadTargetDirectory any `json:"agent_download_target_directory,omitempty"`
AgentDownloadTimeout any `json:"agent_download_timeout,omitempty"`
AgentFeaturesDisablePolicyChangeAcksEnabled any `json:"agent_features_disable_policy_change_acks_enabled,omitempty"`
AgentInternal any `json:"agent_internal,omitempty"`
AgentLimitsGoMaxProcs any `json:"agent_limits_go_max_procs,omitempty"`
AgentLoggingFilesInterval any `json:"agent_logging_files_interval,omitempty"`
AgentLoggingFilesKeepfiles any `json:"agent_logging_files_keepfiles,omitempty"`
AgentLoggingFilesRotateeverybytes any `json:"agent_logging_files_rotateeverybytes,omitempty"`
AgentLoggingLevel any `json:"agent_logging_level,omitempty"`
AgentLoggingMetricsPeriod any `json:"agent_logging_metrics_period,omitempty"`
AgentLoggingToFiles any `json:"agent_logging_to_files,omitempty"`
AgentMonitoringRuntimeExperimental any `json:"agent_monitoring_runtime_experimental,omitempty"`
} {
if settings == nil {
return nil
}

return &struct {
AgentDownloadTargetDirectory any `json:"agent_download_target_directory,omitempty"`
AgentDownloadTimeout any `json:"agent_download_timeout,omitempty"`
AgentFeaturesDisablePolicyChangeAcksEnabled any `json:"agent_features_disable_policy_change_acks_enabled,omitempty"`
AgentInternal any `json:"agent_internal,omitempty"`
AgentLimitsGoMaxProcs any `json:"agent_limits_go_max_procs,omitempty"`
AgentLoggingFilesInterval any `json:"agent_logging_files_interval,omitempty"`
AgentLoggingFilesKeepfiles any `json:"agent_logging_files_keepfiles,omitempty"`
AgentLoggingFilesRotateeverybytes any `json:"agent_logging_files_rotateeverybytes,omitempty"`
AgentLoggingLevel any `json:"agent_logging_level,omitempty"`
AgentLoggingMetricsPeriod any `json:"agent_logging_metrics_period,omitempty"`
AgentLoggingToFiles any `json:"agent_logging_to_files,omitempty"`
AgentMonitoringRuntimeExperimental any `json:"agent_monitoring_runtime_experimental,omitempty"`
}{
AgentDownloadTargetDirectory: settings.AgentDownloadTargetDirectory,
AgentDownloadTimeout: settings.AgentDownloadTimeout,
AgentInternal: settings.AgentInternal,
AgentLimitsGoMaxProcs: settings.AgentLimitsGoMaxProcs,
AgentLoggingFilesInterval: settings.AgentLoggingFilesInterval,
AgentLoggingFilesKeepfiles: settings.AgentLoggingFilesKeepfiles,
AgentLoggingFilesRotateeverybytes: settings.AgentLoggingFilesRotateeverybytes,
AgentLoggingLevel: settings.AgentLoggingLevel,
AgentLoggingMetricsPeriod: settings.AgentLoggingMetricsPeriod,
AgentLoggingToFiles: settings.AgentLoggingToFiles,
AgentMonitoringRuntimeExperimental: settings.AgentMonitoringRuntimeExperimental,
}
}

// populateAdvancedSettingsFromAPI populates the advanced settings from API response
func (model *agentPolicyModel) populateAdvancedSettingsFromAPI(ctx context.Context, data *kbapi.AgentPolicy) diag.Diagnostics {
if data.AdvancedSettings == nil {
Expand Down Expand Up @@ -191,7 +282,7 @@ func (model *agentPolicyModel) populateAdvancedSettingsFromAPI(ctx context.Conte
}

// convertAdvancedSettingsToAPI converts the advanced settings config to API format
func (model *agentPolicyModel) convertAdvancedSettingsToAPI(ctx context.Context) *advancedSettingsAPIResult {
func (model *agentPolicyModel) convertAdvancedSettingsToAPI(ctx context.Context) *advancedSettingsAPIValues {
if !typeutils.IsKnown(model.AdvancedSettings) {
return nil
}
Expand All @@ -215,7 +306,7 @@ func (model *agentPolicyModel) convertAdvancedSettingsToAPI(ctx context.Context)
return nil
}

result := &advancedSettingsAPIResult{}
result := &advancedSettingsAPIValues{}

if typeutils.IsKnown(settings.LoggingLevel) {
result.AgentLoggingLevel = settings.LoggingLevel.ValueString()
Expand Down
8 changes: 4 additions & 4 deletions internal/fleet/agentpolicy/models_advanced_settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func TestConvertAdvancedSettingsToAPI(t *testing.T) {
name string
advancedSettings types.Object
wantNil bool
checkResult func(t *testing.T, result *advancedSettingsAPIResult)
checkResult func(t *testing.T, result *advancedSettingsAPIValues)
}{
{
name: "null advanced_settings returns nil",
Expand Down Expand Up @@ -76,7 +76,7 @@ func TestConvertAdvancedSettingsToAPI(t *testing.T) {
MonitoringRuntimeExperimental: types.StringNull(),
}),
wantNil: false,
checkResult: func(t *testing.T, result *advancedSettingsAPIResult) {
checkResult: func(t *testing.T, result *advancedSettingsAPIValues) {
assert.Equal(t, "debug", result.AgentLoggingLevel)
assert.Nil(t, result.AgentLoggingToFiles)
},
Expand All @@ -96,7 +96,7 @@ func TestConvertAdvancedSettingsToAPI(t *testing.T) {
MonitoringRuntimeExperimental: types.StringNull(),
}),
wantNil: false,
checkResult: func(t *testing.T, result *advancedSettingsAPIResult) {
checkResult: func(t *testing.T, result *advancedSettingsAPIValues) {
assert.Equal(t, int32(4), result.AgentLimitsGoMaxProcs)
},
},
Expand All @@ -115,7 +115,7 @@ func TestConvertAdvancedSettingsToAPI(t *testing.T) {
MonitoringRuntimeExperimental: types.StringValue(""),
}),
wantNil: false,
checkResult: func(t *testing.T, result *advancedSettingsAPIResult) {
checkResult: func(t *testing.T, result *advancedSettingsAPIValues) {
assert.Equal(t, "info", result.AgentLoggingLevel)
assert.Equal(t, true, result.AgentLoggingToFiles)
assert.Equal(t, "30s", result.AgentLoggingFilesInterval)
Expand Down
17 changes: 12 additions & 5 deletions internal/fleet/output/models_elasticsearch.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ func (model *outputModel) fromAPIElasticsearchModel(ctx context.Context, data *k
model.DefaultIntegrations = types.BoolPointerValue(data.IsDefault)
model.DefaultMonitoring = types.BoolPointerValue(data.IsDefaultMonitoring)
model.ConfigYaml = types.StringPointerValue(data.ConfigYaml)
model.Ssl, diags = sslToObjectValue(ctx, data.Ssl)
if data.Ssl != nil {
model.Ssl, diags = sslToObjectValue(ctx, data.Ssl.Certificate, data.Ssl.CertificateAuthorities, data.Ssl.Key)
} else {
model.Ssl, diags = sslToObjectValue(ctx, nil, nil, nil)
}

// Note: SpaceIDs is not returned by the API for outputs
// If it's currently null/unknown, set to explicit null to satisfy Terraform's requirement
Expand All @@ -58,7 +62,7 @@ func (model outputModel) toAPICreateElasticsearchModel(ctx context.Context) (kba
}

body := kbapi.NewOutputElasticsearch{
Type: kbapi.NewOutputElasticsearchTypeElasticsearch,
Type: kbapi.KibanaHTTPAPIsNewOutputElasticsearchTypeElasticsearch,
CaSha256: model.CaSha256.ValueStringPointer(),
CaTrustedFingerprint: model.CaTrustedFingerprint.ValueStringPointer(),
ConfigYaml: model.ConfigYaml.ValueStringPointer(),
Expand All @@ -67,7 +71,7 @@ func (model outputModel) toAPICreateElasticsearchModel(ctx context.Context) (kba
IsDefault: model.DefaultIntegrations.ValueBoolPointer(),
IsDefaultMonitoring: model.DefaultMonitoring.ValueBoolPointer(),
Name: model.Name.ValueString(),
Ssl: ssl,
Ssl: ssl.toCreateElasticsearch(),
}

var union kbapi.NewOutputUnion
Expand All @@ -86,15 +90,18 @@ func (model outputModel) toAPIUpdateElasticsearchModel(ctx context.Context) (kba
return kbapi.UpdateOutputUnion{}, diags
}
body := kbapi.UpdateOutputElasticsearch{
Type: new(kbapi.Elasticsearch),
Type: func() *kbapi.UpdateOutputElasticsearchType {
outputType := kbapi.Elasticsearch
return &outputType
}(),
CaSha256: model.CaSha256.ValueStringPointer(),
CaTrustedFingerprint: model.CaTrustedFingerprint.ValueStringPointer(),
ConfigYaml: model.ConfigYaml.ValueStringPointer(),
Hosts: schemautil.SliceRef(typeutils.ListTypeToSliceString(ctx, model.Hosts, path.Root("hosts"), &diags)),
IsDefault: model.DefaultIntegrations.ValueBoolPointer(),
IsDefaultMonitoring: model.DefaultMonitoring.ValueBoolPointer(),
Name: model.Name.ValueStringPointer(),
Ssl: ssl,
Ssl: ssl.toUpdateElasticsearch(),
}

var union kbapi.UpdateOutputUnion
Expand Down
Loading
Loading