fix: expose attachment readonly and volume_options in storage:list json

The `storage:list <app> --format json` payload conflated the
attachment's `Readonly` flag and its `VolumeOptions` field into a
single derived `volume_options` string that rendered as `ro`,
`<options>`, or `ro,<options>` depending on which fields were set on
the underlying attachment. That shape is fine for the legacy
`host:container[:options]` text view but it leaves drift-detection
tooling unable to tell whether a `ro` token came from
`Attachment.Readonly == true` or from the operator setting
`Attachment.VolumeOptions = "ro"` directly. The JSON now exposes
`readonly` (boolean) and `volume_options` (string) as separate
omitempty keys populated straight from the attachment, and
`formatStorageListEntry` combines them at format time for the colon-
form text view. `ParseMountPath` was extended in lockstep so callers
of the legacy `host:container:opts` form no longer have to special-
case the `ro` token themselves.
This commit is contained in:
Jose Diaz-Gonzalez
2026-05-30 03:00:21 -04:00
parent f4d27be7a6
commit e9160db769
7 changed files with 118 additions and 38 deletions

View File

@@ -57,9 +57,23 @@ dokku storage:list node-js-app --format json
```
[
{
"entry_name": "node-js-app",
"host_path": "/var/lib/dokku/data/storage/node-js-app",
"container_path": "/app/storage"
}
]
```
Each entry mirrors the underlying attachment. `readonly` (boolean) and `volume_options` (string) reflect `Attachment.Readonly` and `Attachment.VolumeOptions` directly and are only present when set, so external tooling can drift-detect attachments against the raw attachment fields. For example, a mount created with `--volume-options noexec,nosuid --volume-readonly` renders as:
```
[
{
"entry_name": "node-js-data",
"host_path": "/var/lib/dokku/data/storage/node-js-data",
"container_path": "/app/storage",
"volume_options": ""
"readonly": true,
"volume_options": "noexec,nosuid"
}
]
```