From 325261d2cc11b922b38bcf9d88263c463412605a Mon Sep 17 00:00:00 2001 From: Tim Smith Date: Fri, 16 Mar 2018 13:44:17 -0700 Subject: Add php_pear and php_pear_channel resources These are from the php cookbook Signed-off-by: Tim Smith --- lib/chef/resource/php_pear.rb | 133 ++++++++++++++++++++++++++++++++++ lib/chef/resource/php_pear_channel.rb | 103 ++++++++++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 lib/chef/resource/php_pear.rb create mode 100644 lib/chef/resource/php_pear_channel.rb diff --git a/lib/chef/resource/php_pear.rb b/lib/chef/resource/php_pear.rb new file mode 100644 index 0000000000..4453a1105c --- /dev/null +++ b/lib/chef/resource/php_pear.rb @@ -0,0 +1,133 @@ +# +# Author:: Seth Chisamore +# Cookbook:: php +# Resource:: pear_package +# +# Copyright:: 2011-2016, Chef Software, 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. +# + +require "chef/resource" + +class Chef + class Resource + class PhpPear < Chef::Resource + resource_name :php_pear + provides :php_pear + + description "" + introduced "14.0" + + property :package_name, String, + description: "", + name_property: true + + property :version, String, + description: "" + + property :channel, String, + description: "" + + property :options, String, + description: "" + + property :directives, Hash, + description: "", + default: {} + + property :zend_extensions, Array, + description: "", + default: [] + + property :preferred_state, String, + description: "", + default: "stable" + + property :binary, String, + description: "", + default: "pear" + + property :priority, String, + description: "" + + include Chef::Mixin::PhpPear + + load_current_value do |new_resource| + unless current_installed_version(new_resource).nil? + version(current_installed_version(new_resource)) + Chef::Log.debug("Current version is #{version}") if version + end + end + + action :install do + # If we specified a version, and it's not the current version, move to the specified version + install_version = new_resource.version unless new_resource.version.nil? || new_resource.version == current_resource.version + # Check if the version we want is already installed + versions_match = candidate_version == current_installed_version(new_resource) + + # If it's not installed at all or an upgrade, install it + if install_version || new_resource.version.nil? && !versions_match + converge_by("install package #{new_resource.package_name} #{install_version}") do + info_output = "Installing #{new_resource.package_name}" + info_output << " version #{install_version}" if install_version && !install_version.empty? + Chef::Log.info(info_output) + install_package(new_resource.package_name, install_version) + not_if { versions_match } + end + end + end + + # reinstall is just an install that always fires + action :reinstall do + install_version = new_resource.version unless new_resource.version.nil? + converge_by("reinstall package #{new_resource.package_name} #{install_version}") do + info_output = "Installing #{new_resource.package_name}" + info_output << " version #{install_version}" if install_version && !install_version.empty? + Chef::Log.info(info_output) + install_package(new_resource.package_name, install_version, force: true) + end + end + + action :upgrade do + if current_resource.version != candidate_version + orig_version = @current_resource.version || "uninstalled" + description = "upgrade package #{new_resource.package_name} version from #{orig_version} to #{candidate_version}" + converge_by(description) do + upgrade_package(new_resource.package_name, candidate_version) + end + end + end + + action :remove do + if removing_package? + converge_by("remove package #{new_resource.package_name}") do + remove_package(@current_resource.package_name, new_resource.version) + end + end + end + + action :purge do + if removing_package? + converge_by("purge package #{new_resource.package_name}") do + remove_package(@current_resource.package_name, new_resource.version) + end + end + end + + action_class do + include Chef::Mixin::PhpPear + end + end + end +end diff --git a/lib/chef/resource/php_pear_channel.rb b/lib/chef/resource/php_pear_channel.rb new file mode 100644 index 0000000000..3ac077588e --- /dev/null +++ b/lib/chef/resource/php_pear_channel.rb @@ -0,0 +1,103 @@ +# +# Author:: Seth Chisamore +# Author:: Jennifer Davis +# +# Copyright:: 2011-2017, Chef Software, 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. +# + +require "chef/resource" + +class Chef + class Resource + class PhpPearChannel < Chef::Resource + resource_name :php_pear_channel + provides :php_pear_channel + + description "" + introduced "14.0" + + property :channel_xml, String, + description: "" + + property :channel_name, String, + description: "", + name_property: true + + property :binary, String, + description: "", + default: "pear" + + # @todo add authenticated channel support! + # property :username, :kind_of => String + # property :password, :kind_of => String + + action :discover do + unless exists? + Chef::Log.info("Discovering pear channel #{new_resource}") + execute "#{new_resource.binary} channel-discover #{new_resource.channel_name}" do + action :run + end + end + end + + action :add do + unless exists? + Chef::Log.info("Adding pear channel #{new_resource} from #{new_resource.channel_xml}") + execute "#{new_resource.binary} channel-add #{new_resource.channel_xml}" do + action :run + end + end + end + + action :update do + if exists? + update_needed = false + begin + update_needed = true if shell_out("#{new_resource.binary} search -c #{new_resource.channel_name} NNNNNN").stdout =~ /channel-update/ + rescue Chef::Exceptions::CommandTimeout + # CentOS can hang on 'pear search' if a channel needs updating + Chef::Log.info("Timed out checking if channel-update needed...forcing update of pear channel #{new_resource}") + update_needed = true + end + if update_needed + description = "update pear channel #{new_resource}" + converge_by(description) do + Chef::Log.info("Updating pear channel #{new_resource}") + shell_out!("#{new_resource.binary} channel-update #{new_resource.channel_name}") + end + end + end + end + + action :remove do + if exists? + Chef::Log.info("Deleting pear channel #{new_resource}") + execute "#{new_resource.binary} channel-delete #{new_resource.channel_name}" do + action :run + end + end + end + + action_class do + def exists? + shell_out!("#{new_resource.binary} channel-info #{new_resource.channel_name}") + true + rescue Mixlib::ShellOut::ShellCommandFailed + false + end + end + end + end +end -- cgit v1.2.1