From 3dca84b734230247cd527e8b800806211b1c2b07 Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Mon, 22 Apr 2013 11:40:10 -0700 Subject: [PATCH 1/6] Update ceph.conf template for RGW Signed-off-by: Alexandre Marangone --- recipes/conf.rb | 8 +++++++- templates/default/ceph.conf.erb | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/recipes/conf.rb b/recipes/conf.rb index 582ab5b..6480611 100644 --- a/recipes/conf.rb +++ b/recipes/conf.rb @@ -3,10 +3,16 @@ raise "mon_initial_members must be set in config" if node["ceph"]["config"]['mon mon_addresses = get_mon_addresses() +is_rgw = false +if node['roles'].include? 'ceph-radosgw' + is_rgw = true +end + template '/etc/ceph/ceph.conf' do source 'ceph.conf.erb' variables( - :mon_addresses => mon_addresses + :mon_addresses => mon_addresses, + :is_rgw => is_rgw ) mode '0644' end diff --git a/templates/default/ceph.conf.erb b/templates/default/ceph.conf.erb index 5422ea3..cf63ce3 100644 --- a/templates/default/ceph.conf.erb +++ b/templates/default/ceph.conf.erb @@ -29,6 +29,19 @@ <% end -%> <% end -%> +<% if (@is_rgw) -%> +[client.radosgw.<%= node['hostname'] %>] + host = <%= node['hostname'] %> + rgw socket path = /var/run/ceph/radosgw.<%= node['hostname'] %> + keyring = /etc/ceph/ceph.client.radosgw.<%= node['hostname'] %>.keyring + log file = /var/log/ceph/radosgw.log +<% if (! node['ceph']['config']['rgw'].nil?) -%> + <% node['ceph']['config']['rgw'].each do |k, v| %> + <%= k %> = <%= v %> + <% end %> +<% end -%> +<% end -%> + <% node['ceph']['config-sections'].each do |name, sect| %> [<%= name %>] <% sect.each do |k, v| %> From 31694c3d90ce7418118a45ea5dd07cc3860ba297 Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Mon, 22 Apr 2013 14:16:06 -0700 Subject: [PATCH 2/6] Handle different package names for radosgw Signed-off-by: Alexandre Marangone --- recipes/radosgw.rb | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/recipes/radosgw.rb b/recipes/radosgw.rb index 2c17f31..97a108c 100644 --- a/recipes/radosgw.rb +++ b/recipes/radosgw.rb @@ -17,15 +17,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -packages = %w{ - radosgw -} - -if node['ceph']['install_debug'] - packages_dbg = %w{ - radosgw-dbg +case node['platform_family'] +when "debian" + packages = %w{ + radosgw + } + + if node['ceph']['install_debug'] + packages_dbg = %w{ + radosgw-dbg + } + packages += packages_dbg + end +when "rhel","fedora","suse" + packages = %w{ + ceph-radosgw } - packages += packages_dbg end packages.each do |pkg| From 96a299831da302ac21eba522b18cfa3bc56d06a5 Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Mon, 22 Apr 2013 16:41:05 -0700 Subject: [PATCH 3/6] Support apache and mod_fastcgi forks for RGW Signed-off-by: Alexandre Marangone --- attributes/radosgw.rb | 1 + recipes/apt.rb | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/attributes/radosgw.rb b/attributes/radosgw.rb index bc7b68c..b85bfa2 100644 --- a/attributes/radosgw.rb +++ b/attributes/radosgw.rb @@ -21,3 +21,4 @@ default["ceph"]["radosgw"]["admin_email"] = "admin@example.com" default["ceph"]["radosgw"]["rgw_addr"] = "*:80" default["ceph"]["radosgw"]["rgw_port"] = false default["ceph"]["radosgw"]["webserver_companion"] = "apache2" #can be false +default['ceph']["radosgw"]['use_apache_fork'] = true diff --git a/recipes/apt.rb b/recipes/apt.rb index 0b3dabe..a66af31 100644 --- a/recipes/apt.rb +++ b/recipes/apt.rb @@ -27,3 +27,26 @@ when "dev" end end +if node['roles'].include?("ceph-radosgw") \ + && node["ceph"]["radosgw"]["webserver_companion"] == "apache2" \ + && node["ceph"]["radosgw"]["use_apache_fork"] == true + case node['lsb']['codename'] + when "precise","oneiric" + apt_repository "ceph-apache2" do + repo_name "ceph-apache2" + uri "http://gitbuilder.ceph.com/apache2-deb-#{node['lsb']['codename']}-x86_64-basic/ref/master" + distribution node['lsb']['codename'] + components ["main"] + key "https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc" + end + apt_repository "ceph-modfastcgi" do + repo_name "ceph-modfastcgi" + uri "http://gitbuilder.ceph.com/libapache-mod-fastcgi-deb-#{node['lsb']['codename']}-x86_64-basic/ref/master" + distribution node['lsb']['codename'] + components ["main"] + key "https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc" + end + else + Log.info("Ceph's Apache and Apache FastCGI forks not available for this distribution") + end +end From 58f5c83b82ee236d127b9a827411e225b9a494fb Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Mon, 22 Apr 2013 16:43:37 -0700 Subject: [PATCH 4/6] Update RGW apache conf Signed-off-by: Alexandre Marangone --- templates/default/rgw.conf.erb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/default/rgw.conf.erb b/templates/default/rgw.conf.erb index 3bd8e5d..10ab38f 100644 --- a/templates/default/rgw.conf.erb +++ b/templates/default/rgw.conf.erb @@ -1,7 +1,7 @@ <% if node['ceph']['radosgw']['rgw_port'] -%> -FastCgiExternalServer /var/www/dummyradosgw.fcgi -host 127.0.0.1:<%= node['ceph']['radosgw']['rgw_port'] %> +FastCgiExternalServer /var/www/s3gw.fcgi -host 127.0.0.1:<%= node['ceph']['radosgw']['rgw_port'] %> <% else -%> -FastCgiExternalServer /var/www/dummyradosgw.fcgi -socket /var/run/ceph/radosgw.client.radosgw.<%= node['hostname'] %> +FastCgiExternalServer /var/www/s3gw.fcgi -socket /var/run/ceph/radosgw.<%= node['hostname'] %> <% end -%> LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" proxy_combined @@ -13,7 +13,7 @@ LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{Use DocumentRoot /var/www/ RewriteEngine On - RewriteRule ^/(.*) /dummyradosgw.fcgi?params=$1&%{QUERY_STRING} [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] + RewriteRule ^/([a-zA-Z0-9-_.]*)([/]?.*) /s3gw.fcgi?page=$1¶ms=$2&%{QUERY_STRING} [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] @@ -28,7 +28,7 @@ LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{Use AllowEncodedSlashes On - ErrorLog /var/log/apache2/error.log - CustomLog /var/log/apache2/sssrgw-access.log proxy_combined + ErrorLog /var/log/<%= node['apache']['package'] %>/error.log + CustomLog /var/log/<%= node['apache']['package'] %>/rgw-access.log proxy_combined ServerSignature Off From 79566ef8ce5834ad5fefa525fefb720faab04e81 Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Mon, 22 Apr 2013 16:59:24 -0700 Subject: [PATCH 5/6] update radosgw recipe - Create /etc/ceph/ dir - Create/Update ceph.conf with radosgw client - Support upstart and init - Create radosgw client keyring Signed-off-by: Alexandre Marangone --- attributes/radosgw.rb | 6 ++++ recipes/radosgw.rb | 50 ++++++++++++++++++++++++++++----- templates/default/s3gw.fcgi.erb | 2 ++ 3 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 templates/default/s3gw.fcgi.erb diff --git a/attributes/radosgw.rb b/attributes/radosgw.rb index b85bfa2..6bc5278 100644 --- a/attributes/radosgw.rb +++ b/attributes/radosgw.rb @@ -22,3 +22,9 @@ default["ceph"]["radosgw"]["rgw_addr"] = "*:80" default["ceph"]["radosgw"]["rgw_port"] = false default["ceph"]["radosgw"]["webserver_companion"] = "apache2" #can be false default['ceph']["radosgw"]['use_apache_fork'] = true +case node['platform'] +when 'ubuntu' + default["ceph"]["radosgw"]["init_style"] = "upstart" +else + default["ceph"]["radosgw"]["init_style"] = "sysvinit" +end diff --git a/recipes/radosgw.rb b/recipes/radosgw.rb index 97a108c..7447364 100644 --- a/recipes/radosgw.rb +++ b/recipes/radosgw.rb @@ -41,12 +41,48 @@ packages.each do |pkg| end end -service "radosgw" do - service_name "radosgw" - supports :restart => true - action[:enable,:start] -end +include_recipe "ceph::conf" -if node["ceph"]["radosgw"]["webserver_companion"] - include_recipe "ceph::radosgw_#{node["ceph"]["radosgw"]["webserver_companion"]}" +unless File.exists?("/var/lib/ceph/radosgw/ceph-radosgw.#{node['hostname']}/done") + if node["ceph"]["radosgw"]["webserver_companion"] + include_recipe "ceph::radosgw_#{node["ceph"]["radosgw"]["webserver_companion"]}" + end + + directory "/etc/ceph" do + owner "root" + group "root" + mode "0644" + action :create + end + + ruby_block "create rados gateway client key" do + block do + keyring = %x[ ceph auth get-or-create client.radosgw.#{node['hostname']} osd 'allow rwx' mon 'allow r' --name mon. --key='#{node["ceph"]["monitor-secret"]}' ] + keyfile = File.new("/etc/ceph/ceph.client.radosgw.#{node['hostname']}.keyring", "w") + keyfile.puts(keyring) + keyfile.close + end + end + + file "/var/lib/ceph/radosgw/ceph-radosgw.#{node['hostname']}/done" do + action :create + end + + service "radosgw" do + case node["ceph"]["radosgw"]["init_style"] + when "upstart" + service_name "radosgw-all-starter" + provider Chef::Provider::Service::Upstart + else + if node['platform'] == "debian" + service_name "radosgw" + else + service_name "ceph-radosgw" + end + end + supports :restart => true + action [ :enable, :start ] + end +else + Log.info("Rados Gateway already deployed") end diff --git a/templates/default/s3gw.fcgi.erb b/templates/default/s3gw.fcgi.erb new file mode 100644 index 0000000..c6b684f --- /dev/null +++ b/templates/default/s3gw.fcgi.erb @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n <%= @ceph_rgw_client %> From de36e7824a2d5981cea8ff810f9d497a39416d2d Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Tue, 23 Apr 2013 12:13:21 -0700 Subject: [PATCH 6/6] Update radosgw_apache2 recipe - Multi distro support (CentOS/ubuntu tested) - apache2::mod_fastcgi only supports Debian/Ubuntu, change it to an apache_module - Restart apache once new configuration is applied - Add fastcgi script template Signed-off-by: Alexandre Marangone --- recipes/radosgw_apache2.rb | 69 +++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/recipes/radosgw_apache2.rb b/recipes/radosgw_apache2.rb index c6c23a3..080c377 100644 --- a/recipes/radosgw_apache2.rb +++ b/recipes/radosgw_apache2.rb @@ -17,8 +17,61 @@ # See the License for the specific language governing permissions and # limitations under the License. +case node['platform_family'] +when "debian","suse" + packages = %w{ + apache2 + libapache2-mod-fastcgi + } +when "rhel","fedora" + packages = %w{ + httpd + mod_fastcgi + } +end + +packages.each do |pkg| + package pkg do + action :upgrade + end +end + +# For EL, delete the current fastcgi configuration +# and set the correct owners for dirs and logs +d_owner = d_group = "root" +if node['platform_family'] == "rhel" + file "#{node['apache']['dir']}/conf.d/fastcgi.conf" do + action :delete + backup false + end + d_owner = d_group = "apache" +end + +%W{ /var/run/ceph + /var/lib/ceph/radosgw/ceph-radosgw.#{node['hostname']} + /var/lib/apache2/ +}.each do |dir| + directory dir do + owner d_owner + group d_group + mode "0755" + recursive true + action :create + end +end + +file "/var/log/ceph/radosgw.log" do + owner d_owner + group d_group + mode "0644" + action :create +end + include_recipe "apache2" -include_recipe "apache2::mod_fastcgi" + +apache_module "fastcgi" do + conf true +end apache_module "rewrite" do conf false @@ -30,3 +83,17 @@ web_app "rgw" do admin_email node['ceph']['radosgw']['admin_email'] ceph_rgw_addr node['ceph']['radosgw']['rgw_addr'] end + +service "apache2" do + action :restart +end + +template "/var/www/s3gw.fcgi" do + source "s3gw.fcgi.erb" + owner "root" + group "root" + mode "0755" + variables( + :ceph_rgw_client => "client.radosgw.#{node['hostname']}" + ) +end