Note: This example is specifically for a Google Cloud Storage (GCS) bucket which serves a chart repository.
- Install the gsutil tool. We rely heavily on the gsutil rsync functionality
- Be sure to have access to the helm binary
- Optional: We recommend you set object versioning on your GCS bucket in case you accidentally delete something.
Create a local directory like we did in the chart repository guide, and place your packaged charts in that directory.
For example:
$ mkdir fantastic-charts
$ mv alpine-0.1.0.tgz fantastic-charts/
Use helm to generate an updated index.yaml file by passing in the directory path and the url of the remote repository to the helm repo index
command like this:
$ helm repo index fantastic-charts/ --url https://fantastic-charts.storage.googleapis.com
This will generate an updated index.yaml file and place in the fantastic-charts/
directory.
Upload the contents of the directory to your GCS bucket by running scripts/sync-repo.sh
and pass in the local directory name and the GCS bucket name.
For example:
$ pwd
/Users/funuser/go/src/github.com/kubernetes/helm
$ scripts/sync-repo.sh fantastic-charts/ fantastic-charts
Getting ready to sync your local directory (fantastic-charts/) to a remote repository at gs://fantastic-charts
Verifying Prerequisites....
Thumbs up! Looks like you have gsutil. Let's continue.
Building synchronization state...
Starting synchronization
Would copy file://fantastic-charts/alpine-0.1.0.tgz to gs://fantastic-charts/alpine-0.1.0.tgz
Would copy file://fantastic-charts/index.yaml to gs://fantastic-charts/index.yaml
Are you sure you would like to continue with these changes?? [y/N]} y
Building synchronization state...
Starting synchronization
Copying file://fantastic-charts/alpine-0.1.0.tgz [Content-Type=application/x-tar]...
Uploading gs://fantastic-charts/alpine-0.1.0.tgz: 740 B/740 B
Copying file://fantastic-charts/index.yaml [Content-Type=application/octet-stream]...
Uploading gs://fantastic-charts/index.yaml: 347 B/347 B
Congratulations your remote chart repository now matches the contents of fantastic-charts/
You'll want to keep a local copy of the contents of your chart repository or use gsutil rsync
to copy the contents of your remote chart repository to a local directory.
For example:
$ gsutil rsync -d -n gs://bucket-name local-dir/ # the -n flag does a dry run
Building synchronization state...
Starting synchronization
Would copy gs://bucket-name/alpine-0.1.0.tgz to file://local-dir/alpine-0.1.0.tgz
Would copy gs://bucket-name/index.yaml to file://local-dir/index.yaml
$ gsutil rsync -d gs://bucket-name local-dir/ # performs the copy actions
Building synchronization state...
Starting synchronization
Copying gs://bucket-name/alpine-0.1.0.tgz...
Downloading file://local-dir/alpine-0.1.0.tgz: 740 B/740 B
Copying gs://bucket-name/index.yaml...
Downloading file://local-dir/index.yaml: 346 B/346 B
Helpful Links:
- Documentation on gsutil rsync
- The Chart Repository Guide
- Documentation on object versioning and concurrency control in Google Cloud Storage