for #16954, this fixes an issue found during testing
# Checklist for submitter
If some of the following don't apply, delete the relevant line.
- [x] Added/updated tests
- [x] Manual QA for all new/changed functionality
for #16954
# Checklist for submitter
If some of the following don't apply, delete the relevant line.
<!-- Note that API documentation changes are now addressed by the
product design team. -->
- [x] Added/updated tests
- [x] Manual QA for all new/changed functionality
- Don't cache requests to get profiles, they don't happen in order when
run agains a real Puppet server
- Report resource has changed if the profile was in the host but the new
resource type is absent
this PR modifies the `external_host_identifier` parameter that's used to
match hosts to Puppet runs to use an identifier that's *unique per run*
(instead of an identifier that's *unique per host*)
this has the adventage to:
1. allow for concurrent Puppet runs that don't interfere with each
other.
2. allow for failed/orphaned Puppet runs to not interfere with new runs
(the keys will eventually get expired)
all the existent behavior should be preserved.
> Note: I have verified that the value that the reporter gets is the one
associated with the right puppet run, even if multiple runs happen
simultaneously.
A few minor things going on:
1. Adjusted the Puppet module to send the profiles base64 encoded
2. Enabled FileVault by default on teams created using the `/match`
endpoint.
3. Remove profiles when a team is removed. We can't do a foreign key
because the global team.id is NULL. I also included a migration to
cleanup orphaned profiles.
Related to #11185 this adds a Puppet module that provides:
1. A custom type named `fleetdm::profile` that can be used to define
profiles to a device
2. A function named `fleetdm::release_device` that can be used to
release a device from await device configuration.
Instructions/usage can be found in the `README.md` file.
---------
Co-authored-by: Martin Angers <martin.n.angers@gmail.com>