Canonical · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for LXD external REST Storage API

53 actions 53 updates phrasing extends openapi/canonical-storage-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Canonical's API. It is a proposal applied on top of the contract, not a document Canonical publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 53 · first 16 shown; the file carries all of them

$.info
$.paths['/1.0/storage-pools'].get
$.paths['/1.0/storage-pools'].post
$.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].put
$.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].delete
$.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].patch
$.paths['/1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName}'].put
$.paths['/1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName}'].delete
$.paths['/1.0/storage-pools/{name}/resources'].get
$.paths['/1.0/storage-pools/{poolName}'].get
$.paths['/1.0/storage-pools/{poolName}'].put
$.paths['/1.0/storage-pools/{poolName}'].delete
$.paths['/1.0/storage-pools/{poolName}'].patch
$.paths['/1.0/storage-pools/{poolName}/buckets'].get
$.paths['/1.0/storage-pools/{poolName}/buckets'].post
$.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}'].get

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for LXD external REST Storage API
  version: 1.0.0
extends: openapi/canonical-storage-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-10-01'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 52
- target: $.paths['/1.0/storage-pools'].get
  update:
    x-apievangelist-phrasing:
      intent: List storage pool URLs
      effect: read
      questions:
      - Which storage pools exist on my LXD server, just as a list of URLs?
      - Can I list the storage pool paths available to one project?
      instructions:
      - text: List the URLs of every LXD storage pool.
      - text: Give me the storage pool URLs visible in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-09-26'
- target: $.paths['/1.0/storage-pools'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a storage pool
      effect: write
      questions:
      - How do I add a new storage pool to LXD with a specific driver like zfs or btrfs?
      - When clustered, do I have to create the pool on each member before the global create?
      instructions:
      - text: Create a storage pool named {name} using the {driver} driver.
        slots:
          name: requestBody.name
          driver: requestBody.driver
      - text: Define pool {name} with driver {driver} on cluster member {target} first.
        slots:
          name: requestBody.name
          driver: requestBody.driver
          target: query.target
      - text: Add storage pool {name} described as {description}.
        slots:
          name: requestBody.name
          description: requestBody.description
      method: generated
      generated: '2026-09-26'
- target: $.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a bucket's configuration
      effect: write
      questions:
      - How do I overwrite all of a bucket's settings at once?
      - Will a full bucket update reset config keys I omit?
      instructions:
      - text: Replace the entire configuration of bucket {bucket} in pool {pool} with {config}.
        slots:
          bucket: path.bucketName
          pool: path.name
          config: requestBody.config
      - text: Overwrite the bucket settings and set its description to {description}.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a storage bucket
      effect: destructive
      questions:
      - How do I remove an object storage bucket from a pool?
      - Can I delete a bucket that belongs to another project?
      instructions:
      - text: Delete storage bucket {bucket} from pool {pool}.
        slots:
          bucket: path.bucketName
          pool: path.name
      - text: Remove the bucket from project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{name}/buckets/{bucketName}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Change some bucket settings
      effect: write
      questions:
      - Can I change only a bucket's size limit without touching other settings?
      - How do I edit just the description on an existing bucket?
      instructions:
      - text: 'Patch only these config keys on bucket {bucket} in pool {pool}: {config}.'
        slots:
          bucket: path.bucketName
          pool: path.name
          config: requestBody.config
      - text: Update just the bucket description to {description}.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName}'].put
  update:
    x-apievangelist-phrasing:
      intent: Update a bucket access key
      effect: write
      questions:
      - How do I change the role on an existing bucket key?
      - Can I rotate the secret of a bucket key I already created?
      instructions:
      - text: Change the role of key {key} on bucket {bucket} in pool {pool} to {role}.
        slots:
          key: path.keyName
          bucket: path.bucketName
          pool: path.name
          role: requestBody.role
      - text: Rotate the bucket key to access key {access_key} and secret {secret_key}.
        slots:
          access_key: requestBody.access-key
          secret_key: requestBody.secret-key
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Revoke a bucket access key
      effect: destructive
      questions:
      - How do I revoke an access key so it can no longer reach the bucket?
      - Can I delete a bucket key in a specific project?
      instructions:
      - text: Delete access key {key} from bucket {bucket} in pool {pool}.
        slots:
          key: path.keyName
          bucket: path.bucketName
          pool: path.name
      - text: Revoke the bucket key in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{name}/resources'].get
  update:
    x-apievangelist-phrasing:
      intent: Check storage pool usage
      effect: read
      questions:
      - How much space is used and free in a storage pool?
      - Can I check disk and inode usage of a pool on a particular cluster member?
      instructions:
      - text: Show the capacity and usage figures for storage pool {pool}.
        slots:
          pool: path.name
      - text: Report pool resource usage on cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one storage pool
      effect: read
      questions:
      - What driver and settings does a particular storage pool use?
      - Can I look up a single pool's details as seen by one cluster member?
      instructions:
      - text: Show me the details of storage pool {pool}.
        slots:
          pool: path.poolName
      - text: Get that storage pool's configuration on cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a storage pool's configuration
      effect: write
      questions:
      - How do I overwrite a storage pool's entire config in one request?
      - Does replacing a pool's configuration drop keys I leave out?
      instructions:
      - text: Replace the whole configuration of storage pool {pool} with {config}.
        slots:
          pool: path.poolName
          config: requestBody.config
      - text: Overwrite the pool's config and set its description to {description}.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a storage pool
      effect: destructive
      questions:
      - How do I remove a storage pool I no longer use?
      - Can a storage pool be deleted from within a specific project?
      instructions:
      - text: Delete storage pool {pool}.
        slots:
          pool: path.poolName
      - text: Remove the storage pool in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Change some storage pool settings
      effect: write
      questions:
      - Can I tweak just one setting on a storage pool without resending everything?
      - How do I update only the description of an existing storage pool?
      instructions:
      - text: 'Patch storage pool {pool} with only these config keys: {config}.'
        slots:
          pool: path.poolName
          config: requestBody.config
      - text: Change just the pool's description to {description}, leaving config alone.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets'].get
  update:
    x-apievangelist-phrasing:
      intent: List bucket URLs in a storage pool
      effect: read
      questions:
      - Which object storage buckets live in a given storage pool?
      - Can I list bucket URLs across all projects at once?
      instructions:
      - text: List the bucket URLs in storage pool {pool}.
        slots:
          pool: path.poolName
      - text: List bucket URLs in the pool for project {project}.
        slots:
          project: query.project
      - text: 'List bucket URLs in the pool across all projects: {all_projects}.'
        slots:
          all_projects: query.all-projects
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets'].post
  update:
    x-apievangelist-phrasing:
      intent: Create an object storage bucket
      effect: write
      questions:
      - How do I create an S3-style bucket inside an LXD storage pool?
      - Can I set a size or other config when creating a new bucket?
      instructions:
      - text: Create a bucket named {name} in storage pool {pool}.
        slots:
          name: requestBody.name
          pool: path.poolName
      - text: Add bucket {name} with config {config} in project {project}.
        slots:
          name: requestBody.name
          config: requestBody.config
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one storage bucket
      effect: read
      questions:
      - What is the configuration and S3 endpoint of a specific bucket?
      - Can I look up a single bucket's details in a given project?
      instructions:
      - text: Show me the details of bucket {bucket} in pool {pool}.
        slots:
          bucket: path.bucketName
          pool: path.poolName
      - text: Get the bucket record from project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}/keys'].get
  update:
    x-apievangelist-phrasing:
      intent: List access key URLs for a bucket
      effect: read
      questions:
      - Which access keys have been issued for a bucket?
      - Can I get just the key paths for a bucket without the secrets?
      instructions:
      - text: List the access key URLs for bucket {bucket} in pool {pool}.
        slots:
          bucket: path.bucketName
          pool: path.poolName
      - text: Give me the bucket's key URLs in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}/keys'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a bucket access key
      effect: write
      questions:
      - How do I generate a new access key for a storage bucket?
      - Can I give a bucket key a read-only role or supply my own secret?
      instructions:
      - text: Create a key named {name} for bucket {bucket} in pool {pool} with role {role}.
        slots:
          name: requestBody.name
          bucket: path.bucketName
          pool: path.poolName
          role: requestBody.role
      - text: Add bucket key {name} using access key {access_key} and secret {secret_key}.
        slots:
          name: requestBody.name
          access_key: requestBody.access-key
          secret_key: requestBody.secret-key
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}/keys/{keyName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one bucket access key
      effect: read
      questions:
      - What role and credentials does a particular bucket key have?
      - Can I retrieve a single bucket key by name?
      instructions:
      - text: Reveal the role and credentials of access key {key} on bucket {bucket} in pool {pool}.
        slots:
          key: path.keyName
          bucket: path.bucketName
          pool: path.poolName
      - text: Look up this single access key of the bucket in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets/{bucketName}/keys?recursion=1'].get
  update:
    x-apievangelist-phrasing:
      intent: List bucket keys with full details
      effect: read
      questions:
      - How do I see every bucket key with its role and credentials in one response?
      - Is there an expanded listing of bucket keys instead of URLs?
      instructions:
      - text: Fetch all keys for bucket {bucket} in pool {pool} as full records including role.
        slots:
          bucket: path.bucketName
          pool: path.poolName
      - text: Expand every bucket key's details in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/buckets?recursion=1'].get
  update:
    x-apievangelist-phrasing:
      intent: List buckets in a pool with full details
      effect: read
      questions:
      - How do I get complete bucket records, with config and S3 URL, for a pool?
      - Is there a recursive listing that expands each bucket instead of returning paths?
      instructions:
      - text: Fetch every bucket in pool {pool} as full objects rather than URLs.
        slots:
          pool: path.poolName
      - text: Expand all bucket details in the pool for project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes'].get
  update:
    x-apievangelist-phrasing:
      intent: List volume URLs in a storage pool
      effect: read
      questions:
      - Which storage volumes are in one particular pool?
      - Can I filter the volumes in a pool with a filter expression?
      instructions:
      - text: List the volume URLs in storage pool {pool}.
        slots:
          pool: path.poolName
      - text: List volume URLs in this pool matching filter {filter}.
        slots:
          filter: query.filter
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a storage volume in a pool
      effect: write
      questions:
      - How do I create a new custom volume in a storage pool?
      - Can I create a volume by copying from another volume as the source?
      instructions:
      - text: Create volume {name} of type {type} in storage pool {pool}.
        slots:
          name: requestBody.name
          type: requestBody.type
          pool: path.poolName
      - text: Create volume {name} copied from source {source}.
        slots:
          name: requestBody.name
          source: requestBody.source
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}'].get
  update:
    x-apievangelist-phrasing:
      intent: List a pool's volume URLs of one type
      effect: read
      questions:
      - How do I list only the custom volumes, or only image volumes, in a pool?
      - Can I get the URLs of one volume type within a single pool?
      instructions:
      - text: List URLs of {volume_type} volumes in storage pool {pool}.
        slots:
          volume_type: path.type
          pool: path.poolName
      - text: List this pool's volume URLs of this type in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a volume via the type-specific path
      effect: write
      questions:
      - Can I create a volume by posting to the path that already names its type?
      - How do I create a block content-type volume on the type-specific endpoint?
      instructions:
      - text: Using the type-specific path, create {volume_type} volume {name} in pool {pool} with content type {content_type}.
        slots:
          volume_type: path.type
          name: requestBody.name
          pool: path.poolName
          content_type: requestBody.content_type
      - text: On the typed volume endpoint, create {name} with config {config}.
        slots:
          name: requestBody.name
          config: requestBody.config
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one storage volume
      effect: read
      questions:
      - What configuration does a specific storage volume have?
      - Can I look up one volume's details on a particular cluster member?
      instructions:
      - text: Show me the details of {volume_type} volume {volume} in pool {pool}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Get the volume record as seen on cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a volume's configuration
      effect: write
      questions:
      - How do I overwrite all of a storage volume's settings?
      - Can a full volume update restore it from a snapshot?
      instructions:
      - text: Replace the entire config of {volume_type} volume {volume} in pool {pool} with {config}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          config: requestBody.config
      - text: Overwrite the volume and restore it from snapshot {restore}.
        slots:
          restore: requestBody.restore
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}'].post
  update:
    x-apievangelist-phrasing:
      intent: Rename, move or migrate a volume
      effect: write
      questions:
      - How do I rename a storage volume?
      - Can I move a volume to a different pool or migrate it to another server?
      instructions:
      - text: Rename {volume_type} volume {volume} in pool {pool} to {name}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          name: requestBody.name
      - text: Move the volume into pool {pool}.
        slots:
          pool: requestBody.pool
      - text: 'Move the volume to project {dest_project}, without its snapshots: {volume_only}.'
        slots:
          dest_project: requestBody.project
          volume_only: requestBody.volume_only
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a storage volume
      effect: destructive
      questions:
      - How do I delete a custom storage volume?
      - Can I remove a volume that sits on a specific cluster member?
      instructions:
      - text: Delete {volume_type} storage volume {volume} from pool {pool}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Remove the volume from cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}'].patch
  update:
    x-apievangelist-phrasing:
      intent: Change some volume settings
      effect: write
      questions:
      - Can I change just the size of a volume without resending its whole config?
      - How do I update only a volume's description?
      instructions:
      - text: 'Patch only these config keys on {volume_type} volume {volume} in pool {pool}: {config}.'
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          config: requestBody.config
      - text: Set just the volume description to {description}.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups'].get
  update:
    x-apievangelist-phrasing:
      intent: List volume backup URLs
      effect: read
      questions:
      - Which backups exist for a storage volume?
      - Can I list only the backup paths for a volume?
      instructions:
      - text: List backup URLs for {volume_type} volume {volume} in pool {pool}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: List the volume's backup URLs in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups'].post
  update:
    x-apievangelist-phrasing:
      intent: Back up a storage volume
      effect: write
      questions:
      - How do I create a backup of a custom volume?
      - Can I set an expiry and compression algorithm on a volume backup?
      instructions:
      - text: Create a backup named {name} of {volume_type} volume {volume} in pool {pool}.
        slots:
          name: requestBody.name
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Back up the volume as {name}, compressed with {compression}, expiring {expires_at}.
        slots:
          name: requestBody.name
          compression: requestBody.compression_algorithm
          expires_at: requestBody.expires_at
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one volume backup
      effect: read
      questions:
      - When was a particular volume backup made and when does it expire?
      - Can I look up a single volume backup's metadata?
      instructions:
      - text: Show me backup {backup} of {volume_type} volume {volume} in pool {pool}.
        slots:
          backup: path.backupName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Get the volume backup record in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName}'].post
  update:
    x-apievangelist-phrasing:
      intent: Rename a volume backup
      effect: write
      questions:
      - How do I rename an existing volume backup?
      - Can a volume backup be given a new name after it is created?
      instructions:
      - text: Rename backup {backup} of {volume_type} volume {volume} in pool {pool} to {name}.
        slots:
          backup: path.backupName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          name: requestBody.name
      - text: Give the volume backup in project {project} the new name {name}.
        slots:
          project: query.project
          name: requestBody.name
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a volume backup
      effect: destructive
      questions:
      - How do I delete an old volume backup to free space?
      - Can I remove a volume backup in a specific project?
      instructions:
      - text: Delete backup {backup} of {volume_type} volume {volume} in pool {pool}.
        slots:
          backup: path.backupName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Remove the volume backup in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName}/export'].get
  update:
    x-apievangelist-phrasing:
      intent: Download a volume backup file
      effect: read
      questions:
      - How do I download the raw backup file of a storage volume?
      - Can I export a volume backup off the server as a tarball?
      instructions:
      - text: Download the raw file for backup {backup} of {volume_type} volume {volume} in pool {pool}.
        slots:
          backup: path.backupName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Export the volume backup file from project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups?recursion=1'].get
  update:
    x-apievangelist-phrasing:
      intent: List volume backups with full details
      effect: read
      questions:
      - How do I see each volume backup with its creation and expiry dates?
      - Is there an expanded view of a volume's backups instead of URLs?
      instructions:
      - text: Fetch full records for all backups of {volume_type} volume {volume} in pool {pool}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Expand the volume backups with expiry details in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots'].get
  update:
    x-apievangelist-phrasing:
      intent: List volume snapshot URLs
      effect: read
      questions:
      - Which snapshots have been taken of a storage volume?
      - Can I list just the snapshot paths for a volume?
      instructions:
      - text: List snapshot URLs for {volume_type} volume {volume} in pool {pool}.
        slots:
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: List the volume's snapshot URLs on cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots'].post
  update:
    x-apievangelist-phrasing:
      intent: Snapshot a storage volume
      effect: write
      questions:
      - How do I take a snapshot of a custom volume?
      - Can I make a volume snapshot expire automatically?
      instructions:
      - text: Take a snapshot named {name} of {volume_type} volume {volume} in pool {pool}.
        slots:
          name: requestBody.name
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Snapshot the volume as {name}, expiring at {expires_at}.
        slots:
          name: requestBody.name
          expires_at: requestBody.expires_at
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName}'].get
  update:
    x-apievangelist-phrasing:
      intent: Get one volume snapshot
      effect: read
      questions:
      - What are the details of a particular volume snapshot?
      - Can I check when a specific volume snapshot expires?
      instructions:
      - text: Show me snapshot {snapshot} of {volume_type} volume {volume} in pool {pool}.
        slots:
          snapshot: path.snapshotName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Get the volume snapshot record in project {project}.
        slots:
          project: query.project
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName}'].put
  update:
    x-apievangelist-phrasing:
      intent: Replace a volume snapshot's settings
      effect: write
      questions:
      - How do I overwrite both the description and expiry of a volume snapshot?
      - Does a full snapshot update clear the expiry if I leave it out?
      instructions:
      - text: 'Replace all settings of snapshot {snapshot} on {volume_type} volume {volume} in pool {pool}: description {description}, expiry {expires_at}.'
        slots:
          snapshot: path.snapshotName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          description: requestBody.description
          expires_at: requestBody.expires_at
      - text: Fully rewrite the volume snapshot with description {description}.
        slots:
          description: requestBody.description
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName}'].post
  update:
    x-apievangelist-phrasing:
      intent: Rename a volume snapshot
      effect: write
      questions:
      - How do I rename a snapshot of a storage volume?
      - Can a volume snapshot be migrated to another target?
      instructions:
      - text: Rename snapshot {snapshot} of {volume_type} volume {volume} in pool {pool} to {name}.
        slots:
          snapshot: path.snapshotName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
          name: requestBody.name
      - text: Migrate the volume snapshot using target settings {target_spec}.
        slots:
          target_spec: requestBody.target
      method: generated
      generated: '2026-10-01'
- target: $.paths['/1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a volume snapshot
      effect: destructive
      questions:
      - How do I delete a volume snapshot I no longer need?
      - Can I remove a volume snapshot on a particular cluster member?
      instructions:
      - text: Delete snapshot {snapshot} of {volume_type} volume {volume} in pool {pool}.
        slots:
          snapshot: path.snapshotName
          volume_type: path.type
          volume: path.volumeName
          pool: path.poolName
      - text: Remove the volume snapshot on cluster member {target}.
        slots:
          target: query.target
      method: generated
      generated: '2026-10-01'


# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canonical/refs/heads/main/overlays/canonical-storage-api-phrasing-overlay.yaml