interface_notice — version 1.2
Source: presets
Purpose
Tells the projects that read this estate's interface when an exported value changes: one Pub/Sub message per apply that changes one.
The map asks how the projects hear of a change as a choice, question oneof interface_notice, with one option per delivery form; Pub/Sub is the one satz has,
and this pack is it. A second form — a webhook, a push of the interface to a
customer repository — is a second option and a pack of its own beside this one.
The estate's exports (export statements, interfaces/) are what the projects beside
it read, in their own state and their own pipelines. This pack puts a notice behind
them, in four pieces in the infrastructure project:
- a bucket that holds one object,
interface.json— not the state bucket; - a Pub/Sub topic;
- the grant that lets Cloud Storage's service agent publish to that topic;
- a storage notification: every new generation of an object in the bucket publishes one message to the topic.
The object is the estate's exported values as JSON (interface, estate, core, and
interfaces with one map per interface),
written from the root module's local.satz_interface, which satz emits beside the
outputs. Terraform rewrites the object only when its content changes, so an apply that
changes an exported value publishes one message and an apply that changes nothing
publishes none. The message names the object; the object holds the new values.
A project subscribes in its own state — its own google_pubsub_subscription on the
topic, a push to its CI's webhook or a pull from a runner. The topic and the object are
core exports of this pack (interface_topic, interface_object), so every interface
and its README carry them, with the subscription to write.
The service agent's address carries the project's number, which only exists once the
project does, so the pack reads it with the provider's
google data source, in a trusted hcl block: satz
writes no data source of its own. The notification names its topic through the grant,
so it is created after the grant, and the object records the notification's id, so it
is written after the notification and its first generation is published too.
NO CLAIM. No catalog control covers it.
Use it
params {
interface_notice_pubsub = true
// the pack's own defaults — copy only the lines you change
interface_notice_project = infra_project_name
interface_notice_bucket_name = "{customer_shortname}-infra-001-interface"
interface_notice_topic_name = "{customer_shortname}-satz-interface"
interface_notice_location = default_region
}
use "presets/interface-notice.satz" when interface_notice_pubsub
interface_notice_pubsub is the gate: while it is falsy the pack contributes nothing — no resources, no params, no claims. It is declared by estate_map, and the estate's own binding wins.
Needs from outside the pack:
customer_shortname— declared byestate_core; use one of them alongside, or declare it in the estate.default_region— declared byestate_core; use one of them alongside, or declare it in the estate.infra_project_name— declared byestate_core; use one of them alongside, or declare it in the estate.
Params
| param | default |
|---|---|
interface_notice_project |
infra_project_name |
interface |
"{customer |
interface_notice_topic_name |
"{customer |
interface_notice_location |
default_region |
Questions
What to ask before this pack is configured, and what changing the answer costs.
| asks about | prompt | reversal | blast | recommends |
|---|---|---|---|---|
interface_notice_project |
Which project holds the bucket and the topic the interface notice publishes through? | recreate | low | — |
interface_notice_project — Whoever may read the topic learns when the estate's exported values change and reads them from the object. The infrastructure project keeps it with the estate's other plumbing. Moving it later is a new topic, and every project's subscription has to be written again.
Contributes
| resource type | labels |
|---|---|
google_pubsub_topic |
interface_notice |
google |
interface_notice_publisher |
google_storage_bucket |
interface_notice |
google |
interface_notice |
google_storage_notification |
interface_notice |
Raw HCL: 1 hcl block(s) — trusted: "the storage service agent's address carries the project number, which the provider's data source reads". Opaque to the compliance plane.
Exports
Outputs of the root module and values of the interfaces under interfaces/ in every estate that uses this pack: a core export is carried by every interface, another one by its own interface and every interface that uses it. An interface a pack declares is common: every project's folder carries it.
| interface | output | value | description |
|---|---|---|---|
core |
interface_topic |
"${google |
The topic that carries one message per apply that changes an exported value |
core |
interface_object |
"gs: |
The object that holds the exported values as JSON |
Claims
None — this pack proves no control by itself.
History
| version | date | change |
|---|---|---|
| 1.2 | 2026-09-26 | the header and the question's text say project where they said team, and interfaces/ where they said hcl/interfaces/; the resources are unchanged |
| 1.1 | 2026-09-25 | gated on interface_notice_pubsub, the Pub/Sub option of the map's choice interface_notice; the header says the choice is where a further delivery form joins. The resources are unchanged |
| 1.0 | 2026-09-25 | first version: tells the teams whose HCL reads the estate's interface when an exported value changes. A bucket, a Pub/Sub topic, the grant that lets Cloud Storage's service agent publish to it, and a storage notification in the infrastructure project; the object interface.json holds the exported values, rewritten only when one changes, so each apply that changes an export publishes one message. Exports interface_topic and interface_object |
The whole library's history: the changelog in presets/CHANGELOG.md.
Notes
No notes yet.