Context: https://fleetdm.slack.com/archives/C0ACJ8L1FD0/p1772731172515989?thread_ts=1772651082.960169&cid=C0ACJ8L1FD0
62 KiB
GitOps
Use Fleet's best practice GitOps workflow to manage your computers as code. To learn how to set up a GitOps workflow see the Fleet GitOps repo.
When changing a team's name, you must first change it in the UI and then update your YAML. If you only update your YAML, the team will be deleted and the team's hosts will lose their settings. This happens because the hosts are transferred to "No team".
Any settings not defined in your YAML files (including missing or misspelled keys) will be reset to the default values or deleted (e.g. software packages).
The following are the required keys in the default.yml and any teams/team-name.yml files:
name: # Only teams/team-name.yml.
policies:
queries:
agent_options:
controls: # Can be defined in teams/no-team.yml too.
software: # Can be defined in teams/no-team.yml too
org_settings: # Only default.yml
team_settings: # Required in teams/team-name.yml, but can be defined in teams/no-team.yml, where it is limited to webhook_settings
Paths in YAML files are always relative to the file you’re editing.
For example:
# If the file is in the same directory:
package_path: package_name.yml
# If the file is in a different directory:
package_path: ../software/package_name.yml
Specialized API-only users, who can modify configurations via GitOps but cannot access the Fleet UI, can be created through fleetctl user create with the --api-only flag. Best practice is to assign these users the GitOps role and specify global or team scope in the UI.
labels
Labels can be specified in your default.yml and teams/team-name.yml files using inline configuration or references to separate files in your lib/ folder. Labels cannot be specified in teams/no-team.yml.
namespecifies the label's name. Must be unique across all global and team labels.- Changing a label's
namein GitOps will delete and re-create the label, temporarily clearing its membership. To avoid this, update the label name in the UI before making the change in YAML.
- Changing a label's
descriptionspecifies the label's description.platformspecifies platforms for the label to target. Provides an additional filter. Choices for platform aredarwin,windows,ubuntu, andcentos. All platforms are included by default and this option is represented by an empty string. Only supported iflabel_membership_typeisdynamic.label_membership_typespecifies label type which determines. Choices for type aredynamic,manual, andhost_vitals(default:dynamic).queryis the query in SQL syntax used to filter the hosts. Only supported iflabel_membership_typeisdynamic.hostsis a list of host identifiers (id,hardware_serial, oruuid). The label will apply to any host with a matching identifier. Only supported iflabel_membership_typeismanual.criteria- is the criteria for adding hosts to a host vitals label. Hosts withvitaldata matching the specifiedvaluewill be added to the label. See criteria documentation for details.
Only one of query, hosts, or criteria can be specified. If none are specified, a manual label with no hosts will be created.
The hostname host identifier is deprecated. Please use a host's id, hardware_serial, or uuid instead.
labelsis an optional key: if included indefault.yml, existing global labels not listed will be deleted. If included inteams/team-name.yml, the team's existing labels not listed will be deleted. If thelabelkey is omitted, existing labels will stay intact. For this reason, enabling GitOps mode does not restrict creating/editing labels via the UI.Any labels referenced in other sections (like policies, queries or software) must be specified in the
labelssection.
Example
Inline
default.yml
labels:
- name: Arm64
platform: darwin,windows
description: Hosts on the Arm64 architecture
query: "SELECT 1 FROM system_info WHERE cpu_type LIKE 'arm64%' OR cpu_type LIKE 'aarch64%'"
label_membership_type: dynamic
- name: C-Suite
description: Hosts belonging to the C-Suite
label_membership_type: manual
hosts:
- "IR7M6ZGQJM"
- "JMFWY8VZ09"
- name: Engineering department
description: Hosts used by engineers
label_membership_type: host_vitals
criteria:
vital: end_user_idp_department
value: Engineering
Separate file
lib/labels-name.labels.yml
- name: Arm64
description: Hosts on the Arm64 architecture
query: SELECT 1 FROM system_info WHERE cpu_type LIKE "arm64%" OR cpu_type LIKE "aarch64%"
label_membership_type: dynamic
- name: C-Suite
description: Hosts belonging to the C-Suite
label_membership_type: manual
hosts:
- "IR7M6ZGQJM"
- "JMFWY8VZ09"
- name: Engineering department
description: Hosts used by engineers
label_membership_type: host_vitals
criteria:
vital: end_user_idp_department
value: Engineering
default.yml
labels:
- path: ./lib/labels-name.labels.yml
policies
Policies can be specified inline in your default.yml, teams/team-name.yml, or teams/no-team.yml files. They can also be specified in separate files in your lib/ folder.
Options
For possible options, see the parameters for the Create policy API endpoint
In Fleet Premium you can trigger software installs or script runs on policy failure:
- For software installs, specify either
install_software.package_pathorinstall_software.hash_sha256in your YAML. Ifinstall_software.package_pathonly one package can be specified in the package YAML. - For script runs, specify
run_script.path.
Specifying one package without a list is deprecated as of Fleet 4.73. It is maintained for backwards compatibility. Please use a list instead even if you're only specifying one package.
Example
Inline
default.yml, teams/team-name.yml, or teams/no-team.yml
policies:
- name: macOS - Enable FileVault
description: This policy checks if FileVault (disk encryption) is enabled.
resolution: As an IT admin, turn on disk encryption in Fleet.
query: "SELECT 1 FROM filevault_status WHERE status = 'FileVault is On.';"
platform: darwin
critical: false
calendar_events_enabled: false
conditional_access_enabled: true
labels_include_any:
- Engineering
- Customer Support
Separate file
lib/policies-name.policies.yml
- name: macOS - Enable FileVault
description: This policy checks if FileVault (disk encryption) is enabled.
resolution: As an IT admin, turn on disk encryption in Fleet.
query: "SELECT 1 FROM filevault_status WHERE status = 'FileVault is On.';"
platform: darwin
critical: false
calendar_events_enabled: false
conditional_access_enabled: true
- name: macOS - Disable guest account
description: This policy checks if the guest account is disabled.
resolution: As an IT admin, deploy a macOS, login window profile with the DisableGuestAccount option set to true.
query: "SELECT 1 FROM managed_policies WHERE domain='com.apple.mcx' AND username = '' AND name='DisableGuestAccount' AND CAST(value AS INT) = 1;"
platform: darwin
critical: false
calendar_events_enabled: false
run_script:
path: ./disable-guest-account.sh
- name: Install Firefox on macOS
platform: darwin
description: This policy checks that Firefox is installed.
resolution: Install Firefox app if not installed.
query: "SELECT 1 FROM apps WHERE name = 'Firefox.app'"
install_software:
package_path: ./firefox.package.yml
- name: [Install software] Logic Pro
platform: darwin
description: This policy checks that Logic Pro is installed
resolution: Install Logic Pro App Store app if not installed
query: "SELECT 1 FROM apps WHERE name = 'Logic Pro'"
install_software:
package_path: ./linux-firefox.deb.package.yml
# app_store_id: "1487937127" (for App Store apps)
default.yml (for policies that neither install software nor run scripts), teams/team-name.yml, or teams/no-team.yml
policies:
- path: ../lib/policies-name.policies.yml
Currently, the
run_scriptandinstall_softwarepolicy automations can only be configured for a team (teams/team-name.yml) or "No team" (teams/no-team.yml). The automations can only be added to policies in which the script (or software) is defined in the same team (or "No team").calendar_events_enabledcan only be configured for policies on a team.
queries
Queries can be specified inline in your default.yml file or teams/team-name.yml files. They can also be specified in separate files in your lib/ folder.
Note that the team_id option isn't supported in GitOps.
Options
For possible options, see the parameters for the Create query API endpoint.
Example
Inline
default.yml or teams/team-name.yml
queries:
- name: Collect failed login attempts
description: Lists the users at least one failed login attempt and timestamp of failed login. Number of failed login attempts reset to zero after a user successfully logs in.
query: SELECT users.username, account_policy_data.failed_login_count, account_policy_data.failed_login_timestamp FROM users INNER JOIN account_policy_data using (uid) WHERE account_policy_data.failed_login_count > 0;
platform: darwin,linux,windows
interval: 300
observer_can_run: false
automations_enabled: false
labels_include_any:
- Engineering
- Customer Support
Separate file
lib/queries-name.queries.yml
- name: Collect failed login attempts
description: Lists the users at least one failed login attempt and timestamp of failed login. Number of failed login attempts reset to zero after a user successfully logs in.
query: SELECT users.username, account_policy_data.failed_login_count, account_policy_data.failed_login_timestamp FROM users INNER JOIN account_policy_data using (uid) WHERE account_policy_data.failed_login_count > 0;
platform: darwin,linux,windows
interval: 300
observer_can_run: false
automations_enabled: false
- name: Collect USB devices
description: Collects the USB devices that are currently connected to macOS and Linux hosts.
query: SELECT model, vendor FROM usb_devices;
platform: darwin,linux
interval: 300
observer_can_run: true
automations_enabled: false
default.yml or teams/team-name.yml
queries:
- path: ../lib/queries-name.queries.yml
labels_include_any:
- Engineering
- Customer Support
agent_options
Agent options can be specified inline in your default.yml file or teams/team-name.yml files. They can also be specified in separate files in your lib/ folder.
See "Agent configuration" to find all possible options.
Example
Inline
default.yml or teams/team-name.yml
agent_options:
config:
decorators:
load:
- SELECT uuid AS host_uuid FROM system_info;
- SELECT hostname AS hostname FROM system_info;
options:
disable_distributed: false
distributed_interval: 10
distributed_plugin: tls
distributed_tls_max_attempts: 3
logger_tls_endpoint: /api/osquery/log
logger_tls_period: 10
pack_delimiter: /
Separate file
lib/agent-options.yml
config:
decorators:
load:
- SELECT uuid AS host_uuid FROM system_info;
- SELECT hostname AS hostname FROM system_info;
options:
disable_distributed: false
distributed_interval: 10
distributed_plugin: tls
distributed_tls_max_attempts: 3
logger_tls_endpoint: /api/osquery/log
logger_tls_period: 10
pack_delimiter: /
default.yml or teams/team-name.yml
We want
-for policies and queries because it’s an array. Agent Options we do not use-forpath.
agent_options:
path: ../lib/agent-options.yml
controls
The controls section allows you to configure scripts and device management (MDM) features in Fleet.
scriptsis a list of paths to macOS, Windows, or Linux scripts.windows_enabled_and_configuredspecifies whether or not to turn on Windows MDM features (default:false). Can only be configured for all teams (default.yml).windows_entra_tenant_idsis a list of Microsoft Entra tenant IDs to enable automatic (Autopilot) and manual enrollment by end users (Settings > Accounts > Access work or school on Windows). Can only be configured for all teams (default.yml). Find your Tenant ID, on Microsoft Entra ID > Home.enable_turn_on_windows_mdm_manuallyspecifies whether or not to require end users to manually turn on MDM in Settings > Access work or school (default:false). Iffalse, MDM is automatically turned on for all Windows hosts that aren't connected to any MDM solution. Can only be configured for all teams (default.yml).windows_migration_enabledspecifies whether or not to automatically migrate Windows hosts connected to another MDM solution. Iffalse, MDM is only turned on after hosts are unenrolled from your old MDM solution.enable_turn_on_windows_mdm_manuallymust be set tofalse. (default:false). Can only be configured for all teams (default.yml).enable_disk_encryptionspecifies whether or not to enforce disk encryption on macOS, Windows, and Linux hosts (default:false).windows_require_bitlocker_pinspecifies whether or not to require end users on Windows hosts to set a BitLocker PIN. When set, this PIN is required to unlock Windows host during startup.enable_disk_encryptionmust be set totrue. (default:false).
Example
controls:
scripts:
- path: ../lib/macos-script.sh
- path: ../lib/windows-script.ps1
- path: ../lib/linux-script.sh
windows_enabled_and_configured: true
windows_entra_tenant_ids:
- 4e342a0d-ec1a-4353-bdeb-785542e0a8fb
enable_turn_on_windows_mdm_manually: false # Available in Fleet Premium
windows_migration_enabled: true # Available in Fleet Premium
enable_disk_encryption: true # Available in Fleet Premium
macos_updates: # Available in Fleet Premium
deadline: "2024-12-31"
minimum_version: "15.1"
update_new_hosts: true
ios_updates: # Available in Fleet Premium
deadline: "2024-12-31"
minimum_version: "18.1"
ipados_updates: # Available in Fleet Premium
deadline: "2024-12-31"
minimum_version: "18.1"
windows_updates: # Available in Fleet Premium
deadline_days: 5
grace_period_days: 2
macos_settings:
custom_settings:
- path: ../lib/macos-profile1.mobileconfig
labels_exclude_any: # Available in Fleet Premium
- Macs on Sequoia
- path: ../lib/macos-profile2.json
labels_include_all: # Available in Fleet Premium
- Macs on Sonoma
- path: ../lib/macos-profile3.mobileconfig
labels_include_any: # Available in Fleet Premium
- Engineering
- Product
windows_settings:
custom_settings:
- path: ../lib/windows-profile.xml
android_settings:
custom_settings:
- path: ../lib/android-profile.json
certificates:
- name: wifi-certificate
certificate_authority_name: EST_WIFI
subject_name: /CN=$FLEET_VAR_HOST_END_USER_IDP_USERNAME/OU=$FLEET_VAR_HOST_UUID/ST=$FLEET_VAR_HOST_HARDWARE_SERIAL
macos_setup: # Available in Fleet Premium
bootstrap_package: https://example.org/bootstrap_package.pkg
enable_end_user_authentication: true
enable_release_device_manually: true
macos_setup_assistant: ../lib/dep-profile.json
script: ../lib/macos-setup-script.sh
macos_migration: # Available in Fleet Premium
enable: true
mode: voluntary
webhook_url: https://example.org/webhook_handler
macos_updates
deadlinespecifies the deadline inYYYY-MM-DDformat. The exact deadline is set to noon local time for hosts on macOS 14 and above, 20:00 UTC for hosts on older macOS versions. (default:"").minimum_versionspecifies the minimum required macOS version (default:"").update_new_hosts- macOS hosts that automatically enroll (ADE) are updated to Apple's latest version during macOS Setup Assistant. For backwards compatibility, if not specified, anddeadlineandminimum_versionare set,update_new_hostsis set totrue. Otherwise,update_new_hostsdefaults tofalse.
ios_updates
deadlinespecifies the deadline inYYYY-MM-DDformat; the exact deadline is set to noon local time. (default:"").minimum_versionspecifies the minimum required iOS version (default:"").
ipados_updates
deadlinespecifies the deadline inYYYY-MM-DDformat; the exact deadline is set to noon local time. (default:"").minimum_versionspecifies the minimum required iPadOS version (default:"").
windows_updates
deadline_daysspecifies the number of days before Windows installs updates (default:null)grace_period_daysspecifies the number of days before Windows restarts to install updates (default:null)
macos_settings and windows_settings
macos_settings.custom_settingsis a list of paths to macOS, iOS, and iPadOS configuration profiles (.mobileconfig) or declaration profiles (.json).windows_settings.custom_settingsis a list of paths to Windows configuration profiles (.xml).
Use labels_include_all to target hosts that have all labels, labels_include_any to target hosts that have any label, or labels_exclude_any to target hosts that don't have any of the labels. Only one of labels_include_all, labels_include_any, or labels_exclude_any can be specified. If none are specified, all hosts are targeted.
android_settings
android_settings.custom_settingsis a list of paths to Android configuration profiles (.json).
Use labels_include_all to target hosts that have all labels, labels_include_any to target hosts that have any label, or labels_exclude_any to target hosts that don't have any of the labels. Only one of labels_include_all, labels_include_any, or labels_exclude_any can be specified. If none are specified, all hosts are targeted.
android_settings.certificates
nameis the name of the certificate. Name can be used as a certificate alias to reference in configuration profiles (custom settings).certificate_authority_nameis the name of the certificate authority (CA) to issue the certificate from. Currently, only a custom SCEP CA is supported.subject_nameis the certificate's subject name (SN). Separate subject fields by a "/". For example: "/CN=john@example.com/O=Acme Inc.".
Variables
For macOS configuration profiles, you can use any of Apple's built-in variables in Automated Certificate Management Environment (ACME), Simple Certificate Enrolment Protocol (SCEP), or VPN payloads.
Fleet also supports adding GitHub or GitLab environment variables in your configuration profiles. Use $ENV_VARIABLE format.
In Fleet Premium, you can use reserved variables beginning with $FLEET_VAR_. Fleet will populate these variables when profiles are sent to hosts. Supported variables are:
| Name | Platforms | Description |
|---|---|---|
$FLEET_VAR_NDES_SCEP_CHALLENGE |
macOS, iOS, iPadOS | Fleet-managed one-time NDES challenge password used during SCEP certificate configuration profile deployment. |
$FLEET_VAR_NDES_SCEP_PROXY_URL |
macOS, iOS, iPadOS | Fleet-managed NDES SCEP proxy endpoint URL used during SCEP certificate configuration profile deployment. |
$FLEET_VAR_HOST_END_USER_IDP_USERNAME |
macOS, iOS, iPadOS, Windows | Host's IdP username (e.g. "user@example.com"). When this changes, Fleet will automatically resend the profile. |
$FLEET_VAR_HOST_END_USER_IDP_FULL_NAME |
macOS, iOS, iPadOS, Windows | Host's IdP full name. When this changes, Fleet will automatically resend the profile. |
$FLEET_VAR_HOST_END_USER_IDP_USERNAME_LOCAL_PART |
macOS, iOS, iPadOS, Windows | Local part of the email (e.g. john from john@example.com). When this changes, Fleet will automatically resend the profile. |
$FLEET_VAR_HOST_END_USER_IDP_GROUPS |
macOS, iOS, iPadOS, Windows | Comma separated IdP groups that host belongs to. When these change, Fleet will automatically resend the profile. |
$FLEET_VAR_HOST_END_USER_IDP_DEPARTMENT |
macOS, iOS, iPadOS, Windows | Host's IdP department. When this changes, Fleet will automatically resend the profile. |
$FLEET_VAR_HOST_UUID |
macOS, iOS, iPadOS, Windows | Host's hardware UUID. |
$FLEET_VAR_HOST_HARDWARE_SERIAL |
macOS, iOS, iPadOS, Windows | Host's hardware serial number. |
$FLEET_VAR_HOST_PLATFORM |
macOS, iOS, iPadOS, Windows | Host's platform. Values are "macos", "ios", "ipados", and "windows". |
$FLEET_VAR_CUSTOM_SCEP_CHALLENGE_<CA_NAME> |
macOS, iOS, iPadOS, Windows | Fleet-managed one-time challenge password used during SCEP certificate configuration profile deployment. <CA_NAME> should be replaced with name of the certificate authority configured in custom_scep_proxy. |
$FLEET_VAR_CUSTOM_SCEP_PROXY_URL_<CA_NAME> |
macOS, iOS, iPadOS, Windows | Fleet-managed SCEP proxy endpoint URL used during SCEP certificate configuration profile deployment. |
$FLEET_VAR_SCEP_RENEWAL_ID |
macOS, iOS, iPadOS, Windows | Fleet-managed ID that's required to automatically renew Smallstep, Microsoft NDES, and custom SCEP certificates. The ID must be specified in the Organizational Unit (OU) field in the configuration profile. |
$FLEET_VAR_DIGICERT_PASSWORD_<CA_NAME> |
macOS, iOS, iPadOS | Fleet-managed password required to decode the base64-encoded certificate data issued by a specified DigiCert certificate authority during PKCS12 profile deployment. <CA_NAME> should be replaced with name of the certificate authority configured in digicert. |
$FLEET_VAR_DIGICERT_DATA_<CA_NAME> |
macOS, iOS, iPadOS | Fleet-managed base64-encoded certificate data issued by a specified DigiCert certificate authority during PKCS12 profile deployment. <CA_NAME> should be replaced with name of the certificate authority configured in digicert. |
$FLEET_VAR_SCEP_WINDOWS_CERTIFICATE_ID |
Windows | ID used for SCEP configuration profile on Windows. It must be included in the <LocURI> field. |
$FLEET_VAR_SMALLSTEP_SCEP_CHALLENGE_<CA_NAME> |
macOS, iOS, iPadOS | Fleet-managed one-time Smallstep challenge password used during SCEP certificate configuration profile deployment. <CA_NAME> should be replaced with name of the certificate authority configured in custom_scep_proxy. |
$FLEET_VAR_SMALLSTEP_SCEP_PROXY_URL_<CA_NAME> |
macOS, iOS, iPadOS | Fleet-managed Smallstep SCEP proxy endpoint URL used during SCEP certificate configuration profile deployment. |
The dollar sign ($) can be escaped so it's not considered a variable by using a backslash (e.g. \$100). Additionally, MY${variable}HERE syntax can be used to put strings around the variable.
In XML, certain characters (&, <, >, ", ') must be escaped because they have special meanings in the markup language. GitHub and GitLab environment variables, as well as Fleet's reserved variables, will be automatically escaped when used in a .mobileconfig configuration profile. For example, & will become &.
If certificate authority (CA) variables (ex. $FLEET_VAR_DIGICERT_DATA_<CA_NAME>) don't exist, GitOps dry runs will succeed but GitOps runs will fail.
To hide variable values in the API and UI, you can use Fleet's custom variables.
macos_setup
The macos_setup section lets you control the out-of-the-box setup experience.
Experimental feature. The
manual_agent_installfeature is undergoing rapid improvement, which may result in breaking changes to the API or configuration surface. It is not recommended for use in automated workflows.
bootstrap_packageis the URL to a bootstrap package. Fleet will download the bootstrap package. Applies to macOS only (default:"").manual_agent_installspecifies whether Fleet's agent (fleetd) will be installed as part of setup experience. Applies to macOS only (default:false)enable_end_user_authenticationspecifies whether or not to require end user authentication when the user first sets up their host. Applies to macOS, Windows, Linux, iOS/iPadOS, and Android.require_all_softwarespecifies whether to cancel setup on a macOS host if any software installs fail.enable_release_device_manuallywhen enabled, you're responsible for sending theDeviceConfiguredcommand. End users will be stuck in Setup Assistant until this command is sent. Applies to Apple (macOS, iOS, iPadOS) hosts that automatically enroll via Apple Business Manager (ABM).macos_setup_assistantis a path to a custom automatic enrollment (ADE) profile (.json). Applies to macOS and iOS/iPadOS hosts.scriptis the path to a custom setup script to run after the host is first set up. Applies to macOS only.
Example
teams/team-name.yml, or teams/no-team.yml
macos_setup:
bootstrap_package: "https://your-storage/package.pkg"
manual_agent_install: false
enable_end_user_authentication: true
enable_release_device_manually: false
macos_setup_assistant: "./setup_assistant.json"
script: "./post_setup.sh"
macos_migration
The macos_migration section lets you control the end user migration workflow for macOS hosts that enrolled to your old MDM solution.
enablespecifies whether or not to enable end user migration workflow (default:false)modespecifies whether the end user initiates migration (voluntary) or they're nudged every 15-20 minutes to migrate (forced) (default:"").webhook_urlis the URL that Fleet sends a webhook to when the end user selects Start. Receive this webhook using your automation tool (ex. Tines) to unenroll your end users from your old MDM solution.
Can only be configured for all teams (default.yml).
software
Experimental feature. This feature is undergoing rapid improvement, which may result in breaking changes to the API or configuration surface. It is not recommended for use in automated workflows.
The software section allows you to configure packages, store apps (Apple App Store and Google Play Store), and Fleet-maintained apps that you want to install on your hosts.
packagesis a list of paths to custom packages (.pkg, .ipa, .msi, .exe, .deb, .rpm, .tar.gz, .sh, or .ps1).app_store_appsis a list of Apple App Store or Android Play Store apps.fleet_maintained_appsis a list of Fleet-maintained apps.
Currently, you can specify install_software in the policies YAML to automatically install a custom package or App Store app when a host fails a policy. Automatic install support for Fleet-maintained apps is coming soon.
Currently, Fleet only allows one package, Apple App Store app, or Fleet-maintained app for a specific software. This means, if you specify a Google Chrome for macOS twice in packages or once in packages and once in fleet_maintained_apps, only one of them will be added to Fleet.
Currently, when a .ipa file is added in packages, Fleet adds software for both iOS and iPadOS, along with all specified settings (e.g. self_service). If software for one platform is deleted in the UI, it will come back when GitOps is re-run.
Example
teams/team-name.yml, or teams/no-team.yml
software:
packages:
- path: ../lib/software-name.package.yml
categories:
- Browsers
self_service: true
setup_experience: true
- path: ../lib/software-name2.package.yml
app_store_apps:
- app_store_id: "1091189122"
platform: ios
labels_include_any: # Available in Fleet Premium
- Product
- Marketing
categories:
- Communication
setup_experience: true
auto_update_enabled: true
auto_update_window_start: "00:00"
auto_update_window_end: "04:00"
- app_store_id: "us.zoom.videomeetings"
platform: android
self_service: true
setup_experience: true
configuration:
path: ../lib/software/zoom-config.json
fleet_maintained_apps:
- slug: slack/darwin
install_script:
path: ../lib/software/slack-install-script.sh
uninstall_script:
path: ../lib/software/slack-uninstall-script.sh
post_install_script:
path: ../lib/software/slack-config-script.sh
self_service: true
setup_experience: true
labels_include_any:
- Design
- Sales
categories:
- Communication
- Productivity
self_service, labels, categories, and setup_experience
self_servicespecifies whether end users can install from Fleet Desktop > Self-service (default:false) on macOS or self-service web app on iOS/iPadOS.labels_include_anytargets hosts that have any of the specified labels.labels_exclude_anytargets hosts that have none of the specified labels. Only one of these fields can be set. If neither is set, all hosts are targeted.categoriesgroups self-service software on your end users' Fleet Desktop > My device page. If none are set, Fleet-maintained apps get their default categories and all other software only appears in the All group. Supported values:Browsers: shown as 🌎 BrowsersCommunication: shown as 👬 CommunicationDeveloper tools: shown as 🧰 Developer toolsProductivity: shown as 🖥️ ProductivitySecurity: shown as 🔐 SecurityUtilities: shown as 🛠️ Utilities
setup_experienceinstalls the software when hosts enroll (default:false). Learn more in the setup experience guide.
packages
urlspecifies the URL at which the software is located. Fleet will download the software and upload it to S3. If you don't want to host the package, add it to Fleet first and then copy thehash_sha256.hash_sha256specifies the SHA256 hash of the package file. If provided, and a package with that hash was already added to Fleet, the download will be skipped. This speeds up GitOps runs. If a package with that hash doesn't exist in Fleet, Fleet will download the package from theurland add the package if the hash matches. Fleet will error if the hash doesn't match. You can specifyhash_sha256withouturlif the package was already added to Fleet via the UI or the API.display_nameis the package name that will be displayed in the UI. If not set,namewill be used instead.pre_install_query.pathis the osquery query Fleet runs before installing the software. Software will be installed only if the query returns results.install_script.pathspecifies the command Fleet will run on hosts to install software. The default script is dependent on the software type (i.e. .pkg). Not supported for.shand.ps1files.uninstall_script.pathis the script Fleet will run on hosts to uninstall software. The default script is dependent on the software type (i.e. .pkg). Not supported for.shand.ps1files.post_install_script.pathis the script Fleet will run on hosts after the software install. There is no default. Not supported for.shand.ps1files.icon.pathis a relative path to the PNG icon that will be displayed in Fleet and on Fleet Desktop > Self-service instead of the default icon built into Fleet. It must be a square PNG with dimensions between 120x120 px and 1024x1024 px. Custom icons will only override the icon for the software title and team where they are added.
Example
URL
lib/software-name.package.yml:
- url: https://dl.tailscale.com/stable/tailscale-setup-1.72.0.exe
install_script:
path: ../lib/software/tailscale-install-script.ps1
uninstall_script:
path: ../lib/software/tailscale-uninstall-script.ps1
post_install_script:
path: ../lib/software/tailscale-config-script.ps1
Hash
You can view the hash for existing software in the software detail page in the Fleet UI. It is also returned after uploading a new software item via the API.
# Mozilla Firefox (Firefox 136.0.1.pkg) version 136.0.1
- hash_sha256: fd22528a87f3cfdb81aca981953aa5c8d7084581b9209bb69abf69c09a0afaaf
app_store_apps
app_store_idis the ID of the Apple App Store or Android Play Store app. You can find this ID at the end of the app's URL. For example, "Bear - Markdown Notes" URL is "https://apps.apple.com/us/app/bear-markdown-notes/id1016366447" making theapp_store_idis "1016366447". Similarly, the URL for "Google Chrome" on Android is "https://play.google.com/store/apps/details?id=com.android.chrome," so theapp_store_idis "com.android.chrome."- For Apple App Store apps, make sure to include only the ID itself, and not the
idprefix shown in the URL. The ID must be wrapped in quotes as shown in the example so that it is processed as a string.
- For Apple App Store apps, make sure to include only the ID itself, and not the
platformis the platform of the app (darwin,ios,ipados, orandroid). If not specified, andapp_store_idis Apple App Store ID, one app for each of the Apple App Store app's supported platforms is added. For example, adding Bear (supported on iOS and iPadOS) adds both the iOS and iPadOS apps to your software that's available to install in Fleet.icon.pathis a relative path to the PNG icon that will be displayed in Fleet and on Fleet Desktop > Self-service instead of the default icon the icon sourced from Apple. It must be a square PNG with dimensions between 120x120 px and 1024x1024 px. Custom icons will only override the icon for the software title and team where they are added.configuration.pathis the Android Play Store app's managed configuration in JSON format. Currently only supported for Android.managedConfigurationandworkProfileWidgetsare supported from Android application policy.- Configuration keys vary by app. Refer to the app vendor's documentation for available managed configuration options. For example, see Zoom's Android managed configuration or GlobalProtect's Android configuration.
To add the same App Store app for multiple platforms, specify the app_store_id multiple times, along with the platform you want. If you don't specify a platform, one app for each available platform will be added (macOS, iOS, and iPadOS).
When you update an Android app's configuration via GitOps, the app's settings are applied without reinstalling the app. The install status will show as "Pending" until the configuration is applied.
fleet_maintained_apps
fleet_maintained_appsis a list of Fleet-maintained apps. Provide theslugfield to include a Fleet-maintained app on a team. To find theslug, head to Software > Add software and select a Fleet-maintained app, then select Show details. You can also see the list of app slugs on GitHub.
Currently, Fleet-maintained apps will be updated to the latest version published by Fleet when GitOps runs.
The below fields are all optional.
self_servicespecifies whether end users can install from Fleet Desktop > Self-service.pre_install_query.pathis the osquery query Fleet runs before installing the software. Software will be installed only if the query returns results.post_install_script.pathis the script that, if supplied, Fleet will run on hosts after the software installs.icon.pathis a relative path to the PNG icon that will be displayed in Fleet and on Fleet Desktop > Self-service instead of the default icon the icon sourced from Apple. It must be a square PNG with dimensions between 120x120 px and 1024x1024 px. Custom icons will only override the icon for the software title and team where they are added.
The below fields are optional, and if omitted will default to values specified in the app's metadata on GitHub.
install_script.pathspecifies the command Fleet will run on hosts to install software.uninstall_script.pathis the script Fleet will run on hosts to uninstall software.categoriesis an array of categories, from supported categories.
org_settings and team_settings
Currently, managing users and ticket destinations (Jira and Zendesk) are only supported using Fleet's UI or API.
features
The features section of the configuration YAML lets you define what predefined queries are sent to the hosts and later on processed by Fleet for different functionalities.
additional_queriesadds extra host details. This information will be updated at the same time as other host details and is returned by the API when host objects are returned (default: empty).enable_host_usersspecifies whether or not Fleet collects user data from hosts (default:true).enable_software_inventoryspecifies whether or not Fleet collects software inventory from hosts (default:true).
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
org_settings:
features:
additional_queries:
time: SELECT * FROM time
macs: SELECT mac FROM interface_details
enable_host_users: true
enable_software_inventory: true
fleet_desktop
The fleet_desktop section lets you customize the Fleet Desktop experience by overriding default URLs.
transparency_urldirects end users to a custom URL when they select About Fleet in the Fleet Desktop dropdown (default: https://fleetdm.com/transparency).alternative_browser_hostis a custom hostname that my hosts will access Fleet Desktop from.
Can only be configured for all teams (org_settings).
Example
org_settings:
fleet_desktop:
transparency_url: https://example.org/transparency
alternative_browser_host: fleet-desktop.example.com
host_expiry_settings
The host_expiry_settings section lets you define if and when hosts should be automatically deleted from Fleet if they have not checked in.
host_expiry_enabled(default:false)host_expiry_windowif a host has not communicated with Fleet in the specified number of days, it will be removed. Must be >0when host expiry is enabled (default:0).
If this setting is not defined in your YAML files, unlike all other settings, it will not get reset to the default values.
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
org_settings:
host_expiry_settings:
host_expiry_enabled: true
host_expiry_window: 10
org_info
org_nameis the name of your organization (default:"")org_logo_urlis a public URL of the logo for your organization (default: Fleet logo).org_logo_url_light_backgroundis a public URL of the logo for your organization that can be used with light backgrounds (default: Fleet logo).contact_urlis a URL or file URI that appears in error messages presented to end users (default:"https://fleetdm.com/company/contact")
Can only be configured for all teams (org_settings).
To get the best results for your logos (org_logo_url and org_logo_url_light_background), use the following sizes:
- For square logos, use a PNG that's 256x256 pixels (px).
- For rectangular logos (wordmark), use a PNG that's 516x256 pixels (px).
Example
org_settings:
org_info:
org_name: Fleet
org_logo_url: https://example.com/logo.png
org_logo_url_light_background: https://example.com/logo-light.png
contact_url: https://fleetdm.com/company/contact
secrets
The secrets section defines the valid secrets that hosts can use to enroll to Fleet. Supply one of these secrets when generating the fleetd agent you'll use to enroll hosts.
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
org_settings:
secrets:
- secret: $ENROLL_SECRET
server_settings
ai_features_disableddisables AI-assisted policy descriptions and resolutions. (default:false)enable_analyticsspecifies whether or not to enable Fleet's usage statistics. (default:true)live_query_disableddisables the ability to run live queries (ad hoc queries executed via the UI or fleetctl). (default:false)query_reports_disableddisables query reports and deletes existing reports. (default:false)query_report_capsets the maximum number of results to store per query report before the report is clipped. If increasing this cap, we recommend enabling reports for one query at a time and monitoring your infrastructure. (default:1000)scripts_disabledblocks access to run scripts. Scripts may still be added in the UI and CLI. (default:false)server_urlis the base URL of the Fleet instance. If this URL changes and Apple (macOS, iOS, iPadOS) hosts already have MDM turned on, the end users will have to turn MDM off and back on to use MDM features. (default: provided during Fleet setup)
Can only be configured for all teams (org_settings).
Example
org_settings:
server_settings:
ai_features_disabled: false
enable_analytics: true
live_query_disabled: false
query_reports_disabled: false
scripts_disabled: false
server_url: https://instance.fleet.com
sso_settings
The sso_settings section lets you define single sign-on (SSO) settings.
enable_sso(default:false)idp_nameis the human-friendly name for the identity provider that will provide single sign-on authentication (default:"").idp_image_urlis an optional link to an image such as a logo for the identity provider. (default:"").entity_idis the entity ID: a Uniform Resource Identifier (URI) that you use to identify Fleet when configuring the identity provider. It must exactly match the Entity ID field used in identity provider configuration (default:"").metadatais the metadata (in XML format) provided by the identity provider. (default:"")metadata_urlis the URL that references the identity provider metadata. Only one ofmetadataormetadata_urlis required (default:"").enable_jit_provisioningspecifies whether or not to enable just-in-time user provisioning (default:false).enable_sso_idp_loginspecifies whether or not to allow single sign-on login initiated by identity provider (default:false).sso_server_urlis used if the URL your Fleet users (admins, maintainers, observers) use to login to Fleet via SSO is different than the base URL of your Fleet instance. If not configured, login via SSO will use the base URL of the Fleet instance.
Can only be configured for all teams (org_settings).
Example
org_settings:
sso_settings:
enable_sso: true
idp_name: Okta
idp_image_url: https://www.okta.com/favicon.ico
entity_id: https://example.okta.com
metadata: $SSO_METADATA
enable_jit_provisioning: true # Available in Fleet Premium
enable_sso_idp_login: true
sso_server_url: https://admin.example.com # Optional, SSO will only work from this URL
integrations
The integrations section lets you configure your Google Calendar, Conditional access (enabling/disabling for hosts in "No team"), Jira, and Zendesk. After configuration, you can enable automations like calendar event and ticket creation for failing policies. Currently, enabling ticket creation is only available using Fleet's UI or API (YAML files coming soon).
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
default.yml
org_settings:
integrations:
conditional_access_enabled: true
google_calendar:
- api_key_json: $GOOGLE_CALENDAR_API_KEY_JSON
domain: fleetdm.com
jira:
- url: https://example.atlassian.net
username: user1
api_token: $JIRA_API_TOKEN
project_key: PJ1
zendesk:
- url: https://example.zendesk.com
email: user1@example.com
api_token: $ZENDESK_API_TOKEN
group_id: 1234
/teams/team-name.yml
At the team level, there is the additional option to enable conditional access, which blocks third party app sign-ins on hosts failing policies. (Available in Fleet Premium. Must have Microsoft Entra connected.)
integrations:
conditional_access_enabled: true
google_calendar
For all teams (org_settings):
api_key_jsonis the contents of the JSON file downloaded when you create your Google Workspace service account API key (default:"").domainis the primary domain used to identify your end user's work calendar (default:"").
For custom teams (team_settings):
enable_calendar_eventsto enable calendar events for a team (default:false).webhook_urlis the webhook URL triggered during a user's calendar event (default:"").
jira
urlis the URL of your Jira (default:"")usernameis the username of your Jira account (default:"").api_tokenis the Jira API token (default:"").project_keyis the project key location in your Jira project's URL. For example, in "jira.example.com/projects/EXMPL," "EXMPL" is the project key (default:"").
Can only be configured for all teams (org_settings). Use API to configure Jira for custom teams and default "No team".
zendesk
urlis the URL of your Zendesk (default:"")usernameis the username of your Zendesk account (default:"").api_tokenis the Zendesk API token (default:"").group_idis found by selecting Admin > People > Groups in Zendesk. Find your group and select it. The group ID will appear in the search field.
Can only be configured for all teams (org_settings). Use API to configure Zendesk for custom teams and default "No team".
certificate_authorities
Available in Fleet Premium.
This section lets you configure your certificate authorities (CA) to help your end users connect to Wi-Fi and VPN.
Example
default.yml
org_settings:
certificate_authorities:
digicert:
- name: DIGICERT_WIFI
url: https://one.digicert.com
api_token: $DIGICERT_API_TOKEN
profile_id: 926dbcdd-41c4-4fe5-96c3-b6a7f0da81d8
certificate_common_name: $FLEET_VAR_HOST_HARDWARE_SERIAL@example.com
certificate_user_principal_names:
- $FLEET_VAR_HOST_HARDWARE_SERIAL@example.com
certificate_seat_id: $FLEET_VAR_HOST_HARDWARE_SERIAL@example.com
ndes_scep_proxy:
url: https://example.com/certsrv/mscep/mscep.dll
admin_url: https://example.com/certsrv/mscep_admin/
username: Administrator@example.com
password: myPassword
custom_scep_proxy:
- name: SCEP_VPN
url: https://example.com/scep
challenge: $SCEP_VPN_CHALLENGE
custom_est_proxy:
- name: SECTIGO_WIFI
url: https://example.com/.well-known/est/abc123
username: $SECTIGO_USERNAME_PASSWORD
password: $SECTIGO_WIFI_PASSWORD
hydrant: # Available in Fleet Premium
- name: EST_WIFI
url: https://example.com/est
username: $EST_PROXY_USERNAME
password: $EST_PROXY_PASSWORD
hydrant:
- name: HYDRANT_WIFI
url: https://example.hydrantid.com/.well-known/est/abc123
client_id: $HYDRANT_CLIENT_ID
client_secret: $HYDRANT_CLIENT_SECRET
smallstep:
- name: SMALLSTEP_WIFI
url: https://example.scep.smallstep.com/p/agents/integration-fleet
challenge_url: https://example.scep.smallstep.com/xr9f4db7-83f1-48ab-8982-8b6870d4fl85/challenge
username: $SMALLSTEP_USERNAME
password: $SMALLSTEP_PASSWORD
digicert
nameis the name of certificate authority that will be used in variables in configuration profiles. Only letters, numbers, and underscores are allowed.urlis the URL to DigiCert One instance (default:https://one.digicert.com).api_tokenis the token used to authenticate requests to DigiCert.profile_idis the ID of certificate profile in DigiCert.certificate_common_nameis the certificate's CN.certificate_user_principal_namesis the certificate's user principal names (UPN) attribute in Subject Alternative Name (SAN).certificate_seat_idis the ID of the DigiCert's seat. Seats are license units in DigiCert.
Can only be configured for all teams (org_settings).
ndes_scep_proxy
urlis the URL of the NDES SCEP endpoint (default:"").admin_urlis the URL of the NDES admin endpoint (default:"").usernameis the username of the NDES admin endpoint (default:"").passwordis the password of the NDES admin endpoint (default:"").
Can only be configured for all teams (org_settings).
custom_scep_proxy
nameis the name of certificate authority that will be used in variables in configuration profiles. Only letters, numbers, and underscores are allowed.urlis the URL of the Simple Certificate Enrollment Protocol (SCEP) server.challengeis the static challenge password used to authenticate requests to SCEP server.
custom_est_proxy
nameis the name of the certificate authority. Only letters, numbers, and underscores are allowed.urlis the EST (Enrollment Over Secure Transport) endpoint's URL.usernameis the username used to authenticate with the EST endpoint.passwordis the password used to authenticate with the EST endpoint.
hydrant
nameis the name of the certificate authority that will be used in variables in configuration profiles. Only letters, numbers, and underscores are allowed.urlis the EST (Enrollment Over Secure Transport) endpoint provided by Hydrant.client_idis the client ID provided by Hydrant.client_secretis the client secret provided by Hydrant.
custom_est_proxy
nameis the name of the certificate authority that will be used in variables in configuration profiles. Only letters, numbers, and underscores are allowed.urlis the EST (Enrollment Over Secure Transport) endpoint.usernameis the username for the EST server.passwordis the password for the EST server.
smallstep
nameis the name of the certificate authority that will be used in variables in configuration profiles. Only letters, numbers, and underscores are allowed.urlis the SCEP URL from Smallstep.challenge_urlis the Webhook URL from Smallstep.usernameis the Challenge Basic Authentication Username from Smallstep.passwordis the Challenge Basic Authentication Password from Smallstep.
Can only be configured for all teams (org_settings).
webhook_settings
The webhook_settings section lets you define webhook settings for failing policy, vulnerability, and host status automations.
intervalis how often policy webhooks/tickets and host status webhooks are triggered, formatted as number + unit of measurement (e.g."90m"). Can be specified in seconds ("s"), minutes ("m"), or hours ("h"). (Default:"24h")
activities_webhook
enable_activities_webhook(default:false)destination_urlis the URL toPOSTto when an activity is generated (default:"")
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
org_settings:
webhook_settings:
activities_webhook:
enable_activities_webhook: true
destination_url: https://example.org/webhook_handler
failing_policies_webhook
These settings can also be configured per-team when nested under
team_settings.
enable_failing_policies_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").policy_idsis the list of policies that will trigger a webhook.host_batch_sizeis the maximum number of host identifiers to send in one webhook request. A value of0means all host identifiers with a failing policy will be sent in a single request.
Example
org_settings:
webhook_settings:
failing_policies_webhook:
enable_failing_policies_webhook: true
destination_url: https://example.org/webhook_handler
host_batch_size: 0
policy_ids:
- 1
- 2
- 3
host_status_webhook
enable_host_status_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").days_countis the number of days that hosts need to be offline to count as part of the percentage (default:0).host_percentageis the percentage of hosts that need to be offline to trigger the webhook. (default:0).
Can only be configured for all teams (org_settings) and custom teams (team_settings).
Example
org_settings:
webhook_settings:
host_status_webhook:
enable_host_status_webhook: true
destination_url: https://example.org/webhook_handler
days_count: 7
host_percentage: 25
vulnerabilities_webhook
enable_vulnerabilities_webhook(default:false)destination_urlis the URL toPOSTto when the condition for the webhook triggers (default:"").host_batch_sizeis the maximum number of host identifiers to send in one webhook request. A value of0means all host identifiers with a detected vulnerability will be sent in a single request.
Can only be configured for all teams (org_settings).
Example
org_settings:
webhook_settings:
vulnerabilities_webhook:
enable_vulnerabilities_webhook: true
destination_url: https://example.org/webhook_handler
host_batch_size: 0
mdm
apple_business_manager
After adding an Apple Business Manager (ABM) token via the UI, the apple_business_manager section lets you determine which team Apple hosts are assigned to in Fleet when they appear in Apple Business Manager.
organization_nameis the organization name associated with the Apple Business Manager account.macos_teamis the team where macOS hosts are automatically added when they appear in Apple Business Manager. If not specified, defaults to "No team".ios_teamis the the team where iOS hosts are automatically added when they appear in Apple Business Manager. If not specified, defaults to "No team".ipados_teamis the team where iPadOS hosts are automatically added when they appear in Apple Business Manager. If not specified, defaults to "No team".
Can only be configured for all teams (org_settings).
Example
org_settings:
mdm:
apple_business_manager: # Available in Fleet Premium
- organization_name: Fleet Device Management Inc.
macos_team: 💻 Workstations
ios_team: 📱🏢 Company-owned iPhones
ipados_team: 🔳🏢 Company-owned iPads
volume_purchasing_program
After you've uploaded a Volume Purchasing Program (VPP) token, the volume_purchasing_program section lets you configure the teams in Fleet that have access to that VPP token's App Store apps. Currently, adding a VPP token is only available using Fleet's UI.
locationis the name of the location in the Apple Business Manager account.teamsis a list of team names. If you choose specific teams, App Store apps in this VPP account will only be available to install on hosts in these teams. If not specified, App Store apps will not be available to install on any team. To apply it to all teams, use- All teams.
Can only be configured for all teams (org_settings).
Example
org_settings:
mdm:
volume_purchasing_program: # Available in Fleet Premium
- location: Fleet Device Management Inc.
teams:
- 💻 Workstations
- 💻🐣 Workstations (canary)
- 📱🏢 Company-owned iPhones
- 🔳🏢 Company-owned iPads
end_user_authentication
The end_user_authentication section lets you define the identity provider (IdP) settings used for end user authentication during Automated Device Enrollment (ADE).
Once the IdP settings are configured, you can use the controls.macos_setup.enable_end_user_authentication key to control the end user experience during ADE.
idp_nameis the human-friendly name for the identity provider that will provide single sign-on authentication (default:"").entity_idis the entity ID: a Uniform Resource Identifier (URI) that you use to identify Fleet when configuring the identity provider. It must exactly match the Entity ID field used in identity provider configuration (default:"").metadatais the metadata (in XML format) provided by the identity provider. (default:"")metadata_urlis the URL that references the identity provider metadata. Only one ofmetadataormetadata_urlis required (default:"").
Can only be configured for all teams (org_settings):
Example
org_settings:
mdm:
end_user_authentication:
entity_id: https://example.okta.com
idp_name: Okta
metadata: $END_USER_SSO_METADATA
metadata_url: ""
end_user_license_agreement
You can require an end user to agree to an end user license agreement (EULA) before they can use their new Mac. end_user_authentication must be configured, and controls.enable_end_user_authentication must be set to true.
end_user_license_agreementis the path to the PDF document.
Can only be configured for all teams (org_settings).
Example
org_settings:
mdm:
end_user_license_agreement: ./lib/eula.pdf
apple_server_url
Update this URL if you're self-hosting Fleet and you want your hosts to talk to this URL for MDM features. (If not configured, hosts will use the base URL of the Fleet instance.)
If this URL changes and hosts already have MDM turned on, the end users will have to turn MDM off and back on to use MDM features.
Can only be configured for all teams (org_settings).
Example
org_settings:
mdm:
apple_server_url: https://instance.fleet.com
yara_rules
The yara_rules section lets you define YARA rules that will be served by Fleet's authenticated
YARA rule functionality.
Can only be configured for all teams (org_settings). To target rules to specific teams, target the
queries referencing the rules to the desired teams.
Example
org_settings:
yara_rules:
- path: ./lib/rule1.yar
- path: ./lib/rule2.yar
smtp_settings
If you're self hosting Fleet, the smtp_settings section lets you configure an e-mail (SMTP) server. This enables Fleet to send user invite and password reset emails.
If you're using Fleet's managed-cloud offering, an SMTP server is already setup for you.
For possible options, see the parameters for the smtp_settings object in the API.
Can only be configured for all teams (org_settings).
Example
org_settings:
smtp_settings:
enable_smtp: true
sender_address: organization@example.com
server: localhost
port: 1025
authentication_type: none
Can only be configured for all teams (org_settings).
Unlike other options, omitting smtp_settings or leaving it blank won't reset the values back to the default.