Enhance storage-cli webdav config#634
Merged
Merged
Conversation
5 tasks
3f028cf to
8482b4e
Compare
Configure storage-cli WebDAV endpoints to include resource-specific
directory keys (cc-droplets, cc-packages, cc-buildpacks, cc-resources)
for backward compatibility with fog/webdav client.
When using basic auth, endpoints are: /admin/{directory_key}
When using signed URLs, endpoints are: /{directory_key}
This ensures both storage-cli and fog/webdav store blobs at identical
physical paths, enabling zero-downtime rollback between the two clients.
Updated all job templates and RSpec tests to expect directory keys in
endpoint paths.
Refactors WebDAV configuration in storage-cli templates to support
dual-endpoint lazy signing:
- Always use /admin/{resource_dir} for endpoint (internal)
- Add public_endpoint configuration (external users)
- Replace signing_method with signed_url_format
- Simplify endpoint logic (remove secret-based conditional)
- Fix TLS ca_cert nil check
Required for storage-cli sign-internal and sign-public commands
to generate URLs with correct endpoints for Diego (internal) vs
external users (public).
8482b4e to
7633e15
Compare
3 tasks
ddb3038 to
d9b3fef
Compare
d9b3fef to
350052d
Compare
jochenehret
requested changes
Jun 16, 2026
jochenehret
left a comment
Contributor
There was a problem hiding this comment.
I've tested this PR together with the related PRs on a bbl environment:
cloudfoundry/cloud_controller_ng#4974
cloudfoundry/storage-cli#105
#650
Works! We just need to update the relevant configuration documentation:
- In the
specfiles, the parametercc.<bucket>.blobstore_providershould mention the new typedav. - The parameter
cc.<bucket>.connection_configis documented withAzure Storage Cli connection hash, should be changed toStorage CLI connection configuration(that's not related to this specific PR ;-)). - In the "Example Manifest Usage" section, we should align the credential names with the cf-deployment base manifest:
blobstore_password->blobstore_admin_users_password
blobstore_secret->blobstore_secure_link_secret - The paramter
retry_attemptsshould be documented.
jochenehret
approved these changes
Jun 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Needs new storage-cli release with cloudfoundry/storage-cli#105 to be merged first, and #650 and cloudfoundry/cloud_controller_ng#4974 to be deployed together.
A short explanation of the proposed change:
Fix and complete the WebDAV/DAV storage-cli config templates across all Cloud Controller jobs so that storage-cli's signed URL generation works correctly. This includes constructing the endpoint with the resource directory key, passing through the optional public_endpoint for dual-endpoint lazy signing, and fixing the TLS cert structure to match storage-cli's expected format.
An explanation of the use cases your change solves
(/signed/cc-droplets/). Without the correct endpoint, signed URLs would be malformed and nginx would reject them with 403.
uses the private endpoint for Diego. Without this pass-through, both commands would use the same host.
migration without manifest changes.
Changes Made:
20 config template files updated across 5 Cloud Controller job types:
3 key modifications to each WebDAV/DAV config section:
a. Endpoint construction with directory key — built from private_endpoint + "/admin/" + <resource_directory_key> (e.g. https://blobstore.internal:4443/admin/cc-droplets) instead
of incorrectly using public_endpoint with no path
b. Optional public_endpoint pass-through — passed to storage-cli when set, enabling sign-public to generate URLs with the external blobstore hostname
c. Fixed TLS cert structure — corrected from {"cert": ca_cert} to {"cert": {"ca": ca_cert}} to match storage-cli's config format; added nil guard for environments without a CA
cert
Example Manifest Usage:
Links to any other associated PRs
I have viewed signed and have submitted the Contributor License Agreement
I have made this pull request to the
developbranchI have run CF Acceptance Tests on bosh lite