Repository navigation
Releases: ticpu/s3-fleet
Releases · ticpu/s3-fleet
Release list
s3-fleet v0.2.2
Library:
- New s3_fleet::lookup module: failed_lookup(stderr) reads the name-lookup failure that ssh or ssh-keyscan printed, and says whether the resolver answered that the name does not exist (NameAbsent) or failed in some other way (Other), such as a DNS outage. Tools that decide "this host is gone" from ssh's output can share this one list of resolver wordings (glibc, musl, BSD) instead of keeping their own. keyscan uses it; its behaviour is unchanged.
s3-fleet v0.2.1
New features:
- known-hosts --cached on a machine that has not read the fleet yet now says how to fill the cache (s3-fleet -f FLEET list), instead of only reporting a missing file.
Documentation:
- Every command's man page now describes the command, not just its name.
- s3-fleet-ssh(1) says which ssh options the wrapper adds, that it replaces itself with ssh, and that once ssh runs the exit status is ssh's (the remote command's, or 255), with a recipe for callers that must tell s3-fleet's codes apart. It also shows that ssh options after the host still apply, with a ControlMaster example.
- s3-fleet-known-hosts(1) says that --cached never reads the network, what happens with no cache, and which commands fill it.
s3-fleet v0.2.0
Library:
- Fleet::init_with publishes a complete first document, so a fleet migrated into a live bucket is never seen empty; like init, it never overwrites an existing document.
- keyscan: KeyscanError::Resolution now means only that the name has no address. A resolver that could not answer (EAI_AGAIN), or any other lookup failure, is the new KeyscanError::ResolverFailure, which says nothing about the host. Breaking: match arms on KeyscanError need the new variant.
Bug fixes:
- With an ssh-keyscan built on musl (Alpine), a name that does not resolve was reported as "no keys returned"; it is now a resolution failure.
s3-fleet v0.1.0
First release.
New features:
- Keep a fleet of SSH hosts as one YAML document in an S3 bucket: each host's pinned host keys and labels, plus fleet-wide attributes.
- Find the endpoint, region and bucket from a DNS TXT record (_s3-fleet., then _s3-fleet) through the resolver's search list, so readers need only the fleet name and no credentials.
- Every write is conditional on the version that was read: two people editing at once never lose a change, the second gets exit 4 and reruns.
- add pins host keys with ssh-keyscan and refuses a changed key unless --rekey; rm, label, attr, and label selectors for list and known-hosts.
- s3-fleet ssh, and a KnownHostsCommand mode for plain ssh, trusting only the pinned keys; host names complete from a local cache.
- For scripts: data on stdout, versioned --json output, one exit code per outcome, no prompt outside setup; --allow-stale serves the local cache when S3 is unreachable.
- setup stores write credentials after checking them and says what init still has to create; init creates the bucket and an empty fleet.
- Man pages: s3-fleet(1) with discovery, first use, exit status, environment and files, and one page per command.
Library:
- Fleet (init, load, conditional commit), FleetDoc and its validation, label selectors, known_hosts rendering, keyscan, DNS discovery, and an opt-in local cache; async, never retrying or falling back on its own.
- A small S3 client on reqwest and aws-sigv4: GET, HEAD, PUT with If-Match or If-None-Match, DELETE, ListObjectsV2 and bucket creation; anonymous when no credentials are given, with the S3 error code and request id in its errors.
Build:
- Static musl binaries for amd64 and arm64, and .deb packages carrying the man pages and bash completion.