From 5399649e862b5054b3c254ea672002b3d9c88ba8 Mon Sep 17 00:00:00 2001
From: John Jarvis <jarv@gitlab.com>
Date: Tue, 2 Jul 2019 09:41:50 +0200
Subject: [PATCH 1/3] Create the uploads_storage_path directory

---
 changelogs/unreleased/jarv-create-uploads-directory.yml | 5 +++++
 files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb   | 4 +++-
 spec/chef/recipes/gitlab-rails_spec.rb                  | 7 ++++++-
 3 files changed, 14 insertions(+), 2 deletions(-)
 create mode 100644 changelogs/unreleased/jarv-create-uploads-directory.yml

diff --git a/changelogs/unreleased/jarv-create-uploads-directory.yml b/changelogs/unreleased/jarv-create-uploads-directory.yml
new file mode 100644
index 0000000000..f16b2b8c58
--- /dev/null
+++ b/changelogs/unreleased/jarv-create-uploads-directory.yml
@@ -0,0 +1,5 @@
+---
+title: Create the uploads_storage_path directory
+merge_request: 3396
+author:
+type: fixed
diff --git a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
index 095a5a25d3..eca8d5d706 100644
--- a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
+++ b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
@@ -26,6 +26,7 @@ gitlab_rails_working_dir = File.join(gitlab_rails_dir, "working")
 gitlab_rails_tmp_dir = File.join(gitlab_rails_dir, "tmp")
 gitlab_rails_public_uploads_dir = node['gitlab']['gitlab-rails']['uploads_directory']
 gitlab_rails_log_dir = node['gitlab']['gitlab-rails']['log_directory']
+gitlab_rails_uploads_storage_path = node['gitlab']['gitlab-rails']['uploads_storage_path']
 gitlab_ci_dir = node['gitlab']['gitlab-ci']['dir']
 gitlab_ci_builds_dir = node['gitlab']['gitlab-ci']['builds_directory']
 gitlab_rails_shared_tmp_dir = File.join(node['gitlab']['gitlab-rails']['shared_path'], 'tmp')
@@ -84,7 +85,8 @@ end
   gitlab_rails_public_uploads_dir,
   gitlab_ci_builds_dir,
   gitlab_rails_shared_cache_dir,
-  gitlab_rails_shared_tmp_dir
+  gitlab_rails_shared_tmp_dir,
+  gitlab_rails_uploads_storage_path
 ].compact.each do |dir_name|
   storage_directory dir_name do
     owner gitlab_user
diff --git a/spec/chef/recipes/gitlab-rails_spec.rb b/spec/chef/recipes/gitlab-rails_spec.rb
index 0bd4d35315..0d2da3dc40 100644
--- a/spec/chef/recipes/gitlab-rails_spec.rb
+++ b/spec/chef/recipes/gitlab-rails_spec.rb
@@ -77,7 +77,8 @@ describe 'gitlab::gitlab-rails' do
     cached(:chef_run) do
       RSpec::Mocks.with_temporary_scope do
         stub_gitlab_rb(gitlab_rails: { shared_path: '/tmp/shared',
-                                       uploads_directory: '/tmp/uploads' },
+                                       uploads_directory: '/tmp/uploads',
+                                       uploads_storage_path: '/tmp/uploads_storage' },
                        gitlab_ci: { builds_directory: '/tmp/builds' })
       end
 
@@ -127,6 +128,10 @@ describe 'gitlab::gitlab-rails' do
     it 'creates the shared cache directory' do
       expect(chef_run).to create_storage_directory('/tmp/shared/cache').with(owner: 'git', mode: '0700')
     end
+
+    it 'creates the uploads storage directory' do
+      expect(chef_run).to create_storage_directory('/tmp/uploads_storage').with(owner: 'git', mode: '0700')
+    end
   end
 
   context 'with redis settings' do
-- 
GitLab


From d3a2a4b5f332365b28255db19b4be990a85b63ea Mon Sep 17 00:00:00 2001
From: John Jarvis <jarv@gitlab.com>
Date: Tue, 2 Jul 2019 11:36:50 +0200
Subject: [PATCH 2/3] Fix the default path for uploads_storage_path in
 gitlab.rb.template

---
 files/gitlab-config-template/gitlab.rb.template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/files/gitlab-config-template/gitlab.rb.template b/files/gitlab-config-template/gitlab.rb.template
index a80fe07f6c..f464c43506 100644
--- a/files/gitlab-config-template/gitlab.rb.template
+++ b/files/gitlab-config-template/gitlab.rb.template
@@ -219,7 +219,7 @@ external_url 'GENERATED_EXTERNAL_URL'
 
 ### GitLab uploads
 ###! Docs: https://docs.gitlab.com/ee/administration/uploads.html
-# gitlab_rails['uploads_storage_path'] = "/var/opt/gitlab/gitlab-rails"
+# gitlab_rails['uploads_storage_path'] = "/opt/gitlab/embedded/service/gitlab-rails/public"
 # gitlab_rails['uploads_base_dir'] = "uploads/-/system"
 # gitlab_rails['uploads_object_store_enabled'] = false
 # gitlab_rails['uploads_object_store_direct_upload'] = false
-- 
GitLab


From fd47a2440c95f2cd15d8fde82068d91e81d4a5f9 Mon Sep 17 00:00:00 2001
From: John Jarvis <jarv@gitlab.com>
Date: Thu, 4 Jul 2019 13:51:07 +0200
Subject: [PATCH 3/3] Create uploads storage directory only if it is not the
 default

---
 files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb |  9 +++++++--
 spec/chef/recipes/gitlab-rails_spec.rb                | 10 ++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
index eca8d5d706..d45113a025 100644
--- a/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
+++ b/files/gitlab-cookbooks/gitlab/recipes/gitlab-rails.rb
@@ -85,8 +85,7 @@ end
   gitlab_rails_public_uploads_dir,
   gitlab_ci_builds_dir,
   gitlab_rails_shared_cache_dir,
-  gitlab_rails_shared_tmp_dir,
-  gitlab_rails_uploads_storage_path
+  gitlab_rails_shared_tmp_dir
 ].compact.each do |dir_name|
   storage_directory dir_name do
     owner gitlab_user
@@ -94,6 +93,12 @@ end
   end
 end
 
+storage_directory gitlab_rails_uploads_storage_path do
+  owner gitlab_user
+  mode '0700'
+  only_if { gitlab_rails_uploads_storage_path != GitlabRails.public_path }
+end
+
 storage_directory node['gitlab']['gitlab-rails']['pages_path'] do
   owner gitlab_user
   group account_helper.web_server_group
diff --git a/spec/chef/recipes/gitlab-rails_spec.rb b/spec/chef/recipes/gitlab-rails_spec.rb
index 0d2da3dc40..34f2d57311 100644
--- a/spec/chef/recipes/gitlab-rails_spec.rb
+++ b/spec/chef/recipes/gitlab-rails_spec.rb
@@ -134,6 +134,16 @@ describe 'gitlab::gitlab-rails' do
     end
   end
 
+  context 'when uploads storage directory is not specified' do
+    cached(:chef_run) do
+      ChefSpec::SoloRunner.converge('gitlab::default')
+    end
+
+    it 'does not create the uploads storage directory' do
+      expect(chef_run).not_to create_storage_directory('/opt/gitlab/embedded/service/gitlab-rails/public')
+    end
+  end
+
   context 'with redis settings' do
     let(:config_file) { '/var/opt/gitlab/gitlab-rails/etc/resque.yml' }
     let(:chef_run) { ChefSpec::SoloRunner.new(step_into: %w(templatesymlink)).converge('gitlab::default') }
-- 
GitLab