php-fpm.rb 2.3 KB
#
# Author:: Earth U (<sysadmin@chromedia.com>)
# Cookbook Name:: cfe-nginx-php-fpm
# Recipe:: php-fpm
#
# Copyright 2016, Chromedia Far East, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

def mash_to_hash(mash)
  mash.inject({}) do |acc, (k, v)|
    acc[k] = v.is_a?(Hash) ? mash_to_hash(v) : v
    acc
  end
end

# Set derived attribute defaults inside recipe

node.default['php-fpm']['user']  = node['nginx']['user']
node.default['php-fpm']['group'] = node['nginx']['group']

if node['php-fpm']['pools']
  is_hash = node['php-fpm']['pools'].is_a?(Hash) # either Hash or Array
  meth = node['php-fpm']['pools'].method( is_hash ? :each : :each_with_index )
  meth.call do |el1, el2|
    key   = is_hash ? el1 : el2
    pool  = is_hash ? el2 : el1
    pool2 = mash_to_hash(pool)

    pool2['user']   = node['nginx']['user'] unless pool['user']
    pool2['group']  = node['nginx']['user'] unless pool['group']
    pool2['listen'] =
      node['cfe-nginx-php-fpm']['php_fastcgi_socket'] unless pool['listen']

    node.default['php-fpm']['pools'][key] = pool2
  end
end

# Begin server configuration

package 'openssl'
include_recipe 'php-fpm'

# For Ubuntu 14.04 Upstart bug where PHP service does not respond
# well to the reload command.
# (Or maybe just delete /etc/init.d/php5-fpm?)
if node['platform'] == 'ubuntu' and node['platform_version'].to_f == 14.04
  file '/etc/init/php5-fpm.override' do
    content "reload signal USR2\n"
    action  :create_if_missing
  end
end

if node['cfe-nginx-php-fpm']['php-fpm']['delete_pool_www']
  www = "#{node['php-fpm']['pool_conf_dir']}/www.conf"
  file 'delete_pool_www' do
    path     www
    action   :delete
    only_if  { ::File.exist?(www) }
    notifies :restart, 'service[php-fpm]'
  end
end

# Some default PHP extensions
php_ext 'mysql'
php_ext 'cli'
php_ext 'curl' do
  action :upgrade
end