Commit c912e449c1be5c25f9081dde327a53de93094a1f

Authored by Jacob Vosmaer
1 parent 22c45c12

Import postgres files from omnibus-chef-server

Repo
https://github.com/opscode/omnibus-chef-server.git
Path
files/chef-server-cookbooks/chef-server/
Revision
6a11fd840045a7ae7961e5a37439371b7407f3e9
files/gitlab-cookbooks/gitlab/attributes/default.rb 0 → 100644
... ... @@ -0,0 +1,279 @@
  1 +#
  2 +# Copyright:: Copyright (c) 2012 Opscode, Inc.
  3 +# License:: Apache License, Version 2.0
  4 +#
  5 +# Licensed under the Apache License, Version 2.0 (the "License");
  6 +# you may not use this file except in compliance with the License.
  7 +# You may obtain a copy of the License at
  8 +#
  9 +# http://www.apache.org/licenses/LICENSE-2.0
  10 +#
  11 +# Unless required by applicable law or agreed to in writing, software
  12 +# distributed under the License is distributed on an "AS IS" BASIS,
  13 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +# See the License for the specific language governing permissions and
  15 +# limitations under the License.
  16 +#
  17 +
  18 +###
  19 +# High level options
  20 +###
  21 +default['chef_server']['api_version'] = "11.0.2"
  22 +default['chef_server']['flavor'] = "osc" # Open Source Chef
  23 +
  24 +default['chef_server']['notification_email'] = "info@example.com"
  25 +default['chef_server']['bootstrap']['enable'] = true
  26 +
  27 +####
  28 +# The Chef User that services run as
  29 +####
  30 +# The username for the chef services user
  31 +default['chef_server']['user']['username'] = "chef_server"
  32 +# The shell for the chef services user
  33 +default['chef_server']['user']['shell'] = "/bin/sh"
  34 +# The home directory for the chef services user
  35 +default['chef_server']['user']['home'] = "/opt/chef-server/embedded"
  36 +
  37 +####
  38 +# RabbitMQ
  39 +####
  40 +default['chef_server']['rabbitmq']['enable'] = true
  41 +default['chef_server']['rabbitmq']['ha'] = false
  42 +default['chef_server']['rabbitmq']['dir'] = "/var/opt/chef-server/rabbitmq"
  43 +default['chef_server']['rabbitmq']['data_dir'] = "/var/opt/chef-server/rabbitmq/db"
  44 +default['chef_server']['rabbitmq']['log_directory'] = "/var/log/chef-server/rabbitmq"
  45 +default['chef_server']['rabbitmq']['vhost'] = '/chef'
  46 +default['chef_server']['rabbitmq']['user'] = 'chef'
  47 +default['chef_server']['rabbitmq']['password'] = 'chefrocks'
  48 +default['chef_server']['rabbitmq']['node_ip_address'] = '127.0.0.1'
  49 +default['chef_server']['rabbitmq']['node_port'] = '8672'
  50 +default['chef_server']['rabbitmq']['nodename'] = 'rabbit@localhost'
  51 +default['chef_server']['rabbitmq']['vip'] = '127.0.0.1'
  52 +default['chef_server']['rabbitmq']['consumer_id'] = 'hotsauce'
  53 +
  54 +####
  55 +# Chef Solr
  56 +####
  57 +default['chef_server']['chef-solr']['enable'] = true
  58 +default['chef_server']['chef-solr']['ha'] = false
  59 +default['chef_server']['chef-solr']['dir'] = "/var/opt/chef-server/chef-solr"
  60 +default['chef_server']['chef-solr']['data_dir'] = "/var/opt/chef-server/chef-solr/data"
  61 +default['chef_server']['chef-solr']['log_directory'] = "/var/log/chef-server/chef-solr"
  62 +# defaults for heap size and new generation size are computed in the chef-solr
  63 +# recipe based on node memory
  64 +default['chef_server']['chef-solr']['heap_size'] = nil
  65 +default['chef_server']['chef-solr']['new_size'] = nil
  66 +default['chef_server']['chef-solr']['java_opts'] = ""
  67 +default['chef_server']['chef-solr']['ip_address'] = '127.0.0.1'
  68 +default['chef_server']['chef-solr']['vip'] = '127.0.0.1'
  69 +default['chef_server']['chef-solr']['port'] = 8983
  70 +default['chef_server']['chef-solr']['ram_buffer_size'] = 200
  71 +default['chef_server']['chef-solr']['merge_factor'] = 100
  72 +default['chef_server']['chef-solr']['max_merge_docs'] = 2147483647
  73 +default['chef_server']['chef-solr']['max_field_length'] = 100000
  74 +default['chef_server']['chef-solr']['max_commit_docs'] = 1000
  75 +default['chef_server']['chef-solr']['commit_interval'] = 60000 # in ms
  76 +default['chef_server']['chef-solr']['poll_seconds'] = 20 # slave -> master poll interval in seconds, max of 60 (see solrconfig.xml.erb)
  77 +
  78 +####
  79 +# Chef Expander
  80 +####
  81 +default['chef_server']['chef-expander']['enable'] = true
  82 +default['chef_server']['chef-expander']['ha'] = false
  83 +default['chef_server']['chef-expander']['dir'] = "/var/opt/chef-server/chef-expander"
  84 +default['chef_server']['chef-expander']['log_directory'] = "/var/log/chef-server/chef-expander"
  85 +default['chef_server']['chef-expander']['reindexer_log_directory'] = "/var/log/chef-server/chef-expander-reindexer"
  86 +default['chef_server']['chef-expander']['consumer_id'] = "default"
  87 +default['chef_server']['chef-expander']['nodes'] = 2
  88 +
  89 +####
  90 +# Bookshelf
  91 +####
  92 +default['chef_server']['bookshelf']['enable'] = true
  93 +default['chef_server']['bookshelf']['ha'] = false
  94 +default['chef_server']['bookshelf']['dir'] = "/var/opt/chef-server/bookshelf"
  95 +default['chef_server']['bookshelf']['data_dir'] = "/var/opt/chef-server/bookshelf/data"
  96 +default['chef_server']['bookshelf']['log_directory'] = "/var/log/chef-server/bookshelf"
  97 +default['chef_server']['bookshelf']['svlogd_size'] = 1000000
  98 +default['chef_server']['bookshelf']['svlogd_num'] = 10
  99 +default['chef_server']['bookshelf']['vip'] = node['fqdn']
  100 +default['chef_server']['bookshelf']['url'] = "https://#{node['fqdn']}"
  101 +# Default: set to Host: header. Override to hardcode a url, "http://..."
  102 +default['chef_server']['bookshelf']['external_url'] = :host_header
  103 +default['chef_server']['bookshelf']['listen'] = '127.0.0.1'
  104 +default['chef_server']['bookshelf']['port'] = 4321
  105 +default['chef_server']['bookshelf']['stream_download'] = true
  106 +default['chef_server']['bookshelf']['access_key_id'] = "generated-by-default"
  107 +default['chef_server']['bookshelf']['secret_access_key'] = "generated-by-default"
  108 +
  109 +####
  110 +# Erlang Chef Server API
  111 +####
  112 +default['chef_server']['erchef']['enable'] = true
  113 +default['chef_server']['erchef']['ha'] = false
  114 +default['chef_server']['erchef']['dir'] = "/var/opt/chef-server/erchef"
  115 +default['chef_server']['erchef']['log_directory'] = "/var/log/chef-server/erchef"
  116 +default['chef_server']['erchef']['svlogd_size'] = 1000000
  117 +default['chef_server']['erchef']['svlogd_num'] = 10
  118 +default['chef_server']['erchef']['vip'] = '127.0.0.1'
  119 +default['chef_server']['erchef']['listen'] = '127.0.0.1'
  120 +default['chef_server']['erchef']['port'] = 8000
  121 +default['chef_server']['erchef']['auth_skew'] = '900'
  122 +default['chef_server']['erchef']['bulk_fetch_batch_size'] = '5'
  123 +default['chef_server']['erchef']['max_cache_size'] = '10000'
  124 +default['chef_server']['erchef']['cache_ttl'] = '3600'
  125 +default['chef_server']['erchef']['db_pool_size'] = '20'
  126 +default['chef_server']['erchef']['ibrowse_max_sessions'] = 256
  127 +default['chef_server']['erchef']['ibrowse_max_pipeline_size'] = 1
  128 +# Default: generate signed URLs based upon Host: header. Override with a url, "http:// ..."
  129 +default['chef_server']['erchef']['base_resource_url'] = :host_header
  130 +default['chef_server']['erchef']['s3_bucket'] = 'bookshelf'
  131 +default['chef_server']['erchef']['s3_url_ttl'] = 900
  132 +default['chef_server']['erchef']['s3_parallel_ops_timeout'] = 5000
  133 +default['chef_server']['erchef']['s3_parallel_ops_fanout'] = 20
  134 +default['chef_server']['erchef']['proxy_user'] = "pivotal"
  135 +default['chef_server']['erchef']['validation_client_name'] = "chef-validator"
  136 +default['chef_server']['erchef']['umask'] = "0022"
  137 +default['chef_server']['erchef']['web_ui_client_name'] = "chef-webui"
  138 +default['chef_server']['erchef']['root_metric_key'] = "chefAPI"
  139 +default['chef_server']['erchef']['depsolver_worker_count'] = 5
  140 +default['chef_server']['erchef']['depsolver_timeout'] = 5000
  141 +default['chef_server']['erchef']['max_request_size'] = 1000000
  142 +
  143 +####
  144 +# Chef Server WebUI
  145 +####
  146 +default['chef_server']['chef-server-webui']['enable'] = true
  147 +default['chef_server']['chef-server-webui']['ha'] = false
  148 +default['chef_server']['chef-server-webui']['dir'] = "/var/opt/chef-server/chef-server-webui"
  149 +default['chef_server']['chef-server-webui']['log_directory'] = "/var/log/chef-server/chef-server-webui"
  150 +default['chef_server']['chef-server-webui']['environment'] = 'chefserver'
  151 +default['chef_server']['chef-server-webui']['listen'] = '127.0.0.1'
  152 +default['chef_server']['chef-server-webui']['vip'] = '127.0.0.1'
  153 +default['chef_server']['chef-server-webui']['port'] = 9462
  154 +default['chef_server']['chef-server-webui']['backlog'] = 1024
  155 +default['chef_server']['chef-server-webui']['tcp_nodelay'] = true
  156 +default['chef_server']['chef-server-webui']['worker_timeout'] = 3600
  157 +default['chef_server']['chef-server-webui']['umask'] = "0022"
  158 +default['chef_server']['chef-server-webui']['worker_processes'] = 2
  159 +default['chef_server']['chef-server-webui']['session_key'] = "_sandbox_session"
  160 +default['chef_server']['chef-server-webui']['cookie_domain'] = "all"
  161 +default['chef_server']['chef-server-webui']['cookie_secret'] = "47b3b8d95dea455baf32155e95d1e64e"
  162 +default['chef_server']['chef-server-webui']['web_ui_client_name'] = "chef-webui"
  163 +default['chef_server']['chef-server-webui']['web_ui_admin_user_name'] = "admin"
  164 +default['chef_server']['chef-server-webui']['web_ui_admin_default_password'] = "p@ssw0rd1"
  165 +
  166 +####
  167 +# Chef Pedant
  168 +####
  169 +default['chef_server']['chef-pedant']['dir'] = "/var/opt/chef-server/chef-pedant"
  170 +default['chef_server']['chef-pedant']['log_directory'] = "/var/log/chef-server/chef-pedant"
  171 +default['chef_server']['chef-pedant']['log_http_requests'] = true
  172 +
  173 +###
  174 +# Estatsd
  175 +###
  176 +default['chef_server']['estatsd']['enable'] = true
  177 +default['chef_server']['estatsd']['dir'] = "/var/opt/chef-server/estatsd"
  178 +default['chef_server']['estatsd']['log_directory'] = "/var/log/chef-server/estatsd"
  179 +default['chef_server']['estatsd']['vip'] = "127.0.0.1"
  180 +default['chef_server']['estatsd']['port'] = 9466
  181 +
  182 +###
  183 +# Load Balancer
  184 +###
  185 +default['chef_server']['lb']['enable'] = true
  186 +default['chef_server']['lb']['vip'] = "127.0.0.1"
  187 +default['chef_server']['lb']['api_fqdn'] = node['fqdn']
  188 +default['chef_server']['lb']['web_ui_fqdn'] = node['fqdn']
  189 +default['chef_server']['lb']['cache_cookbook_files'] = false
  190 +default['chef_server']['lb']['debug'] = false
  191 +default['chef_server']['lb']['upstream']['erchef'] = [ "127.0.0.1" ]
  192 +default['chef_server']['lb']['upstream']['chef-server-webui'] = [ "127.0.0.1" ]
  193 +default['chef_server']['lb']['upstream']['bookshelf'] = [ "127.0.0.1" ]
  194 +
  195 +####
  196 +# Nginx
  197 +####
  198 +default['chef_server']['nginx']['enable'] = true
  199 +default['chef_server']['nginx']['ha'] = false
  200 +default['chef_server']['nginx']['dir'] = "/var/opt/chef-server/nginx"
  201 +default['chef_server']['nginx']['log_directory'] = "/var/log/chef-server/nginx"
  202 +default['chef_server']['nginx']['ssl_port'] = 443
  203 +default['chef_server']['nginx']['enable_non_ssl'] = false
  204 +default['chef_server']['nginx']['non_ssl_port'] = 80
  205 +default['chef_server']['nginx']['server_name'] = node['fqdn']
  206 +default['chef_server']['nginx']['url'] = "https://#{node['fqdn']}"
  207 +# These options provide the current best security with TSLv1
  208 +#default['chef_server']['nginx']['ssl_protocols'] = "-ALL +TLSv1"
  209 +#default['chef_server']['nginx']['ssl_ciphers'] = "RC4:!MD5"
  210 +# This might be necessary for auditors that want no MEDIUM security ciphers and don't understand BEAST attacks
  211 +#default['chef_server']['nginx']['ssl_protocols'] = "-ALL +SSLv3 +TLSv1"
  212 +#default['chef_server']['nginx']['ssl_ciphers'] = "HIGH:!MEDIUM:!LOW:!ADH:!kEDH:!aNULL:!eNULL:!EXP:!SSLv2:!SEED:!CAMELLIA:!PSK"
  213 +# The following favors performance and compatibility, addresses BEAST, and should pass a PCI audit
  214 +default['chef_server']['nginx']['ssl_protocols'] = "SSLv3 TLSv1"
  215 +default['chef_server']['nginx']['ssl_ciphers'] = "RC4-SHA:RC4-MD5:RC4:RSA:HIGH:MEDIUM:!LOW:!kEDH:!aNULL:!ADH:!eNULL:!EXP:!SSLv2:!SEED:!CAMELLIA:!PSK"
  216 +default['chef_server']['nginx']['ssl_certificate'] = nil
  217 +default['chef_server']['nginx']['ssl_certificate_key'] = nil
  218 +default['chef_server']['nginx']['ssl_country_name'] = "US"
  219 +default['chef_server']['nginx']['ssl_state_name'] = "WA"
  220 +default['chef_server']['nginx']['ssl_locality_name'] = "Seattle"
  221 +default['chef_server']['nginx']['ssl_company_name'] = "YouCorp"
  222 +default['chef_server']['nginx']['ssl_organizational_unit_name'] = "Operations"
  223 +default['chef_server']['nginx']['ssl_email_address'] = "you@example.com"
  224 +default['chef_server']['nginx']['worker_processes'] = node['cpu']['total'].to_i
  225 +default['chef_server']['nginx']['worker_connections'] = 10240
  226 +default['chef_server']['nginx']['sendfile'] = 'on'
  227 +default['chef_server']['nginx']['tcp_nopush'] = 'on'
  228 +default['chef_server']['nginx']['tcp_nodelay'] = 'on'
  229 +default['chef_server']['nginx']['gzip'] = "on"
  230 +default['chef_server']['nginx']['gzip_http_version'] = "1.0"
  231 +default['chef_server']['nginx']['gzip_comp_level'] = "2"
  232 +default['chef_server']['nginx']['gzip_proxied'] = "any"
  233 +default['chef_server']['nginx']['gzip_types'] = [ "text/plain", "text/css", "application/x-javascript", "text/xml", "application/xml", "application/xml+rss", "text/javascript", "application/json" ]
  234 +default['chef_server']['nginx']['keepalive_timeout'] = 65
  235 +default['chef_server']['nginx']['client_max_body_size'] = '250m'
  236 +default['chef_server']['nginx']['cache_max_size'] = '5000m'
  237 +
  238 +###
  239 +# PostgreSQL
  240 +###
  241 +default['chef_server']['postgresql']['enable'] = true
  242 +default['chef_server']['postgresql']['ha'] = false
  243 +default['chef_server']['postgresql']['dir'] = "/var/opt/chef-server/postgresql"
  244 +default['chef_server']['postgresql']['data_dir'] = "/var/opt/chef-server/postgresql/data"
  245 +default['chef_server']['postgresql']['log_directory'] = "/var/log/chef-server/postgresql"
  246 +default['chef_server']['postgresql']['svlogd_size'] = 1000000
  247 +default['chef_server']['postgresql']['svlogd_num'] = 10
  248 +default['chef_server']['postgresql']['username'] = "opscode-pgsql"
  249 +default['chef_server']['postgresql']['shell'] = "/bin/sh"
  250 +default['chef_server']['postgresql']['home'] = "/var/opt/chef-server/postgresql"
  251 +default['chef_server']['postgresql']['user_path'] = "/opt/chef-server/embedded/bin:/opt/chef-server/bin:$PATH"
  252 +default['chef_server']['postgresql']['sql_user'] = "opscode_chef"
  253 +default['chef_server']['postgresql']['sql_password'] = "snakepliskin"
  254 +default['chef_server']['postgresql']['sql_ro_user'] = "opscode_chef_ro"
  255 +default['chef_server']['postgresql']['sql_ro_password'] = "shmunzeltazzen"
  256 +default['chef_server']['postgresql']['vip'] = "127.0.0.1"
  257 +default['chef_server']['postgresql']['port'] = 5432
  258 +default['chef_server']['postgresql']['listen_address'] = 'localhost'
  259 +default['chef_server']['postgresql']['max_connections'] = 200
  260 +default['chef_server']['postgresql']['md5_auth_cidr_addresses'] = [ ]
  261 +default['chef_server']['postgresql']['trust_auth_cidr_addresses'] = [ '127.0.0.1/32', '::1/128' ]
  262 +default['chef_server']['postgresql']['shmmax'] = kernel['machine'] =~ /x86_64/ ? 17179869184 : 4294967295
  263 +default['chef_server']['postgresql']['shmall'] = kernel['machine'] =~ /x86_64/ ? 4194304 : 1048575
  264 +
  265 +# Resolves CHEF-3889
  266 +if (node['memory']['total'].to_i / 4) > ((node['chef_server']['postgresql']['shmmax'].to_i / 1024) - 2097152)
  267 + # guard against setting shared_buffers > shmmax on hosts with installed RAM > 64GB
  268 + # use 2GB less than shmmax as the default for these large memory machines
  269 + default['chef_server']['postgresql']['shared_buffers'] = "14336MB"
  270 +else
  271 + default['chef_server']['postgresql']['shared_buffers'] = "#{(node['memory']['total'].to_i / 4) / (1024)}MB"
  272 +end
  273 +
  274 +default['chef_server']['postgresql']['work_mem'] = "8MB"
  275 +default['chef_server']['postgresql']['effective_cache_size'] = "#{(node['memory']['total'].to_i / 2) / (1024)}MB"
  276 +default['chef_server']['postgresql']['checkpoint_segments'] = 10
  277 +default['chef_server']['postgresql']['checkpoint_timeout'] = "5min"
  278 +default['chef_server']['postgresql']['checkpoint_completion_target'] = 0.9
  279 +default['chef_server']['postgresql']['checkpoint_warning'] = "30s"
... ...
files/gitlab-cookbooks/gitlab/libraries/chef_server.rb 0 → 100644
... ... @@ -0,0 +1,140 @@
  1 +#
  2 +# Copyright:: Copyright (c) 2012 Opscode, Inc.
  3 +# License:: Apache License, Version 2.0
  4 +#
  5 +# Licensed under the Apache License, Version 2.0 (the "License");
  6 +# you may not use this file except in compliance with the License.
  7 +# You may obtain a copy of the License at
  8 +#
  9 +# http://www.apache.org/licenses/LICENSE-2.0
  10 +#
  11 +# Unless required by applicable law or agreed to in writing, software
  12 +# distributed under the License is distributed on an "AS IS" BASIS,
  13 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +# See the License for the specific language governing permissions and
  15 +# limitations under the License.
  16 +#
  17 +
  18 +require 'mixlib/config'
  19 +require 'chef/mash'
  20 +require 'chef/json_compat'
  21 +require 'chef/mixin/deep_merge'
  22 +require 'securerandom'
  23 +
  24 +module ChefServer
  25 + extend(Mixlib::Config)
  26 +
  27 + rabbitmq Mash.new
  28 + chef_solr Mash.new
  29 + chef_expander Mash.new
  30 + erchef Mash.new
  31 + chef_server_webui Mash.new
  32 + lb Mash.new
  33 + postgresql Mash.new
  34 + bookshelf Mash.new
  35 + bootstrap Mash.new
  36 + nginx Mash.new
  37 + api_fqdn nil
  38 + node nil
  39 + notification_email nil
  40 +
  41 + class << self
  42 +
  43 + # guards against creating secrets on non-bootstrap node
  44 + def generate_hex(chars)
  45 + SecureRandom.hex(chars)
  46 + end
  47 +
  48 + def generate_secrets(node_name)
  49 + existing_secrets ||= Hash.new
  50 + if File.exists?("/etc/chef-server/chef-server-secrets.json")
  51 + existing_secrets = Chef::JSONCompat.from_json(File.read("/etc/chef-server/chef-server-secrets.json"))
  52 + end
  53 + existing_secrets.each do |k, v|
  54 + v.each do |pk, p|
  55 + ChefServer[k][pk] = p
  56 + end
  57 + end
  58 +
  59 + ChefServer['rabbitmq']['password'] ||= generate_hex(50)
  60 + ChefServer['chef_server_webui']['cookie_secret'] ||= generate_hex(50)
  61 + ChefServer['postgresql']['sql_password'] ||= generate_hex(50)
  62 + ChefServer['postgresql']['sql_ro_password'] ||= generate_hex(50)
  63 + ChefServer['bookshelf']['access_key_id'] ||= generate_hex(20)
  64 + ChefServer['bookshelf']['secret_access_key'] ||= generate_hex(40)
  65 +
  66 + if File.directory?("/etc/chef-server")
  67 + File.open("/etc/chef-server/chef-server-secrets.json", "w") do |f|
  68 + f.puts(
  69 + Chef::JSONCompat.to_json_pretty({
  70 + 'rabbitmq' => {
  71 + 'password' => ChefServer['rabbitmq']['password'],
  72 + },
  73 + 'chef_server_webui' => {
  74 + 'cookie_secret' => ChefServer['chef_server_webui']['cookie_secret'],
  75 + },
  76 + 'postgresql' => {
  77 + 'sql_password' => ChefServer['postgresql']['sql_password'],
  78 + 'sql_ro_password' => ChefServer['postgresql']['sql_ro_password']
  79 + },
  80 + 'bookshelf' => {
  81 + 'access_key_id' => ChefServer['bookshelf']['access_key_id'],
  82 + 'secret_access_key' => ChefServer['bookshelf']['secret_access_key']
  83 + }
  84 + })
  85 + )
  86 + system("chmod 0600 /etc/chef-server/chef-server-secrets.json")
  87 + end
  88 + end
  89 + end
  90 +
  91 + def generate_hash
  92 + results = { "chef_server" => {} }
  93 + [
  94 + "rabbitmq",
  95 + "chef_solr",
  96 + "chef_expander",
  97 + "erchef",
  98 + "chef_server_webui",
  99 + "lb",
  100 + "postgresql",
  101 + "nginx",
  102 + "bookshelf",
  103 + "bootstrap"
  104 + ].each do |key|
  105 + rkey = key.gsub('_', '-')
  106 + results['chef_server'][rkey] = ChefServer[key]
  107 + end
  108 + results['chef_server']['notification_email'] = ChefServer['notification_email']
  109 +
  110 + results
  111 + end
  112 +
  113 + def gen_api_fqdn
  114 + ChefServer["lb"]["api_fqdn"] ||= ChefServer['api_fqdn']
  115 + ChefServer["lb"]["web_ui_fqdn"] ||= ChefServer['api_fqdn']
  116 + ChefServer["nginx"]["server_name"] ||= ChefServer['api_fqdn']
  117 +
  118 + # If the user manually set an Nginx URL in the config file all bets are
  119 + # off...we just cross our fingers and hope they constructed the URL
  120 + # correctly! We may want to remove this 'private' config value from the
  121 + # documenation.
  122 + if ChefServer["nginx"]["url"].nil?
  123 + ChefServer["nginx"]["url"] = "https://#{ChefServer['api_fqdn']}"
  124 + if ChefServer["nginx"]["ssl_port"]
  125 + ChefServer["nginx"]["url"] << ":#{ChefServer["nginx"]["ssl_port"]}"
  126 + end
  127 + end
  128 +
  129 + # The external bookshelf URL should match the external lb
  130 + ChefServer["bookshelf"]["url"] ||= ChefServer["nginx"]["url"]
  131 + end
  132 +
  133 + def generate_config(node_name)
  134 + generate_secrets(node_name)
  135 + ChefServer[:api_fqdn] ||= node_name
  136 + gen_api_fqdn
  137 + generate_hash
  138 + end
  139 + end
  140 +end
... ...
files/gitlab-cookbooks/gitlab/libraries/helper.rb 0 → 100644
... ... @@ -0,0 +1,194 @@
  1 +#
  2 +# Copyright:: Copyright (c) 2012 Opscode, Inc.
  3 +# License:: Apache License, Version 2.0
  4 +#
  5 +# Licensed under the Apache License, Version 2.0 (the "License");
  6 +# you may not use this file except in compliance with the License.
  7 +# You may obtain a copy of the License at
  8 +#
  9 +# http://www.apache.org/licenses/LICENSE-2.0
  10 +#
  11 +# Unless required by applicable law or agreed to in writing, software
  12 +# distributed under the License is distributed on an "AS IS" BASIS,
  13 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +# See the License for the specific language governing permissions and
  15 +# limitations under the License.
  16 +#
  17 +
  18 +require 'mixlib/shellout'
  19 +
  20 +class PgHelper
  21 + attr_reader :node
  22 +
  23 + def initialize(node)
  24 + @node = node
  25 + end
  26 +
  27 + def is_running?
  28 + OmnibusHelper.service_up?("postgresql")
  29 + end
  30 +
  31 + def database_exists?(db_name)
  32 + psql_cmd(["-d 'template1'",
  33 + "-c 'select datname from pg_database' -x",
  34 + "| grep #{db_name}"])
  35 + end
  36 +
  37 + def sql_user_exists?
  38 + user_exists?(node['chef_server']['postgresql']['sql_user'])
  39 + end
  40 +
  41 + def sql_ro_user_exists?
  42 + user_exists?(node['chef_server']['postgresql']['sql_ro_user'])
  43 + end
  44 +
  45 + def user_exists?(db_user)
  46 + psql_cmd(["-d 'template1'",
  47 + "-c 'select usename from pg_user' -x",
  48 + "|grep #{db_user}"])
  49 + end
  50 +
  51 + def psql_cmd(cmd_list)
  52 + cmd = ["/opt/chef-server/embedded/bin/chpst",
  53 + "-u #{pg_user}",
  54 + "/opt/chef-server/embedded/bin/psql",
  55 + "--port #{pg_port}",
  56 + cmd_list.join(" ")].join(" ")
  57 + do_shell_out(cmd, 0)
  58 + end
  59 +
  60 + def pg_user
  61 + node['chef_server']['postgresql']['username']
  62 + end
  63 +
  64 + def pg_port
  65 + node['chef_server']['postgresql']['port']
  66 + end
  67 +
  68 + def do_shell_out(cmd, expect_status)
  69 + o = Mixlib::ShellOut.new(cmd)
  70 + o.run_command
  71 + o.exitstatus == expect_status
  72 + end
  73 +
  74 +end
  75 +
  76 +class OmnibusHelper
  77 +
  78 + def self.should_notify?(service_name)
  79 + File.symlink?("/opt/chef-server/service/#{service_name}") && service_up?(service_name)
  80 + end
  81 +
  82 + def self.service_up?(service_name)
  83 + o = Mixlib::ShellOut.new("/opt/chef-server/bin/chef-server-ctl status #{service_name}")
  84 + o.run_command
  85 + o.exitstatus == 0
  86 + end
  87 +
  88 + # generate a certificate signed by the opscode ca key
  89 + #
  90 + # === Returns
  91 + # [cert, key]
  92 + #
  93 + def self.gen_certificate
  94 + key = OpenSSL::PKey::RSA.generate(2048)
  95 + public_key = key.public_key
  96 + cert_uuid = UUIDTools::UUID.random_create
  97 + common_name = "URI:http://opscode.com/GUIDS/#{cert_uuid}"
  98 + info = [["C", "US"], ["ST", "Washington"], ["L", "Seattle"], ["O", "Opscode, Inc."], ["OU", "Certificate Service"], ["CN", common_name]]
  99 + cert = OpenSSL::X509::Certificate.new
  100 + cert.subject = OpenSSL::X509::Name.new(info)
  101 + cert.issuer = ca_certificate.subject
  102 + cert.not_before = Time.now
  103 + cert.not_after = Time.now + 10 * 365 * 24 * 60 * 60 # 10 years
  104 + cert.public_key = public_key
  105 + cert.serial = 1
  106 + cert.version = 3
  107 +
  108 + ef = OpenSSL::X509::ExtensionFactory.new
  109 + ef.subject_certificate = cert
  110 + ef.issuer_certificate = ca_certificate
  111 + cert.extensions = [
  112 + ef.create_extension("basicConstraints","CA:FALSE",true),
  113 + ef.create_extension("subjectKeyIdentifier", "hash")
  114 + ]
  115 + cert.sign(ca_keypair, OpenSSL::Digest::SHA1.new)
  116 +
  117 + return cert, key
  118 + end
  119 +
  120 + ######################################################################
  121 + #
  122 + # the following is the Opscode CA key and certificate, copied from
  123 + # the cert project(s)
  124 + #
  125 + ######################################################################
  126 +
  127 + def self.ca_certificate
  128 + @_ca_cert ||=
  129 + begin
  130 + cert_string = <<-EOCERT
  131 +-----BEGIN CERTIFICATE-----
  132 +MIIDyDCCAzGgAwIBAwIBATANBgkqhkiG9w0BAQUFADCBnjELMAkGA1UEBhMCVVMx
  133 +EzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFjAUBgNVBAoM
  134 +DU9wc2NvZGUsIEluYy4xHDAaBgNVBAsME0NlcnRpZmljYXRlIFNlcnZpY2UxMjAw
  135 +BgNVBAMMKW9wc2NvZGUuY29tL2VtYWlsQWRkcmVzcz1hdXRoQG9wc2NvZGUuY29t
  136 +MB4XDTA5MDUwNjIzMDEzNVoXDTE5MDUwNDIzMDEzNVowgZ4xCzAJBgNVBAYTAlVT
  137 +MRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMRYwFAYDVQQK
  138 +DA1PcHNjb2RlLCBJbmMuMRwwGgYDVQQLDBNDZXJ0aWZpY2F0ZSBTZXJ2aWNlMTIw
  139 +MAYDVQQDDClvcHNjb2RlLmNvbS9lbWFpbEFkZHJlc3M9YXV0aEBvcHNjb2RlLmNv
  140 +bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAlKTCZPmifZe9ruxlQpWRj+yx
  141 +Mxt6+omH44jSfj4Obrnmm5eqVhRwjSfHOq383IeilFrNqC5VkiZrlLh8uhuTeaCy
  142 +PE1eED7DZOmwuswTui49DqXiVE39jB6TnzZ3mr6HOPHXtPhSzdtILo18RMmgyfm/
  143 +csrwct1B3GuQ9LSVMXkCAwEAAaOCARIwggEOMA8GA1UdEwEB/wQFMAMBAf8wHQYD
  144 +VR0OBBYEFJ228MdlU86GfVLsQx8rleAeM+eLMA4GA1UdDwEB/wQEAwIBBjCBywYD
  145 +VR0jBIHDMIHAgBSdtvDHZVPOhn1S7EMfK5XgHjPni6GBpKSBoTCBnjELMAkGA1UE
  146 +BhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFjAU
  147 +BgNVBAoMDU9wc2NvZGUsIEluYy4xHDAaBgNVBAsME0NlcnRpZmljYXRlIFNlcnZp
  148 +Y2UxMjAwBgNVBAMMKW9wc2NvZGUuY29tL2VtYWlsQWRkcmVzcz1hdXRoQG9wc2Nv
  149 +ZGUuY29tggEBMA0GCSqGSIb3DQEBBQUAA4GBAHJxAnwTt/liAMfZf5Khg7Mck4f+
  150 +IkO3rjoI23XNbVHlctTOieSwzRZtBRdNOTzQvzzhh1KKpl3Rt04rrRPQvDeO/Usm
  151 +pVr6g+lk2hhDgKKeR4J7qXZmlemZTrFZoobdoijDaOT5NuqkGt5ANdTqzRwbC9zQ
  152 +t6vXSWGCFoo4AEic
  153 +-----END CERTIFICATE-----
  154 +EOCERT
  155 + OpenSSL::X509::Certificate.new(cert_string)
  156 + end
  157 + end
  158 +
  159 + def self.ca_keypair
  160 + @_ca_key ||=
  161 + begin
  162 + keypair_string = <<-EOKEY
  163 +-----BEGIN RSA PRIVATE KEY-----
  164 +MIICWwIBAAKBgQCUpMJk+aJ9l72u7GVClZGP7LEzG3r6iYfjiNJ+Pg5uueabl6pW
  165 +FHCNJ8c6rfzch6KUWs2oLlWSJmuUuHy6G5N5oLI8TV4QPsNk6bC6zBO6Lj0OpeJU
  166 +Tf2MHpOfNneavoc48de0+FLN20gujXxEyaDJ+b9yyvBy3UHca5D0tJUxeQIDAQAB
  167 +AoGAYAPRIeJyiIfk2cIPYqQ0g3BTwfyFQqJl6Z7uwOca8YEZqfWc7L+FOFiyg3/x
  168 +rw3aAdRptbJASgiRQ16sCpdXeaRFY5gcO2MnqmCyoyp2//zhdFReSC+Akim1UPtG
  169 +5SqqdV9I0TBl+1JlMiivn677mXGij+qyQjSWxW2pGVsbTSUCQQDDLb/DgoD0+N6O
  170 +FIoJ/Mh5cgIxQhqXu/dylEv/I3goSJdXPAqhsnsa6zYQGdftnvMK1ZXS/hYL4i06
  171 +w9lKDV8PAkEAwvaz1oUtXLNfYYAF42c1BoBhqCzjXSzMWPu5BlWQzSsdzgVgDuX3
  172 +LlkiIdRtMcMaNskaBTtIClCxaEm3rUnm9wJAEOp2JEu7QYAQSeAd1p/CAESRTBOe
  173 +mmgAGj4gGAzK7TLdawIZKcp+QOcB2INk44NTLS01vwOmhYEkymMPAgwGoQJAKimq
  174 +GMFyXvLXtME4BMbEG+TVucYDYZoXk0LU776/cu9ZIb3d2Tr4asiR7hj/iFx2JdT1
  175 +0J3SZZCv3SrcExjBXwJABS3/iQroe24tvrmyy4tc5YG5ygIRaBUCs6dn0fbisX/9
  176 +K1oq5Lnwimy4l2NI0o/lxIqnwFilACjs3tuXH1OhMA==
  177 +-----END RSA PRIVATE KEY-----
  178 +EOKEY
  179 + OpenSSL::PKey::RSA.new(keypair_string)
  180 + end
  181 + end
  182 +
  183 + def self.erl_atom_or_string(term)
  184 + case term
  185 + when Symbol
  186 + term
  187 + when String
  188 + "\"#{term}\""
  189 + else
  190 + "undefined"
  191 + end
  192 + end
  193 +end
  194 +
... ...
files/gitlab-cookbooks/gitlab/recipes/postgresql.rb 0 → 100644
... ... @@ -0,0 +1,188 @@
  1 +#
  2 +# Copyright:: Copyright (c) 2012 Opscode, Inc.
  3 +# License:: Apache License, Version 2.0
  4 +#
  5 +# Licensed under the Apache License, Version 2.0 (the "License");
  6 +# you may not use this file except in compliance with the License.
  7 +# You may obtain a copy of the License at
  8 +#
  9 +# http://www.apache.org/licenses/LICENSE-2.0
  10 +#
  11 +# Unless required by applicable law or agreed to in writing, software
  12 +# distributed under the License is distributed on an "AS IS" BASIS,
  13 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14 +# See the License for the specific language governing permissions and
  15 +# limitations under the License.
  16 +#
  17 +
  18 +postgresql_dir = node['chef_server']['postgresql']['dir']
  19 +postgresql_data_dir = node['chef_server']['postgresql']['data_dir']
  20 +postgresql_data_dir_symlink = File.join(postgresql_dir, "data")
  21 +postgresql_log_dir = node['chef_server']['postgresql']['log_directory']
  22 +chef_db_dir = Dir.glob("/opt/chef-server/embedded/service/erchef/lib/chef_db-*").first
  23 +
  24 +user node['chef_server']['postgresql']['username'] do
  25 + system true
  26 + shell node['chef_server']['postgresql']['shell']
  27 + home node['chef_server']['postgresql']['home']
  28 +end
  29 +
  30 +directory postgresql_log_dir do
  31 + owner node['chef_server']['postgresql']['username']
  32 + recursive true
  33 +end
  34 +
  35 +directory postgresql_dir do
  36 + owner node['chef_server']['postgresql']['username']
  37 + mode "0700"
  38 +end
  39 +
  40 +directory postgresql_data_dir do
  41 + owner node['chef_server']['postgresql']['username']
  42 + mode "0700"
  43 + recursive true
  44 +end
  45 +
  46 +link postgresql_data_dir_symlink do
  47 + to postgresql_data_dir
  48 + not_if { postgresql_data_dir == postgresql_data_dir_symlink }
  49 +end
  50 +
  51 +file File.join(node['chef_server']['postgresql']['home'], ".profile") do
  52 + owner node['chef_server']['postgresql']['username']
  53 + mode "0644"
  54 + content <<-EOH
  55 +PATH=#{node['chef_server']['postgresql']['user_path']}
  56 +EOH
  57 +end
  58 +
  59 +if File.directory?("/etc/sysctl.d") && File.exists?("/etc/init.d/procps")
  60 + # smells like ubuntu...
  61 + service "procps" do
  62 + action :nothing
  63 + end
  64 +
  65 + template "/etc/sysctl.d/90-postgresql.conf" do
  66 + source "90-postgresql.conf.sysctl.erb"
  67 + owner "root"
  68 + mode "0644"
  69 + variables(node['chef_server']['postgresql'].to_hash)
  70 + notifies :start, 'service[procps]', :immediately
  71 + end
  72 +else
  73 + # hope this works...
  74 + execute "sysctl" do
  75 + command "/sbin/sysctl -p /etc/sysctl.conf"
  76 + action :nothing
  77 + end
  78 +
  79 + bash "add shm settings" do
  80 + user "root"
  81 + code <<-EOF
  82 + echo 'kernel.shmmax = #{node['chef_server']['postgresql']['shmmax']}' >> /etc/sysctl.conf
  83 + echo 'kernel.shmall = #{node['chef_server']['postgresql']['shmall']}' >> /etc/sysctl.conf
  84 + EOF
  85 + notifies :run, 'execute[sysctl]', :immediately
  86 + not_if "egrep '^kernel.shmmax = ' /etc/sysctl.conf"
  87 + end
  88 +end
  89 +
  90 +execute "/opt/chef-server/embedded/bin/initdb -D #{postgresql_data_dir}" do
  91 + user node['chef_server']['postgresql']['username']
  92 + not_if { File.exists?(File.join(postgresql_data_dir, "PG_VERSION")) }
  93 +end
  94 +
  95 +postgresql_config = File.join(postgresql_data_dir, "postgresql.conf")
  96 +
  97 +template postgresql_config do
  98 + source "postgresql.conf.erb"
  99 + owner node['chef_server']['postgresql']['username']
  100 + mode "0644"
  101 + variables(node['chef_server']['postgresql'].to_hash)
  102 + notifies :restart, 'service[postgresql]' if OmnibusHelper.should_notify?("postgresql")
  103 +end
  104 +
  105 +pg_hba_config = File.join(postgresql_data_dir, "pg_hba.conf")
  106 +
  107 +template pg_hba_config do
  108 + source "pg_hba.conf.erb"
  109 + owner node['chef_server']['postgresql']['username']
  110 + mode "0644"
  111 + variables(node['chef_server']['postgresql'].to_hash)
  112 + notifies :restart, 'service[postgresql]' if OmnibusHelper.should_notify?("postgresql")
  113 +end
  114 +
  115 +should_notify = OmnibusHelper.should_notify?("postgresql")
  116 +
  117 +runit_service "postgresql" do
  118 + down node['chef_server']['postgresql']['ha']
  119 + control(['t'])
  120 + options({
  121 + :log_directory => postgresql_log_dir,
  122 + :svlogd_size => node['chef_server']['postgresql']['svlogd_size'],
  123 + :svlogd_num => node['chef_server']['postgresql']['svlogd_num']
  124 + }.merge(params))
  125 +end
  126 +
  127 +if node['chef_server']['bootstrap']['enable']
  128 + execute "/opt/chef-server/bin/chef-server-ctl start postgresql" do
  129 + retries 20
  130 + end
  131 +end
  132 +
  133 +###
  134 +# Create the database, migrate it, and create the users we need, and grant them
  135 +# privileges.
  136 +###
  137 +pg_helper = PgHelper.new(node)
  138 +pg_port = node['chef_server']['postgresql']['port']
  139 +pg_user = node['chef_server']['postgresql']['username']
  140 +bin_dir = "/opt/chef-server/embedded/bin"
  141 +db_name = "opscode_chef"
  142 +
  143 +execute "create #{db_name} database" do
  144 + command "#{bin_dir}/createdb -T template0 --port #{pg_port} -E UTF-8 #{db_name}"
  145 + user pg_user
  146 + not_if { !pg_helper.is_running? || pg_helper.database_exists?(db_name) }
  147 + retries 30
  148 + notifies :run, "execute[migrate_database]", :immediately
  149 +end
  150 +
  151 +execute "migrate_database" do
  152 + command "#{bin_dir}/psql #{db_name} --port #{pg_port} < priv/pgsql_schema.sql"
  153 + cwd chef_db_dir
  154 + user pg_user
  155 + action :nothing
  156 +end
  157 +
  158 +sql_user = node['chef_server']['postgresql']['sql_user']
  159 +sql_user_passwd = node['chef_server']['postgresql']['sql_password']
  160 +
  161 +execute "#{bin_dir}/psql --port #{pg_port} -d '#{db_name}' -c \"CREATE USER #{sql_user} WITH SUPERUSER ENCRYPTED PASSWORD '#{sql_user_passwd}'\"" do
  162 + cwd chef_db_dir
  163 + user pg_user
  164 + notifies :run, "execute[grant #{db_name} privileges]", :immediately
  165 + not_if { !pg_helper.is_running? || pg_helper.sql_user_exists? }
  166 +end
  167 +
  168 +execute "grant #{db_name} privileges" do
  169 + command "#{bin_dir}/psql --port #{pg_port} -d '#{db_name}' -c \"GRANT ALL PRIVILEGES ON DATABASE #{db_name} TO #{sql_user}\""
  170 + user pg_user
  171 + action :nothing
  172 +end
  173 +
  174 +sql_ro_user = node['chef_server']['postgresql']['sql_ro_user']
  175 +sql_ro_user_passwd = node['chef_server']['postgresql']['sql_ro_password']
  176 +
  177 +execute "#{bin_dir}/psql --port #{pg_port} -d '#{db_name}' -c \"CREATE USER #{sql_ro_user} WITH SUPERUSER ENCRYPTED PASSWORD '#{sql_ro_user_passwd}'\"" do
  178 + cwd chef_db_dir
  179 + user pg_user
  180 + notifies :run, "execute[grant #{db_name}_ro privileges]", :immediately
  181 + not_if { !pg_helper.is_running? || pg_helper.sql_ro_user_exists? }
  182 +end
  183 +
  184 +execute "grant #{db_name}_ro privileges" do
  185 + command "#{bin_dir}/psql --port #{pg_port} -d '#{db_name}' -c \"GRANT ALL PRIVILEGES ON DATABASE #{db_name} TO #{sql_ro_user}\""
  186 + user pg_user
  187 + action :nothing
  188 +end
... ...
files/gitlab-cookbooks/gitlab/templates/default/90-postgresql.conf.sysctl.erb 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +#
  2 +# chef server postgresql kernel shm tweaks
  3 +#
  4 +kernel.shmmax = <%= node['chef_server']['postgresql']['shmmax'] %>
  5 +kernel.shmall = <%= node['chef_server']['postgresql']['shmall'] %>
... ...
files/gitlab-cookbooks/gitlab/templates/default/pg_hba.conf.erb 0 → 100644
... ... @@ -0,0 +1,75 @@
  1 +# PostgreSQL Client Authentication Configuration File
  2 +# ===================================================
  3 +#
  4 +# Refer to the "Client Authentication" section in the
  5 +# PostgreSQL documentation for a complete description
  6 +# of this file. A short synopsis follows.
  7 +#
  8 +# This file controls: which hosts are allowed to connect, how clients
  9 +# are authenticated, which PostgreSQL user names they can use, which
  10 +# databases they can access. Records take one of these forms:
  11 +#
  12 +# local DATABASE USER METHOD [OPTION]
  13 +# host DATABASE USER CIDR-ADDRESS METHOD [OPTION]
  14 +# hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION]
  15 +# hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION]
  16 +#
  17 +# (The uppercase items must be replaced by actual values.)
  18 +#
  19 +# The first field is the connection type: "local" is a Unix-domain socket,
  20 +# "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an
  21 +# SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket.
  22 +#
  23 +# DATABASE can be "all", "sameuser", "samerole", a database name, or
  24 +# a comma-separated list thereof.
  25 +#
  26 +# USER can be "all", a user name, a group name prefixed with "+", or
  27 +# a comma-separated list thereof. In both the DATABASE and USER fields
  28 +# you can also write a file name prefixed with "@" to include names from
  29 +# a separate file.
  30 +#
  31 +# CIDR-ADDRESS specifies the set of hosts the record matches.
  32 +# It is made up of an IP address and a CIDR mask that is an integer
  33 +# (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies
  34 +# the number of significant bits in the mask. Alternatively, you can write
  35 +# an IP address and netmask in separate columns to specify the set of hosts.
  36 +#
  37 +# METHOD can be "trust", "reject", "md5", "crypt", "password", "gss", "sspi",
  38 +# "krb5", "ident", "pam" or "ldap". Note that "password" sends passwords
  39 +# in clear text; "md5" is preferred since it sends encrypted passwords.
  40 +#
  41 +# OPTION is the ident map or the name of the PAM service, depending on METHOD.
  42 +#
  43 +# Database and user names containing spaces, commas, quotes and other special
  44 +# characters must be quoted. Quoting one of the keywords "all", "sameuser" or
  45 +# "samerole" makes the name lose its special character, and just match a
  46 +# database or username with that name.
  47 +#
  48 +# This file is read on server startup and when the postmaster receives
  49 +# a SIGHUP signal. If you edit the file on a running system, you have
  50 +# to SIGHUP the postmaster for the changes to take effect. You can use
  51 +# "pg_ctl reload" to do that.
  52 +
  53 +# Put your actual configuration here
  54 +# ----------------------------------
  55 +#
  56 +# If you want to allow non-local connections, you need to add more
  57 +# "host" records. In that case you will also need to make PostgreSQL listen
  58 +# on a non-local interface via the listen_addresses configuration parameter,
  59 +# or via the -i or -h command line switches.
  60 +#
  61 +
  62 +
  63 +# TYPE DATABASE USER CIDR-ADDRESS METHOD
  64 +
  65 +# "local" is for Unix domain socket connections only
  66 +local all all trust
  67 +
  68 +<% node['chef_server']['postgresql']['trust_auth_cidr_addresses'].each do |cidr| %>
  69 +host all all <%= cidr %> trust
  70 +<% end %>
  71 +
  72 +<% node['chef_server']['postgresql']['md5_auth_cidr_addresses'].each do |cidr| %>
  73 +host all all <%= cidr %> md5
  74 +<% end %>
  75 +
... ...
files/gitlab-cookbooks/gitlab/templates/default/postgresql-init.erb 0 → 100755
... ... @@ -0,0 +1,29 @@
  1 +#!/bin/sh
  2 +
  3 +#
  4 +# make postgresql stop/restart send sigint to terminate clients to postgresql
  5 +# immediately.
  6 +#
  7 +
  8 +RETVAL=0
  9 +
  10 +case "$1" in
  11 + stop|force-stop)
  12 + /opt/chef-server/embedded/bin/sv once postgresql
  13 + /opt/chef-server/embedded/bin/sv interrupt postgresql
  14 + RETVAL=$?
  15 + ;;
  16 + restart)
  17 + /opt/chef-server/embedded/bin/sv once postgresql
  18 + /opt/chef-server/embedded/bin/sv interrupt postgresql
  19 + sleep 5
  20 + /opt/chef-server/embedded/bin/sv start postgresql
  21 + RETVAL=$?
  22 + ;;
  23 + *)
  24 + /opt/chef-server/embedded/bin/sv $1 postgresql
  25 + RETVAL=$?
  26 +esac
  27 +
  28 +exit $RETVAL
  29 +
... ...
files/gitlab-cookbooks/gitlab/templates/default/postgresql.conf.erb 0 → 100644
... ... @@ -0,0 +1,556 @@
  1 +# -----------------------------
  2 +# PostgreSQL configuration file
  3 +# -----------------------------
  4 +#
  5 +# This file consists of lines of the form:
  6 +#
  7 +# name = value
  8 +#
  9 +# (The "=" is optional.) Whitespace may be used. Comments are introduced with
  10 +# "#" anywhere on a line. The complete list of parameter names and allowed
  11 +# values can be found in the PostgreSQL documentation.
  12 +#
  13 +# The commented-out settings shown in this file represent the default values.
  14 +# Re-commenting a setting is NOT sufficient to revert it to the default value;
  15 +# you need to reload the server.
  16 +#
  17 +# This file is read on server startup and when the server receives a SIGHUP
  18 +# signal. If you edit the file on a running system, you have to SIGHUP the
  19 +# server for the changes to take effect, or use "pg_ctl reload". Some
  20 +# parameters, which are marked below, require a server shutdown and restart to
  21 +# take effect.
  22 +#
  23 +# Any parameter can also be given as a command-line option to the server, e.g.,
  24 +# "postgres -c log_connections=on". Some parameters can be changed at run time
  25 +# with the "SET" SQL command.
  26 +#
  27 +# Memory units: kB = kilobytes Time units: ms = milliseconds
  28 +# MB = megabytes s = seconds
  29 +# GB = gigabytes min = minutes
  30 +# h = hours
  31 +# d = days
  32 +
  33 +
  34 +#------------------------------------------------------------------------------
  35 +# FILE LOCATIONS
  36 +#------------------------------------------------------------------------------
  37 +
  38 +# The default values of these variables are driven from the -D command-line
  39 +# option or PGDATA environment variable, represented here as ConfigDir.
  40 +
  41 +#data_directory = 'ConfigDir' # use data in another directory
  42 + # (change requires restart)
  43 +#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
  44 + # (change requires restart)
  45 +#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
  46 + # (change requires restart)
  47 +
  48 +# If external_pid_file is not explicitly set, no extra PID file is written.
  49 +#external_pid_file = '(none)' # write an extra PID file
  50 + # (change requires restart)
  51 +
  52 +
  53 +#------------------------------------------------------------------------------
  54 +# CONNECTIONS AND AUTHENTICATION
  55 +#------------------------------------------------------------------------------
  56 +
  57 +# - Connection Settings -
  58 +
  59 +listen_addresses = '<%= node['chef_server']['postgresql']['listen_address'] %>' # what IP address(es) to listen on;
  60 + # comma-separated list of addresses;
  61 + # defaults to 'localhost', '*' = all
  62 + # (change requires restart)
  63 +port = <%= node['chef_server']['postgresql']['port'] %> # (change requires restart)
  64 +max_connections = <%= node['chef_server']['postgresql']['max_connections'] %> # (change requires restart)
  65 +# Note: Increasing max_connections costs ~400 bytes of shared memory per
  66 +# connection slot, plus lock space (see max_locks_per_transaction).
  67 +#superuser_reserved_connections = 3 # (change requires restart)
  68 +#unix_socket_directory = '' # (change requires restart)
  69 +#unix_socket_group = '' # (change requires restart)
  70 +#unix_socket_permissions = 0777 # begin with 0 to use octal notation
  71 + # (change requires restart)
  72 +#bonjour = off # advertise server via Bonjour
  73 + # (change requires restart)
  74 +#bonjour_name = '' # defaults to the computer name
  75 + # (change requires restart)
  76 +
  77 +# - Security and Authentication -
  78 +
  79 +#authentication_timeout = 1min # 1s-600s
  80 +#ssl = off # (change requires restart)
  81 +#ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH' # allowed SSL ciphers
  82 + # (change requires restart)
  83 +#ssl_renegotiation_limit = 512MB # amount of data between renegotiations
  84 +#password_encryption = on
  85 +#db_user_namespace = off
  86 +
  87 +# Kerberos and GSSAPI
  88 +#krb_server_keyfile = ''
  89 +#krb_srvname = 'postgres' # (Kerberos only)
  90 +#krb_caseins_users = off
  91 +
  92 +# - TCP Keepalives -
  93 +# see "man 7 tcp" for details
  94 +
  95 +#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
  96 + # 0 selects the system default
  97 +#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
  98 + # 0 selects the system default
  99 +#tcp_keepalives_count = 0 # TCP_KEEPCNT;
  100 + # 0 selects the system default
  101 +
  102 +
  103 +#------------------------------------------------------------------------------
  104 +# RESOURCE USAGE (except WAL)
  105 +#------------------------------------------------------------------------------
  106 +
  107 +# - Memory -
  108 +
  109 +shared_buffers = <%= node['chef_server']['postgresql']['shared_buffers'] %> # min 128kB
  110 + # (change requires restart)
  111 +#temp_buffers = 8MB # min 800kB
  112 +#max_prepared_transactions = 0 # zero disables the feature
  113 + # (change requires restart)
  114 +# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
  115 +# per transaction slot, plus lock space (see max_locks_per_transaction).
  116 +# It is not advisable to set max_prepared_transactions nonzero unless you
  117 +# actively intend to use prepared transactions.
  118 +work_mem = <%= node['chef_server']['postgresql']['work_mem'] %> # min 64kB
  119 +#maintenance_work_mem = 16MB # min 1MB
  120 +#max_stack_depth = 2MB # min 100kB
  121 +
  122 +# - Kernel Resource Usage -
  123 +
  124 +#max_files_per_process = 1000 # min 25
  125 + # (change requires restart)
  126 +#shared_preload_libraries = '' # (change requires restart)
  127 +
  128 +# - Cost-Based Vacuum Delay -
  129 +
  130 +#vacuum_cost_delay = 0ms # 0-100 milliseconds
  131 +#vacuum_cost_page_hit = 1 # 0-10000 credits
  132 +#vacuum_cost_page_miss = 10 # 0-10000 credits
  133 +#vacuum_cost_page_dirty = 20 # 0-10000 credits
  134 +#vacuum_cost_limit = 200 # 1-10000 credits
  135 +
  136 +# - Background Writer -
  137 +
  138 +#bgwriter_delay = 200ms # 10-10000ms between rounds
  139 +#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round
  140 +#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round
  141 +
  142 +# - Asynchronous Behavior -
  143 +
  144 +#effective_io_concurrency = 1 # 1-1000. 0 disables prefetching
  145 +
  146 +
  147 +#------------------------------------------------------------------------------
  148 +# WRITE AHEAD LOG
  149 +#------------------------------------------------------------------------------
  150 +
  151 +# - Settings -
  152 +
  153 +#wal_level = minimal # minimal, archive, or hot_standby
  154 + # (change requires restart)
  155 +#fsync = on # turns forced synchronization on or off
  156 +#synchronous_commit = on # synchronization level; on, off, or local
  157 +#wal_sync_method = fsync # the default is the first option
  158 + # supported by the operating system:
  159 + # open_datasync
  160 + # fdatasync (default on Linux)
  161 + # fsync
  162 + # fsync_writethrough
  163 + # open_sync
  164 +#full_page_writes = on # recover from partial page writes
  165 +#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
  166 + # (change requires restart)
  167 +#wal_writer_delay = 200ms # 1-10000 milliseconds
  168 +
  169 +#commit_delay = 0 # range 0-100000, in microseconds
  170 +#commit_siblings = 5 # range 1-1000
  171 +
  172 +# - Checkpoints -
  173 +
  174 +checkpoint_segments = <%= node['chef_server']['postgresql']['checkpoint_segments'] %> # in logfile segments, min 1, 16MB each, default 3
  175 +checkpoint_timeout = <%= node['chef_server']['postgresql']['checkpoint_timeout'] %> # range 30s-1h, default 5min
  176 +checkpoint_completion_target = <%= node['chef_server']['postgresql']['checkpoint_completion_target'] %> # checkpoint target duration, 0.0 - 1.0, default 0.5
  177 +checkpoint_warning = <%= node['chef_server']['postgresql']['checkpoint_warning'] %> # 0 disables, default 30s
  178 +
  179 +# - Archiving -
  180 +
  181 +#archive_mode = off # allows archiving to be done
  182 + # (change requires restart)
  183 +#archive_command = '' # command to use to archive a logfile segment
  184 +#archive_timeout = 0 # force a logfile segment switch after this
  185 + # number of seconds; 0 disables
  186 +
  187 +
  188 +#------------------------------------------------------------------------------
  189 +# REPLICATION
  190 +#------------------------------------------------------------------------------
  191 +
  192 +# - Master Server -
  193 +
  194 +# These settings are ignored on a standby server
  195 +
  196 +#max_wal_senders = 0 # max number of walsender processes
  197 + # (change requires restart)
  198 +#wal_sender_delay = 1s # walsender cycle time, 1-10000 milliseconds
  199 +#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
  200 +#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
  201 +#replication_timeout = 60s # in milliseconds; 0 disables
  202 +#synchronous_standby_names = '' # standby servers that provide sync rep
  203 + # comma-separated list of application_name
  204 + # from standby(s); '*' = all
  205 +
  206 +# - Standby Servers -
  207 +
  208 +# These settings are ignored on a master server
  209 +
  210 +#hot_standby = off # "on" allows queries during recovery
  211 + # (change requires restart)
  212 +#max_standby_archive_delay = 30s # max delay before canceling queries
  213 + # when reading WAL from archive;
  214 + # -1 allows indefinite delay
  215 +#max_standby_streaming_delay = 30s # max delay before canceling queries
  216 + # when reading streaming WAL;
  217 + # -1 allows indefinite delay
  218 +#wal_receiver_status_interval = 10s # send replies at least this often
  219 + # 0 disables
  220 +#hot_standby_feedback = off # send info from standby to prevent
  221 + # query conflicts
  222 +
  223 +
  224 +#------------------------------------------------------------------------------
  225 +# QUERY TUNING
  226 +#------------------------------------------------------------------------------
  227 +
  228 +# - Planner Method Configuration -
  229 +
  230 +#enable_bitmapscan = on
  231 +#enable_hashagg = on
  232 +#enable_hashjoin = on
  233 +#enable_indexscan = on
  234 +#enable_material = on
  235 +#enable_mergejoin = on
  236 +#enable_nestloop = on
  237 +#enable_seqscan = on
  238 +#enable_sort = on
  239 +#enable_tidscan = on
  240 +
  241 +# - Planner Cost Constants -
  242 +
  243 +#seq_page_cost = 1.0 # measured on an arbitrary scale
  244 +#random_page_cost = 4.0 # same scale as above
  245 +#cpu_tuple_cost = 0.01 # same scale as above
  246 +#cpu_index_tuple_cost = 0.005 # same scale as above
  247 +#cpu_operator_cost = 0.0025 # same scale as above
  248 +effective_cache_size = <%= node['chef_server']['postgresql']['effective_cache_size'] %> # Default 128MB
  249 +
  250 +# - Genetic Query Optimizer -
  251 +
  252 +#geqo = on
  253 +#geqo_threshold = 12
  254 +#geqo_effort = 5 # range 1-10
  255 +#geqo_pool_size = 0 # selects default based on effort
  256 +#geqo_generations = 0 # selects default based on effort
  257 +#geqo_selection_bias = 2.0 # range 1.5-2.0
  258 +#geqo_seed = 0.0 # range 0.0-1.0
  259 +
  260 +# - Other Planner Options -
  261 +
  262 +#default_statistics_target = 100 # range 1-10000
  263 +#constraint_exclusion = partition # on, off, or partition
  264 +#cursor_tuple_fraction = 0.1 # range 0.0-1.0
  265 +#from_collapse_limit = 8
  266 +#join_collapse_limit = 8 # 1 disables collapsing of explicit
  267 + # JOIN clauses
  268 +
  269 +
  270 +#------------------------------------------------------------------------------
  271 +# ERROR REPORTING AND LOGGING
  272 +#------------------------------------------------------------------------------
  273 +
  274 +# - Where to Log -
  275 +
  276 +#log_destination = 'stderr' # Valid values are combinations of
  277 + # stderr, csvlog, syslog, and eventlog,
  278 + # depending on platform. csvlog
  279 + # requires logging_collector to be on.
  280 +
  281 +# This is used when logging to stderr:
  282 +#logging_collector = off # Enable capturing of stderr and csvlog
  283 + # into log files. Required to be on for
  284 + # csvlogs.
  285 + # (change requires restart)
  286 +
  287 +# These are only used if logging_collector is on:
  288 +#log_directory = 'pg_log' # directory where log files are written,
  289 + # can be absolute or relative to PGDATA
  290 +#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
  291 + # can include strftime() escapes
  292 +#log_file_mode = 0600 # creation mode for log files,
  293 + # begin with 0 to use octal notation
  294 +#log_truncate_on_rotation = off # If on, an existing log file with the
  295 + # same name as the new log file will be
  296 + # truncated rather than appended to.
  297 + # But such truncation only occurs on
  298 + # time-driven rotation, not on restarts
  299 + # or size-driven rotation. Default is
  300 + # off, meaning append to existing files
  301 + # in all cases.
  302 +#log_rotation_age = 1d # Automatic rotation of logfiles will
  303 + # happen after that time. 0 disables.
  304 +#log_rotation_size = 10MB # Automatic rotation of logfiles will
  305 + # happen after that much log output.
  306 + # 0 disables.
  307 +
  308 +# These are relevant when logging to syslog:
  309 +#syslog_facility = 'LOCAL0'
  310 +#syslog_ident = 'postgres'
  311 +
  312 +#silent_mode = off # Run server silently.
  313 + # DO NOT USE without syslog or
  314 + # logging_collector
  315 + # (change requires restart)
  316 +
  317 +
  318 +# - When to Log -
  319 +
  320 +#client_min_messages = notice # values in order of decreasing detail:
  321 + # debug5
  322 + # debug4
  323 + # debug3
  324 + # debug2
  325 + # debug1
  326 + # log
  327 + # notice
  328 + # warning
  329 + # error
  330 +
  331 +#log_min_messages = warning # values in order of decreasing detail:
  332 + # debug5
  333 + # debug4
  334 + # debug3
  335 + # debug2
  336 + # debug1
  337 + # info
  338 + # notice
  339 + # warning
  340 + # error
  341 + # log
  342 + # fatal
  343 + # panic
  344 +
  345 +#log_min_error_statement = error # values in order of decreasing detail:
  346 + # debug5
  347 + # debug4
  348 + # debug3
  349 + # debug2
  350 + # debug1
  351 + # info
  352 + # notice
  353 + # warning
  354 + # error
  355 + # log
  356 + # fatal
  357 + # panic (effectively off)
  358 +
  359 +#log_min_duration_statement = -1 # -1 is disabled, 0 logs all statements
  360 + # and their durations, > 0 logs only
  361 + # statements running at least this number
  362 + # of milliseconds
  363 +
  364 +
  365 +# - What to Log -
  366 +
  367 +#debug_print_parse = off
  368 +#debug_print_rewritten = off
  369 +#debug_print_plan = off
  370 +#debug_pretty_print = on
  371 +#log_checkpoints = off
  372 +#log_connections = off
  373 +#log_disconnections = off
  374 +#log_duration = off
  375 +#log_error_verbosity = default # terse, default, or verbose messages
  376 +#log_hostname = off
  377 +#log_line_prefix = '' # special values:
  378 + # %a = application name
  379 + # %u = user name
  380 + # %d = database name
  381 + # %r = remote host and port
  382 + # %h = remote host
  383 + # %p = process ID
  384 + # %t = timestamp without milliseconds
  385 + # %m = timestamp with milliseconds
  386 + # %i = command tag
  387 + # %e = SQL state
  388 + # %c = session ID
  389 + # %l = session line number
  390 + # %s = session start timestamp
  391 + # %v = virtual transaction ID
  392 + # %x = transaction ID (0 if none)
  393 + # %q = stop here in non-session
  394 + # processes
  395 + # %% = '%'
  396 + # e.g. '<%u%%%d> '
  397 +#log_lock_waits = off # log lock waits >= deadlock_timeout
  398 +#log_statement = 'none' # none, ddl, mod, all
  399 +#log_temp_files = -1 # log temporary files equal or larger
  400 + # than the specified size in kilobytes;
  401 + # -1 disables, 0 logs all temp files
  402 +#log_timezone = '(defaults to server environment setting)'
  403 +
  404 +
  405 +#------------------------------------------------------------------------------
  406 +# RUNTIME STATISTICS
  407 +#------------------------------------------------------------------------------
  408 +
  409 +# - Query/Index Statistics Collector -
  410 +
  411 +#track_activities = on
  412 +#track_counts = on
  413 +#track_functions = none # none, pl, all
  414 +#track_activity_query_size = 1024 # (change requires restart)
  415 +#update_process_title = on
  416 +#stats_temp_directory = 'pg_stat_tmp'
  417 +
  418 +
  419 +# - Statistics Monitoring -
  420 +
  421 +#log_parser_stats = off
  422 +#log_planner_stats = off
  423 +#log_executor_stats = off
  424 +#log_statement_stats = off
  425 +
  426 +
  427 +#------------------------------------------------------------------------------
  428 +# AUTOVACUUM PARAMETERS
  429 +#------------------------------------------------------------------------------
  430 +
  431 +#autovacuum = on # Enable autovacuum subprocess? 'on'
  432 + # requires track_counts to also be on.
  433 +#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
  434 + # their durations, > 0 logs only
  435 + # actions running at least this number
  436 + # of milliseconds.
  437 +#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
  438 + # (change requires restart)
  439 +#autovacuum_naptime = 1min # time between autovacuum runs
  440 +#autovacuum_vacuum_threshold = 50 # min number of row updates before
  441 + # vacuum
  442 +#autovacuum_analyze_threshold = 50 # min number of row updates before
  443 + # analyze
  444 +#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
  445 +#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
  446 +#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
  447 + # (change requires restart)
  448 +#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for
  449 + # autovacuum, in milliseconds;
  450 + # -1 means use vacuum_cost_delay
  451 +#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
  452 + # autovacuum, -1 means use
  453 + # vacuum_cost_limit
  454 +
  455 +
  456 +#------------------------------------------------------------------------------
  457 +# CLIENT CONNECTION DEFAULTS
  458 +#------------------------------------------------------------------------------
  459 +
  460 +# - Statement Behavior -
  461 +
  462 +#search_path = '"$user",public' # schema names
  463 +#default_tablespace = '' # a tablespace name, '' uses the default
  464 +#temp_tablespaces = '' # a list of tablespace names, '' uses
  465 + # only default tablespace
  466 +#check_function_bodies = on
  467 +#default_transaction_isolation = 'read committed'
  468 +#default_transaction_read_only = off
  469 +#default_transaction_deferrable = off
  470 +#session_replication_role = 'origin'
  471 +#statement_timeout = 0 # in milliseconds, 0 is disabled
  472 +#vacuum_freeze_min_age = 50000000
  473 +#vacuum_freeze_table_age = 150000000
  474 +#bytea_output = 'hex' # hex, escape
  475 +#xmlbinary = 'base64'
  476 +#xmloption = 'content'
  477 +
  478 +# - Locale and Formatting -
  479 +
  480 +datestyle = 'iso, mdy'
  481 +#intervalstyle = 'postgres'
  482 +#timezone = '(defaults to server environment setting)'
  483 +#timezone_abbreviations = 'Default' # Select the set of available time zone
  484 + # abbreviations. Currently, there are
  485 + # Default
  486 + # Australia
  487 + # India
  488 + # You can create your own file in
  489 + # share/timezonesets/.
  490 +#extra_float_digits = 0 # min -15, max 3
  491 +#client_encoding = sql_ascii # actually, defaults to database
  492 + # encoding
  493 +
  494 +# These settings are initialized by initdb, but they can be changed.
  495 +lc_messages = 'C' # locale for system error message
  496 + # strings
  497 +lc_monetary = 'C' # locale for monetary formatting
  498 +lc_numeric = 'C' # locale for number formatting
  499 +lc_time = 'C' # locale for time formatting
  500 +
  501 +# default configuration for text search
  502 +default_text_search_config = 'pg_catalog.english'
  503 +
  504 +# - Other Defaults -
  505 +
  506 +#dynamic_library_path = '$libdir'
  507 +#local_preload_libraries = ''
  508 +
  509 +
  510 +#------------------------------------------------------------------------------
  511 +# LOCK MANAGEMENT
  512 +#------------------------------------------------------------------------------
  513 +
  514 +#deadlock_timeout = 1s
  515 +#max_locks_per_transaction = 64 # min 10
  516 + # (change requires restart)
  517 +# Note: Each lock table slot uses ~270 bytes of shared memory, and there are
  518 +# max_locks_per_transaction * (max_connections + max_prepared_transactions)
  519 +# lock table slots.
  520 +#max_pred_locks_per_transaction = 64 # min 10
  521 + # (change requires restart)
  522 +
  523 +#------------------------------------------------------------------------------
  524 +# VERSION/PLATFORM COMPATIBILITY
  525 +#------------------------------------------------------------------------------
  526 +
  527 +# - Previous PostgreSQL Versions -
  528 +
  529 +#array_nulls = on
  530 +#backslash_quote = safe_encoding # on, off, or safe_encoding
  531 +#default_with_oids = off
  532 +#escape_string_warning = on
  533 +#lo_compat_privileges = off
  534 +#quote_all_identifiers = off
  535 +#sql_inheritance = on
  536 +#standard_conforming_strings = on
  537 +#synchronize_seqscans = on
  538 +
  539 +# - Other Platforms and Clients -
  540 +
  541 +#transform_null_equals = off
  542 +
  543 +
  544 +#------------------------------------------------------------------------------
  545 +# ERROR HANDLING
  546 +#------------------------------------------------------------------------------
  547 +
  548 +#exit_on_error = off # terminate session on any error?
  549 +#restart_after_crash = on # reinitialize after backend crash?
  550 +
  551 +
  552 +#------------------------------------------------------------------------------
  553 +# CUSTOMIZED OPTIONS
  554 +#------------------------------------------------------------------------------
  555 +
  556 +#custom_variable_classes = '' # list of custom variable class names
... ...
files/gitlab-cookbooks/gitlab/templates/default/sv-postgresql-control-t.erb 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +#!/bin/sh
  2 +echo "received TERM from runit, sending INT instead to force quit connections"
  3 +/opt/chef-server/embedded/bin/sv interrupt postgresql
... ...
files/gitlab-cookbooks/gitlab/templates/default/sv-postgresql-log-run.erb 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +#!/bin/sh
  2 +exec svlogd -tt <%= @options[:log_directory] %>
... ...
files/gitlab-cookbooks/gitlab/templates/default/sv-postgresql-run.erb 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +#!/bin/sh
  2 +exec 2>&1
  3 +exec chpst -P -U <%= node['chef_server']['postgresql']['username'] %> -u <%= node['chef_server']['postgresql']['username'] %> /opt/chef-server/embedded/bin/postgres -D <%= File.join(node['chef_server']['postgresql']['dir'], "data") %>
  4 +
... ...