Skip to content

Commit

Permalink
Merge branch 'main' into quarterly-roadmap-blogpost
Browse files Browse the repository at this point in the history
  • Loading branch information
Drew-P-drawers authored Jan 8, 2025
2 parents 8d738f2 + 0620d7e commit 3548997
Show file tree
Hide file tree
Showing 21 changed files with 425 additions and 53 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/release-qa.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: Release QA
about: Checklist of required tests prior to release
title: 'Release QA:'
labels: '#g-mdm,#g-endpoint-ops,:release'
labels: '#g-mdm,#g-orchestration,#g-software:release'
assignees: 'xpkoala,pezhub,jmwatts'

---
Expand Down
8 changes: 4 additions & 4 deletions docs/Deploy/Reference-Architectures.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ assume On-Demand pricing (savings are available through Reserved Instances). Cal
| Dependencies | Version | Instance type | Nodes |
| ------------ | ----------------------- | --------------- | ----- |
| Redis | 6 | cache.t4g.small | 3 |
| MySQL | 8.0.mysql_aurora.3.04.2 | db.t4g.medium | 2 |
| MySQL | 8.0.mysql_aurora.3.07.1 | db.t4g.medium | 2 |


###### [Up to 25000 hosts](https://calculator.aws/#/estimate?id=d735758715f059118dbce8dc42f3ff2410adc621)
Expand All @@ -191,7 +191,7 @@ assume On-Demand pricing (savings are available through Reserved Instances). Cal
| Dependencies | Version | Instance type | Nodes |
| ------------ | ----------------------- | --------------- | ----- |
| Redis | 6 | cache.m6g.large | 3 |
| MySQL | 8.0.mysql_aurora.3.04.2 | db.r6g.large | 2 |
| MySQL | 8.0.mysql_aurora.3.07.1 | db.r6g.large | 2 |


###### [Up to 150000 hosts](https://calculator.aws/#/estimate?id=689fea65efff361ee070b15044a01224b8d26621)
Expand All @@ -203,7 +203,7 @@ assume On-Demand pricing (savings are available through Reserved Instances). Cal
| Dependencies | Version | Instance type | Nodes |
| ------------ | ----------------------- | --------------- | ----- |
| Redis | 6 | cache.m6g.large | 3 |
| MySQL | 8.0.mysql_aurora.3.04.2 | db.r6g.4xlarge | 2 |
| MySQL | 8.0.mysql_aurora.3.07.1 | db.r6g.4xlarge | 2 |


###### [Up to 300000 hosts](https://calculator.aws/#/estimate?id=19b667fde567df0d64d9fae632d4885d7fdc726a)
Expand All @@ -215,7 +215,7 @@ assume On-Demand pricing (savings are available through Reserved Instances). Cal
| Dependencies | Version | Instance type | Nodes |
| ------------ | ----------------------- | --------------- | ----- |
| Redis | 6 | cache.m6g.large | 3 |
| MySQL | 8.0.mysql_aurora.3.04.2 | db.r6g.16xlarge | 2 |
| MySQL | 8.0.mysql_aurora.3.07.1 | db.r6g.16xlarge | 2 |

AWS reference architecture can be found [here](https://github.com/fleetdm/fleet/tree/main/terraform/example). This configuration includes:

Expand Down
32 changes: 0 additions & 32 deletions docs/Get started/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,26 +106,6 @@ The `fleetctl package` command is not supported on DISA-STIG distribution.

Different portions of the Fleet software are licensed differently, as noted in the [LICENSE](https://github.com/fleetdm/fleet/blob/main/LICENSE) file. The majority of Fleet is MIT licensed. Paid features require a license key.

## What is your commitment to open source stewardship?

- When a feature is free and open source we won't move that feature to a paid tier. Features might be removed from the open source codebase in other cases, for example when combining features from multiple tiers into one new feature.

- The majority of new capabilities added to Fleet will benefit all users, not just customers.

- We won't introduce features into the open source codebase with a fixed delay; if a feature is planned to land in both it will be released simultaneously in both.

- We will always release and open source all tests that we have for any open source feature.

- The free version of Fleet is enterprise ready.

- The open source codebase will not contain any artificial limits on the number of hosts, users, size, or performance.

- The majority of new features contributed by Fleet Device Management Inc will be open source.

- The product will be available for download without leaving an email address or logging in.

- We will always allow you to benchmark the performance of Fleet. (Fleet also [load tests the platform before every release](https://fleetdm.com/handbook/engineering#rituals), with increasingly ambitious targets. The scale of real time reporting supported by Fleet has increased 5,000% since 2019. Today, Fleet deployments support 500,000 devices, and counting. The company is committed to driving this number to 1M+, and beyond.)

## How do I contact Fleet for support?

A lot of questions can be answered [in the documentation](https://fleetdm.com/docs) or [guides](https://fleetdm.com/guides).
Expand All @@ -134,22 +114,10 @@ To get help from the community, visit https://fleetdm.com/support.

If your organization has Fleet Premium, you can [access professional support](https://fleetdm.com/customers/login) with a guaranteed response time.

## What if we choose not to renew?

If you opt not to renew Fleet Premium, you can continue using only the free capabilities of Fleet (same code base, just unconfigure the license key.)

## Can we buy a license to access premium features with reduced support for a reduced cost?

We aren’t able to sell licenses and support separately.

## Do you offer pricing for unmanaged hosts? What about ephemeral hosts which may scale up or down?

For now, the number of hosts is the maximum cap of hosts enrolled at any given time. Umanaged hosts ("Pending" MDM status in Fleet) are not included in the enrolled hosts count.

## When run locally, what resources does the Fleet app typically consume on an individual instance, and when run in HA, at high volume? And how is latency on an individual instance vs clustered deployment?

Like any modern application, Fleet scales horizontally. The biggest potential bottleneck for Fleet is the number of hosts being monitored, so that's where we've devoted the most attention when testing. The largest number of hosts we've had a customer ask about was 350,000, for all of the production servers and employee laptops of a publicly traded company.

## Where's the data stored?

Since Fleet is self-managed, some metadata is stored wherever it is deployed (e.g. Amazon, Azure, Google, your own data center, hybrid cloud, anywhere). That's done using a MySQL database, but the bulk of the data flows directly into a tool like Splunk or ElasticSearch. You can send that information to any of Fleet's supported log destinations.
Expand Down
47 changes: 43 additions & 4 deletions frontend/components/PlatformSelector/PlatformSelector.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import React from "react";
import classNames from "classnames";

import { IPolicySoftwareToInstall } from "interfaces/policy";
import Checkbox from "components/forms/fields/Checkbox";
import CustomLink from "components/CustomLink";
import TooltipWrapper from "components/TooltipWrapper";
import { buildQueryStringFromParams } from "utilities/url";
import paths from "router/paths";

interface IPlatformSelectorProps {
baseClass?: string;
Expand All @@ -13,6 +19,8 @@ interface IPlatformSelectorProps {
setCheckLinux: (val: boolean) => void;
setCheckChrome: (val: boolean) => void;
disabled?: boolean;
installSoftware?: IPolicySoftwareToInstall;
currentTeamId?: number;
}

export const PlatformSelector = ({
Expand All @@ -26,16 +34,48 @@ export const PlatformSelector = ({
setCheckLinux,
setCheckChrome,
disabled = false,
installSoftware,
currentTeamId,
}: IPlatformSelectorProps): JSX.Element => {
const baseClass = "platform-selector";

const labelClasses = classNames("form-field__label", {
[`form-field__label--disabled`]: disabled,
});

const renderInstallSoftwareHelpText = () => {
if (!installSoftware) {
return null;
}
const softwareName = installSoftware.name;
const softwareId = installSoftware.software_title_id.toString();
const softwareLink = `${paths.SOFTWARE_TITLE_DETAILS(
softwareId
)}?${buildQueryStringFromParams({ team_id: currentTeamId })}`;

return (
<span className={`${baseClass}__install-software`}>
<CustomLink text={softwareName} url={softwareLink} /> will only install
on{" "}
<TooltipWrapper
tipContent={
<>
To see targets, select{" "}
<b>{softwareName} &gt; Actions &gt; Edit</b>. Currently, hosts
that aren&apos;t targeted show an empty (---) policy status.
</>
}
>
targeted hosts
</TooltipWrapper>
.
</span>
);
};

return (
<div className={`${parentClass}__${baseClass} ${baseClass} form-field`}>
<span className={labelClasses}>Targets:</span>
<span className={labelClasses}>Target:</span>
<span className={`${baseClass}__checkboxes`}>
<Checkbox
value={checkDarwin}
Expand Down Expand Up @@ -71,9 +111,8 @@ export const PlatformSelector = ({
</Checkbox>
</span>
<div className="form-field__help-text">
Your policy will only run on the selected platform(s). Additionally, if
install software automation is enabled, it will only be installed on
hosts defined in the software scope.
Policy runs on all hosts with these platform(s).
{renderInstallSoftwareHelpText()}
</div>
</div>
);
Expand Down
8 changes: 7 additions & 1 deletion frontend/components/PlatformSelector/_styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// override global form-field width: 100%
width: auto;

span {
&__checkboxes {
display: flex;
align-items: center;
gap: 12px;
Expand All @@ -15,4 +15,10 @@
&__platform-checkbox-wrapper {
width: auto;
}

.form-field__help-text {
display: flex;
flex-direction: column;
gap: $pad-medium;
}
}
9 changes: 8 additions & 1 deletion frontend/hooks/usePlatformSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
QUERYABLE_PLATFORMS,
QueryablePlatform,
} from "interfaces/platform";
import { IPolicySoftwareToInstall } from "interfaces/policy";

import PlatformSelector from "components/PlatformSelector";

Expand All @@ -15,12 +16,16 @@ export interface IPlatformSelector {
isAnyPlatformSelected: boolean;
render: () => JSX.Element;
disabled?: boolean;
installSoftware?: IPolicySoftwareToInstall;
currentTeamId?: number;
}

const usePlatformSelector = (
platformContext: SelectedPlatformString | null | undefined,
baseClass = "",
disabled = false
disabled = false,
installSoftware: IPolicySoftwareToInstall | undefined,
currentTeamId: number | undefined
): IPlatformSelector => {
const [checkDarwin, setCheckDarwin] = useState(false);
const [checkWindows, setCheckWindows] = useState(false);
Expand Down Expand Up @@ -73,6 +78,8 @@ const usePlatformSelector = (
setCheckLinux={setCheckLinux}
setCheckChrome={setCheckChrome}
disabled={disabled}
installSoftware={installSoftware}
currentTeamId={currentTeamId}
/>
);
}, [checkDarwin, checkWindows, checkLinux, checkChrome, disabled]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ const PolicyForm = ({

const {
currentUser,
currentTeam,
isGlobalObserver,
isGlobalAdmin,
isGlobalMaintainer,
Expand Down Expand Up @@ -146,7 +147,9 @@ const PolicyForm = ({
const platformSelector = usePlatformSelector(
lastEditedQueryPlatform,
baseClass,
platformSelectorDisabled
platformSelectorDisabled,
storedPolicy?.install_software,
currentTeam?.id
);

const {
Expand Down
1 change: 0 additions & 1 deletion orbit/changes/8986-systemdrive-env-passthrough

This file was deleted.

6 changes: 0 additions & 6 deletions orbit/cmd/orbit/orbit.go
Original file line number Diff line number Diff line change
Expand Up @@ -771,12 +771,6 @@ func main() {
)
}

if runtime.GOOS == "windows" {
if systemDrive, ok := os.LookupEnv("SystemDrive"); ok {
options = append(options, osquery.WithEnv([]string{fmt.Sprintf("SystemDrive=%s", systemDrive)}))
}
}

var certPath string
if fleetURL != "https://" && c.Bool("insecure") {
proxy, err := insecure.NewTLSProxy(fleetURL)
Expand Down
10 changes: 10 additions & 0 deletions server/vulnerabilities/nvd/cpe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1314,6 +1314,16 @@ func TestCPEFromSoftwareIntegration(t *testing.T) {
Version: "6.0.1",
}, cpe: "",
},
{ // checks vendor/product matching based on bundle name, including EAPs
software: fleet.Software{
Name: "GoLand EAP.app",
Source: "apps",
Version: "2022.3.99.123.456",
Vendor: "",
BundleIdentifier: "com.jetbrains.goland-EAP",
},
cpe: "cpe:2.3:a:jetbrains:goland:2022.3.99.123.456:*:*:*:*:macos:*:*",
},
{
software: fleet.Software{
Name: "IntelliJ IDEA.app",
Expand Down
Loading

0 comments on commit 3548997

Please sign in to comment.