Release Blobstore¶
Note
This describes configuring a blobstore for publishing BOSH Releases with BOSH CLI v2+, which is separate from configuring the blobstore of a BOSH Director.
A release blobstore contains release blob and created final releases.
Access to release blobstore is configured via two files:
config/final.yml(checked into Git repository): contains blobstore locationconfig/private.yml(is NOT checked into Git repository): contains blobstore credentials
CLI supports three different blobstore providers: s3, gcs, and local.
Managing split-configuration between private.yml and final.yml
In CLI v2, the value of /blobstore/<provider>/ in private.yml is
shallow-merged with, and takes precedence over, the value of /blobstore/options/
in final.yml. The CLI does not distinguish which file a blobstore
option should be placed in. Hence, it is possible to create and publish a
valid final.yml with secrets.
S3 Configuration¶
S3 provider is used for most production releases. It's can be used with any S3-compatible blobstore (in compatibility mode) like Google Cloud Storage and Swift.
config/final.yml¶
---
blobstore:
provider: s3
options:
bucket_name: <bucket_name>
config/private.yml¶
---
blobstore:
options:
access_key_id: <access_key_id>
secret_access_key: <secret_access_key>
See Configuring S3 release blobstore for details and S3 CLI Usage for additional configuration options.
GCS Configuration¶
Google Cloud Storage can be used without S3 compatibility mode.
config/final.yml¶
---
blobstore:
provider: gcs
options:
bucket_name: <bucket_name>
config/private.yml¶
By default, your Application Default Credentials will be used. Alternatively, create a config/private.yml file to use a separate JSON key. When using a separate JSON key, ensure that the service account has the privilege "Storage Legacy Bucket Owner" for the GCS bucket:
---
blobstore:
options:
credentials_source: static
json_key: |
<json-key>
Local Configuration¶
Local provider is useful for testing.
config/final.yml¶
---
blobstore:
provider: local
options:
blobstore_path: /tmp/test-blobs
Nothing in config/private.yml.
Git LFS Configuration¶
Git LFS can be used as a release blobstore by configuring the local provider with blobs managed through Git LFS.
config/final.yml
---
blobstore:
provider: local
options:
blobstore_path: final_blobs
.gitattributes
blobs/** filter=lfs diff=lfs merge=lfs -text
final_blobs/** filter=lfs diff=lfs merge=lfs -text
Nothing in config/private.yml - credentials are managed through Git.
See Using Git LFS as Release Blobstore for detailed setup instructions and workflow guidance.
Release Compression Configuration¶
Version Requirements
The no_compression flag requires BOSH Director version 282.1.5 or newer and the following stemcell versions:
- Ubuntu Noble (24.04): v1.165 or newer
- Ubuntu Jammy (22.04): v1.990 or newer
You can control whether the outer release tarball is compressed by setting the no_compression flag in config/final.yml.
config/final.yml¶
---
name: my-release
blobstore:
provider: s3
options:
bucket_name: <bucket_name>
no_compression: true
- no_compression [Boolean, optional]: When set to
true, disables compression for the outer release tarball. Defaults tofalse(compression enabled) if not specified.
Note
The bosh export-release command does not currently respect the no_compression flag due to technical limitations. When using bosh export-release, the outer tarball will always be compressed regardless of the no_compression setting in final.yml.
Migrating blobs¶
CLI does not currently provide a builtin way to migrate blobs to a different blobstore. Suggested way to migrate blobs is to use third party tool like s3cmd to list and copy all blobs from current blobstore to another. Once copying of all blobs is complete, update config directory to with new blobstore location.