Skip to content
Snippets Groups Projects
Commit 04882748 authored by John Skarbek's avatar John Skarbek
Browse files

Revert "Merge branch 'jliu/deprecate-git-data-dirs-path' into 'master'"

This reverts merge request !7962
parent 382e882e
No related branches found
No related tags found
No related merge requests found
Showing
with 211 additions and 565 deletions
Loading
Loading
@@ -154,73 +154,27 @@ In this example, the [PostgreSQL server certificate](database.md#configuring-ssl
postgresql['internal_certificate'] = File.read('/path/to/server.crt')
```
 
## Migrating from `git_data_dirs`
Starting in 18.0, `git_data_dirs` will no longer be a supported means of configuring
Gitaly storage locations. If you explicitly define `git_data_dirs`, you'll need to
migrate the configuration.
For example, if your `/etc/gitlab/gitlab.rb` configuration is as follows:
```ruby
git_data_dirs({
"default" => {
"path" => "/mnt/nas/git-data"
}
})
```
you'll need to redefine the configuration under `gitaly['configuration']` instead.
Note that the `/repositories` suffix must be appended to the path, as it was previously
appended by Omnibus internally.
```ruby
gitaly['configuration'] = {
storage: [
{
name: 'default',
path: '/mnt/nas/git-data/repositories',
},
],
}
```
## Store Git data in an alternative directory
 
By default, Linux package installations store the Git repository data under
`/var/opt/gitlab/git-data/repositories`, and the Gitaly service listens on
`unix:/var/opt/gitlab/gitaly/gitaly.socket`.
`/var/opt/gitlab/git-data`. The repositories are stored in a subfolder called
`repositories`.
 
To change the location of the directory,
To change the location of the `git-data` parent directory:
 
1. Edit `/etc/gitlab/gitlab.rb`:
 
```ruby
gitaly['configuration'] = {
storage: [
{
name: 'default',
path: '/mnt/nas/git-data/repositories',
},
],
}
git_data_dirs({ "default" => { "path" => "/mnt/nas/git-data" } })
```
 
You can also add more than one Git data directory:
 
```ruby
gitaly['configuration'] = {
storage: [
{
name: 'default',
path: '/var/opt/gitlab/git-data/repositories',
},
{
name: 'alternative',
path: '/mnt/nas/git-data/repositories',
},
],
}
git_data_dirs({
"default" => { "path" => "/var/opt/gitlab/git-data" },
"alternative" => { "path" => "/mnt/nas/git-data" }
})
```
 
The target directories and any of its subpaths must not be a symlink.
Loading
Loading
@@ -266,7 +220,8 @@ To change the location of the directory,
sudo gitlab-ctl start
```
 
If you're running Gitaly on a separate server, see
If you're running Gitaly on a separate server, remember to also include the
`gitaly_address` for each Git data directory. See
[the documentation on configuring Gitaly](https://docs.gitlab.com/ee/administration/gitaly/configure_gitaly.html#configure-gitaly-clients).
 
If you're not looking to move all repositories, but instead want to move specific
Loading
Loading
Loading
Loading
@@ -149,21 +149,8 @@ To convert an external PostgreSQL installation to a Linux package PostgreSQL ins
# Use your own GitLab URL here
external_url 'http://gitlab.example.com'
 
# We assume your repositories are in /home/git/repositories (default for source installs) and that Gitaly
# listens on a socket at /home/git/gitlab/tmp/sockets/private/gitaly.socket
gitaly['configuration'] = {
storage: [
{
name: 'default',
path: '/home/git/repositories'
}
]
}
gitlab_rails['repositories_storages'] = {
default: {
gitaly_address: '/home/git/gitlab/tmp/sockets/private/gitaly.socket'
}
}
# We assume your repositories are in /home/git/repositories (default for source installs)
git_data_dirs({ 'default' => { 'path' => '/home/git' } })
 
# Re-use the PostgreSQL that is already running on your system
postgresql['enable'] = false
Loading
Loading
Loading
Loading
@@ -171,7 +171,7 @@ external_url 'GENERATED_EXTERNAL_URL'
### Download location
###! When a user clicks e.g. 'Download zip' on a project, a temporary zip file
###! is created in the following directory.
###! Should not be the same path, or a sub directory of any of the `gitaly['configuration'].storage` paths.
###! Should not be the same path, or a sub directory of any of the `git_data_dirs`
# gitlab_rails['gitlab_repository_downloads_path'] = 'tmp/repositories'
 
### Gravatar Settings
Loading
Loading
@@ -686,6 +686,16 @@ external_url 'GENERATED_EXTERNAL_URL'
# "SKIP" => "db,uploads,repositories,builds,artifacts,lfs,registry,pages"
#}
 
### For setting up different data storing directory
###! Docs: https://docs.gitlab.com/omnibus/settings/configuration.html#store-git-data-in-an-alternative-directory
###! **If you want to use a single non-default directory to store git data use a
###! path that doesn't contain symlinks.**
# git_data_dirs({
# "default" => {
# "path" => "/mnt/nfs-01/git-data"
# }
# })
### Gitaly settings
# gitlab_rails['gitaly_token'] = 'secret token'
 
Loading
Loading
Loading
Loading
@@ -24,6 +24,7 @@ module Gitaly
include OutputHelper
 
def parse_variables
parse_git_data_dirs
parse_gitaly_storages
parse_gitconfig
check_duplicate_storage_paths
Loading
Loading
@@ -54,82 +55,37 @@ module Gitaly
end
end
 
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
def parse_gitaly_storages
# Merge all three forms of configuration into a single hash. We'll redistribute the configuration
# from here later on.
combined_storages = {}
Gitlab['git_data_dirs'].each do |name, details|
entry = {
'gitaly_address' => details['gitaly_address'] || gitaly_address,
'gitaly_token' => details['gitaly_token'],
}
entry['path'] = File.join(details['path'] || details[:path], 'repositories') if details['path'] || details[:path]
combined_storages[name] = entry
end
def parse_git_data_dirs
Gitlab['git_data_dirs'] = { "default" => { "path" => "/var/opt/gitlab/git-data" } } if Gitlab['git_data_dirs'].empty?
 
Gitlab['gitlab_rails']['repositories_storages']&.each do |name, details|
entry = {
'gitaly_address' => details['gitaly_address'] || gitaly_address,
'gitaly_token' => details['gitaly_token'],
}
entry['path'] = File.join(details['path'], 'repositories') if details['path']
combined_storages[name] = if combined_storages[name]
combined_storages[name].merge(entry)
else
entry
end
Gitlab['git_data_dirs'].map do |name, details|
Gitlab['git_data_dirs'][name]['path'] = details[:path] || details['path'] || '/var/opt/gitlab/git-data'
end
 
if Gitlab['gitaly'].dig('configuration', 'storage')
Gitlab['gitaly']['configuration']['storage'].each do |storage|
entry = {
'path' => storage['path'],
}
Gitlab['gitlab_rails']['repositories_storages'] =
Hash[Mash.new(Gitlab['git_data_dirs']).map do |name, data_directory|
shard_gitaly_address = data_directory['gitaly_address'] || gitaly_address
 
combined_storages[storage['name']] = if combined_storages[storage['name']]
combined_storages[storage['name']].merge(entry)
else
entry
end
end
end
defaults = { 'path' => File.join(data_directory['path'], 'repositories'), 'gitaly_address' => shard_gitaly_address }
params = data_directory.merge(defaults)
 
# If empty, we need to supply a default storage.
if combined_storages.empty?
combined_storages['default'] = {
'gitaly_address' => gitaly_address,
'path' => '/var/opt/gitlab/git-data/repositories'
}
end
# Redistribute the configuration amongst the various keys. When git_data_dirs is removed, we can simply
# remove the corresponding logic here.
Gitlab['git_data_dirs'] = {}
Gitlab['gitlab_rails']['repositories_storages'] = {}
Gitlab['gitaly']['configuration'] ||= {} # don't override the config if provided
Gitlab['gitaly']['configuration']['storage'] = []
combined_storages.each do |name, details|
details['gitaly_address'] = gitaly_address unless details['gitaly_address']
# The path shouldn't be set in git_data_dirs or repository_storages, since Rails shouldn't care about it.
without_path = details.clone.except('path')
Gitlab['git_data_dirs'][name] = without_path
Gitlab['gitlab_rails']['repositories_storages'][name] = without_path
[name, params]
end]
end
 
# If the path doesn't exist, it means the current storage belongs to an external Gitaly and we don't
# need to generate a corresponding storage entry.
next unless details['path']
def parse_gitaly_storages
return unless Gitlab['gitaly'].dig('configuration', 'storage').nil?
 
Gitlab['gitaly']['configuration']['storage'] << {
name: name.to_s,
path: details['path']
storages = []
Gitlab['gitlab_rails']['repositories_storages'].each do |key, value|
storages << {
'name' => key,
'path' => value['path']
}
end
Gitlab['gitaly']['configuration'] ||= {}
Gitlab['gitaly']['configuration']['storage'] = storages
end
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
 
# Compute the default gitconfig from the old Omnibus gitconfig setting.
# This depends on the Gitlab cookbook having been parsed already.
Loading
Loading
@@ -217,8 +173,8 @@ module Gitaly
 
# Validate that no storages are sharing the same path.
def check_duplicate_storage_paths
# If Gitaly isn't running or storages aren't configured, there is no need to do this check.
return unless Services.enabled?('gitaly') && Gitlab['gitaly'].dig('configuration', 'storage')
# If Gitaly isn't running, there is no need to do this check.
return unless Services.enabled?('gitaly')
 
# Deep copy storages to avoid mutating the original.
storages = Marshal.load(Marshal.dump(Gitlab['gitaly']['configuration']['storage']))
Loading
Loading
Loading
Loading
@@ -22,8 +22,6 @@ gitlab_group = account_helper.gitlab_group
# Holds git-data, by default one shard at /var/opt/gitlab/git-data
# Can be changed by user using git_data_dirs option
Mash.new(Gitlab['git_data_dirs']).each do |_name, git_data_directory|
next unless git_data_directory['path']
storage_directory git_data_directory['path'] do
owner gitlab_user
group gitlab_group
Loading
Loading
@@ -31,10 +29,11 @@ Mash.new(Gitlab['git_data_dirs']).each do |_name, git_data_directory|
end
end
 
# Create the Git storage directories. There may be no directories if external Gitaly is used.
repositories_storages = Gitlab['gitaly'].dig('configuration', 'storage') || []
repositories_storages.each do |repositories_storage|
storage_directory repositories_storage[:path] do
# Holds git repositories, by default at /var/opt/gitlab/git-data/repositories
# Should not be changed by user. Different permissions to git_data_dir set.
repositories_storages = node['gitlab']['gitlab_rails']['repositories_storages']
repositories_storages.each do |_name, repositories_storage|
storage_directory repositories_storage['path'] do
owner gitlab_user
group gitlab_group
mode "2770"
Loading
Loading
Loading
Loading
@@ -54,6 +54,7 @@ module GitlabRails
parse_ci_secure_files_dir
parse_encrypted_settings_path
parse_pages_dir
parse_repository_storage
end
 
def transform_secrets
Loading
Loading
@@ -360,6 +361,19 @@ module GitlabRails
Gitlab['gitlab_rails']['pages_local_store_path'] ||= Gitlab['gitlab_rails']['pages_path']
end
 
def parse_repository_storage
return if Gitlab['gitlab_rails']['repositories_storages']
gitaly_address = Gitaly.gitaly_address
Gitlab['gitlab_rails']['repositories_storages'] ||= {
"default" => {
"path" => "/var/opt/gitlab/git-data/repositories",
"gitaly_address" => gitaly_address
}
}
end
def parse_gitlab_trusted_proxies
Gitlab['nginx']['real_ip_trusted_addresses'] ||= Gitlab['node']['gitlab']['nginx']['real_ip_trusted_addresses']
Gitlab['gitlab_rails']['trusted_proxies'] = Gitlab['nginx']['real_ip_trusted_addresses'] if Gitlab['gitlab_rails']['trusted_proxies'].nil?
Loading
Loading
Loading
Loading
@@ -343,7 +343,7 @@ module Gitlab
deprecation: '17.4',
removal: '18.0',
note: "`gitlab_shell['migration'] will be ignored from 17.3 and removed in 18.0. See https://gitlab.com/groups/gitlab-org/-/epics/14845."
},
}
]
 
deprecations += praefect_legacy_configuration_deprecations
Loading
Loading
@@ -584,8 +584,6 @@ module Gitlab
 
messages += deprecate_registry_notifications(incoming_version, existing_config, type, ['registry', 'notifications'], 'threshold', 17.1, 18.0)
 
messages += remove_git_data_dirs(incoming_version, existing_config, type, '17.8', '18.0')
messages
end
 
Loading
Loading
@@ -617,20 +615,6 @@ module Gitlab
messages
end
 
def remove_git_data_dirs(incoming_version, existing_config, type, deprecated_version, removed_version)
return [] unless existing_config[:git_data_dirs]
messages = []
if Gem::Version.new(incoming_version) >= Gem::Version.new(removed_version) && type == :removal
messages << "* git_data_dirs has been deprecated since #{deprecated_version} and was removed in #{removed_version}. See https://docs.gitlab.com/omnibus/settings/configuration.html#migrating-from-git_data_dirs for migration instructions."
elsif Gem::Version.new(incoming_version) >= Gem::Version.new(deprecated_version) && type == :deprecation
messages << "* git_data_dirs has been deprecated since #{deprecated_version} and will be removed in #{removed_version}. See https://docs.gitlab.com/omnibus/settings/configuration.html#migrating-from-git_data_dirs for migration instructions."
end
messages
end
def deprecate_registry_notifications(incoming_version, existing_config, type, config_keys, key, deprecated_version, removed_version)
settings = existing_config.dig(*config_keys) || []
 
Loading
Loading
This diff is collapsed.
Loading
Loading
@@ -10,6 +10,7 @@ RSpec.describe 'gitlab::gitlab-rails' do
expect(gitlab_yml[:production][:repositories][:storages]).to eq(
default: {
gitaly_address: 'unix:/var/opt/gitlab/gitaly/gitaly.socket',
path: '/var/opt/gitlab/git-data/repositories'
}
)
end
Loading
Loading
@@ -20,6 +21,7 @@ RSpec.describe 'gitlab::gitlab-rails' do
stub_gitlab_rb(
git_data_dirs: {
second_storage: {
path: '/tmp/foobar',
gitaly_address: 'unix:/var/gitaly.socket'
}
}
Loading
Loading
@@ -30,6 +32,7 @@ RSpec.describe 'gitlab::gitlab-rails' do
expect(gitlab_yml[:production][:repositories][:storages]).to eq(
second_storage: {
gitaly_address: 'unix:/var/gitaly.socket',
path: '/tmp/foobar/repositories'
}
)
end
Loading
Loading
@@ -49,6 +52,7 @@ RSpec.describe 'gitlab::gitlab-rails' do
expect(gitlab_yml[:production][:repositories][:storages]).to eq(
default: {
gitaly_address: 'unix:/var/gitaly.socket',
path: '/var/opt/gitlab/git-data/repositories'
}
)
end
Loading
Loading
Loading
Loading
@@ -125,14 +125,9 @@ RSpec.describe 'gitlab::gitlab-rails' do
uploads_directory: '/tmp/uploads',
uploads_storage_path: '/tmp/uploads_storage' },
gitlab_ci: { builds_directory: '/tmp/builds' },
gitaly: {
configuration: {
storage: [
{
'name' => 'some_storage',
'path' => '/tmp/git-data/repositories'
}
]
git_data_dirs: {
"some_storage" => {
"path" => "/tmp/git-data"
}
})
end
Loading
Loading
@@ -140,7 +135,7 @@ RSpec.describe 'gitlab::gitlab-rails' do
ChefSpec::SoloRunner.converge('gitlab::default')
end
 
include_examples "git data directory", "/tmp/git-data/repositories"
include_examples "git data directory", "/tmp/git-data"
 
it 'creates the shared directory' do
expect(chef_run).to create_storage_directory('/tmp/shared').with(owner: 'git', group: 'gitlab-www', mode: '0751')
Loading
Loading
require 'chef_helper'
require 'spec_helper'
 
RSpec.describe Gitlab::Deprecations do
let(:valid_config) { { gitlab: { nginx: { listen_addresses: "SomeRandomString" } } } }
Loading
Loading
@@ -125,30 +125,6 @@ RSpec.describe Gitlab::Deprecations do
end
end
 
describe '.remove_git_data_dirs' do
context 'when git_data_dirs is specified' do
it 'raises warning' do
config = {
git_data_dirs: {
default: {
path: 'abc',
gitaly_address: 'unix:/var/gitaly.socket'
},
valid: {
gitaly_address: 'unix:/var/gitaly.socket'
}
}
}
deprecated_message = "* git_data_dirs has been deprecated since 17.8 and will be removed in 18.0. See https://docs.gitlab.com/omnibus/settings/configuration.html#migrating-from-git_data_dirs for migration instructions."
expect(described_class.remove_git_data_dirs('17.8', config, :deprecation, '17.8', '18.0')).to eq([deprecated_message])
removed_message = "* git_data_dirs has been deprecated since 17.8 and was removed in 18.0. See https://docs.gitlab.com/omnibus/settings/configuration.html#migrating-from-git_data_dirs for migration instructions."
expect(described_class.remove_git_data_dirs('18.0', config, :removal, '17.8', '18.0')).to eq([removed_message])
end
end
end
describe '.deprecate_only_if_value' do
let(:chef_run) { ChefSpec::SoloRunner.converge('gitlab::default') }
 
Loading
Loading
RSpec.shared_examples 'git data directory' do |git_data_path|
it 'creates the repositories directory' do
it 'creates the git-data directory' do
expect(chef_run).to create_storage_directory(git_data_path).with(owner: 'git', group: 'git', mode: '2770')
end
it 'creates the repositories directory' do
expect(chef_run).to create_storage_directory("#{git_data_path}/repositories").with(owner: 'git', group: 'git', mode: '2770')
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment