diff --git a/chef/cookbooks/apache2/attributes/default.rb b/chef/cookbooks/apache2/attributes/default.rb
index e46a825..a2d031d 100644
--- a/chef/cookbooks/apache2/attributes/default.rb
+++ b/chef/cookbooks/apache2/attributes/default.rb
@@ -21,13 +21,18 @@ default['apache']['root_group'] = 'root'
default['apache']['version'] = '2.2'
if node['platform_family'] == 'rhel' && node['platform_version'].to_i > 6
- # mysql version is 5.6 on el7
+ # apache version is 2.4 on el7
+ default['apache']['version'] = '2.4'
+end
+
+if node['platform_family'] == 'debian' && node['platform_version'].to_i > 12
+ # apache version is 2.4 on ubuntu14.04
default['apache']['version'] = '2.4'
end
# Where the various parts of apache are
case node['platform']
-when 'redhat', 'centos', 'scientific', 'fedora', 'suse', 'amazon', 'oracle'
+when 'redhat', 'centos', 'scientific', 'fedora', 'amazon', 'oracle'
default['apache']['package'] = 'httpd'
default['apache']['perl_pkg'] = 'perl'
default['apache']['dir'] = '/etc/httpd'
@@ -49,6 +54,24 @@ when 'redhat', 'centos', 'scientific', 'fedora', 'suse', 'amazon', 'oracle'
default['apache']['lib_dir'] = node['kernel']['machine'] =~ /^i[36]86$/ ? '/usr/lib/httpd' : '/usr/lib64/httpd'
default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}/modules"
default['apache']['default_site_enabled'] = false
+when 'suse'
+ default['apache']['package'] = 'apache2'
+ default['apache']['perl_pkg'] = 'perl'
+ default['apache']['dir'] = '/etc/apache2'
+ default['apache']['log_dir'] = '/var/log/apache2'
+ default['apache']['error_log'] = 'error.log'
+ default['apache']['access_log'] = 'access.log'
+ default['apache']['user'] = 'wwwrun'
+ default['apache']['group'] = 'www'
+ default['apache']['binary'] = '/usr/sbin/httpd2'
+ default['apache']['docroot_dir'] = '/srv/www'
+ default['apache']['cgibin_dir'] = '/srv/www/cgi-bin'
+ default['apache']['icondir'] = '/usr/share/apache2/icons'
+ default['apache']['cache_dir'] = '/var/cache/apache2'
+ default['apache']['pid_file'] = '/var/run/httpd2.pid'
+ default['apache']['lib_dir'] = node['kernel']['machine'] =~ /^i[36]86$/ ? '/usr/lib/apache2' : '/usr/lib64/apache2'
+ default['apache']['libexecdir'] = "#{node['apache']['lib_dir']}"
+ default['apache']['default_site_enabled'] = false
when 'debian', 'ubuntu'
default['apache']['package'] = 'apache2'
default['apache']['perl_pkg'] = 'perl'
diff --git a/chef/cookbooks/apache2/recipes/default.rb b/chef/cookbooks/apache2/recipes/default.rb
index 694199b..d686a9f 100644
--- a/chef/cookbooks/apache2/recipes/default.rb
+++ b/chef/cookbooks/apache2/recipes/default.rb
@@ -23,13 +23,17 @@ end
service 'apache2' do
case node['platform_family']
- when 'rhel', 'fedora', 'suse'
+ when 'rhel', 'fedora'
service_name 'httpd'
# If restarted/reloaded too quickly httpd has a habit of failing.
# This may happen with multiple recipes notifying apache to restart - like
# during the initial bootstrap.
restart_command '/sbin/service httpd restart && sleep 1'
reload_command '/sbin/service httpd reload && sleep 1'
+ when 'suse'
+ service_name 'apache2'
+ restart_command '/sbin/service apache2 restart && sleep 1'
+ reload_command '/sbin/service apache2 reload && sleep 1'
when 'debian'
service_name 'apache2'
restart_command '/usr/sbin/invoke-rc.d apache2 restart && sleep 1'
@@ -70,12 +74,23 @@ if platform_family?('rhel', 'fedora', 'arch', 'suse', 'freebsd')
action :nothing
end
- %w[a2ensite a2dissite a2enmod a2dismod].each do |modscript|
- template "/usr/sbin/#{modscript}" do
- source "#{modscript}.erb"
- mode '0700'
- owner 'root'
- group node['apache']['root_group']
+ if platform_family?('suse')
+ %w[a2ensite a2dissite].each do |modscript|
+ template "/usr/sbin/#{modscript}" do
+ source "#{modscript}.erb"
+ mode '0700'
+ owner 'root'
+ group node['apache']['root_group']
+ end
+ end
+ else
+ %w[a2ensite a2dissite a2enmod a2dismod].each do |modscript|
+ template "/usr/sbin/#{modscript}" do
+ source "#{modscript}.erb"
+ mode '0700'
+ owner 'root'
+ group node['apache']['root_group']
+ end
end
end
@@ -146,13 +161,22 @@ template '/etc/sysconfig/httpd' do
only_if { platform_family?('rhel', 'fedora') }
end
+template '/etc/sysconfig/apache2' do
+ source 'etc-sysconfig-apache2.erb'
+ owner 'root'
+ group node['apache']['root_group']
+ mode '0644'
+ notifies :restart, 'service[apache2]'
+ only_if { platform_family?('suse') }
+end
+
template 'apache2.conf' do
case node['platform_family']
when 'rhel', 'fedora', 'arch'
path "#{node['apache']['dir']}/conf/httpd.conf"
when 'debian'
path "#{node['apache']['dir']}/apache2.conf"
- when 'freebsd'
+ when 'freebsd', 'suse'
path "#{node['apache']['dir']}/httpd.conf"
end
source 'apache2.conf.erb'
diff --git a/chef/cookbooks/apache2/recipes/mod_deflate.rb b/chef/cookbooks/apache2/recipes/mod_deflate.rb
index c876086..3d1d426 100644
--- a/chef/cookbooks/apache2/recipes/mod_deflate.rb
+++ b/chef/cookbooks/apache2/recipes/mod_deflate.rb
@@ -17,6 +17,8 @@
# limitations under the License.
#
-apache_module 'deflate' do
- conf true
+if platform_family?('rhel', 'fedora', 'debian')
+ apache_module 'deflate' do
+ conf true
+ end
end
diff --git a/chef/cookbooks/apache2/recipes/mod_jk.rb b/chef/cookbooks/apache2/recipes/mod_jk.rb
index 39f383b..0496e5d 100644
--- a/chef/cookbooks/apache2/recipes/mod_jk.rb
+++ b/chef/cookbooks/apache2/recipes/mod_jk.rb
@@ -20,8 +20,10 @@
package 'libapache2-mod-jk' do
case node['platform_family']
- when 'rhel', 'fedora', 'suse'
+ when 'rhel', 'fedora'
package_name 'mod_jk'
+ when 'suse'
+ package 'apache2-mod_jk'
else
package_name 'libapache2-mod-jk'
end
diff --git a/chef/cookbooks/apache2/recipes/mod_perl.rb b/chef/cookbooks/apache2/recipes/mod_perl.rb
index 23bad4a..4c15269 100644
--- a/chef/cookbooks/apache2/recipes/mod_perl.rb
+++ b/chef/cookbooks/apache2/recipes/mod_perl.rb
@@ -30,6 +30,12 @@ when 'rhel', 'fedora'
end
package 'perl-libapreq2'
+when 'suse'
+ package 'apache2-mod_perl' do
+ notifies :run, 'execute[generate-module-list]', :immediately
+ end
+
+ package 'apache2-prefork'
end
file "#{node['apache']['dir']}/conf.d/perl.conf" do
diff --git a/chef/cookbooks/apache2/recipes/mod_php5.rb b/chef/cookbooks/apache2/recipes/mod_php5.rb
index d5dee6d..976a9ce 100644
--- a/chef/cookbooks/apache2/recipes/mod_php5.rb
+++ b/chef/cookbooks/apache2/recipes/mod_php5.rb
@@ -20,6 +20,8 @@
case node['platform_family']
when 'debian'
package 'libapache2-mod-php5'
+when 'suse'
+ package 'apache2-mod_php53'
when 'arch'
package 'php-apache' do
notifies :run, 'execute[generate-module-list]', :immediately
diff --git a/chef/cookbooks/apache2/recipes/mod_python.rb b/chef/cookbooks/apache2/recipes/mod_python.rb
index 5f50485..68a49d4 100644
--- a/chef/cookbooks/apache2/recipes/mod_python.rb
+++ b/chef/cookbooks/apache2/recipes/mod_python.rb
@@ -24,6 +24,10 @@ when 'rhel', 'fedora'
package 'mod_python' do
notifies :run, 'execute[generate-module-list]', :immediately
end
+when 'suse'
+ package 'apache2-mod_python' do
+ notifies :run, 'execute[generate-module-list]', :immediately
+ end
end
file "#{node['apache']['dir']}/conf.d/python.conf" do
diff --git a/chef/cookbooks/apache2/recipes/mod_ssl.rb b/chef/cookbooks/apache2/recipes/mod_ssl.rb
index e21cb6d..38bce03 100644
--- a/chef/cookbooks/apache2/recipes/mod_ssl.rb
+++ b/chef/cookbooks/apache2/recipes/mod_ssl.rb
@@ -20,7 +20,7 @@ unless node['apache']['listen_ports'].include?('443')
node.set['apache']['listen_ports'] = node['apache']['listen_ports'] + ['443']
end
-if platform_family?('rhel', 'fedora', 'suse')
+if platform_family?('rhel', 'fedora')
package 'mod_ssl' do
notifies :run, 'execute[generate-module-list]', :immediately
end
@@ -31,6 +31,17 @@ if platform_family?('rhel', 'fedora', 'suse')
end
end
+if platform_family?('suse')
+ package 'apache2-mod_security2' do
+ notifies :run, 'execute[generate-module-list]', :immediately
+ end
+
+ file "#{node['apache']['dir']}/conf.d/ssl.conf" do
+ action :delete
+ backup false
+ end
+end
+
template "#{node['apache']['dir']}/ports.conf" do
source 'ports.conf.erb'
mode '0644'
diff --git a/chef/cookbooks/apache2/recipes/mod_wsgi.rb b/chef/cookbooks/apache2/recipes/mod_wsgi.rb
index 6f9fc46..832df66 100644
--- a/chef/cookbooks/apache2/recipes/mod_wsgi.rb
+++ b/chef/cookbooks/apache2/recipes/mod_wsgi.rb
@@ -24,6 +24,10 @@ when 'rhel', 'fedora', 'arch'
package 'mod_wsgi' do
notifies :run, 'execute[generate-module-list]', :immediately
end
+when 'suse'
+ package 'apache2-mod_wsgi' do
+ notifies :run, 'execute[generate-module-list]', :immediately
+ end
end
file "#{node['apache']['dir']}/conf.d/wsgi.conf" do
diff --git a/chef/cookbooks/apache2/templates/default/apache2.conf.erb b/chef/cookbooks/apache2/templates/default/apache2.conf.erb
index 71017fd..d70ba87 100644
--- a/chef/cookbooks/apache2/templates/default/apache2.conf.erb
+++ b/chef/cookbooks/apache2/templates/default/apache2.conf.erb
@@ -22,6 +22,8 @@ LockFile logs/accept.lock
<% end -%>
<% elsif %w[freebsd].include?(node['platform_family']) -%>
LockFile /var/log/accept.lock
+<% elsif %w[suse].include?(node['platform_family']) -%>
+LockFile logs/accept.lock
<% else %>
LockFile logs/accept.lock
<% end -%>
@@ -101,6 +103,11 @@ Include conf.modules.d/*.conf
User <%= node['apache']['user'] %>
Group <%= node['apache']['group'] %>
+<% if %w[suse].include?(node['platform_family']) -%>
+# generated from APACHE_MODULES in /etc/sysconfig/apache2
+Include /etc/apache2/sysconfig.d/loadmodule.conf
+<% end -%>
+
#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
@@ -114,7 +121,7 @@ AccessFileName .htaccess
# viewed by Web clients.
#
- Order allow,deny
+ Order Allow,Deny
Deny from all
@@ -221,7 +228,7 @@ LogFormat "%{User-agent}i" agent
# Options IncludesNoExec
# AddOutputFilter Includes html
# AddHandler type-map var
-# Order allow,deny
+# Order Allow,Deny
# Allow from all
# LanguagePriority en cs de es fr it nl sv pt-br ro
# ForceLanguagePriority Prefer Fallback
@@ -245,7 +252,14 @@ LogFormat "%{User-agent}i" agent
# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
-
+<% if %w[suse].include?(node['platform_family']) -%>
+# Another way to include your own files
+#
+# The file below is generated from /etc/sysconfig/apache2,
+# include arbitrary files as named in APACHE_CONF_INCLUDE_FILES and
+# APACHE_CONF_INCLUDE_DIRS
+Include /etc/apache2/sysconfig.d/include.conf
+<% end -%>
# Include generic snippets of statements
Include <%= node['apache']['dir'] %>/conf.d/*.conf
diff --git a/chef/cookbooks/apache2/templates/default/etc-sysconfig-apache2.erb b/chef/cookbooks/apache2/templates/default/etc-sysconfig-apache2.erb
new file mode 100644
index 0000000..62658cb
--- /dev/null
+++ b/chef/cookbooks/apache2/templates/default/etc-sysconfig-apache2.erb
@@ -0,0 +1,307 @@
+
+## Path: Network/WWW/Apache/SuSEhelp
+## Description: SuSE help doc server configuration
+## Type: yesno
+## Default: no
+## Config: apache
+## ServiceRestart: apache
+## Command:
+#
+# Set this to yes on the central documentation server
+# or to configure apache for local use of susehelp.
+# Then the online-help-system indices are automatically adjusted
+# and access to the help-files is allowed as specified in DOC_ALLOW.
+# To run as a client for the central documentation server who's name
+# is specified in DOC_HOST, just set DOC_SERVER to no.
+# The DOC_HOST and DOC_ALLOW variables are in the file /etc/sysconfig/susehelp.
+#
+DOC_SERVER="no"
+## Path: Network/WWW/Apache2
+## Description: Configuration for Apache 2
+
+## Type: string
+## Default: ""
+## ServiceRestart: apache2
+#
+# Here you can name files, separated by spaces, that should be Include'd from
+# httpd.conf.
+#
+# This allows you to add e.g. VirtualHost statements without touching
+# /etc/apache2/httpd.conf itself, which makes upgrading easier.
+#
+APACHE_CONF_INCLUDE_FILES=""
+
+## Type: string
+## Default: ""
+## ServiceRestart: apache2
+#
+# Here you can name directories, separated by spaces, that should be Include'd
+# from httpd.conf.
+#
+# All files contained in these directories will be recursively included by apache.
+# If a pattern like *.conf is appended, apache will use it.
+#
+# Examples: "/etc/apache2/my_conf/"
+# "/etc/apache2/virtual_hosts/*.conf"
+# "local/*.conf /srv/www/virtual/"
+#
+APACHE_CONF_INCLUDE_DIRS=""
+
+## Type: string
+## Default: "actions alias auth_basic authz_host authn_file authz_groupfile authz_default authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl suexec userdir php5"
+## ServiceRestart: apache2
+#
+# [It might look silly to not simply edit httpd.conf for the LoadModule statements.
+# However, since the LoadModule statements might need an absolute path to the modules,
+# switching between MPMs can be quite a hassle. It's easier to just give the names here.]
+#
+# * list of all modules shipped with the base distribution:
+#
+# actions alias asis auth_basic auth_digest authn_alias authn_anon
+# authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm
+# authz_default authz_groupfile authz_host authz_owner authz_user
+# autoindex bucketeer cache case_filter case_filter_in cern_meta cgi
+# charset_lite dav dav_fs dav_lock dbd deflate dir disk_cache dumpio
+# echo env expires ext_filter file_cache filter headers ident imagemap
+# include info ldap log_config log_forensic logio mem_cache mime mime_magic
+# negotiation optional_fn_export optional_fn_import optional_hook_export
+# optional_hook_import proxy proxy_ajp proxy_balancer proxy_connect
+# proxy_ftp proxy_http reqtimeout rewrite setenvif speling ssl status
+# substitute suexec unique_id userdir usertrack version vhost_alias
+#
+# see http://httpd.apache.org/docs-2.2/mod/ !
+#
+# * It pays to use IfDefine statements... like
+#
+# ....
+#
+#
+# * In the APACHE_MODULES variable, you can use mod_xyz or just xyz syntax.
+# You may also name an absolute path if you like.
+#
+# * NOTE ON SSL: before you can use mod_ssl, you need a server certificate.
+# A test certificate can be created by entering
+# 'cd /usr/share/doc/packages/apache2; ./certificate.sh' as root.
+# Also, you need to set the ServerName inside the
+# block to the fully qualified domain name (see /etc/HOSTNAME).
+# * if your server certificate is protected by a passphrase you should increase the
+# APACHE_START_TIMEOUT (see above)
+# * to finally enable ssl support, you need to add 'SSL' to APACHE_SERVER_FLAGS
+# below.
+#
+# * modules listed here will be ignored if they are not installed
+#
+#
+# EXAMPLES:
+#
+# fairly minimal
+# APACHE_MODULES="authz_host alias auth dir log_config mime setenvif"
+#
+# apache's default installation
+# APACHE_MODULES="authz_host actions alias asis auth autoindex cgi dir imap include log_config mime negotiation setenvif status userdir"
+# your settings
+APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user authn_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif status ssl suexec userdir php5 reqtimeout"
+
+
+## Type: string
+## Default: ""
+## ServiceRestart: apache2
+#
+# Additional server flags:
+#
+# Put here any server flags ("Defines") that you want to hand over to
+# httpd at start time, or other command line flags.
+#
+# Background: Any directives within an ...
+# section are only processed if the flag is defined.
+# This allows to write configuration which is active only in a
+# special cases, like during server maintenance, or for testing
+# something temporarily.
+#
+# Notably, to enable ssl support, 'SSL' needs to be added here.
+# To enable the server-status, 'STATUS' needs to be added here.
+#
+# It does not matter if you write flag1, -D flag1 or -Dflag1.
+# Multiple flags can be given as "-D flag1 -D flag2" or simply "flag1 flag2".
+#
+# Specifying such flags here is equivalent to giving them on the commandline.
+# (e.g. via rcapache2 start -DReverseProxy)
+#
+# Example:
+# "SSL STATUS AWSTATS SVN_VIEWCVS no_subversion_today"
+#
+APACHE_SERVER_FLAGS=""
+
+## Type: string
+## Default: ""
+## ServiceRestart: apache2
+#
+# Which config file do you want to use?
+# (if not set, /etc/apache2/httpd.conf is used.)
+# It is unusual to need to use this setting.
+#
+# Note about ulimits:
+# if you want to set ulimits, e.g. to increase the max number of open file handle,
+# or to allow core files, you can do so by editing /etc/sysconfig/apache2 and
+# simply write the ulimit commands into that file.
+# Example:
+# ulimit -n 16384
+# ulimit -H -n 16384
+# ulimit -c unlimited
+# See the output of "help ulimit" in the bash, or "man 1 ulimit".
+#
+APACHE_HTTPD_CONF=""
+
+## Type: list(prefork,worker)
+## Default: ""
+## ServiceRestart: apache2
+#
+# MPM (multi-processing module) to use.
+#
+# Needed to determine with which MPM apache will run, as well as
+# against which header files modules will be built.
+#
+# If not set, the system will simply pick one of the installed MPMs.
+#
+# The implementation of the logic is in /usr/share/apache2/find_mpm,
+# a script which can be used standalone as well if needed.
+#
+APACHE_MPM=""
+
+## Type: string
+## Default: ""
+## ServiceReload: apache2
+#
+# email address of the server administrator (ServerAdmin directive)
+# This address is added to the server's responses if APACHE_SERVERSIGNATURE
+# is set to "email".
+#
+# If empty ("") it defaults to webmaster@$FQHOSTNAME, where FQHOSTNAME is
+# taken from /etc/HOSTNAME.
+#
+# Note that ServerAdmin directives inside VirtualHost statements are not
+# changed, even not the one in the stock SSL virtual host block.
+#
+APACHE_SERVERADMIN=""
+
+## Type: string
+## Default: ""
+## ServiceReload: apache2
+#
+# ServerName gives the name and port that the server uses to identify itself.
+# This can often be determined automatically, but we recommend you specify
+# it explicitly to prevent problems during startup.
+#
+# If this is not set to valid DNS name for your host, server-generated
+# redirections will not work. See also the UseCanonicalName directive.
+#
+# If your host doesn't have a registered DNS name, enter its IP address here.
+# You will have to access it by its address anyway, and this will make
+# redirections work in a sensible way.
+#
+APACHE_SERVERNAME=""
+
+## Type: integer
+## Default: 2
+#
+# timeout during server startup (seconds)
+# after this time, the start script decides wether the httpd process started without error.
+#
+# Increase it, if you use mod_ssl and your certificate is passphrase protected!
+#
+APACHE_START_TIMEOUT="2"
+
+## Type: list(on,off,email)
+## Default: "on"
+## ServiceReload: apache2
+#
+# Configures the footer on server-generated documents
+# This correlates to the ServerSignature directive.
+#
+APACHE_SERVERSIGNATURE="on"
+
+## Type: list(debug,info,notice,warn,error,crit,alert,emerg)
+## Default: "warn"
+## ServiceReload: apache2
+#
+# LogLevel: Control the number of messages logged to the error_log.
+#
+APACHE_LOGLEVEL="warn"
+
+## Type: string
+## Default: "/var/log/apache2/access_log combined"
+## ServiceRestart: apache2
+#
+# The location and format of the access logfile (Common Logfile Format).
+# If you do not define any access logfiles within a
+# container, they will be logged here. Contrarywise, if you *do*
+# define per- access logfiles, transactions will be
+# logged therein and *not* in this file.
+#
+# Simply set it to empty, if you configure it yourself somewhere else.
+#
+# Examples:
+#
+# If you would like to have agent and referer logfiles:
+#
+# setting it to "/var/log/apache2/referer_log referer, /var/log/apache2/agent_log agent"
+# corresponds to
+# CustomLog /var/log/apache2/referer_log referer
+# CustomLog /var/log/apache2/agent_log agent
+#
+# If you prefer a single logfile with access, agent, and referer information
+# (Combined Logfile Format):
+#
+# setting it to "/var/log/apache2/access_log combined"
+# corresponds to
+# CustomLog /var/log/apache2/access_log combined
+#
+APACHE_ACCESS_LOG="/var/log/apache2/access_log combined"
+
+## Type: list(On,Off,DNS)
+## Default: "Off"
+## ServiceReload: apache2
+#
+# UseCanonicalName: Determines how Apache constructs self-referencing
+# URLs and the SERVER_NAME and SERVER_PORT variables.
+# When set "Off", Apache will use the Hostname and Port supplied
+# by the client. When set "On", Apache will use the value of the
+# ServerName directive.
+#
+APACHE_USE_CANONICAL_NAME="off"
+
+## Type: list(Major,Minor,Minimal,ProductOnly,OS,Full)
+## Default: "OS"
+## ServiceReload: apache2
+#
+# How much information the server response header field contains about the server.
+# (installed modules, versions, etc.)
+# see http://httpd.apache.org/docs-2.2/mod/core.html#servertokens
+#
+APACHE_SERVERTOKENS="OS"
+
+## Type: list(on,off)
+## Default: "off"
+## ServiceReload: apache2
+#
+# If mod_status is used, include extended information about the server, like
+# CPU usage, in the status report. It is a server-wide setting, and it can cost
+# some performance!
+#
+APACHE_EXTENDED_STATUS="off"
+
+
+## Type: list(on,off)
+## Default: "off"
+## ServiceReload: apache2
+#
+# disable SSL/TLS compression? SSL compression may consume considerable
+# computation power on your server. You can disable SSL Compression here; by
+# consequence, the environment variable "OPENSSL_NO_DEFAULT_ZLIB" will be
+# inherited to apache by the start script. This variable then is evaluated
+# by the openssl library on SLES11-SP1+, and compression will be disabled
+# if the variable is present in the environment.
+# Setting this to "off" (default) will not cause any change in behaviour.
+# Setting this to "on" will siply disable compression, for the case when
+# a client requests it.
+APACHE_DISABLE_SSL_COMPRESSION="on"
diff --git a/chef/cookbooks/apache2/templates/default/mods/ssl.conf.erb b/chef/cookbooks/apache2/templates/default/mods/ssl.conf.erb
index bddf5b8..33c62d7 100644
--- a/chef/cookbooks/apache2/templates/default/mods/ssl.conf.erb
+++ b/chef/cookbooks/apache2/templates/default/mods/ssl.conf.erb
@@ -41,6 +41,8 @@
#SSLSessionCache dbm:/var/run/apache2/ssl_scache
<% if %w[rhel fedora suse].include?(node['platform_family']) -%>
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
+ <% elsif %w[suse].include?(node['platform_family']) -%>
+ SSLSessionCache shmcb:/var/lib/apache2/ssl_scache(512000)
<% elsif %w[freebsd].include?(node['platform_family']) -%>
SSLSessionCache shmcb:/var/run/ssl_scache(512000)
<% else -%>
diff --git a/chef/cookbooks/apache2/templates/default/web_app.conf.erb b/chef/cookbooks/apache2/templates/default/web_app.conf.erb
index 5999d1e..d3472b5 100644
--- a/chef/cookbooks/apache2/templates/default/web_app.conf.erb
+++ b/chef/cookbooks/apache2/templates/default/web_app.conf.erb
@@ -7,7 +7,7 @@
>
Options <%= [@params[:directory_options] || "FollowSymLinks" ].flatten.join " " %>
AllowOverride <%= [@params[:allow_override] || "None" ].flatten.join " " %>
- Order allow,deny
+ Order Allow,Deny
Allow from all
diff --git a/chef/cookbooks/collectd/recipes/client.rb b/chef/cookbooks/collectd/recipes/client.rb
index 2445f52..c0f8fd4 100644
--- a/chef/cookbooks/collectd/recipes/client.rb
+++ b/chef/cookbooks/collectd/recipes/client.rb
@@ -33,15 +33,17 @@ when "debian"
end
end
-node["collectd"]["plugins"].each_pair do |plugin_key, options|
- collectd_plugin plugin_key do
- options options
+if node["platform_family"] != 'suse'
+ node["collectd"]["plugins"].each_pair do |plugin_key, options|
+ collectd_plugin plugin_key do
+ options options
+ end
end
-end
-#for python plugins or more complicated ones, use seperate recipe to deploy them
-if node["collectd"].attribute?("included_plugins") and not node["collectd"]["included_plugins"].nil?
- node["collectd"]["included_plugins"].each_pair do |plugin_key, options|
- include_recipe("collectd::#{plugin_key}")
+ #for python plugins or more complicated ones, use seperate recipe to deploy them
+ if node["collectd"].attribute?("included_plugins") and not node["collectd"]["included_plugins"].nil?
+ node["collectd"]["included_plugins"].each_pair do |plugin_key, options|
+ include_recipe("collectd::#{plugin_key}")
+ end
end
end
diff --git a/chef/cookbooks/collectd/recipes/collectd_web.rb b/chef/cookbooks/collectd/recipes/collectd_web.rb
index f0fd1a0..6d92a55 100644
--- a/chef/cookbooks/collectd/recipes/collectd_web.rb
+++ b/chef/cookbooks/collectd/recipes/collectd_web.rb
@@ -20,34 +20,36 @@
include_recipe "collectd"
include_recipe "apache2"
-%w(libhtml-parser-perl liburi-perl librrds-perl libjson-perl).each do |name|
- package name
-end
-
-directory node[:collectd][:collectd_web][:path] do
- owner "root"
- group "root"
- mode "755"
-end
-
-bash "install_collectd_web" do
- user "root"
- cwd node[:collectd][:collectd_web][:path]
- not_if do
- File.exists?(File.join(node[:collectd][:collectd_web][:path], "index.html"))
+if node['platform_family'] != 'suse'
+ %w(libhtml-parser-perl liburi-perl librrds-perl libjson-perl).each do |name|
+ package name
end
- code <<-EOH
- wget --no-check-certificate -O collectd-web.tar.gz https://github.com/httpdss/collectd-web/tarball/master
- tar --strip-components=1 -xzf collectd-web.tar.gz
- rm collectd-web.tar.gz
- EOH
-end
-template "/etc/apache2/sites-available/collectd_web.conf" do
- source "collectd_web.conf.erb"
- owner "root"
- group "root"
- mode "644"
-end
+ directory node[:collectd][:collectd_web][:path] do
+ owner "root"
+ group "root"
+ mode "755"
+ end
-apache_site "collectd_web.conf"
+ bash "install_collectd_web" do
+ user "root"
+ cwd node[:collectd][:collectd_web][:path]
+ not_if do
+ File.exists?(File.join(node[:collectd][:collectd_web][:path], "index.html"))
+ end
+ code <<-EOH
+ wget --no-check-certificate -O collectd-web.tar.gz https://github.com/httpdss/collectd-web/tarball/master
+ tar --strip-components=1 -xzf collectd-web.tar.gz
+ rm collectd-web.tar.gz
+ EOH
+ end
+
+ template "/etc/apache2/sites-available/collectd_web.conf" do
+ source "collectd_web.conf.erb"
+ owner "root"
+ group "root"
+ mode "644"
+ end
+
+ apache_site "collectd_web.conf"
+end
diff --git a/chef/cookbooks/collectd/recipes/default.rb b/chef/cookbooks/collectd/recipes/default.rb
index ea86da6..749010a 100644
--- a/chef/cookbooks/collectd/recipes/default.rb
+++ b/chef/cookbooks/collectd/recipes/default.rb
@@ -39,92 +39,94 @@ when "debian"
end
end
-node[:collectd][:package_name].each do |pkg|
- package pkg do
- action :install
+if node["platform_family"] != 'suse'
+ node[:collectd][:package_name].each do |pkg|
+ package pkg do
+ action :install
+ end
end
-end
-unless node[:collectd][:service_file].nil? or node[:collectd][:service_file].empty?
- template node[:collectd][:service_file] do
- source "collectd_service.erb"
+ unless node[:collectd][:service_file].nil? or node[:collectd][:service_file].empty?
+ template node[:collectd][:service_file] do
+ source "collectd_service.erb"
+ owner "root"
+ group "root"
+ mode "644"
+ end
+ end
+
+ service "collectd" do
+ supports :restart => true, :status => true
+ end
+
+ directory "/etc/collectd" do
owner "root"
group "root"
- mode "644"
+ mode "755"
end
-end
-service "collectd" do
- supports :restart => true, :status => true
-end
+ directory "/etc/collectd/plugins" do
+ owner "root"
+ group "root"
+ mode "755"
+ end
-directory "/etc/collectd" do
- owner "root"
- group "root"
- mode "755"
-end
+ directory node[:collectd][:base_dir] do
+ owner "root"
+ group "root"
+ mode "755"
+ recursive true
+ end
-directory "/etc/collectd/plugins" do
- owner "root"
- group "root"
- mode "755"
-end
+ directory node[:collectd][:plugin_dir] do
+ owner "root"
+ group "root"
+ mode "755"
+ recursive true
+ end
-directory node[:collectd][:base_dir] do
- owner "root"
- group "root"
- mode "755"
- recursive true
-end
+ %w(collection thresholds).each do |file|
+ template "/etc/collectd/#{file}.conf" do
+ source "#{file}.conf.erb"
+ owner "root"
+ group "root"
+ mode "644"
+ notifies :restart, resources(:service => "collectd")
+ end
+ end
-directory node[:collectd][:plugin_dir] do
- owner "root"
- group "root"
- mode "755"
- recursive true
-end
-
-%w(collection thresholds).each do |file|
- template "/etc/collectd/#{file}.conf" do
- source "#{file}.conf.erb"
+ template node[:collectd][:config_file] do
+ source "collectd.conf.erb"
owner "root"
group "root"
mode "644"
notifies :restart, resources(:service => "collectd")
end
-end
-template node[:collectd][:config_file] do
- source "collectd.conf.erb"
- owner "root"
- group "root"
- mode "644"
- notifies :restart, resources(:service => "collectd")
-end
-
-ruby_block "delete_old_plugins" do
- block do
- Dir['/etc/collectd/plugins/*.conf'].each do |path|
- autogen = false
- File.open(path).each_line do |line|
- if line.start_with?('#') and line.include?('autogenerated')
- autogen = true
- break
+ ruby_block "delete_old_plugins" do
+ block do
+ Dir['/etc/collectd/plugins/*.conf'].each do |path|
+ autogen = false
+ File.open(path).each_line do |line|
+ if line.start_with?('#') and line.include?('autogenerated')
+ autogen = true
+ break
+ end
end
- end
- if autogen
- begin
- resources(:template => path)
- rescue ArgumentError, Chef::Exceptions::ResourceNotFound
- # If the file is autogenerated and has no template it has likely been removed from the run list
- Chef::Log.info("Deleting old plugin config in #{path}")
- File.unlink(path)
+ if autogen
+ begin
+ resources(:template => path)
+ rescue ArgumentError, Chef::Exceptions::ResourceNotFound
+ # If the file is autogenerated and has no template it has likely been removed from the run list
+ Chef::Log.info("Deleting old plugin config in #{path}")
+ File.unlink(path)
+ end
end
end
end
end
-end
-service "collectd" do
- action [:enable, :start]
+ service "collectd" do
+ action [:enable, :start]
+ end
end
diff --git a/chef/cookbooks/collectd/recipes/kairosdb.rb b/chef/cookbooks/collectd/recipes/kairosdb.rb
index e6f650a..62ce33d 100644
--- a/chef/cookbooks/collectd/recipes/kairosdb.rb
+++ b/chef/cookbooks/collectd/recipes/kairosdb.rb
@@ -16,28 +16,31 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-cookbook_file "#{node['collectd']['plugin_dir']}/kairosdb_writer.py" do
- source "kairosdb_writer.py"
- owner "root"
- group "root"
- mode 00644
- action :create_if_missing
- notifies :restart, resources(:service => "collectd")
-end
-if ! node['cluster']
- node.set['cluster'] = "no_cluster_defined"
-end
+if node['platform_family'] != 'suse'
+ cookbook_file "#{node['collectd']['plugin_dir']}/kairosdb_writer.py" do
+ source "kairosdb_writer.py"
+ owner "root"
+ group "root"
+ mode 00644
+ action :create_if_missing
+ notifies :restart, resources(:service => "collectd")
+ end
-node.set['collectd']['client']['fqdn'] = node['fqdn'] || node['hostname'] || node['ipaddress'] || "fqdn_unknown"
+ if ! node['cluster']
+ node.set['cluster'] = "no_cluster_defined"
+ end
-collectd_python_plugin "kairosdb_writer" do
- opts = {"KairosDBHost"=>node['collectd']['server']['host'],
- "KairosDBPort"=>node['collectd']['server']['port'],
- "KairosDBProtocol"=>node['collectd']['server']['protocol'],
- "Tags" => "host=#{node['fqdn']}\" \"role=OSROLE\" \"location=China.Beijing.TsingHua\" \"cluster=#{node['cluster']}",
- "TypesDB" => node['collectd']['types_db'],
- "LowercaseMetricNames"=>"true"
- }
- options(opts)
+ node.set['collectd']['client']['fqdn'] = node['fqdn'] || node['hostname'] || node['ipaddress'] || "fqdn_unknown"
+
+ collectd_python_plugin "kairosdb_writer" do
+ opts = {"KairosDBHost"=>node['collectd']['server']['host'],
+ "KairosDBPort"=>node['collectd']['server']['port'],
+ "KairosDBProtocol"=>node['collectd']['server']['protocol'],
+ "Tags" => "host=#{node['fqdn']}\" \"role=OSROLE\" \"location=China.Beijing.TsingHua\" \"cluster=#{node['cluster']}",
+ "TypesDB" => node['collectd']['types_db'],
+ "LowercaseMetricNames"=>"true"
+ }
+ options(opts)
+ end
end
diff --git a/chef/cookbooks/collectd/recipes/rabbitmq.rb b/chef/cookbooks/collectd/recipes/rabbitmq.rb
index 2acdfc7..a49cb72 100644
--- a/chef/cookbooks/collectd/recipes/rabbitmq.rb
+++ b/chef/cookbooks/collectd/recipes/rabbitmq.rb
@@ -17,25 +17,27 @@
# limitations under the License.
#
-package "python-requests" do
- action :install
-end
+if node['platform_family'] != 'suse'
+ package "python-requests" do
+ action :install
+ end
-cookbook_file File.join(node['collectd']['plugin_dir'], "rabbitmq_info.py") do
- source "rabbitmq_info.py"
- owner "root"
- group "root"
- mode "0755"
- notifies :restart, resources(:service => "collectd")
-end
+ cookbook_file File.join(node['collectd']['plugin_dir'], "rabbitmq_info.py") do
+ source "rabbitmq_info.py"
+ owner "root"
+ group "root"
+ mode "0755"
+ notifies :restart, resources(:service => "collectd")
+ end
-node.override["collectd"]["mq"]["vhost"] = node["openstack"]["mq"]["vhost"]
+ node.override["collectd"]["mq"]["vhost"] = node["openstack"]["mq"]["vhost"]
-collectd_python_plugin "rabbitmq_info" do
- opts = { "Vhost" => node["collectd"]["mq"]["vhost"],
- "Api" => "http://localhost:15672/api/queues",
- "User" => "#{node["openstack"]["mq"]["user"]}",
- "Pass" => "#{node["openstack"]["mq"]["password"]}"
- }
- options(opts)
+ collectd_python_plugin "rabbitmq_info" do
+ opts = { "Vhost" => node["collectd"]["mq"]["vhost"],
+ "Api" => "http://localhost:15672/api/queues",
+ "User" => "#{node["openstack"]["mq"]["user"]}",
+ "Pass" => "#{node["openstack"]["mq"]["password"]}"
+ }
+ options(opts)
+ end
end
diff --git a/chef/cookbooks/collectd/recipes/server.rb b/chef/cookbooks/collectd/recipes/server.rb
index 08b6320..245859e 100644
--- a/chef/cookbooks/collectd/recipes/server.rb
+++ b/chef/cookbooks/collectd/recipes/server.rb
@@ -19,6 +19,8 @@
include_recipe "collectd"
-collectd_plugin "network" do
- options :listen=>'0.0.0.0'
+if node['platform_family'] != 'suse'
+ collectd_plugin "network" do
+ options :listen=>'0.0.0.0'
+ end
end
diff --git a/chef/cookbooks/erlang/recipes/esl.rb b/chef/cookbooks/erlang/recipes/esl.rb
index 6b34b3c..4314570 100644
--- a/chef/cookbooks/erlang/recipes/esl.rb
+++ b/chef/cookbooks/erlang/recipes/esl.rb
@@ -49,6 +49,10 @@ when 'rhel'
version node['erlang']['esl']['version'] if node['erlang']['esl']['version']
end
+when 'suse'
+ package 'erlang' do
+ version node['erlang']['esl']['version'] if node['erlang']['esl']['version']
+ end
end
# There's a small bug in the package for Ubuntu 10.04... this fixes
diff --git a/chef/cookbooks/erlang/recipes/package.rb b/chef/cookbooks/erlang/recipes/package.rb
index 19f9fce..c9df5b9 100644
--- a/chef/cookbooks/erlang/recipes/package.rb
+++ b/chef/cookbooks/erlang/recipes/package.rb
@@ -44,4 +44,7 @@ when 'rhel'
end
package 'erlang'
+when 'suse'
+ package 'erlang'
+ package 'erlang-debugger'
end
diff --git a/chef/cookbooks/git/recipes/default.rb b/chef/cookbooks/git/recipes/default.rb
index 296ef17..37f933b 100644
--- a/chef/cookbooks/git/recipes/default.rb
+++ b/chef/cookbooks/git/recipes/default.rb
@@ -29,6 +29,8 @@ when 'rhel', 'fedora'
include_recipe 'yum-epel'
end
package 'git'
+when 'suse'
+ package 'git-core'
when 'windows'
include_recipe 'git::windows'
when 'mac_os_x'
diff --git a/chef/cookbooks/keepalived/attributes/default.rb b/chef/cookbooks/keepalived/attributes/default.rb
index 628a6d8..cbf228e 100644
--- a/chef/cookbooks/keepalived/attributes/default.rb
+++ b/chef/cookbooks/keepalived/attributes/default.rb
@@ -1,3 +1,5 @@
+default['keepalived']['use_distro_version'] = true
+default['keepalived']['rpm_package_url'] = nil
default['keepalived']['shared_address'] = true
default['keepalived']['global']['notification_emails'] = 'admin@example.com'
default['keepalived']['global']['notification_email_from'] = "keepalived@#{node['domain'] || 'example.com'}"
diff --git a/chef/cookbooks/keepalived/recipes/default.rb b/chef/cookbooks/keepalived/recipes/default.rb
index 60baed0..f2e8417 100644
--- a/chef/cookbooks/keepalived/recipes/default.rb
+++ b/chef/cookbooks/keepalived/recipes/default.rb
@@ -55,7 +55,33 @@ when "debian"
end
end
-package "keepalived"
+if node['platform_family'] == 'suse'
+ node.default['keepalived']['use_distro_version'] = false
+ node.default['keepalived']['rpm_package_url'] = "http://download.opensuse.org/repositories/home:/H4T:/network:/ha-clustering/SLE_11_SP3/x86_64/keepalived-1.2.7-7.1.x86_64.rpm"
+ package "src_vipa"
+end
+
+if node['keepalived']['use_distro_version'] or (not node['local_repo'].nil? and not node['local_repo'].empty?)
+ package "keepalived"
+else
+ rpm_package = node['keepalived']['rpm_package_url']
+ if rpm_package
+ if not node['proxy_url'].nil? and not node['proxy_url'].empty?
+ execute "download_keepalived" do
+ command "wget #{rpm_package}"
+ cwd Chef::Config['file_cache_path']
+ not_if { ::File.exists?(::File.basename(rpm_package)) }
+ environment ({ 'http_proxy' => node['proxy_url'], 'https_proxy' => node['proxy_url'] })
+ end
+ else
+ remote_file "#{Chef::Config[:file_cache_path]}/#{::File.basename(rpm_package)}" do
+ source rpm_package
+ action :create_if_missing
+ end
+ end
+ rpm_package "#{Chef::Config[:file_cache_path]}/#{::File.basename(rpm_package)}"
+ end
+end
if node['keepalived']['shared_address']
case node['platform_family']
diff --git a/chef/cookbooks/memcached/recipes/default.rb b/chef/cookbooks/memcached/recipes/default.rb
index d3aa361..12fbc05 100644
--- a/chef/cookbooks/memcached/recipes/default.rb
+++ b/chef/cookbooks/memcached/recipes/default.rb
@@ -26,19 +26,27 @@ end
package 'memcached'
-package 'libmemcache-dev' do
- case node['platform_family']
- when 'rhel', 'fedora'
+case node['platform_family']
+when 'rhel', 'fedora'
+ package 'libmemcache-dev' do
package_name 'libmemcached-devel'
- when 'smartos'
+ end
+when 'smartos'
+ package 'libmemcache-dev' do
package_name 'libmemcached'
- when 'suse'
- if node['platform_version'].to_f < 12
- package_name 'libmemcache-devel'
- else
- package_name 'libmemcached-devel'
+ end
+when 'suse'
+ unless node['lsb']['description'][/^SUSE Linux Enterprise Server/]
+ package 'libmemcache-dev' do
+ if node['platform_version'].to_f < 12
+ package_name 'libmemcache-devel'
+ else
+ package_name 'libmemcached-devel'
+ end
end
- else
+ end
+else
+ package 'libmemcache-dev' do
package_name 'libmemcache-dev'
end
end
diff --git a/chef/cookbooks/mysql/attributes/client.rb b/chef/cookbooks/mysql/attributes/client.rb
index f8a225b..9497203 100644
--- a/chef/cookbooks/mysql/attributes/client.rb
+++ b/chef/cookbooks/mysql/attributes/client.rb
@@ -25,7 +25,7 @@ case node['platform_family']
when 'rhel', 'fedora'
default['mysql']['client']['packages'] = %w[postfix mysql mysql-devel]
when 'suse'
- default['mysql']['client']['packages'] = %w[mysql-community-server-client libmysqlclient-devel]
+ default['mysql']['client']['packages'] = %w[mysql-community-client libmysqlclient15 mysql-community-devel]
when 'debian'
if debian_before_squeeze? || ubuntu_before_lucid?
default['mysql']['client']['packages'] = %w[mysql-client libmysqlclient15-dev]
diff --git a/chef/cookbooks/mysql/attributes/server.rb b/chef/cookbooks/mysql/attributes/server.rb
index 356a5dd..a451bd0 100644
--- a/chef/cookbooks/mysql/attributes/server.rb
+++ b/chef/cookbooks/mysql/attributes/server.rb
@@ -156,6 +156,11 @@ if node['platform_family'] == 'rhel' && node['platform_version'].to_i > 6
default['mysql']['version'] = '5.6'
end
+if node['platform_family'] == 'suse' && node['platform_version'].to_i >= 11
+ # mysql version is 5.6 on sles11sp3
+ default['mysql']['version'] = '5.6'
+end
+
# security options
# @see http://www.symantec.com/connect/articles/securing-mysql-step-step
# @see http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_chroot
diff --git a/chef/cookbooks/mysql/attributes/server_suse.rb b/chef/cookbooks/mysql/attributes/server_suse.rb
index 6508360..8b92bf3 100644
--- a/chef/cookbooks/mysql/attributes/server_suse.rb
+++ b/chef/cookbooks/mysql/attributes/server_suse.rb
@@ -2,13 +2,22 @@ case node['platform_family']
when 'suse'
default['mysql']['data_dir'] = '/var/lib/mysql'
default['mysql']['server']['service_name'] = 'mysql'
- default['mysql']['server']['server']['packages'] = %w[mysql-community-server]
+
+ default['mysql']['server']['packages'] = %w[mysql-community-server]
+ default['mysql']['server']['slow_query_log'] = 1
+ default['mysql']['server']['slow_query_log_file'] = '/var/log/mysql/slow.log'
+
default['mysql']['server']['basedir'] = '/usr'
+ default['mysql']['server']['tmpdir'] = ['/tmp']
+
+ default['mysql']['server']['directories']['run_dir'] = '/var/run/mysql'
+ default['mysql']['server']['directories']['log_dir'] = '/var/lib/mysql'
+ default['mysql']['server']['directories']['slow_log_dir'] = '/var/log/mysql'
+ default['mysql']['server']['directories']['confd_dir'] = '/etc/mysql/conf.d'
+
default['mysql']['server']['root_group'] = 'root'
default['mysql']['server']['mysqladmin_bin'] = '/usr/bin/mysqladmin'
default['mysql']['server']['mysql_bin'] = '/usr/bin/mysql'
- default['mysql']['server']['conf_dir'] = '/etc'
- default['mysql']['server']['confd_dir'] = '/etc/mysql/conf.d'
default['mysql']['server']['socket'] = '/var/run/mysql/mysql.sock'
default['mysql']['server']['pid_file'] = '/var/run/mysql/mysqld.pid'
default['mysql']['server']['old_passwords'] = 1
diff --git a/chef/cookbooks/mysql/recipes/_server_suse.rb b/chef/cookbooks/mysql/recipes/_server_suse.rb
new file mode 100644
index 0000000..9053b81
--- /dev/null
+++ b/chef/cookbooks/mysql/recipes/_server_suse.rb
@@ -0,0 +1,87 @@
+# require 'pry'
+
+node['mysql']['server']['packages'].each do |name|
+ package name do
+ action :install
+ end
+end
+
+#----
+node['mysql']['server']['directories'].each do |key, value|
+ directory value do
+ owner 'mysql'
+ group 'mysql'
+ mode '0755'
+ action :create
+ recursive true
+ end
+end
+
+directory node['mysql']['data_dir'] do
+ owner 'mysql'
+ group 'mysql'
+ action :create
+ recursive true
+end
+
+#----
+template 'initial-my.cnf' do
+ path '/etc/my.cnf'
+ source 'my.cnf.erb'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ notifies :start, 'service[mysql-start]', :immediately
+end
+
+execute '/usr/bin/mysql_install_db' do
+ command "service #{node['mysql']['server']['service_name']} stop; /usr/bin/mysql_install_db"
+ action :run
+ creates '/var/lib/mysql/mysql/user.frm'
+ notifies :start, 'service[mysql-start]', :immediately
+end
+
+# hax
+service 'mysql-start' do
+ service_name node['mysql']['server']['service_name']
+ action :nothing
+end
+
+cmd = assign_root_password_cmd
+execute 'assign-root-password' do
+ command cmd
+ action :run
+ only_if "/usr/bin/mysql -u root -e 'show databases;'"
+end
+
+template '/etc/mysql_grants.sql' do
+ source 'grants.sql.erb'
+ owner 'root'
+ group 'root'
+ mode '0600'
+ action :create
+ notifies :run, 'execute[install-grants]', :immediately
+end
+
+cmd = install_grants_cmd
+execute 'install-grants' do
+ command cmd
+ action :nothing
+ notifies :restart, 'service[mysql]', :immediately
+end
+
+#----
+template 'final-my.cnf' do
+ path '/etc/my.cnf'
+ source 'my.cnf.erb'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ notifies :reload, 'service[mysql]', :immediately
+end
+
+service 'mysql' do
+ service_name node['mysql']['server']['service_name']
+ supports :status => true, :restart => true, :reload => true
+ action [:enable, :start]
+end
diff --git a/chef/cookbooks/mysql/recipes/client.rb b/chef/cookbooks/mysql/recipes/client.rb
index 7223036..75da9d3 100644
--- a/chef/cookbooks/mysql/recipes/client.rb
+++ b/chef/cookbooks/mysql/recipes/client.rb
@@ -21,6 +21,8 @@
# to debian_before_squeeze? and ubuntu_before_lucid?
::Chef::Recipe.send(:include, Opscode::Mysql::Helpers)
+include_recipe "mysql"
+
case node['platform']
when 'windows'
package_file = node['mysql']['client']['package_file']
diff --git a/chef/cookbooks/mysql/recipes/default.rb b/chef/cookbooks/mysql/recipes/default.rb
index dfb1f72..c3e1f2c 100644
--- a/chef/cookbooks/mysql/recipes/default.rb
+++ b/chef/cookbooks/mysql/recipes/default.rb
@@ -16,3 +16,23 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+case node['platform']
+when 'suse'
+ mysql_repo_package = "http://dev.mysql.com/get/mysql-community-release-sles11-6.noarch.rpm"
+ if not node['proxy_url'].nil? and not node['proxy_url'].empty?
+ r = execute "download_mysql_repo" do
+ command "wget #{mysql_repo_package}"
+ cwd Chef::Config[:file_cache_path]
+ not_if { ::File.exists?("mysql-community-release-sles11-6.noarch.rpm") }
+ environment ({ 'http_proxy' => node['proxy_url'], 'https_proxy' => node['proxy_url'] })
+ end
+ r.run_action(:run)
+ else
+ r = remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-sles11-6.noarch.rpm" do
+ source mysql_repo_package
+ end
+ r.run_action(:create_if_missing)
+ end
+ r = rpm_package "#{Chef::Config[:file_cache_path]}/mysql-community-release-sles11-6.noarch.rpm"
+ r.run_action(:install)
+end
diff --git a/chef/cookbooks/mysql/recipes/server.rb b/chef/cookbooks/mysql/recipes/server.rb
index 8a57638..a694ea0 100644
--- a/chef/cookbooks/mysql/recipes/server.rb
+++ b/chef/cookbooks/mysql/recipes/server.rb
@@ -20,6 +20,8 @@
::Chef::Recipe.send(:include, Opscode::OpenSSL::Password)
::Chef::Recipe.send(:include, Opscode::Mysql::Helpers)
+include_recipe "mysql"
+
if Chef::Config[:solo]
missing_attrs = %w[
server_debian_password
@@ -44,6 +46,8 @@ when 'rhel'
include_recipe 'mysql::_server_rhel'
when 'debian'
include_recipe 'mysql::_server_debian'
+when 'suse'
+ include_recipe 'mysql::_server_suse'
when 'mac_os_x'
include_recipe 'mysql::_server_mac_os_x'
when 'windows'
diff --git a/chef/cookbooks/openstack-block-storage/attributes/default.rb b/chef/cookbooks/openstack-block-storage/attributes/default.rb
index 3ccc9f2..74c5f42 100644
--- a/chef/cookbooks/openstack-block-storage/attributes/default.rb
+++ b/chef/cookbooks/openstack-block-storage/attributes/default.rb
@@ -255,8 +255,8 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
}
when 'suse'
# operating system user and group names
- default['openstack']['block-storage']['user'] = 'openstack-cinder'
- default['openstack']['block-storage']['group'] = 'openstack-cinder'
+ default['openstack']['block-storage']['user'] = 'cinder'
+ default['openstack']['block-storage']['group'] = 'cinder'
default['openstack']['block-storage']['platform'] = {
'mysql_python_packages' => ['python-mysql'],
'postgresql_python_packages' => ['python-psycopg2'],
diff --git a/chef/cookbooks/openstack-block-storage/providers/volume.rb b/chef/cookbooks/openstack-block-storage/providers/volume.rb
index f4394f1..ce72465 100644
--- a/chef/cookbooks/openstack-block-storage/providers/volume.rb
+++ b/chef/cookbooks/openstack-block-storage/providers/volume.rb
@@ -22,10 +22,13 @@ include Chef::Mixin::ShellOut
def partition_num resource
cmd = "parted #{resource.device} --script -- p | awk '{print $1}'"
rc = shell_out(cmd)
+ Chef::Log.info("#{cmd} output: #{rc.stdout}")
p_num = rc.stdout.split.select{|e| e[/\d/]}
if p_num.include? "Number"
last_num = 0
Chef::Log.info("There is not any partition created at #{resource.device} yet.")
+ else
+ Chef::Log.info("partition number is #{p_num}")
end
return p_num
end
@@ -33,16 +36,22 @@ end
def partition_start_size resource
cmd = "parted #{resource.device} --script -- p | awk '{print $3}' | tail -n 2"
rc = shell_out(cmd)
+ Chef::Log.info("#{cmd} output: #{rc.stdout}")
resource.start_size = rc.stdout.split[0]
if resource.start_size.include? "End"
resource.start_size = 0
+ Chef::Log.info("There is no start size found at #{resource.device} yet.")
+ else
+ Chef::Log.info("#{resource.device} start size #{resource.start_size}")
end
end
def disk_total_size resource
- cmd = "parted #{resource.device} --script -- p | grep #{resource.device} | cut -f 2 -d ':'"
+ cmd = "parted #{resource.device} --script -- p | grep 'Disk #{resource.device}' | cut -f 2 -d ':'"
rc = shell_out(cmd)
+ Chef::Log.info("#{cmd} output: #{rc.stdout}")
resource.total_size = rc.stdout.split[0]
+ Chef::Log.info("#{resource.device} total size #{resource.total_size}")
end
def mklabel resource
@@ -50,8 +59,11 @@ def mklabel resource
if not queryresult.include?(new_resource.label_type)
cmd = "parted #{resource.device} --script -- mklabel #{resource.label_type}"
rc = shell_out(cmd)
+ Chef::Log.info("#{cmd} output: #{rc.stdout}")
if not rc.exitstatus.eql?(0)
Chef::Log.error("Creating disk label was failed.")
+ else
+ Chef::Log.info("Creating disk label was successful.")
end
end
end
@@ -62,12 +74,14 @@ def mkpart resource
if not resource.start_size.eql?(resource.total_size)
p_num_old = partition_num resource
output = %x{parted #{resource.device} --script -- mkpart #{resource.part_type} #{resource.start_size} -1}
+ Chef::Log.info("mkpart output: #{output}")
p_num_new = partition_num resource
p_num = (p_num_new - p_num_old)[0]
if p_num.nil?
Chef::Log.error("Making partition was failed.")
else
resource.partition = resource.device + p_num
+ Chef::Log.info("making partition on #{resource.partition}")
if node['partitions'].nil?
node.set['partitions'] = resource.partition.lines.to_a
else
@@ -81,6 +95,7 @@ end
def file_partition_size
output = %x{df -h /}
+ Chef::Log.info("df output: #{output}")
available_size = (output.lines.to_a[1].split[3].nil?) \
?(output.lines.to_a[1].split + output.lines.to_a[2].split)[3] \
:(output.lines.to_a[1].split[3])
@@ -91,9 +106,12 @@ end
def select_loop_device resource
output = %x{losetup -a|grep "/mnt/cinder-volumes"}.split(':')
+ Chef::Log.info("losetup output: #{output}")
if output.empty?
used_loop_device = %x{losetup -a |cut -f 1 -d ':'}.split
+ Chef::Log.info("used loop device: #{used_loop_device}")
total_loop_device = %x{ls /dev/loop* | egrep 'loop[0-9]+'}.split
+ Chef::Log.info("total loop device: #{total_loop_device}")
available_loop = total_loop_device - used_loop_device
if available_loop.nil?
resource.partition = nil
@@ -111,12 +129,15 @@ def create_file_partition resource
if not ::File.exist?("/mnt/cinder-volumes")
cmd = "dd if=/dev/zero of=/mnt/cinder-volumes bs=1 count=0 seek=#{file_partition_size}"
rc = shell_out(cmd)
+ Chef::Log.info("#{cmd} output: #{rc.stdout}")
end
- output = %x{losetup -a|grep '/mnt/cinder-volumes'}
+ output = %x{losetup -a|grep '/mnt/cinder-volumes'}
+ Chef::Log.info("losetup output: #{output}")
if not output.include?("/mnt/cinder-volumes")
select_loop_device resource
if not resource.partition.nil?
output = %x{losetup #{resource.partition} /mnt/cinder-volumes}
+ Chef::Log.info("losetup output: #{output}")
end
else
resource.partition = output.split(":")[0]
@@ -137,6 +158,7 @@ end
action :create_partition do
if ::File.exist?(new_resource.device)
+ Chef::Log.info("device #{new_resource.device} exists")
if node['partitions'].nil? or not node['partitions'].any?{|s| s.include?(new_resource.device)}
disk_total_size new_resource
partition_start_size new_resource
@@ -145,8 +167,11 @@ action :create_partition do
else
create_disk_partition new_resource
end
+ else
+ Chef::Log.info("node partitions: #{node['partitions']}")
end
else
+ Chef::Log.info("device #{new_resource.device} does not exist")
create_file_partition new_resource
end
new_resource.updated_by_last_action(true)
@@ -157,14 +182,17 @@ action :mk_cinder_vol do
Chef::Log.error("\nThere is not any partition created before trying to create a volume.")
else
node['partitions'].each do |partition|
+ Chef::Log.info("mk cinder vol on #{partition}")
if partition.include?(new_resource.device) or partition.include?("/dev/loop")
query = %x{vgscan |grep cinder-volumes}
+ Chef::Log.info("vgscan output: #{query}")
if query.eql?("")
execute "vgcreate cinder-volumes #{partition}" do
new_resource.updated_by_last_action(true)
end
else
query = %x{pvscan |grep cinder-volumes|grep #{partition}}
+ Chef::Log.info("pvscan output: #{query}")
if query.eql?("")
execute "vgextend cinder-volumes #{partition}" do
new_resource.updated_by_last_action(true)
diff --git a/chef/cookbooks/openstack-common/recipes/default.rb b/chef/cookbooks/openstack-common/recipes/default.rb
index 1f88c08..39af094 100644
--- a/chef/cookbooks/openstack-common/recipes/default.rb
+++ b/chef/cookbooks/openstack-common/recipes/default.rb
@@ -68,7 +68,12 @@ when 'suse'
# Ohai lsb does not work at all on SLES11SP3
# See https://tickets.opscode.com/browse/OHAI-454
# Until then, copy chef's lsb_release parsing code from its lsb module.
- package 'lsb-release'
+ %w{lsb-release}.each do |pkg|
+ r = package pkg do
+ action :nothing
+ end
+ r.run_action(:install)
+ end
Mixlib::ShellOut.new('lsb_release -a').run_command.stdout.split("\n").each do |line|
case line
diff --git a/chef/cookbooks/openstack-compute/attributes/default.rb b/chef/cookbooks/openstack-compute/attributes/default.rb
index 5316791..c4162e9 100644
--- a/chef/cookbooks/openstack-compute/attributes/default.rb
+++ b/chef/cookbooks/openstack-compute/attributes/default.rb
@@ -61,8 +61,8 @@ when 'fedora', 'rhel', 'debian'
default['openstack']['compute']['user'] = 'nova'
default['openstack']['compute']['group'] = 'nova'
when 'suse'
- default['openstack']['compute']['user'] = 'openstack-nova'
- default['openstack']['compute']['group'] = 'openstack-nova'
+ default['openstack']['compute']['user'] = 'nova'
+ default['openstack']['compute']['group'] = 'nova'
end
# Options defined in nova.image.glance
@@ -187,8 +187,13 @@ default['openstack']['compute']['driver'] = 'libvirt.LibvirtDriver'
default['openstack']['compute']['default_ephemeral_format'] = nil
default['openstack']['compute']['preallocate_images'] = 'none'
default['openstack']['compute']['use_cow_images'] = true
-default['openstack']['compute']['vif_plugging_is_fatal'] = 'True'
-default['openstack']['compute']['vif_plugging_timeout'] = 360
+if node['platform'] == 'suse'
+ default['openstack']['compute']['vif_plugging_is_fatal'] = 'False'
+ default['openstack']['compute']['vif_plugging_timeout'] = 10
+else
+ default['openstack']['compute']['vif_plugging_is_fatal'] = 'True'
+ default['openstack']['compute']['vif_plugging_timeout'] = 360
+end
default['openstack']['compute']['libvirt']['virt_type'] = 'kvm'
default['openstack']['compute']['libvirt']['virt_auto'] = false
@@ -375,13 +380,20 @@ when 'fedora', 'rhel', 'suse' # :pragma-foodcritic: ~FC024 - won't fix this
}
if platform_family == 'suse'
default['openstack']['compute']['platform']['mysql_python_packages'] = ['python-mysql']
+ default['openstack']['compute']['platform']['libvirt_packages'] = ['libvirt', 'xrdp']
default['openstack']['compute']['platform']['dbus_service'] = 'dbus'
+ default['openstack']['compute']['platform']['compute_vncproxy_consoleauth_packages'] = ['openstack-nova-console', 'openstack-nova-consoleauth']
+ default['openstack']['compute']['platform']['memcache_python_packages'] = ['python-python-memcached']
default['openstack']['compute']['platform']['neutron_python_packages'] = ['python-neutronclient', 'python-pyparsing']
default['openstack']['compute']['platform']['common_packages'] = ['openstack-nova']
default['openstack']['compute']['platform']['kvm_packages'] = ['kvm']
default['openstack']['compute']['platform']['xen_packages'] = ['kernel-xen', 'xen', 'xen-tools']
default['openstack']['compute']['platform']['lxc_packages'] = ['lxc']
+ default['openstack']['compute']['platform']['mysql_service'] = 'mysql'
default['openstack']['compute']['platform']['nfs_packages'] = ['nfs-utils']
+ default['openstack']['compute']['platform']['api_ec2_service'] = 'openstack-nova-api-ec2'
+ default['openstack']['compute']['platform']['api_os_compute_service'] = 'openstack-nova-api-os-compute'
+ default['openstack']['compute']['platform']['compute_api_metadata_service'] = 'openstack-nova-api-metadata'
end
# Since the bug (https://bugzilla.redhat.com/show_bug.cgi?id=788485) not released in epel yet
# For 'fedora', 'redhat', 'centos', we need set the default value of force_dhcp_release is 'false'
diff --git a/chef/cookbooks/openstack-compute/recipes/libvirt.rb b/chef/cookbooks/openstack-compute/recipes/libvirt.rb
index e3dda04..de2bb3e 100644
--- a/chef/cookbooks/openstack-compute/recipes/libvirt.rb
+++ b/chef/cookbooks/openstack-compute/recipes/libvirt.rb
@@ -122,6 +122,15 @@ when 'suse'
action :upgrade
end
end
+ execute "loading qemu modules" do
+ command "/sbin/modprobe nbd"
+ not_if "/sbin/lsmod | /usr/bin/grep nbd"
+ end
+
+ execute "add nbd module into load on boot" do
+ command "/usr/bin/sysconf_addword /etc/sysconfig/kernel MODULES_LOADED_ON_BOOT nbd"
+ not_if "/usr/bin/grep MODULES_LOADED_ON_BOOT /etc/sysconfig/kernel | /usr/bin/grep nbd"
+ end
when 'lxc'
node['openstack']['compute']['platform']['lxc_packages'].each do |pkg|
diff --git a/chef/cookbooks/openstack-compute/recipes/network.rb b/chef/cookbooks/openstack-compute/recipes/network.rb
index 44a411b..864b751 100644
--- a/chef/cookbooks/openstack-compute/recipes/network.rb
+++ b/chef/cookbooks/openstack-compute/recipes/network.rb
@@ -43,11 +43,8 @@ if node['openstack']['compute']['network']['service_type'] == 'nova'
subscribes :restart, resources('template[/etc/nova/nova.conf]')
action :enable
end
-
else
-
node['openstack']['compute']['network']['plugins'].each do |plugin|
include_recipe "openstack-network::#{plugin}"
end
-
end
diff --git a/chef/cookbooks/openstack-compute/recipes/nova-cert.rb b/chef/cookbooks/openstack-compute/recipes/nova-cert.rb
index 9a33e96..d0e6c73 100644
--- a/chef/cookbooks/openstack-compute/recipes/nova-cert.rb
+++ b/chef/cookbooks/openstack-compute/recipes/nova-cert.rb
@@ -32,7 +32,7 @@ end
service 'nova-cert' do
service_name platform_options['compute_cert_service']
- supports statusi: true, restart: true
+ supports status: true, restart: true
subscribes :restart, resources('template[/etc/nova/nova.conf]')
action :enable
diff --git a/chef/cookbooks/openstack-dashboard/attributes/default.rb b/chef/cookbooks/openstack-dashboard/attributes/default.rb
index 1e16017..01ca3f9 100644
--- a/chef/cookbooks/openstack-dashboard/attributes/default.rb
+++ b/chef/cookbooks/openstack-dashboard/attributes/default.rb
@@ -135,8 +135,13 @@ when 'debian'
end
default['openstack']['dashboard']['dash_path'] = "#{node['openstack']['dashboard']['django_path']}/openstack_dashboard"
-default['openstack']['dashboard']['static_path'] = "#{node['openstack']['dashboard']['django_path']}/static"
-default['openstack']['dashboard']['stylesheet_path'] = '/usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html'
+if node['platform_family'] == 'suse'
+ default['openstack']['dashboard']['static_path'] = "#{node['openstack']['dashboard']['dash_path']}/static"
+ default['openstack']['dashboard']['stylesheet_path'] = "#{node['openstack']['dashboard']['dash_path']}/templates/_stylesheets.html"
+else
+ default['openstack']['dashboard']['static_path'] = "#{node['openstack']['dashboard']['django_path']}/static"
+ default['openstack']['dashboard']['stylesheet_path'] = '/usr/share/openstack-dashboard/openstack_dashboard/templates/_stylesheets.html'
+end
default['openstack']['dashboard']['wsgi_path'] = node['openstack']['dashboard']['dash_path'] + '/wsgi/django.wsgi'
default['openstack']['dashboard']['wsgi_socket_prefix'] = nil
default['openstack']['dashboard']['session_backend'] = 'signed_cookies'
diff --git a/chef/cookbooks/openstack-dashboard/recipes/server.rb b/chef/cookbooks/openstack-dashboard/recipes/server.rb
index 71594ba..2350354 100644
--- a/chef/cookbooks/openstack-dashboard/recipes/server.rb
+++ b/chef/cookbooks/openstack-dashboard/recipes/server.rb
@@ -130,6 +130,16 @@ execute 'openstack-dashboard syncdb' do
end
end
+case node['platform_family']
+when 'suse'
+ execute 'openstack-dashboard compress' do
+ cwd node['openstack']['dashboard']['django_path']
+ environment 'PYTHONPATH' => "/etc/openstack-dashboard:#{node['openstack']['dashboard']['django_path']}:$PYTHONPATH"
+ command 'python manage.py compress'
+ action :run
+ end
+end
+
cert_file = "#{node['openstack']['dashboard']['ssl']['dir']}/certs/#{node['openstack']['dashboard']['ssl']['cert']}"
cert_mode = 00644
cert_owner = 'root'
diff --git a/chef/cookbooks/openstack-identity/attributes/default.rb b/chef/cookbooks/openstack-identity/attributes/default.rb
index b01dcff..28ea08a 100644
--- a/chef/cookbooks/openstack-identity/attributes/default.rb
+++ b/chef/cookbooks/openstack-identity/attributes/default.rb
@@ -201,8 +201,8 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
'package_options' => ''
}
when 'suse'
- default['openstack']['identity']['user'] = 'openstack-keystone'
- default['openstack']['identity']['group'] = 'openstack-keystone'
+ default['openstack']['identity']['user'] = 'keystone'
+ default['openstack']['identity']['group'] = 'keystone'
default['openstack']['identity']['platform'] = {
'mysql_python_packages' => ['python-mysql'],
'postgresql_python_packages' => ['python-psycopg2'],
diff --git a/chef/cookbooks/openstack-image/attributes/default.rb b/chef/cookbooks/openstack-image/attributes/default.rb
index 63125c4..86c83ca 100644
--- a/chef/cookbooks/openstack-image/attributes/default.rb
+++ b/chef/cookbooks/openstack-image/attributes/default.rb
@@ -141,8 +141,8 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
'package_overrides' => ''
}
when 'suse'
- default['openstack']['image']['user'] = 'openstack-glance'
- default['openstack']['image']['group'] = 'openstack-glance'
+ default['openstack']['image']['user'] = 'glance'
+ default['openstack']['image']['group'] = 'glance'
default['openstack']['image']['platform'] = {
'postgresql_python_packages' => ['python-psycopg2'],
'mysql_python_packages' => ['python-mysql'],
diff --git a/chef/cookbooks/openstack-image/recipes/image_upload.rb b/chef/cookbooks/openstack-image/recipes/image_upload.rb
index f717f47..1fe4588 100644
--- a/chef/cookbooks/openstack-image/recipes/image_upload.rb
+++ b/chef/cookbooks/openstack-image/recipes/image_upload.rb
@@ -37,6 +37,13 @@ platform_options['image_client_packages'].each do |pkg|
end
end
+if node['platform_family'] == 'suse'
+ service 'glance-api restart before image upload' do
+ service_name platform_options['image_api_service']
+ action :restart
+ end
+end
+
identity_endpoint = endpoint 'identity-api'
# For glance client, only identity v2 is supported. See discussion on
diff --git a/chef/cookbooks/openstack-network/attributes/default.rb b/chef/cookbooks/openstack-network/attributes/default.rb
index e97d0c1..8d30502 100644
--- a/chef/cookbooks/openstack-network/attributes/default.rb
+++ b/chef/cookbooks/openstack-network/attributes/default.rb
@@ -994,8 +994,8 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
}
when 'suse'
default['openstack']['network']['platform'] = {
- 'user' => 'openstack-neutron',
- 'group' => 'openstack-neutron',
+ 'user' => 'neutron',
+ 'group' => 'neutron',
'mysql_python_packages' => ['python-mysql'],
'postgresql_python_packages' => ['python-psycopg2'],
'nova_network_packages' => ['openstack-nova-network'],
@@ -1011,8 +1011,7 @@ when 'suse'
'neutron_openvswitch_packages' => ['openvswitch-switch'],
'neutron_openvswitch_agent_packages' => ['openstack-neutron-openvswitch-agent'],
'neutron_linuxbridge_agent_packages' => ['openstack-neutron-linuxbridge-agent'],
- 'neutron_metadata_agent_packages' => ['openstack-neutron-metadata-agent'],
- 'neutron_server_packages' => [],
+ 'neutron_server_packages' => ['openstack-neutron-server'],
'neutron_dhcp_agent_service' => 'openstack-neutron-dhcp-agent',
'neutron_l3_agent_service' => 'openstack-neutron-l3-agent',
'neutron_lb_agent_service' => 'openstack-neutron-lbaas-agent',
diff --git a/chef/cookbooks/openstack-network/recipes/common.rb b/chef/cookbooks/openstack-network/recipes/common.rb
index 3aab2ae..84c9648 100644
--- a/chef/cookbooks/openstack-network/recipes/common.rb
+++ b/chef/cookbooks/openstack-network/recipes/common.rb
@@ -421,7 +421,7 @@ link plugin_file do
owner node['openstack']['network']['platform']['user']
group node['openstack']['network']['platform']['group']
action :nothing
- only_if { platform_family? %w{fedora rhel} }
+ only_if { platform_family? %w{fedora rhel suse debian} }
end
node.set['openstack']['network']['plugin_config_file'] = template_file
diff --git a/chef/cookbooks/openstack-network/recipes/metadata_agent.rb b/chef/cookbooks/openstack-network/recipes/metadata_agent.rb
index 2da97eb..f4902cf 100644
--- a/chef/cookbooks/openstack-network/recipes/metadata_agent.rb
+++ b/chef/cookbooks/openstack-network/recipes/metadata_agent.rb
@@ -29,6 +29,13 @@ service_pass = get_password 'service', 'openstack-network'
metadata_secret = get_secret node['openstack']['network']['metadata']['secret_name']
compute_api_endpoint = endpoint 'compute-api' || {}
+platform_options['neutron_metadata_agent_packages'].each do |pkg|
+ package pkg do
+ action :upgrade
+ options platform_options['package_overrides']
+ end
+end
+
template '/etc/neutron/metadata_agent.ini' do
source 'metadata_agent.ini.erb'
owner node['openstack']['network']['platform']['user']
@@ -44,13 +51,6 @@ template '/etc/neutron/metadata_agent.ini' do
action :create
end
-platform_options['neutron_metadata_agent_packages'].each do |pkg|
- package pkg do
- action :upgrade
- options platform_options['package_overrides']
- end
-end
-
service 'neutron-metadata-agent' do
service_name platform_options['neutron_metadata_agent_service']
supports status: true, restart: true
diff --git a/chef/cookbooks/openstack-network/recipes/openvswitch.rb b/chef/cookbooks/openstack-network/recipes/openvswitch.rb
index 99d511f..edbe381 100644
--- a/chef/cookbooks/openstack-network/recipes/openvswitch.rb
+++ b/chef/cookbooks/openstack-network/recipes/openvswitch.rb
@@ -114,7 +114,15 @@ template '/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini' do
variables(
local_ip: openvswitch
)
- only_if { platform_family?('rhel') }
+ only_if { platform_family?('rhel', 'suse', 'debian') }
+end
+
+template '/etc/init/neutron-plugin-openvswitch-agent.conf' do
+ source 'neutron-plugin-openvswitch-agent.conf.erb'
+ owner 'root'
+ group 'root'
+ mode 00644
+ only_if { platform_family?('debian') }
end
service 'neutron-plugin-openvswitch-agent' do
@@ -122,9 +130,12 @@ service 'neutron-plugin-openvswitch-agent' do
supports status: true, restart: true
action :enable
subscribes :restart, 'template[/etc/neutron/neutron.conf]'
- if platform_family?('rhel')
+ if platform_family?('rhel', 'suse', 'debian')
subscribes :restart, 'template[/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini]'
end
+ if platform_family?('debian')
+ subscribes :restart, 'template[/etc/init/neutron-plugin-openvswitch-agent.conf]'
+ end
end
execute "chkconfig openvswitch on" do
@@ -164,7 +175,7 @@ unless ['nicira', 'plumgrid', 'bigswitch'].include?(main_plugin)
ignore_failure true
command cmd
action :run
- not_if "ovs-vsctl brexists #{bridge}"
+ not_if "ovs-vsctl br-exists #{bridge}"
notifies :restart, "service[neutron-plugin-openvswitch-agent]", :delayed
end
end
diff --git a/chef/cookbooks/openstack-network/templates/default/neutron-plugin-openvswitch-agent.conf.erb b/chef/cookbooks/openstack-network/templates/default/neutron-plugin-openvswitch-agent.conf.erb
new file mode 100644
index 0000000..17c5cce
--- /dev/null
+++ b/chef/cookbooks/openstack-network/templates/default/neutron-plugin-openvswitch-agent.conf.erb
@@ -0,0 +1,16 @@
+description "Neutron OpenvSwitch Plugin Agent"
+author "Chuck Short "
+
+start on runlevel [2345] and started neutron-ovs-cleanup
+stop on runlevel [!2345]
+
+respawn
+
+chdir /var/run
+
+pre-start script
+ mkdir -p /var/run/neutron
+ chown neutron:root /var/run/neutron
+end script
+
+exec start-stop-daemon --start --chuid neutron --exec /usr/bin/neutron-openvswitch-agent -- --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini --log-file=/var/log/neutron/openvswitch-agent.log
diff --git a/chef/cookbooks/openstack-object-storage/attributes/default.rb b/chef/cookbooks/openstack-object-storage/attributes/default.rb
index a435990..f6fb06c 100644
--- a/chef/cookbooks/openstack-object-storage/attributes/default.rb
+++ b/chef/cookbooks/openstack-object-storage/attributes/default.rb
@@ -309,6 +309,27 @@ when 'centos'
'override_options' => '',
'swift_statsd_publish' => '/usr/bin/swift-statsd-publish.py'
}
+when 'suse'
+ default['openstack']['object-storage']['platform'] = {
+ 'disk_format' => 'xfs',
+ 'proxy_packages' => %w{openstack-swift-proxy sudo python-iso8601 python-python-memcached},
+ 'object_packages' => %w{openstack-swift-object sudo python-iso8601},
+ 'container_packages' => %w{openstack-swift-container sudo python-iso8601},
+ 'account_packages' => %w{openstack-swift-account sudo cronie python-iso8601},
+ 'swift_packages' => %w{openstack-swift sudo python-iso8601},
+ 'swift_client_packages' => ['python-swiftclient'],
+ 'swauth_packages' => %w{python-swauth sudo python-iso8601},
+ 'rsync_packages' => ['rsync'],
+ 'git_packages' => ['xinetd', 'git-core'],
+ 'service_prefix' => 'openstack-',
+ 'service_suffix' => '',
+ 'git_dir' => '/var/lib/git',
+ 'git_service' => 'git',
+ 'service_provider' => Chef::Provider::Service::Redhat,
+ 'override_options' => '',
+ 'swift_statsd_publish' => '/usr/bin/swift-statsd-publish.py'
+ }
+
when 'fedora'
default['openstack']['object-storage']['platform'] = {
'disk_format' => 'xfs',
diff --git a/chef/cookbooks/openstack-ops-database/recipes/mysql-server.rb b/chef/cookbooks/openstack-ops-database/recipes/mysql-server.rb
index 840f8d0..b7a3c18 100644
--- a/chef/cookbooks/openstack-ops-database/recipes/mysql-server.rb
+++ b/chef/cookbooks/openstack-ops-database/recipes/mysql-server.rb
@@ -45,6 +45,8 @@ when 'debian'
mycnf_template = '/etc/mysql/my.cnf'
when 'rhel'
mycnf_template = 'final-my.cnf'
+when 'suse'
+ mycnf_template = 'final-my.cnf'
end
r = resources("template[#{mycnf_template}]")
@@ -59,10 +61,12 @@ end
mysql_connection_info = {
host: 'localhost',
username: 'root',
- password: super_password
+ password: super_password,
+ socket: node['mysql']['server']['socket']
}
mysql_database 'FLUSH PRIVILEGES' do
+ database_name 'mysql'
connection mysql_connection_info
sql 'FLUSH PRIVILEGES'
action :query
@@ -74,6 +78,7 @@ end
#
# http://bugs.mysql.com/bug.php?id=69644
mysql_database 'drop empty localhost user' do
+ database_name 'mysql'
sql "DELETE FROM mysql.user WHERE User = '' OR Password = ''"
connection mysql_connection_info
action :query
@@ -85,6 +90,7 @@ mysql_database 'test' do
end
mysql_database 'FLUSH PRIVILEGES' do
+ database_name 'mysql'
connection mysql_connection_info
sql 'FLUSH PRIVILEGES'
action :query
diff --git a/chef/cookbooks/openstack-orchestration/attributes/default.rb b/chef/cookbooks/openstack-orchestration/attributes/default.rb
index 8c7fd47..f4e2587 100644
--- a/chef/cookbooks/openstack-orchestration/attributes/default.rb
+++ b/chef/cookbooks/openstack-orchestration/attributes/default.rb
@@ -97,6 +97,26 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
'heat_api_process_name' => 'heat-api',
'package_overrides' => ''
}
+when 'suse'
+ default['openstack']['orchestration']['user'] = 'heat'
+ default['openstack']['orchestration']['group'] = 'heat'
+ default['openstack']['orchestration']['platform'] = {
+ 'mysql_python_packages' => ['python-mysql'],
+ 'postgresql_python_packages' => ['python-psycopg2'],
+ 'heat_common_packages' => ['openstack-heat'],
+ 'heat_client_packages' => ['python-heatclient'],
+ 'heat_api_packages' => ['python-heatclient', 'openstack-heat-api'],
+ 'heat_api_service' => 'openstack-heat-api',
+ 'heat_api_cfn_packages' => ['python-heatclient', 'openstack-heat-api-cfn'],
+ 'heat_api_cfn_service' => 'openstack-heat-api-cfn',
+ 'heat_api_cloudwatch_packages' => ['python-heatclient', 'openstack-heat-api-cloudwatch'],
+ 'heat_api_cloudwatch_service' => 'openstack-heat-api-cloudwatch',
+ 'heat_engine_packages' => ['openstack-heat-engine'],
+ 'heat_engine_service' => 'openstack-heat-engine',
+ 'heat_api_process_name' => 'heat-api',
+ 'package_overrides' => ''
+ }
+
when 'debian'
default['openstack']['orchestration']['user'] = 'heat'
default['openstack']['orchestration']['group'] = 'heat'
diff --git a/chef/cookbooks/postgresql/attributes/default.rb b/chef/cookbooks/postgresql/attributes/default.rb
index ce23614..3eb412a 100644
--- a/chef/cookbooks/postgresql/attributes/default.rb
+++ b/chef/cookbooks/postgresql/attributes/default.rb
@@ -128,7 +128,7 @@ when "suse"
end
default['postgresql']['dir'] = "/var/lib/pgsql/data"
- default['postgresql']['client']['packages'] = %w{postgresql-devel}
+ default['postgresql']['client']['packages'] = %w{postgresql}
default['postgresql']['server']['packages'] = %w{postgresql-server}
default['postgresql']['contrib']['packages'] = %w{postgresql-contrib}
default['postgresql']['server']['service_name'] = "postgresql"
diff --git a/chef/cookbooks/python/recipes/pip.rb b/chef/cookbooks/python/recipes/pip.rb
index 17110fa..9069281 100644
--- a/chef/cookbooks/python/recipes/pip.rb
+++ b/chef/cookbooks/python/recipes/pip.rb
@@ -25,7 +25,7 @@
if node['python']['install_method'] == 'source'
pip_binary = "#{node['python']['prefix_dir']}/bin/pip"
-elsif platform_family?("rhel", "fedora")
+elsif platform_family?("rhel", "fedora", "suse")
pip_binary = "/usr/bin/pip"
elsif platform_family?("smartos")
pip_binary = "/opt/local/bin/pip"
diff --git a/chef/cookbooks/sysctl/mysql/attributes/server.rb b/chef/cookbooks/sysctl/mysql/attributes/server.rb
index 0bf9903..b7eef08 100644
--- a/chef/cookbooks/sysctl/mysql/attributes/server.rb
+++ b/chef/cookbooks/sysctl/mysql/attributes/server.rb
@@ -23,8 +23,8 @@ default["susan2"]=0
default['mysql']['bind_address'] = attribute?('cloud') ? cloud['local_ipv4'] : node["network"]["interfaces"]["eth1"]["addresses"].keys[1]
default['mysql']['port'] = 3306
-case node["platform"]
-when "centos", "redhat", "fedora", "suse", "scientific", "amazon"
+case node["platform_family"]
+when 'rhel'
default['mysql']['package_name'] = "mysql-server"
default['mysql']['service_name'] = "mysqld"
default['mysql']['basedir'] = "/usr"
@@ -39,9 +39,22 @@ when "centos", "redhat", "fedora", "suse", "scientific", "amazon"
set['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid"
set['mysql']['old_passwords'] = 1
set['mysql']['grants_path'] = "/etc/mysql_grants.sql"
- # RHEL/CentOS mysql package does not support this option.
- set['mysql']['tunable']['innodb_adaptive_flushing'] = false
-when "freebsd"
+when 'debian'
+ default['mysql']['package_name'] = "mysql-server"
+ default['mysql']['service_name'] = "mysql"
+ default['mysql']['basedir'] = "/usr"
+ default['mysql']['data_dir'] = "/var/lib/mysql"
+ default['mysql']['root_group'] = "root"
+ default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin"
+ default['mysql']['mysql_bin'] = "/usr/bin/mysql"
+
+ set['mysql']['conf_dir'] = '/etc/mysql'
+ set['mysql']['confd_dir'] = '/etc/mysql/conf.d'
+ set['mysql']['socket'] = "/var/run/mysqld/mysqld.sock"
+ set['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid"
+ set['mysql']['old_passwords'] = 0
+ set['mysql']['grants_path'] = "/etc/mysql_grants.sql"
+when 'freebsd'
default['mysql']['package_name'] = "mysql55-server"
default['mysql']['service_name'] = "mysql-server"
default['mysql']['basedir'] = "/usr/local"
@@ -56,23 +69,6 @@ when "freebsd"
set['mysql']['pid_file'] = "/var/run/mysqld/mysqld.pid"
set['mysql']['old_passwords'] = 0
set['mysql']['grants_path'] = "/var/db/mysql/grants.sql"
-when "windows"
- default['mysql']['package_name'] = "MySQL Server 5.5"
- default['mysql']['version'] = '5.5.21'
- default['mysql']['arch'] = 'win32'
- default['mysql']['package_file'] = "mysql-#{mysql['version']}-#{mysql['arch']}.msi"
- default['mysql']['url'] = "http://www.mysql.com/get/Downloads/MySQL-5.5/#{mysql['package_file']}/from/http://mysql.mirrors.pair.com/"
-
- default['mysql']['service_name'] = "mysql"
- default['mysql']['basedir'] = "#{ENV['SYSTEMDRIVE']}\\Program Files (x86)\\MySQL\\#{mysql['package_name']}"
- default['mysql']['data_dir'] = "#{mysql['basedir']}\\Data"
- default['mysql']['bin_dir'] = "#{mysql['basedir']}\\bin"
- default['mysql']['mysqladmin_bin'] = "#{mysql['bin_dir']}\\mysqladmin"
- default['mysql']['mysql_bin'] = "#{mysql['bin_dir']}\\mysql"
-
- default['mysql']['conf_dir'] = "#{mysql['basedir']}"
- default['mysql']['old_passwords'] = 0
- default['mysql']['grants_path'] = "#{mysql['conf_dir']}\\grants.sql"
when "mac_os_x"
default['mysql']['package_name'] = "mysql"
default['mysql']['basedir'] = "/usr/local/Cellar"
@@ -80,6 +76,40 @@ when "mac_os_x"
default['mysql']['root_group'] = "admin"
default['mysql']['mysqladmin_bin'] = "/usr/local/bin/mysqladmin"
default['mysql']['mysql_bin'] = "/usr/local/bin/mysql"
+when 'suse'
+ default['mysql']['package_name'] = "mysql-server"
+ default['mysql']['service_name'] = "mysql"
+ default['mysql']['basedir'] = "/usr"
+ default['mysql']['data_dir'] = "/var/lib/mysql"
+ default['mysql']['root_group'] = "root"
+ default['mysql']['mysqladmin_bin'] = "/usr/bin/mysqladmin"
+ default['mysql']['mysql_bin'] = "/usr/bin/mysql"
+
+ set['mysql']['conf_dir'] = '/etc'
+ set['mysql']['confd_dir'] = '/etc/mysql/conf.d'
+ set['mysql']['socket'] = "/var/run/mysql/mysql.sock"
+ set['mysql']['pid_file'] = "/var/run/mysql/mysqld.pid"
+ set['mysql']['old_passwords'] = 1
+ set['mysql']['grants_path'] = "/etc/mysql_grants.sql"
+when 'windows'
+ default['mysql']['package_name'] = "MySQL Server 5.5"
+ default['mysql']['service_name'] = "mysql"
+ default['mysql']['version'] = '5.5.34'
+ default['mysql']['arch'] = node['kernel']['machine'] == 'x86_64' ? 'winx64' : 'win32'
+ default['mysql']['package_file'] = "mysql-#{node['mysql']['version']}-#{node['mysql']['arch']}.msi"
+ default['mysql']['url'] = "http://www.mysql.com/get/Downloads/MySQL-5.5/#{node['mysql']['package_file']}"
+
+ default['mysql']['programdir'] = node['kernel']['machine'] == 'x86_64' ? 'Program Files' : 'Program Files (x86)'
+ default['mysql']['service_name'] = "mysql"
+ default['mysql']['basedir'] = "#{ENV['SYSTEMDRIVE']}\\#{node['mysql']['programdir']}\\MySQL\\#{mysql['package_name']}"
+ default['mysql']['data_dir'] = "#{ENV['ProgramData']}\\MySQL\\#{node['mysql']['package_name']}\\Data"
+ default['mysql']['bin_dir'] = "#{mysql['basedir']}\\bin"
+ default['mysql']['mysqladmin_bin'] = "#{mysql['bin_dir']}\\mysqladmin"
+ default['mysql']['mysql_bin'] = "#{mysql['bin_dir']}\\mysql"
+
+ default['mysql']['conf_dir'] = "#{mysql['basedir']}"
+ default['mysql']['old_passwords'] = 0
+ default['mysql']['grants_path'] = "#{mysql['conf_dir']}\\grants.sql"
else
default['mysql']['package_name'] = "mysql-server"
default['mysql']['service_name'] = "mysql"
diff --git a/chef/cookbooks/xfs/recipes/default.rb b/chef/cookbooks/xfs/recipes/default.rb
index d738282..767432d 100644
--- a/chef/cookbooks/xfs/recipes/default.rb
+++ b/chef/cookbooks/xfs/recipes/default.rb
@@ -25,4 +25,7 @@ when "debian"
package "xfslibs-dev"
when "rhel", "fedora"
package"xfsprogs-devel"
+when "suse"
+ package "xfsdump"
+ package "xfsprogs"
end