|
|
@@ -1,132 +0,0 @@
|
|
|
-# resource-labels Specification
|
|
|
-
|
|
|
-## Purpose
|
|
|
-TBD - created by archiving change add-key-value-labels. Update Purpose after archive.
|
|
|
-## Requirements
|
|
|
-### Requirement: Resource stores labels as key-value pairs
|
|
|
-
|
|
|
-Each resource SHALL have a Labels property that stores arbitrary string key-value pairs. Labels SHALL be initialized to an empty collection and MUST NOT be null.
|
|
|
-
|
|
|
-#### Scenario: New resource has empty labels
|
|
|
-
|
|
|
-- **WHEN** a resource is created
|
|
|
-- **THEN** the resource has an empty Labels collection
|
|
|
-
|
|
|
-#### Scenario: Labels are stored per resource
|
|
|
-
|
|
|
-- **WHEN** a label with key "env" and value "production" is added to resource "web-01"
|
|
|
-- **THEN** resource "web-01" has Labels containing "env" -> "production"
|
|
|
-- **AND** other resources are unaffected
|
|
|
-
|
|
|
-### Requirement: User can add a label to a resource
|
|
|
-
|
|
|
-The system SHALL allow users to add a label (key-value pair) to any resource via CLI and Web UI.
|
|
|
-
|
|
|
-#### Scenario: Add label via CLI
|
|
|
-
|
|
|
-- **WHEN** user runs `rpk servers label add web-01 --key env --value production`
|
|
|
-- **THEN** resource "web-01" has label "env" with value "production"
|
|
|
-- **AND** the change is persisted to YAML
|
|
|
-
|
|
|
-#### Scenario: Add label via Web UI
|
|
|
-
|
|
|
-- **WHEN** user opens the resource card, clicks add label, enters key "owner" and value "team-a", and submits
|
|
|
-- **THEN** the resource has label "owner" with value "team-a"
|
|
|
-- **AND** the change is persisted
|
|
|
-
|
|
|
-#### Scenario: Add label to existing key overwrites value
|
|
|
-
|
|
|
-- **WHEN** resource "web-01" has label "env" with value "staging"
|
|
|
-- **AND** user adds label "env" with value "production"
|
|
|
-- **THEN** resource "web-01" has label "env" with value "production"
|
|
|
-
|
|
|
-### Requirement: User can remove a label from a resource
|
|
|
-
|
|
|
-The system SHALL allow users to remove a label by key from any resource via CLI and Web UI.
|
|
|
-
|
|
|
-#### Scenario: Remove label via CLI
|
|
|
-
|
|
|
-- **WHEN** resource "web-01" has label "env" with value "production"
|
|
|
-- **AND** user runs `rpk servers label remove web-01 --key env`
|
|
|
-- **THEN** resource "web-01" no longer has label "env"
|
|
|
-- **AND** the change is persisted to YAML
|
|
|
-
|
|
|
-#### Scenario: Remove label via Web UI
|
|
|
-
|
|
|
-- **WHEN** resource has label "owner" with value "team-a"
|
|
|
-- **AND** user clicks remove on that label in the resource card
|
|
|
-- **THEN** the resource no longer has label "owner"
|
|
|
-- **AND** the change is persisted
|
|
|
-
|
|
|
-#### Scenario: Remove nonexistent key is no-op
|
|
|
-
|
|
|
-- **WHEN** resource "web-01" does not have label "env"
|
|
|
-- **AND** user runs `rpk servers label remove web-01 --key env`
|
|
|
-- **THEN** no error occurs
|
|
|
-- **AND** the resource is unchanged
|
|
|
-
|
|
|
-### Requirement: Labels persist in YAML
|
|
|
-
|
|
|
-Labels SHALL be serialized and deserialized from the YAML resource file. Existing resources without a labels section SHALL deserialize with an empty Labels collection.
|
|
|
-
|
|
|
-#### Scenario: Labels are written to YAML
|
|
|
-
|
|
|
-- **WHEN** resource "web-01" has labels "env: production" and "owner: team-a"
|
|
|
-- **AND** the resource is saved
|
|
|
-- **THEN** the YAML file contains a labels section for that resource with the key-value pairs
|
|
|
-
|
|
|
-#### Scenario: Legacy YAML without labels deserializes correctly
|
|
|
-
|
|
|
-- **WHEN** resource in YAML has no labels section
|
|
|
-- **THEN** the resource deserializes with an empty Labels collection
|
|
|
-
|
|
|
-### Requirement: Labels are displayed in resource views
|
|
|
-
|
|
|
-The system SHALL display labels in resource describe output (CLI) and resource cards (Web UI).
|
|
|
-
|
|
|
-#### Scenario: Describe shows labels
|
|
|
-
|
|
|
-- **WHEN** resource "web-01" has labels "env: production" and "owner: team-a"
|
|
|
-- **AND** user runs `rpk servers describe web-01`
|
|
|
-- **THEN** the output includes the labels in key-value format
|
|
|
-
|
|
|
-#### Scenario: Resource card shows labels
|
|
|
-
|
|
|
-- **WHEN** resource has label "env" with value "production"
|
|
|
-- **AND** user views the resource card in Web UI
|
|
|
-- **THEN** the label is displayed
|
|
|
-
|
|
|
-### Requirement: Label key and value are validated
|
|
|
-
|
|
|
-The system SHALL validate label key and value before adding. Key and value MUST be non-empty after trimming. Key length MUST NOT exceed 50 characters. Value length MUST NOT exceed 200 characters.
|
|
|
-
|
|
|
-#### Scenario: Empty key is rejected
|
|
|
-
|
|
|
-- **WHEN** user attempts to add a label with empty or whitespace-only key
|
|
|
-- **THEN** a validation error is returned
|
|
|
-- **AND** the resource is not updated
|
|
|
-
|
|
|
-#### Scenario: Empty value is rejected
|
|
|
-
|
|
|
-- **WHEN** user attempts to add a label with empty or whitespace-only value
|
|
|
-- **THEN** a validation error is returned
|
|
|
-- **AND** the resource is not updated
|
|
|
-
|
|
|
-#### Scenario: Key exceeds length limit is rejected
|
|
|
-
|
|
|
-- **WHEN** user attempts to add a label with key longer than 50 characters
|
|
|
-- **THEN** a validation error is returned
|
|
|
-- **AND** the resource is not updated
|
|
|
-
|
|
|
-#### Scenario: Value exceeds length limit is rejected
|
|
|
-
|
|
|
-- **WHEN** user attempts to add a label with value longer than 200 characters
|
|
|
-- **THEN** a validation error is returned
|
|
|
-- **AND** the resource is not updated
|
|
|
-
|
|
|
-#### Scenario: Add label for nonexistent resource fails
|
|
|
-
|
|
|
-- **WHEN** user attempts to add a label to a resource that does not exist
|
|
|
-- **THEN** a not-found error is returned
|
|
|
-- **AND** no change is persisted
|
|
|
-
|