Added
- Terraform drives Outscale.
init,validate,plan,apply, a second
empty plan anddestroy, against the published provideroutscale/outscale
v1.7.0. Until now everything this pack claimed was proven byoapi-clialone,
and the provider walks paths no CLI does. Writing the fixture was enough to
find six defects, each listed below. - Volumes. Create, read, update, delete, link and unlink. A volume grows and
refuses to shrink — a filesystem does not survive its disk getting smaller —
and a linked volume refuses to go, which is what a client destroying in the
wrong order needs in order to retry. Snapshots stay declined: there are no
bytes behind an emulated volume, so restoring one would produce a disk holding
nothing. - Tags on every resource that carries them, sorted, because their order is a
permanent Terraform diff waiting to happen. AndReadVmsState, the
lightweight view a client polls. - 74 of 104 routes are proven by a real client, up from 69 of 93. 23 more
are probed only: the protocol holds and the behaviour is unproven.
Fixed
terraform applydied on the first machine. The catalogue published no
ProductCodes, so the provider calledReadAdminPasswordon every Vm it read
back, Linux included — it is a Windows call, and an absent list reads as
"unknown". That route did not exist. Images and Vms publish the Linux code
now, and the call answers an empty password, never a generated one: a made-up
credential is one a client could try to use.- Every
terraform destroycrashed the provider outright — "Plugin did not
respond", reproduced with the published, signed provider v1.7.0.DeleteVms
removed the record, and the provider answers a delete by pollingReadVms
until the Vm reportsterminated: an empty list is not a state its waiter
knows. A terminated Vm now stays readable, as it does upstream, and holds
nothing — it is skipped by the Subnet guard and by the address count. - The destroy then failed on the keypair, with "the keypair does not exist"
and a gap where the id should be: the provider creates by name and destroys by
id, and the pack read only the name. - Four fields the provider sends that the pack declared nowhere, the worst
beingDeletionProtection— accepted and dropped, which told a client its
machine was protected when nothing protected it. Also
NestedVirtualization,ResultsPerPageon three reads, andForceStop. feint statusreported 0 in the "driven by a client" column, always.
internal/clideclared its own shape for/_feint/conformance, with a key the
server emits nowhere anduntouchedas an object where the wire carries an
array. The decode failed, both callers fell back to empty, and the header
comment ofstatus.gopromised exactly that number. Measured after twoscw
calls: 0 before, 2 after. The copy is deleted rather than corrected — the view
is now one exported type both sides read.
Changed
-
feint serverefuses a non-loopback address unless
--expose-to-networksays otherwise. Off loopback the anti-rebinding guard
stops refusing anything — correctly, since it can no longer tell what is local
— and the only output wasfeint dev listening on 0.0.0.0:4599. Measured: a
cross-origin page and a forgedHostboth get 200 where they get 403 on
127.0.0.1. With--vmon, what was then reachable from the network is a
container runtime.This is a behaviour change a user can observe. Anyone who was deliberately
exposing the port adds one flag; anyone who was not was exposing more than
they knew.