From 2223cc9df65b7fe7d063e1d551e8907e0b252f6e Mon Sep 17 00:00:00 2001 From: Carmela Rubinos Date: Mon, 17 Aug 2015 16:12:23 +0200 Subject: [PATCH] Add patch to fix dependencies handling on custom provider This patch adds a new Puppet.feature called faraday based on this: https://projects.puppetlabs.com/issues/14822 , which allows to make dependencies available during the puppet run to be used by the custom providers/types without needing successive runs or failing catalog compilation. Change-Id: I1f84aa3133605abb38d697c1a593216aafe3e7ef --- data/osfamily/RedHat/7.yaml | 6 +++++ data/osfamily/RedHat/common.yaml | 9 +++++++ lib/puppet/feature/faraday.rb | 1 + .../midonet_api_caller.rb | 4 ++- manifests/init.pp | 27 +++++++++++++++---- 5 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 lib/puppet/feature/faraday.rb diff --git a/data/osfamily/RedHat/7.yaml b/data/osfamily/RedHat/7.yaml index 42f2237..4e755b3 100644 --- a/data/osfamily/RedHat/7.yaml +++ b/data/osfamily/RedHat/7.yaml @@ -2,3 +2,9 @@ # Repository-based attributes midonet::repository::midonet_openstack_repo: 'http://repo.midonet.org/openstack-juno/RHEL' midonet::repository::openstack_release: 'juno' +# Temporary source for faraday package and dependencies until it gets included +# in EPEL repositories +midonet::faraday_package: 'ruby193-rubygem-faraday' +midonet::faraday_url: 'http://yum.theforeman.org/nightly/el7/x86_64/ruby193-rubygem-faraday-0.9.1-1.el7.noarch.rpm' +midonet::multipart_post_package: 'ruby193-rubygem-multipart-post' +midonet::multipart_post_url: 'http://yum.theforeman.org/nightly/el7/x86_64/ruby193-rubygem-multipart-post-1.2.0-2.el7.noarch.rpm' diff --git a/data/osfamily/RedHat/common.yaml b/data/osfamily/RedHat/common.yaml index 79e6a9f..4386b21 100644 --- a/data/osfamily/RedHat/common.yaml +++ b/data/osfamily/RedHat/common.yaml @@ -6,6 +6,8 @@ midonet::repository::midonet_repo: 'http://repo.midonet.org/midonet/v2015.06/RHE midonet::repository::midonet_thirdparty_repo: 'http://repo.midonet.org/misc/RHEL' midonet::repository::midonet_stage: 'stable' midonet::repository::midonet_key_url: 'http://repo.midonet.org/packages.midokura.key' +midonet::repository::midonet_openstack_repo: 'http://repo.midonet.org/openstack-juno/RHEL' +midonet::repository::openstack_release: 'juno' # Midonet Host Agent-based attributes midonet::midonet_agent::zk_servers: @@ -32,3 +34,10 @@ midonet::neutron_plugin::project_id: 'service' midonet::cassandra::pid_dir: '/var/run/cassandra' midonet::cassandra::conf_dir: '/etc/cassandra/default.conf' midonet::cassandra::service_path: '/sbin' + +# Temporary source for faraday package and dependencies until it gets included +# in EPEL repositories +midonet::faraday_package: 'ruby193-rubygem-faraday' +midonet::faraday_url: 'http://yum.theforeman.org/nightly/el7/x86_64/ruby193-rubygem-faraday-0.9.1-1.el7.noarch.rpm' +midonet::multipart_post_package: 'ruby193-rubygem-multipart-post' +midonet::multipart_post_url: 'http://yum.theforeman.org/nightly/el7/x86_64/ruby193-rubygem-multipart-post-1.2.0-2.el7.noarch.rpm' diff --git a/lib/puppet/feature/faraday.rb b/lib/puppet/feature/faraday.rb new file mode 100644 index 0000000..cae8fb9 --- /dev/null +++ b/lib/puppet/feature/faraday.rb @@ -0,0 +1 @@ +Puppet.features.add(:faraday, :libs => ["faraday"]) diff --git a/lib/puppet/provider/midonet_host_registry/midonet_api_caller.rb b/lib/puppet/provider/midonet_host_registry/midonet_api_caller.rb index 04ad489..21112e3 100644 --- a/lib/puppet/provider/midonet_host_registry/midonet_api_caller.rb +++ b/lib/puppet/provider/midonet_host_registry/midonet_api_caller.rb @@ -3,11 +3,13 @@ if RUBY_VERSION == '1.8.7' end require 'uri' -require 'faraday' +require 'faraday' if Puppet.features.faraday? require 'json' Puppet::Type.type(:midonet_host_registry).provide(:midonet_api_caller) do + confine :feature => :faraday + def create define_connection(resource[:midonet_api_url]) tz = call_get_tunnelzone() diff --git a/manifests/init.pp b/manifests/init.pp index 646b13a..242caea 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -64,14 +64,31 @@ class midonet { # Add midonet-cli class {'midonet::midonet_cli':} - if ! defined(Package['faraday']) { - package { 'faraday': - ensure => present, - provider => 'gem', - before => Midonet_host_registry[$::hostname] +# TODO(carmela): This workaround has been added in order to be able to handle +# dependencies on the custom providers. Currently there's no official faraday +# package for RHEL-based. We are working on getting it included in EPEL repos. +# Detailed info: https://midonet.atlassian.net/browse/PUP-30 + + if ! defined(Package["hiera('midonet::faraday', 'ruby-faraday')"]) { + if $::osfamily == 'RedHat' { + package { "hiera('midonet::multipart', 'rubygem-multipart-post')": + ensure => present, + source => "hiera('midonet::multipart_post_url'" + } -> + package { "hiera('midonet::faraday', 'ruby-faraday')": + ensure => present, + source => "hiera('midonet::faraday_url')" + } + } + else { + package { 'ruby-faraday': + ensure => present, + before => Midonet_host_registry[$::hostname] + } } } + # Register the host midonet_host_registry { $::hostname: ensure => present,