summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2018-03-16 13:44:17 -0700
committerTim Smith <tsmith@chef.io>2018-03-16 13:44:17 -0700
commit325261d2cc11b922b38bcf9d88263c463412605a (patch)
tree92b5abffc2a139ae83b11601c1dcaa5dc54f39bd
parent599f0dfec0c8c2b0d6d6eaf2a594abeebf40ff66 (diff)
downloadchef-php.tar.gz
Add php_pear and php_pear_channel resourcesphp
These are from the php cookbook Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--lib/chef/resource/php_pear.rb133
-rw-r--r--lib/chef/resource/php_pear_channel.rb103
2 files changed, 236 insertions, 0 deletions
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 <schisamo@chef.io>
+# Cookbook:: php
+# Resource:: pear_package
+#
+# Copyright:: 2011-2016, Chef Software, Inc <legal@chef.io>
+#
+# 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 <schisamo@chef.io>
+# Author:: Jennifer Davis <sigje@chef.io>
+#
+# Copyright:: 2011-2017, Chef Software, Inc <legal@chef.io>
+#
+# 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