Cleanup object storage config when using consolidated configuration
🔥 Problem
Using the following gitlab.rb:
gitlab.rb
# Consolidated object storage configuration
gitlab_rails['object_store']['enabled'] = true
gitlab_rails['object_store']['proxy_download'] = true
gitlab_rails['object_store']['connection'] = {
'provider' => 'AWS',
'region' => 'eu-central-1',
'aws_access_key_id' => '<AWS_ACCESS_KEY_ID>',
'aws_secret_access_key' => '<AWS_SECRET_ACCESS_KEY>'
}
# OPTIONAL: The following lines are only needed if server side encryption is required
gitlab_rails['object_store']['storage_options'] = {
'server_side_encryption' => '<AES256 or aws:kms>',
'server_side_encryption_kms_key_id' => '<arn:aws:kms:xxx>'
}
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = 'gitlab-artifacts'
gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = 'gitlab-mr-diffs'
gitlab_rails['object_store']['objects']['lfs']['bucket'] = 'gitlab-lfs'
gitlab_rails['object_store']['objects']['uploads']['bucket'] = 'gitlab-uploads'
gitlab_rails['object_store']['objects']['packages']['bucket'] = 'gitlab-packages'
gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = 'gitlab-dependency-proxy'
gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = 'gitlab-terraform-state'
gitlab_rails['object_store']['objects']['ci_secure_files']['bucket'] = 'gitlab-ci-secure-files'
gitlab_rails['object_store']['objects']['pages']['bucket'] = 'gitlab-pages'
(from https://docs.gitlab.com/ee/administration/object_storage.html?tab=Linux+package+%28Omnibus%29#full-example-using-the-consolidated-form-and-amazon-s3, tab Linux package (Omnibus))
after gitlab-ctl reconfigure, we get this in /var/opt/gitlab/gitlab-rails/etc/gitlab.yml:
gitlab.yml (snippets)
object_store:
enabled: true
proxy_download: true
connection: {"provider":"AWS","region":"eu-central-1","aws_access_key_id":"<AWS_ACCESS_KEY_ID>","aws_secret_access_key":"<AWS_SECRET_ACCESS_KEY>"}
storage_options: {"server_side_encryption":"<AES256 or aws:kms>","server_side_encryption_kms_key_id":"<arn:aws:kms:xxx>"}
objects: {"artifacts":{"bucket":"gitlab-artifacts"},"external_diffs":{"bucket":"gitlab-mr-diffs"},"lfs":{"bucket":"gitlab-lfs"},"uploads":{"bucket":"gitlab-uploads"},"packages":{"bucket":"gitlab-packages"},"dependency_proxy":{"bucket":"gitlab-dependency-proxy"},"terraform_state":{"bucket":"gitlab-terraform-state"},"ci_secure_files":{"bucket":"gitlab-ci-secure-files"},"pages":{"bucket":"gitlab-pages"}}
## Build Artifacts
artifacts:
enabled: true
# The location where Build Artifacts are stored (default: shared/artifacts).
path: /var/opt/gitlab/gitlab-rails/shared/artifacts
object_store:
enabled: false
proxy_download: false
remote_directory: "artifacts"
connection: {}
## External merge request diffs
external_diffs:
enabled:
# The location where merge request diffs are stored (default: shared/external-diffs).
storage_path: /var/opt/gitlab/gitlab-rails/shared/external-diffs
object_store:
enabled: false
proxy_download: false
remote_directory: "external-diffs"
connection: {}
## Git LFS
lfs:
enabled:
# The location where LFS objects are stored (default: shared/lfs-objects).
storage_path: /var/opt/gitlab/gitlab-rails/shared/lfs-objects
object_store:
enabled: false
proxy_download: false
remote_directory: "lfs-objects"
connection: {}
## Uploads
uploads:
# The location where uploads objects are stored (default: public/).
storage_path: /opt/gitlab/embedded/service/gitlab-rails/public
object_store:
enabled: false
proxy_download: false
remote_directory: "uploads"
connection: {}
## Packages
packages:
enabled:
# The location where build packages are stored (default: shared/packages).
storage_path: /var/opt/gitlab/gitlab-rails/shared/packages
object_store:
enabled: false
proxy_download: false
remote_directory: "packages"
connection: {}
## Dependency proxy (EE only)
dependency_proxy:
enabled:
# The location where dependency_proxy blobs are stored (default: shared/dependency_proxy).
storage_path: /var/opt/gitlab/gitlab-rails/shared/dependency_proxy
object_store:
enabled: false
proxy_download: false
remote_directory: "dependency_proxy"
connection: {}
## Terraform state
terraform_state:
enabled:
# The location where terraform state files are stored (default: shared/terraform_state).
storage_path: /var/opt/gitlab/gitlab-rails/shared/terraform_state
object_store:
enabled: false
remote_directory: "terraform"
connection: {}
## CI Secure Files
ci_secure_files:
enabled:
# The location where ci secure files are stored (default: shared/ci_secure_files).
storage_path: /var/opt/gitlab/gitlab-rails/shared/ci_secure_files
object_store:
enabled: false
remote_directory: "ci-secure-files"
connection: {}
Embedded object_store.enabled gets defined (for example packages.object_store.enabled) and is set to false.
This is confusing given that we have object_store.enabled set to true.
🚒 Solution
Look at https://docs.gitlab.com/ee/administration/object_storage.html?tab=Self-compiled+%28source%29 Self-compiled (source) tab.
There is only a single object_store defined and it's much more readable.