from-scratch 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Berksfile.lock +11 -0
- data/chefignore +1 -0
- data/cookbooks/apt/CHANGELOG.md +248 -0
- data/cookbooks/apt/README.md +294 -0
- data/cookbooks/apt/attributes/default.rb +51 -0
- data/cookbooks/apt/files/default/15update-stamp +1 -0
- data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
- data/cookbooks/apt/libraries/helpers.rb +61 -0
- data/cookbooks/apt/libraries/matchers.rb +17 -0
- data/cookbooks/apt/libraries/network.rb +31 -0
- data/cookbooks/apt/metadata.json +1 -0
- data/cookbooks/apt/providers/preference.rb +84 -0
- data/cookbooks/apt/providers/repository.rb +246 -0
- data/cookbooks/apt/recipes/cacher-client.rb +83 -0
- data/cookbooks/apt/recipes/cacher-ng.rb +43 -0
- data/cookbooks/apt/recipes/default.rb +112 -0
- data/cookbooks/apt/recipes/unattended-upgrades.rb +47 -0
- data/cookbooks/apt/resources/preference.rb +37 -0
- data/cookbooks/apt/resources/repository.rb +60 -0
- data/cookbooks/apt/templates/debian-6.0/acng.conf.erb +173 -0
- data/cookbooks/apt/templates/default/01proxy.erb +9 -0
- data/cookbooks/apt/templates/default/10recommends.erb +3 -0
- data/cookbooks/apt/templates/default/20auto-upgrades.erb +2 -0
- data/cookbooks/apt/templates/default/50unattended-upgrades.erb +68 -0
- data/cookbooks/apt/templates/default/acng.conf.erb +275 -0
- data/cookbooks/apt/templates/default/unattended-upgrades.seed.erb +1 -0
- data/cookbooks/apt/templates/ubuntu-10.04/acng.conf.erb +269 -0
- data/cookbooks/build-essential/CHANGELOG.md +136 -0
- data/cookbooks/build-essential/README.md +108 -0
- data/cookbooks/build-essential/attributes/default.rb +20 -0
- data/cookbooks/build-essential/libraries/matchers.rb +5 -0
- data/cookbooks/build-essential/libraries/timing.rb +124 -0
- data/cookbooks/build-essential/libraries/xcode_command_line_tools.rb +210 -0
- data/cookbooks/build-essential/metadata.json +1 -0
- data/cookbooks/build-essential/recipes/_debian.rb +28 -0
- data/cookbooks/build-essential/recipes/_fedora.rb +32 -0
- data/cookbooks/build-essential/recipes/_freebsd.rb +24 -0
- data/cookbooks/build-essential/recipes/_mac_os_x.rb +22 -0
- data/cookbooks/build-essential/recipes/_omnios.rb +33 -0
- data/cookbooks/build-essential/recipes/_rhel.rb +36 -0
- data/cookbooks/build-essential/recipes/_smartos.rb +27 -0
- data/cookbooks/build-essential/recipes/_solaris2.rb +48 -0
- data/cookbooks/build-essential/recipes/_suse.rb +29 -0
- data/cookbooks/build-essential/recipes/default.rb +29 -0
- data/cookbooks/chef-sugar/CHANGELOG.md +159 -0
- data/cookbooks/chef-sugar/README.md +464 -0
- data/cookbooks/chef-sugar/metadata.json +1 -0
- data/cookbooks/chef-sugar/recipes/default.rb +34 -0
- data/cookbooks/openssl/CHANGELOG.md +30 -0
- data/cookbooks/openssl/README.md +115 -0
- data/cookbooks/openssl/attributes/default.rb +21 -0
- data/cookbooks/openssl/libraries/secure_password.rb +37 -0
- data/cookbooks/openssl/metadata.json +31 -0
- data/cookbooks/openssl/providers/x509.rb +94 -0
- data/cookbooks/openssl/recipes/default.rb +18 -0
- data/cookbooks/openssl/recipes/upgrade.rb +39 -0
- data/cookbooks/openssl/resources/x509.rb +16 -0
- data/cookbooks/postgresql/CHANGELOG.md +220 -0
- data/cookbooks/postgresql/README.md +464 -0
- data/cookbooks/postgresql/attributes/default.rb +549 -0
- data/cookbooks/postgresql/files/default/tests/minitest/apt_pgdg_postgresql_test.rb +39 -0
- data/cookbooks/postgresql/files/default/tests/minitest/default_test.rb +27 -0
- data/cookbooks/postgresql/files/default/tests/minitest/ruby_test.rb +28 -0
- data/cookbooks/postgresql/files/default/tests/minitest/server_test.rb +43 -0
- data/cookbooks/postgresql/files/default/tests/minitest/support/helpers.rb +29 -0
- data/cookbooks/postgresql/libraries/default.rb +377 -0
- data/cookbooks/postgresql/metadata.json +56 -0
- data/cookbooks/postgresql/recipes/apt_pgdg_postgresql.rb +18 -0
- data/cookbooks/postgresql/recipes/client.rb +32 -0
- data/cookbooks/postgresql/recipes/config_initdb.rb +148 -0
- data/cookbooks/postgresql/recipes/config_pgtune.rb +284 -0
- data/cookbooks/postgresql/recipes/contrib.rb +44 -0
- data/cookbooks/postgresql/recipes/default.rb +18 -0
- data/cookbooks/postgresql/recipes/ruby.rb +117 -0
- data/cookbooks/postgresql/recipes/server.rb +89 -0
- data/cookbooks/postgresql/recipes/server_conf.rb +34 -0
- data/cookbooks/postgresql/recipes/server_debian.rb +38 -0
- data/cookbooks/postgresql/recipes/server_redhat.rb +100 -0
- data/cookbooks/postgresql/recipes/yum_pgdg_postgresql.rb +45 -0
- data/cookbooks/postgresql/templates/default/pg_hba.conf.erb +35 -0
- data/cookbooks/postgresql/templates/default/pgsql.sysconfig.erb +4 -0
- data/cookbooks/postgresql/templates/default/postgresql.conf.erb +21 -0
- data/cookbooks/scratchify/.chef/knife.rb +2 -5
- data/cookbooks/scratchify/Berksfile +2 -1
- data/cookbooks/scratchify/Berksfile.lock +11 -0
- data/cookbooks/scratchify/README.md +34 -17
- data/cookbooks/scratchify/bin/scratchify +1 -1
- data/cookbooks/scratchify/chefignore +1 -0
- data/cookbooks/scratchify/from-scratch.gemspec +2 -5
- data/cookbooks/scratchify/lib/from-scratch.rb +25 -0
- data/cookbooks/scratchify/lib/{from/scratch → from-scratch}/version.rb +1 -1
- data/cookbooks/scratchify/metadata.json +2 -1
- data/cookbooks/scratchify/templates/node.json.erb +34 -0
- data/cookbooks/scratchify/templates/user.json.erb +6 -0
- data/lib/from-scratch.rb +2 -2
- data/lib/from-scratch/version.rb +1 -1
- data/templates/node.json.erb +6 -3
- metadata +85 -10
- data/cookbooks/scratchify/bin/console +0 -14
- data/cookbooks/scratchify/bin/setup +0 -7
- data/cookbooks/scratchify/data_bags/users/deploy.json +0 -6
- data/cookbooks/scratchify/environments/.gitkeep +0 -0
- data/cookbooks/scratchify/lib/from/scratch.rb +0 -31
- data/cookbooks/scratchify/lib/from/scratch/interviewer.rb +0 -35
- data/cookbooks/scratchify/nodes/normfood.ru.json +0 -75
- data/cookbooks/scratchify/roles/.gitkeep +0 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: contrib
|
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
|
+
db_name = node['postgresql']['database_name']
|
19
|
+
|
20
|
+
# Install the PostgreSQL contrib package(s) from the distribution,
|
21
|
+
# as specified by the node attributes.
|
22
|
+
node['postgresql']['contrib']['packages'].each do |pg_pack|
|
23
|
+
|
24
|
+
package pg_pack
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
include_recipe "postgresql::server"
|
29
|
+
|
30
|
+
# Install PostgreSQL contrib extentions into the database, as specified by the
|
31
|
+
# node attribute node['postgresql']['database_name'].
|
32
|
+
if (node['postgresql']['contrib'].attribute?('extensions'))
|
33
|
+
node['postgresql']['contrib']['extensions'].each do |pg_ext|
|
34
|
+
bash "install-#{pg_ext}-extension" do
|
35
|
+
user 'postgres'
|
36
|
+
code <<-EOH
|
37
|
+
echo 'CREATE EXTENSION IF NOT EXISTS "#{pg_ext}";' | psql -d "#{db_name}"
|
38
|
+
EOH
|
39
|
+
action :run
|
40
|
+
::Chef::Resource.send(:include, Opscode::PostgresqlHelpers)
|
41
|
+
not_if {extension_installed?(pg_ext)}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: default
|
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
|
+
include_recipe "postgresql::client"
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: ruby
|
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
|
+
# Load the pgdgrepo_rpm_info method from libraries/default.rb
|
19
|
+
::Chef::Recipe.send(:include, Opscode::PostgresqlHelpers)
|
20
|
+
|
21
|
+
begin
|
22
|
+
require 'pg'
|
23
|
+
rescue LoadError
|
24
|
+
|
25
|
+
if platform_family?('ubuntu', 'debian')
|
26
|
+
e = execute 'apt-get update' do
|
27
|
+
action :nothing
|
28
|
+
end
|
29
|
+
e.run_action(:run) unless ::File.exists?('/var/lib/apt/periodic/update-success-stamp')
|
30
|
+
end
|
31
|
+
|
32
|
+
node.set['build-essential']['compile_time'] = true
|
33
|
+
include_recipe "build-essential"
|
34
|
+
include_recipe "postgresql::client"
|
35
|
+
|
36
|
+
if node['postgresql']['enable_pgdg_yum']
|
37
|
+
repo_rpm_url, repo_rpm_filename, repo_rpm_package = pgdgrepo_rpm_info
|
38
|
+
include_recipe "postgresql::yum_pgdg_postgresql"
|
39
|
+
resources("remote_file[#{Chef::Config[:file_cache_path]}/#{repo_rpm_filename}]").run_action(:create)
|
40
|
+
resources("package[#{repo_rpm_package}]").run_action(:install)
|
41
|
+
ENV['PATH'] = "/usr/pgsql-#{node['postgresql']['version']}/bin:#{ENV['PATH']}"
|
42
|
+
end
|
43
|
+
|
44
|
+
if node['postgresql']['enable_pgdg_apt']
|
45
|
+
include_recipe "postgresql::apt_pgdg_postgresql"
|
46
|
+
resources("file[remove deprecated Pitti PPA apt repository]").run_action(:delete)
|
47
|
+
resources("apt_repository[apt.postgresql.org]").run_action(:add)
|
48
|
+
end
|
49
|
+
|
50
|
+
node['postgresql']['client']['packages'].each do |pg_pack|
|
51
|
+
resources("package[#{pg_pack}]").run_action(:install)
|
52
|
+
end
|
53
|
+
|
54
|
+
begin
|
55
|
+
chef_gem "pg"
|
56
|
+
rescue Gem::Installer::ExtensionBuildError, Mixlib::ShellOut::ShellCommandFailed => e
|
57
|
+
# Are we an omnibus install?
|
58
|
+
raise if RbConfig.ruby.scan(%r{(chef|opscode)}).empty?
|
59
|
+
# Still here, must be omnibus. Lets make this thing install!
|
60
|
+
Chef::Log.warn 'Failed to properly build pg gem. Forcing properly linking and retrying (omnibus fix)'
|
61
|
+
gem_dir = e.message.scan(%r{will remain installed in ([^ ]+)}).flatten.first
|
62
|
+
raise unless gem_dir
|
63
|
+
gem_name = File.basename(gem_dir)
|
64
|
+
ext_dir = File.join(gem_dir, 'ext')
|
65
|
+
gem_exec = File.join(File.dirname(RbConfig.ruby), 'gem')
|
66
|
+
new_content = <<-EOS
|
67
|
+
require 'rbconfig'
|
68
|
+
%w(
|
69
|
+
configure_args
|
70
|
+
LIBRUBYARG_SHARED
|
71
|
+
LIBRUBYARG_STATIC
|
72
|
+
LIBRUBYARG
|
73
|
+
LDFLAGS
|
74
|
+
).each do |key|
|
75
|
+
RbConfig::CONFIG[key].gsub!(/-Wl[^ ]+( ?\\/[^ ]+)?/, '')
|
76
|
+
RbConfig::MAKEFILE_CONFIG[key].gsub!(/-Wl[^ ]+( ?\\/[^ ]+)?/, '')
|
77
|
+
end
|
78
|
+
RbConfig::CONFIG['RPATHFLAG'] = ''
|
79
|
+
RbConfig::MAKEFILE_CONFIG['RPATHFLAG'] = ''
|
80
|
+
EOS
|
81
|
+
new_content << File.read(extconf_path = File.join(ext_dir, 'extconf.rb'))
|
82
|
+
File.open(extconf_path, 'w') do |file|
|
83
|
+
file.write(new_content)
|
84
|
+
end
|
85
|
+
|
86
|
+
lib_builder = execute 'generate pg gem Makefile' do
|
87
|
+
# [COOK-3490] pg gem install requires full path on RHEL
|
88
|
+
command "PATH=$PATH:/usr/pgsql-#{node['postgresql']['version']}/bin #{RbConfig.ruby} extconf.rb"
|
89
|
+
cwd ext_dir
|
90
|
+
action :nothing
|
91
|
+
end
|
92
|
+
lib_builder.run_action(:run)
|
93
|
+
|
94
|
+
lib_maker = execute 'make pg gem lib' do
|
95
|
+
command 'make'
|
96
|
+
cwd ext_dir
|
97
|
+
action :nothing
|
98
|
+
end
|
99
|
+
lib_maker.run_action(:run)
|
100
|
+
|
101
|
+
lib_installer = execute 'install pg gem lib' do
|
102
|
+
command 'make install'
|
103
|
+
cwd ext_dir
|
104
|
+
action :nothing
|
105
|
+
end
|
106
|
+
lib_installer.run_action(:run)
|
107
|
+
|
108
|
+
spec_installer = execute 'install pg spec' do
|
109
|
+
command "#{gem_exec} spec ./cache/#{gem_name}.gem --ruby > ./specifications/#{gem_name}.gemspec"
|
110
|
+
cwd File.join(gem_dir, '..', '..')
|
111
|
+
action :nothing
|
112
|
+
end
|
113
|
+
spec_installer.run_action(:run)
|
114
|
+
|
115
|
+
Chef::Log.warn 'Installation of pg gem successful!'
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: server
|
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
|
+
::Chef::Recipe.send(:include, Opscode::OpenSSL::Password)
|
19
|
+
|
20
|
+
include_recipe "postgresql::client"
|
21
|
+
|
22
|
+
# randomly generate postgres password, unless using solo - see README
|
23
|
+
if Chef::Config[:solo]
|
24
|
+
missing_attrs = %w{
|
25
|
+
postgres
|
26
|
+
}.select do |attr|
|
27
|
+
node['postgresql']['password'][attr].nil?
|
28
|
+
end.map { |attr| "node['postgresql']['password']['#{attr}']" }
|
29
|
+
|
30
|
+
if !missing_attrs.empty?
|
31
|
+
Chef::Log.fatal([
|
32
|
+
"You must set #{missing_attrs.join(', ')} in chef-solo mode.",
|
33
|
+
"For more information, see https://github.com/opscode-cookbooks/postgresql#chef-solo-note"
|
34
|
+
].join(' '))
|
35
|
+
raise
|
36
|
+
end
|
37
|
+
else
|
38
|
+
# TODO: The "secure_password" is randomly generated plain text, so it
|
39
|
+
# should be converted to a PostgreSQL specific "encrypted password" if
|
40
|
+
# it should actually install a password (as opposed to disable password
|
41
|
+
# login for user 'postgres'). However, a random password wouldn't be
|
42
|
+
# useful if it weren't saved as clear text in Chef Server for later
|
43
|
+
# retrieval.
|
44
|
+
unless node.key?('postgresql') && node['postgresql'].key?('password') && node['postgresql']['password'].key?('postgres')
|
45
|
+
node.set_unless['postgresql']['password']['postgres'] = secure_password
|
46
|
+
node.save
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Include the right "family" recipe for installing the server
|
51
|
+
# since they do things slightly differently.
|
52
|
+
case node['platform_family']
|
53
|
+
when "rhel", "fedora", "suse"
|
54
|
+
include_recipe "postgresql::server_redhat"
|
55
|
+
when "debian"
|
56
|
+
include_recipe "postgresql::server_debian"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Versions prior to 9.2 do not have a config file option to set the SSL
|
60
|
+
# key and cert path, and instead expect them to be in a specific location.
|
61
|
+
if node['postgresql']['version'].to_f < 9.2 && node['postgresql']['config'].attribute?('ssl_cert_file')
|
62
|
+
link ::File.join(node['postgresql']['config']['data_directory'], 'server.crt') do
|
63
|
+
to node['postgresql']['config']['ssl_cert_file']
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if node['postgresql']['version'].to_f < 9.2 && node['postgresql']['config'].attribute?('ssl_key_file')
|
68
|
+
link ::File.join(node['postgresql']['config']['data_directory'], 'server.key') do
|
69
|
+
to node['postgresql']['config']['ssl_key_file']
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# NOTE: Consider two facts before modifying "assign-postgres-password":
|
74
|
+
# (1) Passing the "ALTER ROLE ..." through the psql command only works
|
75
|
+
# if passwordless authorization was configured for local connections.
|
76
|
+
# For example, if pg_hba.conf has a "local all postgres ident" rule.
|
77
|
+
# (2) It is probably fruitless to optimize this with a not_if to avoid
|
78
|
+
# setting the same password. This chef recipe doesn't have access to
|
79
|
+
# the plain text password, and testing the encrypted (md5 digest)
|
80
|
+
# version is not straight-forward.
|
81
|
+
bash "assign-postgres-password" do
|
82
|
+
user 'postgres'
|
83
|
+
code <<-EOH
|
84
|
+
echo "ALTER ROLE postgres ENCRYPTED PASSWORD '#{node['postgresql']['password']['postgres']}';" | psql -p #{node['postgresql']['config']['port']}
|
85
|
+
EOH
|
86
|
+
action :run
|
87
|
+
not_if "ls #{node['postgresql']['config']['data_directory']}/recovery.conf"
|
88
|
+
only_if { node['postgresql']['assign_postgres_password'] }
|
89
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: server
|
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
|
+
change_notify = node['postgresql']['server']['config_change_notify']
|
19
|
+
|
20
|
+
template "#{node['postgresql']['dir']}/postgresql.conf" do
|
21
|
+
source "postgresql.conf.erb"
|
22
|
+
owner "postgres"
|
23
|
+
group "postgres"
|
24
|
+
mode 0600
|
25
|
+
notifies change_notify, 'service[postgresql]', :immediately
|
26
|
+
end
|
27
|
+
|
28
|
+
template "#{node['postgresql']['dir']}/pg_hba.conf" do
|
29
|
+
source "pg_hba.conf.erb"
|
30
|
+
owner "postgres"
|
31
|
+
group "postgres"
|
32
|
+
mode 00600
|
33
|
+
notifies change_notify, 'service[postgresql]', :immediately
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: server
|
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
|
+
include_recipe "postgresql::client"
|
19
|
+
|
20
|
+
node['postgresql']['server']['packages'].each do |pg_pack|
|
21
|
+
|
22
|
+
package pg_pack
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
include_recipe "postgresql::server_conf"
|
27
|
+
|
28
|
+
service "postgresql" do
|
29
|
+
service_name node['postgresql']['server']['service_name']
|
30
|
+
supports :restart => true, :status => true, :reload => true
|
31
|
+
action [:enable, :start]
|
32
|
+
end
|
33
|
+
|
34
|
+
execute 'Set locale and Create cluster' do
|
35
|
+
command 'export LC_ALL=C; /usr/bin/pg_createcluster --start ' + node['postgresql']['version'] + ' main'
|
36
|
+
action :run
|
37
|
+
not_if { ::File.directory?('/etc/postgresql/' + node['postgresql']['version'] + '/main') }
|
38
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#
|
2
|
+
# Cookbook Name:: postgresql
|
3
|
+
# Recipe:: server
|
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
|
+
include_recipe "postgresql::client"
|
19
|
+
|
20
|
+
svc_name = node['postgresql']['server']['service_name']
|
21
|
+
dir = node['postgresql']['dir']
|
22
|
+
initdb_locale = node['postgresql']['initdb_locale']
|
23
|
+
|
24
|
+
# Create a group and user like the package will.
|
25
|
+
# Otherwise the templates fail.
|
26
|
+
|
27
|
+
group "postgres" do
|
28
|
+
gid 26
|
29
|
+
end
|
30
|
+
|
31
|
+
user "postgres" do
|
32
|
+
shell "/bin/bash"
|
33
|
+
comment "PostgreSQL Server"
|
34
|
+
home "/var/lib/pgsql"
|
35
|
+
gid "postgres"
|
36
|
+
system true
|
37
|
+
uid 26
|
38
|
+
supports :manage_home => false
|
39
|
+
end
|
40
|
+
|
41
|
+
directory dir do
|
42
|
+
owner "postgres"
|
43
|
+
group "postgres"
|
44
|
+
recursive true
|
45
|
+
action :create
|
46
|
+
end
|
47
|
+
|
48
|
+
node['postgresql']['server']['packages'].each do |pg_pack|
|
49
|
+
|
50
|
+
package pg_pack
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
# Starting with Fedora 16, the pgsql sysconfig files are no longer used.
|
55
|
+
# The systemd unit file does not support 'initdb' or 'upgrade' actions.
|
56
|
+
# Use the postgresql-setup script instead.
|
57
|
+
|
58
|
+
unless platform_family?("fedora") and node['platform_version'].to_i >= 16
|
59
|
+
|
60
|
+
directory "/etc/sysconfig/pgsql" do
|
61
|
+
mode "0644"
|
62
|
+
recursive true
|
63
|
+
action :create
|
64
|
+
end
|
65
|
+
|
66
|
+
template "/etc/sysconfig/pgsql/#{svc_name}" do
|
67
|
+
source "pgsql.sysconfig.erb"
|
68
|
+
mode "0644"
|
69
|
+
notifies :restart, "service[postgresql]", :delayed
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
if platform_family?("fedora") and node['platform_version'].to_i >= 16
|
75
|
+
|
76
|
+
execute "postgresql-setup initdb #{svc_name}" do
|
77
|
+
not_if { ::FileTest.exist?(File.join(dir, "PG_VERSION")) }
|
78
|
+
end
|
79
|
+
|
80
|
+
elsif platform?("redhat") and node['platform_version'].to_i >= 7
|
81
|
+
|
82
|
+
execute "postgresql#{node['postgresql']['version'].split('.').join}-setup initdb #{svc_name}" do
|
83
|
+
not_if { ::FileTest.exist?(File.join(dir, "PG_VERSION")) }
|
84
|
+
end
|
85
|
+
|
86
|
+
else !platform_family?("suse")
|
87
|
+
|
88
|
+
execute "/sbin/service #{svc_name} initdb #{initdb_locale}" do
|
89
|
+
not_if { ::FileTest.exist?(File.join(dir, "PG_VERSION")) }
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
include_recipe "postgresql::server_conf"
|
95
|
+
|
96
|
+
service "postgresql" do
|
97
|
+
service_name svc_name
|
98
|
+
supports :restart => true, :status => true, :reload => true
|
99
|
+
action [:enable, :start]
|
100
|
+
end
|