* `identities`: list all identities
* `identity`: show details for a single named identity
* `add-identities`: add one or more new identities
* `update-identities`: update one or more existing identities
(`--replace` for replace operation)
* `remove-identities`: remove one or more identities
In addition, this updates `pebble run` to support an `--identities
<file>` option to allow seeding initial identities when running the
daemon.
There's a new `map[string]*Identity` in state, which is marshalled via
`marshalledIdentity` to disk. The marshalling for API requests is done
by the `apiIdentity` type -- these are separate to ensure that the API
(default) `MarshalJSON` for `Identity` does not include secrets (in
future when we have identity types that include secrets; there's only
user-id for now). So that's why there's a few more types and a bit more
boilerplate than is necessary right now.
The new public `State` methods are:
* `AddIdentities`: add new identities to the system
* `UpdateIdentities`: update existing identities in the system
* `ReplaceIdentities`: replace the given identities in the system; this
allows adding new ones, updating existing ones, and removing identities
(nil/null means remove)
* `RemoveIdentities`: remove existing identities in the system
* `Identities`: list all identities
Each of the `FooIdentities` modification functions validates that the
identities are valid, and that the user-ids are unique, before applying
to state.
feat: include check name in notice data for perform-check and recover-check (#444)
For notices of kind `change-updated`, the notice data will include the
`kind` field that is standard for these notices, but also when `kind` is
`perform-check` or `recover-check`, it will also include `check-name`,
set to the name of the check that is being performed or recovered.
docs: various improvements to "service dependencies" section (#442)
`on-check-failure` is a map of check name to value, so this field
doesn't have a default, you have to add keys and values to the map
explicitly. I believe this incorrect text was just a copy 'n' paste
error.
In addition, I've added a (hopefully-clarifying) paragraph and tweaked
things a bit.
fix(planstate): don't hold planLock while calling plan-changed listeners (#436)
Some listeners do quite a bit of stuff (check manager and log manager),
and they're defined in packages external to the planstate package, so
it's best to avoid holding our plan lock for the duration.