Activate deprecation warnings (#41449)

<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #40015

# Details

Activates deprecation warnings for old API params and CLI args, updates
tests that would generate warnings (except for tests explicitly designed
to generate warnings).

The expectation from here on is that Fleet UI usage should not generate
any deprecation warnings in the server logs, nor should the output from
`generate-gitops` generate any warnings when fed into `gitops`.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [X] Added/updated automated tests
- [ ] QA'd all new/changed functionality manually
- [X] clicked around in an mdm-enabled instance, turned setup experience
features on and off, saw no server warnings
- [X] did `fleetctl generate-gitops` on mdm-enabled instance, saw no
server or cli warnings
- [X] did `fleetctl gitops` on mdm-enabled instance, saw no server or
cli warnings
This commit is contained in:
Scott Gress 2026-04-06 09:59:32 -05:00 committed by GitHub
parent 1a9891ddfe
commit 1eabb85a5a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 2705 additions and 1877 deletions

View file

@ -0,0 +1 @@
- Activated warnings for deprecated API parameters, API URLs, fleetctl commands and fleetctl command options.

View file

@ -294,7 +294,6 @@ func runServeCmd(cmd *cobra.Command, configManager configpkg.Manager, debug, dev
//
// For example:
// platform_logging.DisableTopic("deprecated-api-keys")
platform_logging.DisableTopic(platform_logging.DeprecatedFieldTopic)
// Apply log topic overrides from config. Enables run first, then
// disables, so disable wins on conflict.

View file

@ -9,7 +9,6 @@ import (
"github.com/fleetdm/fleet/v4/pkg/spec"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/logging"
"github.com/urfave/cli/v2"
)
@ -59,10 +58,6 @@ func applyCommand() *cli.Command {
return nil
},
Action: func(c *cli.Context) error {
// Disable field deprecation warnings for now.
// TODO - remove this in future release to unleash warnings.
logging.DisableTopic(logging.DeprecatedFieldTopic)
// Apply log topic overrides from flags/env vars.
applyLogTopicFlags(c)

File diff suppressed because it is too large Load diff

View file

@ -1574,11 +1574,11 @@ spec:
windows_updates:
deadline_days: 1
grace_period_days: 0
macos_settings:
custom_settings:
apple_settings:
configuration_profiles:
- %s
macos_setup:
macos_setup_assistant: %s
setup_experience:
apple_setup_assistant: %s
windows_enabled_and_configured: true
`, mobileConfigPath, emptySetupAsst))
@ -1621,8 +1621,8 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
bootstrap_package: %s
setup_experience:
macos_bootstrap_package: %s
`, bootstrapURL))
// first apply with dry-run
@ -1759,7 +1759,7 @@ spec:
name: Team1
mdm:
macos_setup:
bootstrap_package: %s
macos_bootstrap_package: %s
`, bootstrapURL))
// first apply with dry-run
@ -2357,26 +2357,26 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
bootstrap_package: %s
macos_setup_assistant: %s
setup_experience:
macos_bootstrap_package: %s
apple_setup_assistant: %s
`
appConfigEnableReleaseSpec = appConfigSpec + `
enable_release_device_manually: %s
apple_enable_release_device_manually: %s
`
appConfigNoKeySpec = `
apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
setup_experience:
`
appConfigSpecEnableEndUserAuth = `
apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
setup_experience:
enable_end_user_authentication: %s
`
team1Spec = `
@ -2386,12 +2386,12 @@ spec:
team:
name: tm1
mdm:
macos_setup:
bootstrap_package: %s
macos_setup_assistant: %s
setup_experience:
macos_bootstrap_package: %s
apple_setup_assistant: %s
`
team1EnableReleaseSpec = team1Spec + `
enable_release_device_manually: %s
apple_enable_release_device_manually: %s
require_all_software_macos: %s
`
team1NoKeySpec = `
@ -2401,7 +2401,7 @@ spec:
team:
name: tm1
mdm:
macos_setup:
setup_experience:
`
team1And2Spec = `
apiVersion: v1
@ -2410,9 +2410,9 @@ spec:
team:
name: tm1
mdm:
macos_setup:
bootstrap_package: %s
macos_setup_assistant: %s
setup_experience:
macos_bootstrap_package: %s
apple_setup_assistant: %s
---
apiVersion: v1
kind: fleet
@ -2420,9 +2420,9 @@ spec:
team:
name: tm2
mdm:
macos_setup:
bootstrap_package: %s
macos_setup_assistant: %s
setup_experience:
macos_bootstrap_package: %s
apple_setup_assistant: %s
`
team1SpecEnableEndUserAuth = `
apiVersion: v1
@ -2431,7 +2431,7 @@ spec:
team:
name: tm1
mdm:
macos_setup:
setup_experience:
enable_end_user_authentication: %s
`
)
@ -2593,7 +2593,7 @@ spec:
// get, setup assistant still not set
assert.YAMLEq(t, expectedEmptyAppCfg, RunAppForTest(t, []string{"get", "config", "--yaml"}))
assert.YAMLEq(t, expectedEmptyTm1, RunAppForTest(t, []string{"get", "teams", "--yaml"}))
assert.YAMLEq(t, expectedEmptyTm1, RunAppForTest(t, []string{"get", "fleets", "--yaml"}))
// apply appconfig for real, and enable release device
name = writeTmpYml(t, fmt.Sprintf(appConfigEnableReleaseSpec, "", emptyMacosSetup, "true"))
@ -2610,7 +2610,7 @@ spec:
// get, setup assistant is now set
assert.YAMLEq(t, expectedAppCfgSetReleaseEnabled, RunAppForTest(t, []string{"get", "config", "--yaml"}))
assert.YAMLEq(t, expectedTm1And2Set, RunAppForTest(t, []string{"get", "teams", "--yaml"}))
assert.YAMLEq(t, expectedTm1And2Set, RunAppForTest(t, []string{"get", "fleets", "--yaml"}))
// clear with dry-run, appconfig
name = writeTmpYml(t, fmt.Sprintf(appConfigSpec, "", ""))
@ -2646,7 +2646,7 @@ spec:
// get, results unchanged
assert.YAMLEq(t, expectedAppCfgSetReleaseEnabled, RunAppForTest(t, []string{"get", "config", "--yaml"}))
assert.YAMLEq(t, expectedTm1And2Set, RunAppForTest(t, []string{"get", "teams", "--yaml"}))
assert.YAMLEq(t, expectedTm1And2Set, RunAppForTest(t, []string{"get", "fleets", "--yaml"}))
// clear appconfig for real
name = writeTmpYml(t, fmt.Sprintf(appConfigEnableReleaseSpec, "", "", "false"))
@ -2666,7 +2666,7 @@ spec:
// get, results now empty
assert.YAMLEq(t, expectedEmptyAppCfg, RunAppForTest(t, []string{"get", "config", "--yaml"}))
assert.YAMLEq(t, expectedEmptyTm1And2, RunAppForTest(t, []string{"get", "teams", "--yaml"}))
assert.YAMLEq(t, expectedEmptyTm1And2, RunAppForTest(t, []string{"get", "fleets", "--yaml"}))
// apply team 1 without the setup assistant key but enable device release
name = writeTmpYml(t, fmt.Sprintf(team1EnableReleaseSpec, "", "", "true", "true"))
@ -2678,7 +2678,7 @@ spec:
assert.False(t, ds.DeleteMDMAppleSetupAssistantFuncInvoked)
assert.True(t, ds.SaveTeamFuncInvoked)
assert.YAMLEq(t, expectedTm1SetReleaseAndRequireEnabled, RunAppForTest(t, []string{"get", "teams", "--yaml"}))
assert.YAMLEq(t, expectedTm1SetReleaseAndRequireEnabled, RunAppForTest(t, []string{"get", "fleets", "--yaml"}))
// apply appconfig with invalid URL key
name = writeTmpYml(t, fmt.Sprintf(appConfigSpec, "", invalidURLMacosSetup))
@ -2781,9 +2781,9 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
bootstrap_package: %s
manual_agent_install: true
setup_experience:
macos_bootstrap_package: %s
macos_manual_agent_install: true
`
// create the app config yaml with server url for bootstrap package
@ -3964,7 +3964,7 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_settings:
apple_settings:
enable_disk_encryption:
`,
wantOutput: `[+] applied fleet config`,
@ -3976,7 +3976,7 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: 123
`,
wantErr: `400 Bad request: failed to decode app config`,
@ -3988,7 +3988,7 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: true
`,
@ -4002,7 +4002,7 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: false
`,
wantOutput: `[+] applied fleet config`,
@ -4016,7 +4016,7 @@ spec:
team:
name: team1
mdm:
macos_settings:
apple_settings:
enable_disk_encryption:
`,
wantErr: `400 Bad Request: invalid value type at 'macos_settings.enable_disk_encryption': expected bool but got <nil>`,
@ -4030,7 +4030,7 @@ spec:
team:
name: team1
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: 123
`,
wantErr: `400 Bad Request: invalid value type at 'macos_settings.enable_disk_encryption': expected bool but got float64`,
@ -4044,7 +4044,7 @@ spec:
team:
name: team1
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: true
`,
wantErr: `Couldn't update apple_settings because MDM features aren't turned on in Fleet.`,
@ -4058,7 +4058,7 @@ spec:
team:
name: team1
mdm:
macos_settings:
apple_settings:
enable_disk_encryption: false
`,
wantOutput: `[+] applied 1 fleet`,
@ -4072,8 +4072,8 @@ spec:
team:
name: team1
mdm:
macos_setup:
macos_setup_assistant: %s
setup_experience:
apple_setup_assistant: %s
`, macSetupFile),
wantErr: `macOS MDM isn't turned on.`,
},
@ -4084,8 +4084,8 @@ apiVersion: v1
kind: config
spec:
mdm:
macos_setup:
macos_setup_assistant: %s
setup_experience:
apple_setup_assistant: %s
`, macSetupFile),
wantErr: `macOS MDM isn't turned on.`,
},

View file

@ -18,7 +18,6 @@ import (
"github.com/fleetdm/fleet/v4/pkg/rawjson"
"github.com/fleetdm/fleet/v4/pkg/secure"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/logging"
"github.com/fleetdm/fleet/v4/server/service"
"github.com/ghodss/yaml"
kithttp "github.com/go-kit/kit/transport/http"
@ -304,10 +303,6 @@ func getCommand() *cli.Command {
return &cli.Command{
Name: "get",
Usage: "Get/list resources",
Before: func(c *cli.Context) error {
logging.DisableTopic(logging.DeprecatedFieldTopic)
return nil
},
Subcommands: withLogTopicFlags([]*cli.Command{
getReportsCommand(),
getPacksCommand(),

View file

@ -90,10 +90,6 @@ func gitopsCommand() *cli.Command {
disableLogTopicsFlag(),
},
Action: func(c *cli.Context) error {
// Disable field deprecation warnings for now.
// TODO - remove this in future release to unleash warnings.
logging.DisableTopic(logging.DeprecatedFieldTopic)
// Apply log topic overrides from CLI flags.
applyLogTopicFlags(c)

View file

@ -11,7 +11,6 @@ import (
"github.com/briandowns/spinner"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/logging"
"github.com/urfave/cli/v2"
)
@ -27,7 +26,6 @@ func queryCommand() *cli.Command {
Usage: "Run a live report",
UsageText: `fleetctl report [options]`,
Before: func(c *cli.Context) error {
logging.DisableTopic(logging.DeprecatedFieldTopic)
applyLogTopicFlags(c)
logDeprecatedCommandName(c, []string{"query"}, "report")
logDeprecatedFlagName(c, "query-name", "report-name")

View file

@ -167,12 +167,12 @@ func (s *enterpriseIntegrationGitopsTestSuite) TearDownTest() {
require.NoError(t, err)
}
// Delete policies in "No team" (the others are deleted in ts.DS.DeleteTeam above).
// Delete policies in "Unassigned" (the others are deleted in ts.DS.DeleteTeam above).
mysql.ExecAdhocSQL(t, s.DS, func(q sqlx.ExtContext) error {
_, err := q.ExecContext(ctx, `DELETE FROM policies WHERE team_id = 0;`)
return err
})
// Clean software installers in "No team" (the others are deleted in ts.DS.DeleteTeam above).
// Clean software installers in "Unassigned" (the others are deleted in ts.DS.DeleteTeam above).
mysql.ExecAdhocSQL(t, s.DS, func(q sqlx.ExtContext) error {
_, err := q.ExecContext(ctx, `DELETE FROM software_installers WHERE global_or_team_id = 0;`)
return err
@ -338,7 +338,7 @@ settings:
s.assertDryRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", globalFile, "--dry-run"}), true)
for _, fileName := range teamFileNames {
// When running no-teams, global config must also be provided ...
if strings.Contains(fileName, "no-team.yml") {
if strings.Contains(fileName, "unassigned.yml") {
s.assertDryRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", fileName, "-f", globalFile, "--dry-run"}), true)
} else {
s.assertDryRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", fileName, "--dry-run"}), true)
@ -379,7 +379,7 @@ settings:
s.assertRealRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", globalFile}), true)
for _, fileName := range teamFileNames {
// When running no-teams, global config must also be provided ...
if strings.Contains(fileName, "no-team.yml") {
if strings.Contains(fileName, "unassigned.yml") {
s.assertRealRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", fileName, "-f", globalFile}), true)
} else {
s.assertRealRunOutputWithDeprecation(t, fleetctl.RunAppForTest(t, []string{"gitops", "--config", fleetctlConfig.Name(), "-f", fileName}), true)
@ -1061,7 +1061,7 @@ policies:
reports:
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
software:
@ -1112,7 +1112,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -1262,7 +1262,7 @@ reports:
// no team file setup
const (
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
policies:
controls:
macos_setup:
@ -1277,7 +1277,7 @@ software:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -1354,7 +1354,7 @@ reports:
// Create a no-team.yml file with webhook settings
const noTeamTemplateWithWebhook = `
name: No team
name: Unassigned
policies:
- name: No Team Test Policy
query: SELECT 1 FROM osquery_info WHERE version = '0.0.0';
@ -1380,7 +1380,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -1411,7 +1411,7 @@ settings:
// Test updating webhook settings
const noTeamTemplateUpdatedWebhook = `
name: No team
name: Unassigned
policies:
- name: No Team Test Policy
query: SELECT 1 FROM osquery_info WHERE version = '0.0.0';
@ -1436,7 +1436,7 @@ settings:
require.NoError(t, err)
err = noTeamFileUpdated.Close()
require.NoError(t, err)
noTeamFilePathUpdated := filepath.Join(filepath.Dir(noTeamFileUpdated.Name()), "no-team.yml")
noTeamFilePathUpdated := filepath.Join(filepath.Dir(noTeamFileUpdated.Name()), "unassigned.yml")
err = os.Rename(noTeamFileUpdated.Name(), noTeamFilePathUpdated)
require.NoError(t, err)
@ -1458,7 +1458,7 @@ settings:
// Test removing webhook settings entirely
const noTeamTemplateNoWebhook = `
name: No team
name: Unassigned
policies:
- name: No Team Test Policy
query: SELECT 1 FROM osquery_info WHERE version = '0.0.0';
@ -1474,7 +1474,7 @@ software:
require.NoError(t, err)
err = noTeamFileNoWebhook.Close()
require.NoError(t, err)
noTeamFilePathNoWebhook := filepath.Join(filepath.Dir(noTeamFileNoWebhook.Name()), "no-team.yml")
noTeamFilePathNoWebhook := filepath.Join(filepath.Dir(noTeamFileNoWebhook.Name()), "unassigned.yml")
err = os.Rename(noTeamFileNoWebhook.Name(), noTeamFilePathNoWebhook)
require.NoError(t, err)
@ -1503,7 +1503,7 @@ software:
// Now apply config with team_settings but no webhook_settings
const noTeamTemplateTeamSettingsNoWebhook = `
name: No team
name: Unassigned
policies:
- name: No Team Test Policy
query: SELECT 1 FROM osquery_info WHERE version = '0.0.0';
@ -1519,7 +1519,7 @@ settings:
require.NoError(t, err)
err = noTeamFileTeamNoWebhook.Close()
require.NoError(t, err)
noTeamFilePathTeamNoWebhook := filepath.Join(filepath.Dir(noTeamFileTeamNoWebhook.Name()), "no-team.yml")
noTeamFilePathTeamNoWebhook := filepath.Join(filepath.Dir(noTeamFileTeamNoWebhook.Name()), "unassigned.yml")
err = os.Rename(noTeamFileTeamNoWebhook.Name(), noTeamFilePathTeamNoWebhook)
require.NoError(t, err)
@ -1548,7 +1548,7 @@ settings:
// Now apply config with webhook_settings but no failing_policies_webhook
const noTeamTemplateWebhookNoFailing = `
name: No team
name: Unassigned
policies:
- name: No Team Test Policy
query: SELECT 1 FROM osquery_info WHERE version = '0.0.0';
@ -1565,7 +1565,7 @@ settings:
require.NoError(t, err)
err = noTeamFileWebhookNoFailing.Close()
require.NoError(t, err)
noTeamFilePathWebhookNoFailing := filepath.Join(filepath.Dir(noTeamFileWebhookNoFailing.Name()), "no-team.yml")
noTeamFilePathWebhookNoFailing := filepath.Join(filepath.Dir(noTeamFileWebhookNoFailing.Name()), "unassigned.yml")
err = os.Rename(noTeamFileWebhookNoFailing.Name(), noTeamFilePathWebhookNoFailing)
require.NoError(t, err)
@ -1714,7 +1714,7 @@ policies:
reports:
`
noTeamConfig = `name: No team
noTeamConfig = `name: Unassigned
controls:
macos_setup:
bootstrap_package: %s
@ -1751,7 +1751,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -1899,7 +1899,7 @@ func (s *enterpriseIntegrationGitopsTestSuite) TestMacOSSetupScriptWithFleetSecr
require.NoError(t, err)
// Create a no-team file with the script
const noTeamTemplate = `name: No team
const noTeamTemplate = `name: Unassigned
policies:
controls:
macos_setup:
@ -1912,7 +1912,7 @@ software:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -2426,7 +2426,7 @@ labels:
query: SELECT 1
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
software:
@ -2464,7 +2464,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -2635,7 +2635,7 @@ policies:
reports:
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
software:
@ -2672,7 +2672,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -2753,7 +2753,7 @@ policies:
reports:
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
software:
@ -2808,7 +2808,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -3635,7 +3635,7 @@ settings:
},
{
specialCase: "No team",
teamName: "No team",
teamName: "Unassigned",
},
}
for _, tc := range testCases {
@ -3657,7 +3657,7 @@ settings:
teamFileName := teamFile.Name()
if tc.specialCase == "No team" {
noTeamFilePath := filepath.Join(filepath.Dir(teamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(teamFile.Name()), "unassigned.yml")
err = os.Rename(teamFile.Name(), noTeamFilePath)
require.NoError(t, err)
@ -3801,14 +3801,14 @@ team_settings:
{
testName: "No team VPP",
VPPTeam: "No team",
teamName: "No team",
teamName: "Unassigned",
teamTemplate: testVPP,
errContains: ptr.String("Couldn't edit software."),
},
{
testName: "No team Installers",
VPPTeam: "No team",
teamName: "No team",
teamName: "Unassigned",
teamTemplate: testPackages,
errContains: ptr.String("Couldn't edit software."),
},
@ -3833,7 +3833,7 @@ team_settings:
teamFileName := teamFile.Name()
if tc.VPPTeam == "No team" {
noTeamFilePath := filepath.Join(filepath.Dir(teamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(teamFile.Name()), "unassigned.yml")
err = os.Rename(teamFile.Name(), noTeamFilePath)
require.NoError(t, err)
teamFileName = noTeamFilePath
@ -3952,7 +3952,7 @@ policies:
reports:
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
- description: Test policy.
@ -3996,7 +3996,7 @@ settings:
err := os.WriteFile(globalFile, []byte(globalTemplate), 0o644) //nolint:gosec
require.NoError(t, err)
noTeamFile := filepath.Join(tempDir, "no-team.yml")
noTeamFile := filepath.Join(tempDir, "unassigned.yml")
err = os.WriteFile(noTeamFile, []byte(noTeamTemplate), 0o644)
require.NoError(t, err)
@ -4346,7 +4346,7 @@ org_settings:
policies:
reports:
`
noTeamTemplate = `name: No team
noTeamTemplate = `name: Unassigned
controls:
policies:
software:
@ -4388,7 +4388,7 @@ settings:
require.NoError(t, err)
err = noTeamFile.Close()
require.NoError(t, err)
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "no-team.yml")
noTeamFilePath := filepath.Join(filepath.Dir(noTeamFile.Name()), "unassigned.yml")
err = os.Rename(noTeamFile.Name(), noTeamFilePath)
require.NoError(t, err)

View file

@ -234,7 +234,13 @@ func GroupFromBytes(b []byte, options ...GroupFromBytesOpts) (*Group, error) {
if err := yaml.Unmarshal(s.Spec, &rawTeam); err != nil {
return nil, fmt.Errorf("unmarshaling %s spec: %w", kind, err)
}
specs.Teams = append(specs.Teams, rawTeam["team"])
teamRaw := rawTeam["team"]
var err error
teamRaw, deprecatedKeysMap, err = rewriteNewToOldKeys(teamRaw, fleet.TeamSpec{})
if err != nil {
return nil, fmt.Errorf("in %s spec: %w", kind, err)
}
specs.Teams = append(specs.Teams, teamRaw)
default:
return nil, fmt.Errorf("unknown kind %q", s.Kind)

View file

@ -27,6 +27,7 @@ import (
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/mdm"
"github.com/fleetdm/fleet/v4/server/mdm/apple/mobileconfig"
"github.com/fleetdm/fleet/v4/server/platform/endpointer"
"github.com/fleetdm/fleet/v4/server/ptr"
kithttp "github.com/go-kit/kit/transport/http"
)
@ -161,6 +162,12 @@ func (c *Client) doContextWithHeaders(ctx context.Context, verb, path, rawQuery
if err != nil {
return nil, ctxerr.Wrap(ctx, err, "marshaling json")
}
if rules := endpointer.ExtractAliasRules(params); len(rules) > 0 {
bodyBytes, err = endpointer.RewriteOldToNewKeys(bodyBytes, rules)
if err != nil {
return nil, ctxerr.Wrap(ctx, err, "rewriting deprecated keys")
}
}
}
}
return c.doContextWithBodyAndHeaders(ctx, verb, path, rawQuery, bodyBytes, headers)

View file

@ -1,11 +1,9 @@
package service
import (
"encoding/json"
"fmt"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/endpointer"
)
func (c *Client) CreateGlobalPolicy(name, query, description, resolution, platform string) error {
@ -27,15 +25,7 @@ func (c *Client) ApplyPolicies(specs []*fleet.PolicySpec) error {
req := applyPolicySpecsRequest{Specs: specs}
verb, path := "POST", "/api/latest/fleet/spec/policies"
var responseBody applyPolicySpecsResponse
data, err := json.Marshal(req)
if err != nil {
return err
}
data, err = endpointer.RewriteOldToNewKeys(data, endpointer.ExtractAliasRules(req))
if err != nil {
return err
}
return c.authenticatedRequest(data, verb, path, &responseBody)
return c.authenticatedRequest(req, verb, path, &responseBody)
}
// GetPolicies retrieves the list of Policies. Inherited policies are excluded.

View file

@ -1,12 +1,10 @@
package service
import (
"encoding/json"
"fmt"
"net/url"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/endpointer"
)
// ApplyQueries sends the list of Queries to be applied (upserted) to the
@ -15,15 +13,7 @@ func (c *Client) ApplyQueries(specs []*fleet.QuerySpec) error {
req := applyQuerySpecsRequest{Specs: specs}
verb, path := "POST", "/api/latest/fleet/spec/reports"
var responseBody applyQuerySpecsResponse
data, err := json.Marshal(req)
if err != nil {
return err
}
data, err = endpointer.RewriteOldToNewKeys(data, endpointer.ExtractAliasRules(req))
if err != nil {
return err
}
return c.authenticatedRequest(data, verb, path, &responseBody)
return c.authenticatedRequest(req, verb, path, &responseBody)
}
// GetQuerySpec returns the query spec of a query by its team+name.

View file

@ -1,8 +1,6 @@
package service
import (
"fmt"
"github.com/fleetdm/fleet/v4/server/fleet"
)
@ -20,7 +18,7 @@ func (c *Client) SearchTargets(query string, hostIDs, labelIDs []uint) (*fleet.T
var responseBody searchTargetsResponse
err := c.authenticatedRequest(req, verb, path, &responseBody)
if err != nil {
return nil, fmt.Errorf("SearchTargets: %s", err)
return nil, err
}
hosts := make([]*fleet.Host, len(responseBody.Targets.Hosts))