Files
spinifex/contracts/eks/v1
joshsiv-mulga 4e822fa347 test: characterize EKS add-on v1 compatibility with added fields
Pin which owner writes drop unknown record and manifest fields, that
reads and deletes ignore or erase them, that one undecodable entry fails
a listing, and that v1 wire consumers ignore extra fields.
2026-10-09 08:37:42 +10:00
..

EKS v1 contracts

This package owns the deployed EKS add-on contract between the control-plane guest (the on-VM addon-sync agent, eks-gateway-fetch and eks-gateway-publish) and the host (the AWS gateway and the cluster reconciler). It is not an AWS tenant-facing API.

Delivery report

AddonStatusSubject retains the deployed eks.addon.<account>.<cluster>.status route. The guest's mulga-eks-addon-sync.sh builds an AddonStatusReport with printf, so it always sends message (possibly empty); the gateway relays the payload verbatim on the addon channel of internal-publish. AddonDeliveryPhase is the closed set applied, ready, failed.

Staged manifests

InternalAddonsResponse is the body of GET /clusters/{name}/internal-addons/{account}. The gateway renders it with the AWS SDK REST-JSON marshaller (jsonutil.BuildJSON), which ignores json tags, so the deployed body uses Go field names and always includes empty strings, for example {"Addons":[{"AddonName":"x","AddonVersion":"1","ServiceAccountRoleArn":"","ConfigurationValues":""}]}. The guest decodes it with encoding/json, which matches keys case-insensitively, then emits it as tab-separated lines for the shell agent.

The json tags on StagedAddonManifest are the host-internal NATS form used between the gateway and the daemon (eks.ListStagedAddonManifests). They do not describe the guest-facing body.

Compatibility boundary

The subject, phase values, both JSON forms and Go field names are wire compatibility; addon_status_test.go and addon_manifest_test.go pin them with literal bytes. A generation-aware or otherwise incompatible delivery protocol needs a successor version; it is not a v1 change.