TeaComponent
A component the tenant publishes through the Transparency Exchange API (TEA): a part a product is assembled from, such as a service, a library or an installer. Fields, YAML, HCL and CLI samples, and how apply treats it.
A component the tenant publishes through the Transparency Exchange API (TEA): a part a product is assembled from, such as a service, a library or an installer. Component releases, and the distributions and artifacts under them, are published by CI pipelines and are not declared here; a product release names the component releases it is built from when CI publishes it. A component given the same name as a TeaProduct is the same subject to consumers, who then see one node carrying both identities. The server assigns the component’s UUID and TEI and reports them in status. Who may read it is declared with a TeaAccessPolicy; until one exists the component is private. Removing the document deletes the component while no release has been published under it. Once CI has published a release, the component and its releases stay, and only the config management of the component ends.
apiVersion |
vulnetix.com/v1 |
kind |
TeaComponent |
| Group | TEA |
| Status | Served. The config engine plans and applies it. |
| Objects per tenant | many, keyed by metadata.name |
| Token and role | An owner or admin session, or a vmt_ config management token with the owner or admin role that lists TeaComponent in its kinds. See Management tokens. |
| Terraform resource | vulnetix_tea_component, imported by name (see Terraform and OpenTofu) |
| CLI | vulnetix config apply, CLI v3.168.0 and later. |
| Pinned schema | v1.15.0/TeaComponent.schema.json |
| Newest schema | latest/TeaComponent.schema.json |
| First released in | v1.6.0 |
| Print the built-in copy | vulnetix config schema TeaComponent |
Minimal
Only the fields the kind requires. From examples/TeaComponent/minimal.yaml.
YAML
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/TeaComponent.schema.json
apiVersion: vulnetix.com/v1
kind: TeaComponent
metadata:
name: payments-api
spec:
name: payments-api
HCL (resource vulnetix_tea_component)
# Only the arguments the kind requires. From config-schemas examples/TeaComponent/minimal.yaml.
resource "vulnetix_tea_component" "payments_api" {
name = "payments-api"
component_name = "payments-api"
}
CLI (applies it)
export VULNETIX_CONFIG_TOKEN=vmt_... # a config management token
vulnetix config apply -f - --manager gitops:acme/platform --auto-approve <<'EOF'
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/TeaComponent.schema.json
apiVersion: vulnetix.com/v1
kind: TeaComponent
metadata:
name: payments-api
spec:
name: payments-api
EOF
Advanced
Every field the kind supports, with a when expression where it takes one. From examples/TeaComponent/advanced.yaml.
YAML
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/TeaComponent.schema.json
apiVersion: vulnetix.com/v1
kind: TeaComponent
metadata:
name: payments-api
labels:
team: payments
spec:
name: payments-api
identifiers:
- idType: PURL
idValue: pkg:oci/payments-api?repository_url=ghcr.io/acme
HCL (resource vulnetix_tea_component)
# Every argument the kind supports. From config-schemas examples/TeaComponent/advanced.yaml.
resource "vulnetix_tea_component" "payments_api" {
name = "payments-api"
component_name = "payments-api"
identifiers = [
{
id_type = "PURL"
id_value = "pkg:oci/payments-api?repository_url=ghcr.io/acme"
},
]
labels = {
team = "payments"
}
}
CLI (applies it)
export VULNETIX_CONFIG_TOKEN=vmt_... # a config management token
vulnetix config apply -f - --manager gitops:acme/platform --auto-approve <<'EOF'
# yaml-language-server: $schema=https://github.com/Vulnetix/config-schemas/releases/latest/download/TeaComponent.schema.json
apiVersion: vulnetix.com/v1
kind: TeaComponent
metadata:
name: payments-api
labels:
team: payments
spec:
name: payments-api
identifiers:
- idType: PURL
idValue: pkg:oci/payments-api?repository_url=ghcr.io/acme
EOF
Fields
Paths use dots for nesting and [] for the items of a list. Required means required whenever the parent object is present. A default is what the server uses when the field is left out.
| Field | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
apiVersion |
string | yes | exactly vulnetix.com/v1 |
The document format version. Every kind in this release is vulnetix.com/v1. | |
kind |
string | yes | exactly TeaComponent |
Always TeaComponent. | |
metadata |
object | yes | no other keys | ||
metadata.name |
string | yes | pattern ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$ |
The object’s name, unique per kind within a tenant. It is the natural key: plan, apply, export and the Terraform provider all address an object by kind and name. | |
metadata.org |
string | no | format uuid |
The tenant (organization UUID) the document belongs to. When set, plan and apply refuse to run against any other tenant. | |
metadata.labels |
object | no | map of string to string (length 0 to 256); keys match ^[a-z0-9]([a-z0-9._/-]{0,61}[a-z0-9])?$ |
Free key/value labels. Stored with the object, never interpreted by the server. | |
metadata.annotations |
object | no | map of string to string (length 0 to 4096) | Free key/value notes for people and tools, such as a ticket link. | |
spec |
object | yes | no other keys | ||
spec.name |
string | yes | pattern ^\S(.*\S)?$; length 1 to 256 |
The component name TEA consumers see, such as payments-api. Unique among the tenant’s components. The first time a name is published the server derives the component’s UUID from it, so a CI pipeline that publishes releases under the same component name writes to this component. Changing the name later keeps the UUID. | |
spec.identifiers |
array of object | no | items unique | Identifiers for the component besides its TEI, in the order consumers see them. The server assigns the TEI itself, so it is reported in status and cannot be declared. | |
spec.identifiers[].idType |
string | yes | PURL, CPE, COMPLIANCE_DOCUMENT |
PURL: a package URL. CPE: a CPE 2.3 name. COMPLIANCE_DOCUMENT: a compliance document type the TEA specification names. | |
spec.identifiers[].idValue |
string | yes | length 1 to 1024 | The identifier itself. |
Applying this kind
- Command.
vulnetix config apply -f <file>; the CLI line above says from which release. Plan first withvulnetix config plan: it shows each object as create, update, delete or no change, with aplanHashthat apply then holds to. Apply writes in one transaction. - Manager. Each object records the manager that applied it (
terraform,consoleorgitops:<repo>).--prunedeletes only objects its own manager owns. See The manager and the config engine. - Status. Applied, Unchanged or Deleted, with no other status fields. The phases the engine reports are explained under status phases.
How apply treats it
As for TeaProduct: the uuid is derived from the name, an object CI already created is adopted, and one with published releases is let go on delete, never deleted.
Terraform and OpenTofu
The resource is vulnetix_tea_component in the vulnetix/resolve provider. Its arguments are the spec in snake case, beside name, labels and annotations from metadata. The Minimal and Advanced HCL are above. The provider’s own reference is vulnetix_tea_component.
Import an object that already exists by its name:
# Import an existing TeaComponent by its name (metadata.name).
terraform import vulnetix_tea_component.payments_api payments-api
Install, authentication and how state is read: Terraform and OpenTofu.
Check a file with vulnetix config validate -f <file>. See Validate documents. In an editor, start the file with the schema comment.