Greg Karékinian ff3d062c73 Update users cookbook and poise cookbooks
The poise cookbooks were incompatible with Chef 13
2017-06-16 15:50:13 +02:00

160 lines
4.8 KiB
Ruby

#
# Copyright 2015-2017, Noah Kantrowitz
#
# 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'
require 'chef/provider'
require 'poise'
module PoiseLanguages
module Scl
# A `poise_language_scl` resource to manage installing a language from
# SCL packages. This is an internal implementation detail of
# poise-languages.
#
# @api private
# @since 1.0
# @provides poise_languages_scl
# @action install
# @action uninstall
class Resource < Chef::Resource
include Poise
provides(:poise_languages_scl)
actions(:install, :upgrade, :uninstall)
# @!attribute package_name
# Name of the SCL package for the language.
# @return [String]
attribute(:package_name, kind_of: String, name_attribute: true)
# @!attribute dev_package
# Name of the -devel package with headers and whatnot.
# @return [String, nil]
attribute(:dev_package, kind_of: [String, NilClass])
# @!attribute version
# Version of the SCL package(s) to install. If unset, follows the same
# semantics as the core `package` resource.
# @return [String, nil]
attribute(:version, kind_of: [String, NilClass])
# @!attribute parent
# Resource for the language runtime. Used only for messages.
# @return [Chef::Resource]
attribute(:parent, kind_of: Chef::Resource, required: true)
end
# The default provider for `poise_languages_scl`.
#
# @api private
# @since 1.0
# @see Resource
# @provides poise_languages_scl
class Provider < Chef::Provider
include Poise
provides(:poise_languages_scl)
# The `install` action for the `poise_languages_scl` resource.
#
# @return [void]
def action_install
notifying_block do
install_scl_repo
flush_yum_cache
install_scl_package(:install)
install_scl_devel_package(:install) if new_resource.dev_package
end
end
# The `upgrade` action for the `poise_languages_scl` resource.
#
# @return [void]
def action_upgrade
notifying_block do
install_scl_repo
flush_yum_cache
install_scl_package(:upgrade)
install_scl_devel_package(:upgrade) if new_resource.dev_package
end
end
# The `uninstall` action for the `poise_languages_scl` resource.
#
# @return [void]
def action_uninstall
notifying_block do
uninstall_scl_devel_package if new_resource.dev_package
uninstall_scl_package
end
end
private
def install_scl_repo
if node.platform?('redhat')
# Set up the real RHSCL subscription.
# NOTE: THIS IS NOT TESTED BECAUSE REDHAT DOESN'T OFFER ANY WAY TO DO
# AUTOMATED TESTING. IF YOU USE REDHAT AND THIS BREAKS, PLEASE LET ME
# KNOW BY FILING A GITHUB ISSUE AT http://github.com/poise/poise-languages/issues/new.
repo_name = "rhel-server-rhscl-#{node['platform_version'][0]}-rpms"
execute "subscription-manager repos --enable #{repo_name}" do
not_if { shell_out!('subscription-manager repos --list-enabled').stdout.include?(repo_name) }
end
else
package 'centos-release-scl-rh' do
# Using upgrade here because changes very very rare and always
# important when they happen. If this breaks your prod infra, I'm
# sorry :-(
action :upgrade
retries 5
end
end
end
def flush_yum_cache
ruby_block 'flush_yum_cache' do
block do
# Equivalent to flush_cache after: true
Chef::Provider::Package::Yum::YumCache.instance.reload
end
end
end
def install_scl_package(action)
package new_resource.package_name do
action action
retries 5
version new_resource.version
end
end
def install_scl_devel_package(action)
package new_resource.dev_package do
action action
retries 5
version new_resource.version
end
end
def uninstall_scl_package
install_scl_package(:remove)
end
def uninstall_scl_devel_package
install_scl_devel_package(:remove)
end
end
end
end