48093 auld api gitops latest os version (#50213)
**Related issue:** Resolves #48093 - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually ## New Fleet configuration settings - [ ] Setting(s) is/are explicitly excluded from GitOps If you didn't check the box above, follow this checklist for GitOps-enabled settings: - [x] Verified that the setting is exported via `fleetctl generate-gitops` - [x] Verified that the setting is cleared on the server if it is not supplied in a YAML file (or that it is documented as being optional) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added “latest” version enforcement for macOS, iOS, and iPadOS updates using required `deadline_days`. * Updates dynamically target each device’s available OS version and deadline. * Configuration and GitOps outputs now include `deadline_days`. * **Bug Fixes** * Improved validation when switching update modes or omitting deadline settings. * GitOps updates now clear previously stored deadline values when omitted. * Changes to `deadline_days` are detected and applied consistently. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Magnus Jensen <magnus@fleetdm.com>
This commit is contained in:
co-authored by
Magnus Jensen
parent
5e95589554
commit
192ac4eb51
@@ -7498,6 +7498,23 @@ software:
|
||||
return false, nil
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("update_new_hosts derives true in latest mode", func(t *testing.T) {
|
||||
savedTeam = existingTeamWithMacOSUpdates("", "")
|
||||
|
||||
teamFile, err := os.CreateTemp(t.TempDir(), "*.yml")
|
||||
require.NoError(t, err)
|
||||
// "latest" has no deadline, so deriving from the deadline alone would
|
||||
// leave new hosts unenforced.
|
||||
_, err = teamFile.WriteString(teamYAML(
|
||||
" macos_updates:\n minimum_version: \"latest\"\n deadline_days: 7"))
|
||||
require.NoError(t, err)
|
||||
|
||||
_ = runAppForTest(t, []string{"gitops", "-f", teamFile.Name()})
|
||||
|
||||
require.Equal(t, optjson.SetBool(true), savedTeam.Config.MDM.MacOSUpdates.UpdateNewHosts)
|
||||
require.Equal(t, optjson.SetInt(7), savedTeam.Config.MDM.MacOSUpdates.DeadlineDays)
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("ios_updates", func(t *testing.T) {
|
||||
|
||||
@@ -135,16 +135,19 @@
|
||||
"macos_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ios_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"windows_updates": {
|
||||
|
||||
+3
@@ -108,16 +108,19 @@
|
||||
"macos_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ios_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"windows_updates": {
|
||||
|
||||
+3
@@ -62,14 +62,17 @@ spec:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ios_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ipados_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
windows_updates:
|
||||
deadline_days: 7
|
||||
grace_period_days: 3
|
||||
|
||||
@@ -61,14 +61,17 @@ spec:
|
||||
macos_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
deadline_days: 7
|
||||
|
||||
@@ -88,16 +88,19 @@
|
||||
"macos_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ios_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"minimum_version": null,
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"windows_updates": {
|
||||
|
||||
@@ -61,14 +61,17 @@ spec:
|
||||
macos_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
deadline_days: 7
|
||||
|
||||
@@ -37,16 +37,19 @@
|
||||
"enable_recovery_lock_password": false,
|
||||
"ios_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"macos_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
@@ -122,11 +125,13 @@
|
||||
"enable_recovery_lock_password": false,
|
||||
"ios_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
@@ -149,6 +154,7 @@
|
||||
},
|
||||
"macos_updates": {
|
||||
"deadline": null,
|
||||
"deadline_days": null,
|
||||
"minimum_version": null,
|
||||
"update_new_hosts": null
|
||||
},
|
||||
@@ -234,16 +240,19 @@
|
||||
"enable_recovery_lock_password": true,
|
||||
"ios_updates": {
|
||||
"deadline": "2022-11-15",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "17.5",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"deadline": "2023-01-01",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "18.0",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"macos_updates": {
|
||||
"deadline": "2021-12-14",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "12.3.1",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
@@ -334,11 +343,13 @@
|
||||
"enable_recovery_lock_password": true,
|
||||
"ios_updates": {
|
||||
"deadline": "2022-11-15",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "17.5",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
"ipados_updates": {
|
||||
"deadline": "2023-01-01",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "18.0",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
@@ -361,6 +372,7 @@
|
||||
},
|
||||
"macos_updates": {
|
||||
"deadline": "2021-12-14",
|
||||
"deadline_days": null,
|
||||
"minimum_version": "12.3.1",
|
||||
"update_new_hosts": null
|
||||
},
|
||||
|
||||
@@ -24,14 +24,17 @@ spec:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ios_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ipados_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
grace_period_days: null
|
||||
@@ -85,14 +88,17 @@ spec:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ios_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
ipados_updates:
|
||||
update_new_hosts: null
|
||||
minimum_version: null
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
grace_period_days: null
|
||||
@@ -158,9 +164,11 @@ spec:
|
||||
ios_updates:
|
||||
minimum_version: "17.5"
|
||||
deadline: "2022-11-15"
|
||||
deadline_days: null
|
||||
macos_updates:
|
||||
minimum_version: "18.0"
|
||||
deadline: "2023-01-01"
|
||||
deadline_days: null
|
||||
windows_updates:
|
||||
deadline_days: 7
|
||||
grace_period_days: 3
|
||||
@@ -218,9 +226,11 @@ spec:
|
||||
ios_updates:
|
||||
minimum_version: "17.5"
|
||||
deadline: "2022-11-15"
|
||||
deadline_days: null
|
||||
macos_updates:
|
||||
minimum_version: "18.0"
|
||||
deadline: "2023-01-01"
|
||||
deadline_days: null
|
||||
windows_updates:
|
||||
deadline_days: 7
|
||||
grace_period_days: 3
|
||||
|
||||
@@ -18,14 +18,17 @@ android_settings:
|
||||
macos_updates:
|
||||
minimum_version: "15.1"
|
||||
deadline: "2024-12-31"
|
||||
deadline_days:
|
||||
update_new_hosts: true
|
||||
ios_updates:
|
||||
minimum_version: "18.1"
|
||||
deadline: "2025-12-31"
|
||||
deadline_days:
|
||||
update_new_hosts:
|
||||
ipados_updates:
|
||||
minimum_version: "18.2"
|
||||
deadline: "2026-12-31"
|
||||
deadline_days:
|
||||
update_new_hosts:
|
||||
windows_updates:
|
||||
deadline_days: 5
|
||||
|
||||
+3
@@ -31,14 +31,17 @@ controls:
|
||||
enable_recovery_lock_password: false
|
||||
ios_updates:
|
||||
deadline: "2021-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "98.1"
|
||||
update_new_hosts:
|
||||
ipados_updates:
|
||||
deadline: "2022-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "98.2"
|
||||
update_new_hosts:
|
||||
macos_updates:
|
||||
deadline: "2020-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "95.1"
|
||||
update_new_hosts: true
|
||||
name_template: iPad $FLEET_VAR_HOST_HARDWARE_SERIAL
|
||||
|
||||
+3
@@ -6,10 +6,12 @@ controls:
|
||||
enable_turn_on_windows_mdm_manually: false
|
||||
ios_updates:
|
||||
deadline: "2025-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "18.1"
|
||||
update_new_hosts:
|
||||
ipados_updates:
|
||||
deadline: "2026-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "18.2"
|
||||
update_new_hosts:
|
||||
macos_migration:
|
||||
@@ -18,6 +20,7 @@ controls:
|
||||
webhook_url: https://some-macos-migration-webhook-url.com
|
||||
macos_updates:
|
||||
deadline: "2024-12-31"
|
||||
deadline_days:
|
||||
minimum_version: "15.1"
|
||||
update_new_hosts: true
|
||||
name_template: No team Mac $FLEET_VAR_HOST_UUID
|
||||
|
||||
@@ -100,14 +100,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
|
||||
@@ -100,14 +100,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
|
||||
@@ -44,14 +44,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -105,14 +108,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -167,12 +173,15 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
@@ -221,12 +230,15 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
|
||||
@@ -44,14 +44,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -105,14 +108,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -167,12 +173,15 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
@@ -222,12 +231,15 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
windows_updates:
|
||||
deadline_days: null
|
||||
|
||||
@@ -40,14 +40,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -101,14 +104,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
|
||||
@@ -43,14 +43,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
@@ -104,14 +107,17 @@ spec:
|
||||
software: null
|
||||
macos_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ios_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
ipados_updates:
|
||||
deadline: null
|
||||
deadline_days: null
|
||||
minimum_version: null
|
||||
update_new_hosts: null
|
||||
windows_updates:
|
||||
|
||||
Reference in New Issue
Block a user