[openstack-puppet-modules] Updated to 2014.1-17

Martin Mágr mmagr at fedoraproject.org
Wed Jun 25 13:52:49 UTC 2014


commit dd7e538fe759d2c6302c491d4c5d392e9f9dd06d
Author: Martin Magr <mmagr at redhat.com>
Date:   Wed Jun 25 15:52:28 2014 +0200

    Updated to 2014.1-17

 0001-Fixed-ovs-provider.patch                      |  259 ++++++++++++++
 0001-Fixes-bridge-interface-name-check.patch       |   27 ++
 0001-stop-puppet-from-breaking-neutron.patch       |   52 +++
 ...fored-a-more-suitable-ovs_redhat-provider.patch |  374 ++++++++++++++++++++
 ...dge-addition-error-if-interface-has-no-IP.patch |   30 ++
 openstack-puppet-modules.spec                      |   78 +++--
 rdo-documentation.patch                            |   27 ++
 sources                                            |    8 +-
 8 files changed, 828 insertions(+), 27 deletions(-)
---
diff --git a/0001-Fixed-ovs-provider.patch b/0001-Fixed-ovs-provider.patch
new file mode 100644
index 0000000..7910240
--- /dev/null
+++ b/0001-Fixed-ovs-provider.patch
@@ -0,0 +1,259 @@
+From 9e9f91e83ca46c715107aba0299c4c754b22292b Mon Sep 17 00:00:00 2001
+From: Gilles Dubreuil <gilles at redhat.com>
+Date: Tue, 20 May 2014 17:07:45 +1000
+Subject: [PATCH 1/2] Fixed ovs provider
+
+The vs_bridge type needed:
+
+  - A regex value to validate external_ids
+
+  - An extra test for autorequire
+
+The vs_bridge provider needed:
+
+  - Openvswitch corresponding link to go
+    down before being remove: #destroy
+
+  - parameter external_ids had a typo and
+    couldn't be setup properly during create
+
+Standardization
+
+ - Replaced 'optional_commands' with 'commands'
+   and used no path to be more generic as
+   puppet will search for best path
+
+ - Types using :namevar good practice
+
+ - Inline documentation: for all parameters
+   and properties. Replaced @doc with desc
+
+ - Comestic: some doubled quotes => single
+
+Change-Id: I522888b1d2d147e07667344f9dfc9bcbc0c96668
+---
+ lib/puppet/provider/vs_bridge/ovs.rb | 25 ++++++++-------
+ lib/puppet/provider/vs_port/ovs.rb   | 14 +++++---
+ lib/puppet/type/vs_bridge.rb         | 33 ++++++++++++-------
+ lib/puppet/type/vs_port.rb           | 62 ++++++++++++++++++++----------------
+ 4 files changed, 78 insertions(+), 56 deletions(-)
+
+diff --git a/lib/puppet/provider/vs_bridge/ovs.rb b/lib/puppet/provider/vs_bridge/ovs.rb
+index 3d66185..cd51ba3 100644
+--- a/lib/puppet/provider/vs_bridge/ovs.rb
++++ b/lib/puppet/provider/vs_bridge/ovs.rb
+@@ -1,8 +1,8 @@
+-require "puppet"
++require 'puppet'
+ 
+ Puppet::Type.type(:vs_bridge).provide(:ovs) do
+-  optional_commands :vsctl => "/usr/bin/ovs-vsctl",
+-                    :ip    => "/sbin/ip"
++  commands :vsctl => 'ovs-vsctl'
++  commands :ip    => 'ip'
+ 
+   def exists?
+     vsctl("br-exists", @resource[:name])
+@@ -11,22 +11,23 @@ Puppet::Type.type(:vs_bridge).provide(:ovs) do
+   end
+ 
+   def create
+-    vsctl("add-br", @resource[:name])
+-    ip("link", "set", @resource[:name], "up")
+-    external_ids = @resource[:external_ids] if at resource[:external_ids]
++    vsctl('add-br', @resource[:name])
++    ip('link', 'set', @resource[:name], 'up')
++    external_ids = @resource[:external_ids] if @resource[:external_ids]
+   end
+ 
+   def destroy
+-    vsctl("del-br", @resource[:name])
++    ip('link', 'set', @resource[:name], 'down')
++    vsctl('del-br', @resource[:name])
+   end
+ 
+-  def _split(string, splitter=",")
+-    return Hash[string.split(splitter).map{|i| i.split("=")}]
++  def _split(string, splitter=',')
++    return Hash[string.split(splitter).map{|i| i.split('=')}]
+   end
+ 
+   def external_ids
+-    result = vsctl("br-get-external-id", @resource[:name])
+-    return result.split("\n").join(",")
++    result = vsctl('br-get-external-id', @resource[:name])
++    return result.split("\n").join(',')
+   end
+ 
+   def external_ids=(value)
+@@ -35,7 +36,7 @@ Puppet::Type.type(:vs_bridge).provide(:ovs) do
+ 
+     new_ids.each_pair do |k,v|
+       unless old_ids.has_key?(k)
+-        vsctl("br-set-external-id", @resource[:name], k, v)
++        vsctl('br-set-external-id', @resource[:name], k, v)
+       end
+     end
+   end
+diff --git a/lib/puppet/provider/vs_port/ovs.rb b/lib/puppet/provider/vs_port/ovs.rb
+index b7be530..483b13b 100644
+--- a/lib/puppet/provider/vs_port/ovs.rb
++++ b/lib/puppet/provider/vs_port/ovs.rb
+@@ -1,17 +1,21 @@
+-require "puppet"
++require 'puppet'
+ 
+ Puppet::Type.type(:vs_port).provide(:ovs) do
+-  optional_commands :vsctl => "/usr/bin/ovs-vsctl"
++  desc 'Openvswitch port manipulation'
++
++  commands :vsctl => 'ovs-vsctl'
+ 
+   def exists?
+-    vsctl("list-ports", @resource[:bridge]).include? @resource[:interface]
++    vsctl('list-ports', @resource[:bridge]).include? @resource[:interface]
++  rescue Puppet::ExecutionFailure => e
++    return false
+   end
+ 
+   def create
+-    vsctl("add-port", @resource[:bridge], @resource[:interface])
++    vsctl('add-port', @resource[:bridge], @resource[:interface])
+   end
+ 
+   def destroy
+-    vsctl("del-port", @resource[:bridge], @resource[:interface])
++    vsctl('del-port', @resource[:bridge], @resource[:interface])
+   end
+ end
+diff --git a/lib/puppet/type/vs_bridge.rb b/lib/puppet/type/vs_bridge.rb
+index 6a1f84d..c5a5e7c 100644
+--- a/lib/puppet/type/vs_bridge.rb
++++ b/lib/puppet/type/vs_bridge.rb
+@@ -1,19 +1,30 @@
+-require "puppet"
++require 'puppet'
+ 
+-module Puppet
+-  Puppet::Type.newtype(:vs_bridge) do
+-    @doc = "A Switch - For example 'br-int' in OpenStack"
++Puppet::Type.newtype(:vs_bridge) do
++  desc 'A Switch - For example "br-int" in OpenStack'
+ 
+-    ensurable
++  ensurable
+ 
+-    newparam(:name) do
+-      isnamevar
+-      desc "The bridge to configure"
+-    end
++  newparam(:name, :namevar => true) do
++    desc 'The bridge to configure'
+ 
+-    newproperty(:external_ids) do
+-      desc "External IDs for the bridge"
++    validate do |value|
++      if !value.is_a?(String)
++        raise ArgumentError, "Invalid name #{value}. Requires a String, not a #{value.class}"
++      end
+     end
++  end
+ 
++  newproperty(:external_ids) do
++    desc 'External IDs for the bridge: "key1=value2,key2=value2"'
++
++    validate do |value|
++      if !value.is_a?(String)
++        raise ArgumentError, "Invalid external_ids #{value}. Requires a String, not a #{value.class}"
++      end
++      if value !~ /^(?>[a-zA-Z]\w*=\w*){1}(?>[,][a-zA-Z]\w*=\w*)*$/
++        raise ArgumentError, "Invalid external_ids #{value}. Must a list of key1=value2,key2=value2"
++      end
++    end
+   end
+ end
+diff --git a/lib/puppet/type/vs_port.rb b/lib/puppet/type/vs_port.rb
+index 58559d2..df4705e 100644
+--- a/lib/puppet/type/vs_port.rb
++++ b/lib/puppet/type/vs_port.rb
+@@ -1,43 +1,49 @@
+-require "puppet"
++require 'puppet'
+ 
+-module Puppet
+-  Puppet::Type.newtype(:vs_port) do
+-    @doc = "A Virtual Switch Port"
++Puppet::Type.newtype(:vs_port) do
++  desc 'A Virtual Switch Port'
+ 
+-    ensurable
++  ensurable
+ 
+-    newparam(:interface) do
+-      isnamevar
+-      desc "The interface to attach to the bridge"
+-    end
++  newparam(:interface, :namevar => true) do
++    desc 'The interface to attach to the bridge'
+ 
+-    newparam(:bridge) do
+-      desc "What bridge to use"
++    validate do |value|
++      if !value.is_a?(String)
++        raise ArgumentError, "Invalid interface #{value}. Requires a String, not a #{value.class}"
++      end
+     end
++  end
+ 
+-    # newparam(:keep_ip, :boolean => true, :parent => Puppet::Parameter::Boolean) do
+-    newparam(:keep_ip) do
+-      desc "True: keep physical interface's details and assign them to the bridge" 
++  newparam(:bridge) do
++    desc "What bridge to use"
+ 
+-      defaultto false
++    validate do |value|
++      if !value.is_a?(String)
++        raise ArgumentError, "Invalid bridge #{value}. Requires a String, not a #{value.class}'"
++      end
+     end
++  end
++
++  newparam(:keep_ip) do
++    desc "True: keep physical interface's details and assign them to the bridge"
+ 
+-    newparam(:sleep) do
+-      desc "Waiting time, in seconds (0 by default), for network to sync after activating port, used with keep_ip only"
++    defaultto false
++  end
++
++  newparam(:sleep) do
++    desc "Waiting time, in seconds (0 by default), for network to sync after activating port, used with keep_ip only"
++
++    defaultto '0'
+ 
+-      defaultto '0'
+-      
+-      validate do |value|
+-        if value.to_i.class != Fixnum || value.to_i < 0
+-          raise ArgumentError, "sleep requires a positive integer"
+-        end
++    validate do |value|
++      if value.to_i.class != Fixnum || value.to_i < 0
++        raise ArgumentError, "sleep requires a positive integer"
+       end
+     end
+-    
+-    autorequire(:vs_bridge) do
+-      [self[:bridge]]
+-    end
++  end
+ 
++  autorequire(:vs_bridge) do
++    self[:bridge] if self[:bridge]
+   end
+ end
+-
+-- 
+1.8.3.1
+
diff --git a/0001-Fixes-bridge-interface-name-check.patch b/0001-Fixes-bridge-interface-name-check.patch
new file mode 100644
index 0000000..912b625
--- /dev/null
+++ b/0001-Fixes-bridge-interface-name-check.patch
@@ -0,0 +1,27 @@
+From 0e47ea85dcc926fa6e3e44bf11f91d1da88111fc Mon Sep 17 00:00:00 2001
+From: Ivan Chavero <ichavero at redhat.com>
+Date: Mon, 16 Jun 2014 13:01:25 -0600
+Subject: [PATCH] Fixes bridge interface name check
+
+Fixes name check for interface names that contain:
+"-", ":", "@", "."
+---
+ lib/puppet/type/vs_bridge.rb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/puppet/type/vs_bridge.rb b/lib/puppet/type/vs_bridge.rb
+index c5a5e7c..13bfd19 100644
+--- a/lib/puppet/type/vs_bridge.rb
++++ b/lib/puppet/type/vs_bridge.rb
+@@ -22,7 +22,7 @@ Puppet::Type.newtype(:vs_bridge) do
+       if !value.is_a?(String)
+         raise ArgumentError, "Invalid external_ids #{value}. Requires a String, not a #{value.class}"
+       end
+-      if value !~ /^(?>[a-zA-Z]\w*=\w*){1}(?>[,][a-zA-Z]\w*=\w*)*$/
++      if value !~ /^(?>[a-zA-Z][\w\-\.]*=[\w\-\.:@]*){1}(?>[,][a-zA-Z][\w\-\.]*=[\w\-\.:@]*)*$/
+         raise ArgumentError, "Invalid external_ids #{value}. Must a list of key1=value2,key2=value2"
+       end
+     end
+-- 
+1.9.3
+
diff --git a/0001-stop-puppet-from-breaking-neutron.patch b/0001-stop-puppet-from-breaking-neutron.patch
new file mode 100644
index 0000000..300f9fd
--- /dev/null
+++ b/0001-stop-puppet-from-breaking-neutron.patch
@@ -0,0 +1,52 @@
+From 5d953a42b5f8a3a52bb894e4289b0d557c047a8a Mon Sep 17 00:00:00 2001
+From: Lars Kellogg-Stedman <lars at redhat.com>
+Date: Fri, 13 Jun 2014 21:32:20 -0400
+Subject: [PATCH] stop puppet from breaking neutron
+
+The neutron-ovs-cleanup service is meant to run at boot to tear down ovs
+interfaces created by Neutron.  The service runs and then exits, which
+means that from Puppet's perspective it is always "stopped".
+
+By setting `ensure => started` on the neutron-ovs-cleanup service,
+puppet was starting this service every time it runs, which would
+completely disable Neutron networking.
+
+This patch removes the `ensure` setting, such that the service will be
+enabled and will run at boot but will not be erroneously started by
+Puppet.
+
+Change-Id: I5445fcd05f7cf5c48ded209a2895ea7d8732f40f
+---
+ manifests/agents/ovs.pp                 | 1 -
+ spec/classes/neutron_agents_ovs_spec.rb | 3 +--
+ 2 files changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/manifests/agents/ovs.pp b/manifests/agents/ovs.pp
+index 289f67f..978c68e 100644
+--- a/manifests/agents/ovs.pp
++++ b/manifests/agents/ovs.pp
+@@ -144,7 +144,6 @@ class neutron::agents::ovs (
+     }
+     if $::neutron::params::ovs_cleanup_service {
+       service {'ovs-cleanup-service':
+-        ensure => $service_ensure,
+         name   => $::neutron::params::ovs_cleanup_service,
+         enable => $enabled,
+       }
+diff --git a/spec/classes/neutron_agents_ovs_spec.rb b/spec/classes/neutron_agents_ovs_spec.rb
+index 9c1c581..b827baa 100644
+--- a/spec/classes/neutron_agents_ovs_spec.rb
++++ b/spec/classes/neutron_agents_ovs_spec.rb
+@@ -185,8 +185,7 @@ describe 'neutron::agents::ovs' do
+     it 'configures neutron ovs cleanup service' do
+       should contain_service('ovs-cleanup-service').with(
+         :name    => platform_params[:ovs_cleanup_service],
+-        :enable  => true,
+-        :ensure  => 'running'
++        :enable  => true
+       )
+       should contain_package('neutron-plugin-ovs').with_before(/Service\[ovs-cleanup-service\]/)
+     end
+-- 
+1.9.3
+
diff --git a/0002-Refacfored-a-more-suitable-ovs_redhat-provider.patch b/0002-Refacfored-a-more-suitable-ovs_redhat-provider.patch
new file mode 100644
index 0000000..0dcf6f1
--- /dev/null
+++ b/0002-Refacfored-a-more-suitable-ovs_redhat-provider.patch
@@ -0,0 +1,374 @@
+From bdd88f2ad262f23ca32e3f0c5d4ad78b7c9322d8 Mon Sep 17 00:00:00 2001
+From: Gilles Dubreuil <gilles at redhat.com>
+Date: Wed, 21 May 2014 10:13:00 +1000
+Subject: [PATCH 2/2] Refacfored a more suitable ovs_redhat provider
+
+  - Added a helper class/library to handle ifcfg content
+
+  - Removed keep_ip and sleep parameters
+
+Change-Id: I584fb1442de9a760b3a092f96cbfcbcd6776fdba
+---
+ lib/puppet/provider/vs_bridge/ovs_redhat.rb |  54 ++++-------
+ lib/puppet/provider/vs_port/ovs_redhat.rb   | 133 ++++++++++------------------
+ lib/puppet/type/vs_port.rb                  |  18 ----
+ lib/puppet_x/redhat/ifcfg.rb                |  91 +++++++++++++++++++
+ 4 files changed, 151 insertions(+), 145 deletions(-)
+ create mode 100644 lib/puppet_x/redhat/ifcfg.rb
+
+diff --git a/lib/puppet/provider/vs_bridge/ovs_redhat.rb b/lib/puppet/provider/vs_bridge/ovs_redhat.rb
+index 5495d12..e57597d 100644
+--- a/lib/puppet/provider/vs_bridge/ovs_redhat.rb
++++ b/lib/puppet/provider/vs_bridge/ovs_redhat.rb
+@@ -1,51 +1,27 @@
+-require "puppet"
++require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'puppet_x', 'redhat', 'ifcfg.rb'))
+ 
+-Base="/etc/sysconfig/network-scripts/ifcfg-" 
++Puppet::Type.type(:vs_bridge).provide(:ovs_redhat, :parent => :ovs) do
++  desc 'Openvswitch bridge manipulation for RedHat OSes family'
+ 
+-Puppet::Type.type(:vs_bridge).provide(:ovs_redhat) do
+-  desc "Openvswitch bridge manipulation for RedHat family OSs"
+-
+-  confine :osfamily => :redhat
++  confine    :osfamily => :redhat
+   defaultfor :osfamily => :redhat
+ 
+-  optional_commands :vsctl => "/usr/bin/ovs-vsctl",
+-                    :ip    => "/sbin/ip"
+-
+-  def exists?
+-    vsctl("br-exists", @resource[:name])
+-  rescue Puppet::ExecutionFailure
+-    return false
+-  end
++  commands :vsctl => 'ovs-vsctl'
+ 
+   def create
+-    vsctl("add-br", @resource[:name])
+-    ip("link", "set", @resource[:name], "up")
+-    external_ids = @resource[:external_ids] if @resource[:external_ids]
+-  end
+-
+-  def destroy
+-    vsctl("del-br", @resource[:name])
+-  end
+-
+-  def external_ids
+-    result = vsctl("br-get-external-id", @resource[:name])
+-    return result.split("\n").join(",")
+-  end
+-
+-  def external_ids=(value)
+-    old_ids = _split(external_ids)
+-    new_ids = _split(value)
+-
+-    new_ids.each_pair do |k,v|
+-      unless old_ids.has_key?(k)
+-        vsctl("br-set-external-id", @resource[:name], k, v)
+-      end
++    begin
++      super unless vsctl('br-exists', @resource[:name])
++    rescue Puppet::ExecutionFailure => e
++      super
+     end
++    IFCFG::Bridge.new(@resource[:name]).save
+   end
+ 
+-  private
++  def exists?
++    super && IFCFG::OVS.exists?(@resource[:name])
++  end
+ 
+-  def _split(string, splitter=",")
+-    return Hash[string.split(splitter).map{|i| i.split("=")}]
++  def destroy
++    super && IFCFG::OVS.remove(@resource[:name])
+   end
+ end
+diff --git a/lib/puppet/provider/vs_port/ovs_redhat.rb b/lib/puppet/provider/vs_port/ovs_redhat.rb
+index 6d43797..5a17897 100644
+--- a/lib/puppet/provider/vs_port/ovs_redhat.rb
++++ b/lib/puppet/provider/vs_port/ovs_redhat.rb
+@@ -1,105 +1,62 @@
+-require "puppet"
++require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'puppet_x', 'redhat', 'ifcfg.rb'))
+ 
+-Puppet::Type.type(:vs_port).provide(:ovs_redhat) do
+-  desc "Openvswitch port manipulation for RedHat family OSs"
++Puppet::Type.type(:vs_port).provide(:ovs_redhat, :parent => :ovs) do
++  desc 'Openvswitch port manipulation for RedHat OSes family'
+ 
+-  confine :osfamily => :redhat
++  confine    :osfamily => :redhat
+   defaultfor :osfamily => :redhat
+ 
+-  optional_commands :vsctl => "/usr/bin/ovs-vsctl",
+-                    :sleep => "/bin/sleep"
+-
+-  def exists?
+-    vsctl("list-ports", @resource[:bridge]).include? @resource[:interface]
+-  end
++  commands :grep   => 'grep'
++  commands :ip     => 'ip'
++  commands :ifdown => 'ifdown'
++  commands :ifup   => 'ifup'
++  commands :vsctl  => 'ovs-vsctl'
+ 
+   def create
+-    if @resource[:keep_ip]
+-      create_bridge_file
+-      create_physical_interface_file
+-      activate_port
++    begin
++      super unless vsctl('br-exists', @resource[:name])
++    rescue Puppet::ExecutionFailure => e
++      super
++    end
++    IFCFG::Port.new(@resource[:interface], @resource[:bridge]).save
++
++    if link?
++      if dynamic?
++        # Persistent MAC address
++        bridge_mac_address = nil
++        datapath_id = vsctl('get', 'bridge', @resource[:bridge], 'datapath_id')
++        bridge_mac_address = datapath_id[-14..-3].scan(/.{1,2}/).join(':') if datapath_id
++        IFCFG::BridgeDynamic.new(@resource[:bridge], @resource[:interface], bridge_mac_address).save
++      else
++        device = ip('addr', 'show', @resource[:interface])
++        cidr = device.to_s.match(/inet (\d*\.\d*\.\d*\.\d*\/\d*)/)[1]
++        IFCFG::BridgeStatic.new(@resource[:bridge], cidr).save
++      end
+     else
+-      vsctl("add-port", @resource[:bridge], @resource[:interface])
++      IFCFG::Bridge.new(@resource[:bridge]).save
+     end
+-  end
+ 
+-  def destroy
+-    vsctl("del-port", @resource[:bridge], @resource[:interface])
++    ifdown(@resource[:interface])
++    ifdown(@resource[:bridge])
++    ifup(@resource[:interface])
++    ifup(@resource[:bridge])
+   end
+ 
+-  private
+-
+-  def activate_port
+-    atomic_operation="ifdown #{@resource[:interface]};
+-      ovs-vsctl add-port #{@resource[:bridge]} #{@resource[:interface]};
+-      ifup #{@resource[:interface]};
+-      ifup #{@resource[:bridge]}"
+-    system(atomic_operation)
+-    sleep(@resource[:sleep]) if @resource[:sleep]
+-  end 
+-
+-  def create_physical_interface_file
+-    file = File.open(Base + @resource[:interface], 'w+')
+-    file << "DEVICE=#{@resource[:interface]}\n"
+-    file << "DEVICETYPE=ovs\n"
+-    file << "TYPE=OVSPort\n"
+-    file << "BOOTPROTO=none\n"
+-    file << "OVS_BRIDGE=#{@resource[:bridge]}\n"
+-    file << "ONBOOT=yes\n"
+-    file.close
++  def exists?
++    super && IFCFG::OVS.exists?(@resource[:interface])
+   end
+ 
+-  def search(file_name, value)
+-    File.open(file_name) { |file| 
+-      file.each_line { |line| 
+-        match = value.match(line)
+-        return match[0] if match
+-      }
+-    }
++  def destroy
++    super && IFCFG::OVS.remove(@resource[:interface])
+   end
+ 
+-  def create_bridge_file
+-    bridge_file = File.open(Base + @resource[:bridge], 'w+')
+-    interface_file_name = Base + @resource[:interface]
+-
+-    # Ultimately this to go to vs_bridge
+-    bridge_file << "DEVICE=#{@resource[:bridge]}\n"
+-    bridge_file << "TYPE=OVSBridge\n"
+-    bridge_file << "DEVICETYPE=ovs\n"
+-    bridge_file << "ONBOOT=yes\n"
+-    # End ultimately
+-
+-    case search(interface_file_name, /bootproto=.*/i)
+-    when /dhcp/
+-       bridge_file << "OVSBOOTPROTO=dhcp\n"
+-       bridge_file << "OVSDHCPINTERFACES=#{@resource[:interface]}\n"
+-    when /static/, /none/
+-      bridge_file << "OVSBOOTPROTO=static\n"  
++  def dynamic?
++    device = ''
++    device = ip('addr', 'show', @resource[:interface])
++    return device =~ /dynamic/ ? true : false
++  end
+ 
+-      ipaddr = search(interface_file_name, /ipaddr=.*/i)
+-      if ipaddr.class == String
+-        bridge_file << ipaddr + "\n"
+-      else
+-        raise RuntimeError, 'Undefined IP address'
+-      end
+-      
+-      mask = search(interface_file_name, /(prefix|netmask)=.*/i)
+-      if mask.class == String
+-        bridge_file << mask + "\n"
+-      else
+-        raise RuntimeError, 'Undefined netmask or prefix'
+-      end
+-    else 
+-      raise RuntimeError, 'Undefined boot protocol'
+-    end
+- 
+-    # The idea here to have a fixed MAC address
+-    datapath_id = vsctl("get", "bridge", @resource[:bridge], 'datapath_id')
+-    bridge_mac_address = datapath_id[-14..-3].scan(/.{1,2}/).join(':') if datapath_id
+- 
+-    if bridge_mac_address
+-      bridge_file << "OVS_EXTRA=\"set bridge #{@resource[:bridge]} other-config:hwaddr=#{bridge_mac_address}\"\n"
+-    end
+-    bridge_file.close
++  def link?
++    grep('up', "/sys/class/net/#{@resource[:interface]}/operstate")
+   end
+-end
+\ No newline at end of file
++end
+diff --git a/lib/puppet/type/vs_port.rb b/lib/puppet/type/vs_port.rb
+index df4705e..8a4b913 100644
+--- a/lib/puppet/type/vs_port.rb
++++ b/lib/puppet/type/vs_port.rb
+@@ -25,24 +25,6 @@ Puppet::Type.newtype(:vs_port) do
+     end
+   end
+ 
+-  newparam(:keep_ip) do
+-    desc "True: keep physical interface's details and assign them to the bridge"
+-
+-    defaultto false
+-  end
+-
+-  newparam(:sleep) do
+-    desc "Waiting time, in seconds (0 by default), for network to sync after activating port, used with keep_ip only"
+-
+-    defaultto '0'
+-
+-    validate do |value|
+-      if value.to_i.class != Fixnum || value.to_i < 0
+-        raise ArgumentError, "sleep requires a positive integer"
+-      end
+-    end
+-  end
+-
+   autorequire(:vs_bridge) do
+     self[:bridge] if self[:bridge]
+   end
+diff --git a/lib/puppet_x/redhat/ifcfg.rb b/lib/puppet_x/redhat/ifcfg.rb
+new file mode 100644
+index 0000000..fe3a648
+--- /dev/null
++++ b/lib/puppet_x/redhat/ifcfg.rb
+@@ -0,0 +1,91 @@
++module IFCFG
++  class OVS
++    Base = '/etc/sysconfig/network-scripts/ifcfg-'
++
++    def self.remove(name)
++      File.delete(Base + name)
++    rescue Errno::ENOENT
++    end
++
++    def self.exists?(name)
++      File.exist?(Base + name)
++    end
++
++    def initialize(name)
++      @name        = name
++      @device_type = 'ovs'
++      @onboot      = 'yes'
++    end
++
++    def to_s
++      ifcfg =  "DEVICE=#{@name}\n"
++      ifcfg << "DEVICETYPE=#{@device_type}\n"
++      ifcfg << "TYPE=#{@type}\n"
++      ifcfg << "ONBOOT=yes\n"
++      ifcfg << "OVSBOOTPROTO=#{@bootproto}\n"
++    end
++
++    def save
++      File.open(Base + @name, 'w+') { |file|
++        file << self.to_s
++      }
++    end
++  end
++
++  class Bridge < OVS
++    def initialize(name, bootproto = nil)
++      super(name)
++      @type      = 'OVSBridge'
++      @bootproto = bootproto ? bootproto : 'none'
++    end
++  end
++
++  class BridgeDynamic < Bridge
++    def initialize(name, interface, bridge_mac_address=nil)
++      super(name, 'dhcp')
++      @interface = interface
++      @bridge_mac_address = bridge_mac_address
++    end
++
++    def to_s
++      ifcfg = super
++      ifcfg << "OVSDHCPINTERFACES=#{@interface}\n"
++      if @bridge_mac_address
++        ifcfg << "OVS_EXTRA=\"set bridge #{@name} other-config:hwaddr=#{@bridge_mac_address}\"\n"
++      end
++      ifcfg
++    end
++  end
++
++  class BridgeStatic < Bridge
++    def initialize(name, cidr)
++      super(name)
++      cidr.match('(.*)\/(.*)') { |m|
++        @ipaddr = m[1]
++        @prefix = m[2]
++      }
++    end
++
++    def to_s
++      ifcfg = super
++      if @cidr != ''
++        ifcfg << "IPADDR=#{@ipaddr}\n"
++        ifcfg << "PREFIX=#{@prefix}\n"
++      end
++      ifcfg
++    end
++  end
++
++  class Port < OVS
++    def initialize(name, bridge)
++      super(name)
++      @type      = 'OVSPort'
++      @bridge    = bridge
++      @bootproto = 'none'
++    end
++
++    def to_s
++      super + "OVS_BRIDGE=#{@bridge}\n"
++    end
++  end
++end
+-- 
+1.8.3.1
+
diff --git a/0003-Fixes-bridge-addition-error-if-interface-has-no-IP.patch b/0003-Fixes-bridge-addition-error-if-interface-has-no-IP.patch
new file mode 100644
index 0000000..2477026
--- /dev/null
+++ b/0003-Fixes-bridge-addition-error-if-interface-has-no-IP.patch
@@ -0,0 +1,30 @@
+From 7ed22bc78fa82fbc87aee0a5c01e08bd24278cfb Mon Sep 17 00:00:00 2001
+From: Ivan Chavero <ichavero at redhat.com>
+Date: Thu, 19 Jun 2014 16:13:23 -0600
+Subject: [PATCH] Fixes bridge addition error if interface has no IP
+
+It is perfectly valid for not to have an ip address on the bridge and
+for the external network gateway to be elsewhere on the network.
+
+Fixes: rhbz#1109894
+---
+ lib/puppet/provider/vs_port/ovs_redhat.rb | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/lib/puppet/provider/vs_port/ovs_redhat.rb b/lib/puppet/provider/vs_port/ovs_redhat.rb
+index 5a17897..07fc655 100644
+--- a/lib/puppet/provider/vs_port/ovs_redhat.rb
++++ b/lib/puppet/provider/vs_port/ovs_redhat.rb
+@@ -29,7 +29,8 @@ Puppet::Type.type(:vs_port).provide(:ovs_redhat, :parent => :ovs) do
+         IFCFG::BridgeDynamic.new(@resource[:bridge], @resource[:interface], bridge_mac_address).save
+       else
+         device = ip('addr', 'show', @resource[:interface])
+-        cidr = device.to_s.match(/inet (\d*\.\d*\.\d*\.\d*\/\d*)/)[1]
++        cidr = device.to_s.match(/inet (\d*\.\d*\.\d*\.\d*\/\d*)/)
++        cidr = cidr ? cidr[1] : ""
+         IFCFG::BridgeStatic.new(@resource[:bridge], cidr).save
+       end
+     else
+-- 
+1.9.0
+
diff --git a/openstack-puppet-modules.spec b/openstack-puppet-modules.spec
index cfc41a5..18ed449 100644
--- a/openstack-puppet-modules.spec
+++ b/openstack-puppet-modules.spec
@@ -6,7 +6,7 @@
 %global common_commit		2c0ed2844c606fd806bde0c02e47e79c88fab4a9
 %global concat_commit		031bf261289dcbb32e63b053ed5b3a82117698c0
 %global firewall_commit		c147a624fb3dba7df625d0d7571b1b6669bcfca5
-%global galera_commit		43d31b5cbf688190ea530ce7d8bbc422e2e8a8e3
+%global galera_commit		3f63bd5ffdd707b42ef37a0ead3c2cf7e803586f
 %global glance_commit		cb0daf02d7a991be642e62294912d93b036c6a5a
 %global gluster_commit		80c2b13448c97c70a4b4bc0e402e00ecb5d681d5
 %global haproxy_commit		f381510e940ee11feb044c1c728ba2e5af807c79
@@ -17,14 +17,14 @@
 %global memcached_commit	49dbf102fb6eee90297b2ed6a1fa463a8c5ccee7
 %global module_data_commit	159fc5e0e21ce9df96c777f0064b5eca88e29cae
 %global mongodb_commit		3f392925710f1758a95f1775d700b5fb787a003d
-%global mysql_commit		54588506e6d82bbd079739799a3fa50696a83a01
+%global mysql_commit		8d5fed32c22c5e4231d5a475cfe8060ce8b2ed0f
 %global neutron_commit		66c436bc2f06c5a71d79c674697394a11ec227f9
 %global nova_commit		    1e77a9d48a85a3ae6d30993b3c887f58e4a5973c
 %global nssdb_commit		b3799a9a7c62c3b5b7968f9860220a885b45fb8a
 %global openstack_commit	c20039004cb39e78c93cd00f154c3b9ba6404951
-%global pacemaker_commit	fc9ef90dca8a20ae2a52cdb34507f3c5d1c60124
+%global pacemaker_commit	2aa760c3497840ad2474f15737846e2ad95c54e5
 %global puppet_commit		07ec49d1f67a498b31b4f164678a76c464e129c4
-%global qpid_commit		    1d6b2752c5c8cd3439dc31b62a2f163886ce22a5
+%global qpid_commit		    1f0c32b39ad17e7acbd440b50fb6f0875971f5e1
 %global rabbitmq_commit		e7447851a60a419cd51a09ccf807964b36fdebac
 %global rsync_commit		357d51f3a6a22bc3da842736176c3510e507b4fb
 %global sahara_commit		f4e5681cfb289113be1ba49c12709145ecbad938
@@ -42,7 +42,7 @@
 
 Name:           openstack-puppet-modules
 Version:        2014.1
-Release:        16%{?dist}
+Release:        17%{?dist}
 Summary:        Puppet modules used to deploy OpenStack
 License:        ASL 2.0 and GPLv2 and GPLv3
 
@@ -88,15 +88,25 @@ Source36:	https://github.com/derekhiggins/puppet-vlan/archive/%{vlan_commit}/vla
 Source37:	https://github.com/stackforge/puppet-vswitch/archive/%{vswitch_commit}/vswitch-%{vswitch_commit}.tar.gz
 Source38:	https://github.com/packstack/puppetlabs-xinetd/archive/%{xinetd_commit}/xinetd-%{xinetd_commit}.tar.gz
 
-Patch0:     compute_driver.patch
-Patch2:     openstack.patch
-Patch5:     nova.patch
-Patch7:     0001-Quickfix-to-remove-duplication-with-ceilometer-agent.patch
-Patch8:     puppetlabs-firewall-pull-request-337.patch
-Patch10:    puppetlabs-firewall-pull-request-365.patch
-Patch11:    puppetlabs-firewall-pull-request-367.patch
-Patch12:    swift-restorecon.patch
-Patch13:    0001-Implement-Keystone-domain-creation.patch
+# stable patches
+Patch0:     rdo-documentation.patch
+
+# temporary patches
+Patch100:   compute_driver.patch
+Patch101:   openstack.patch
+Patch102:   nova.patch
+Patch103:   0001-Quickfix-to-remove-duplication-with-ceilometer-agent.patch
+Patch104:   puppetlabs-firewall-pull-request-337.patch
+Patch105:   puppetlabs-firewall-pull-request-365.patch
+Patch106:   puppetlabs-firewall-pull-request-367.patch
+Patch107:   swift-restorecon.patch
+Patch108:   0001-Implement-Keystone-domain-creation.patch
+Patch109:   0001-Fixed-ovs-provider.patch
+Patch110:   0002-Refacfored-a-more-suitable-ovs_redhat-provider.patch
+Patch111:   0001-stop-puppet-from-breaking-neutron.patch
+Patch112:   0001-Fixes-bridge-interface-name-check.patch
+Patch113:   0003-Fixes-bridge-addition-error-if-interface-has-no-IP.patch
+
 
 BuildArch:      noarch
 Requires:       rubygem-json
@@ -146,30 +156,44 @@ A collection of Puppet modules used to install and configure OpenStack.
 %setup -c -q -T -D -a 37
 %setup -c -q -T -D -a 38
 
+# puppet-horizon patches
+cd %{_builddir}/%{name}-%{version}/puppet-horizon-%{horizon_commit}
+%patch0 -p1
+
 # puppet-nova patches
 cd %{_builddir}/%{name}-%{version}/puppet-nova-%{nova_commit}
-%patch0 -p1
-%patch5 -p1
-%patch7 -p1
+%patch100 -p1
+%patch102 -p1
+%patch103 -p1
 
 # puppet-heat patches
 cd %{_builddir}/%{name}-%{version}/puppet-heat-%{heat_commit}
-%patch13 -p1
+%patch108 -p1
 
 # puppet-openstack patches
 cd %{_builddir}/%{name}-%{version}/puppet-openstack-%{openstack_commit}
-%patch2 -p1
+%patch101 -p1
 
 # puppetlabs-firewall patches
 cd %{_builddir}/%{name}-%{version}/puppetlabs-firewall-%{firewall_commit}
-%patch8 -p1
-%patch10 -p1
-%patch11 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
 
 # puppet-swift patches
 cd %{_builddir}/%{name}-%{version}/puppet-swift-%{swift_commit}
-%patch12 -p1
+%patch107 -p1
+
+# puppet-neutron patches
+cd %{_builddir}/%{name}-%{version}/puppet-neutron-%{neutron_commit}
+%patch111 -p1
 
+# puppet-vswitch patches
+cd %{_builddir}/%{name}-%{version}/puppet-vswitch-%{vswitch_commit}
+%patch109 -p1
+%patch110 -p1
+%patch112 -p1
+%patch113 -p1
 
 find %{_builddir}/%{name}-%{version}/ -type f -name ".*" -exec rm {} +
 find %{_builddir}/%{name}-%{version}/ -size 0 -exec rm {} +
@@ -231,6 +255,14 @@ rm -f %{buildroot}/%{_datadir}/openstack-puppet/modules/nova/files/nova-novncpro
 
 
 %changelog
+* Wed Jun 25 2014 Martin Mágr <mmagr at redhat.com> - 2014.1-17
+- Updated modules to redhat-openstack/openstack-puppet-modules-2014.1-17
+- Added rdo-documentation.patch
+- Added 0001-stop-puppet-from-breaking-neutron.patch
+- Added 0001-Fixes-bridge-interface-name-check.patch
+- Added 0001-Fixed-ovs-provider.patch, 0002-Refacfored-a-more-suitable-ovs_redhat-provider.patch,
+        0003-Fixes-bridge-addition-error-if-interface-has-no-IP.patch (rhbz#1109894)
+
 * Wed Jun 18 2014 Martin Mágr <mmagr at redhat.com> - 2014.1-16
 - Updated modules to redhat-openstack/openstack-puppet-modules-2014.1-16
 - Removed keystone.patch and 0001-Fixes-agent_notification_service_name.patch
diff --git a/rdo-documentation.patch b/rdo-documentation.patch
new file mode 100644
index 0000000..38d9667
--- /dev/null
+++ b/rdo-documentation.patch
@@ -0,0 +1,27 @@
+From 87721197918bb50682545c0c95a8a6b0b9c8b5d6 Mon Sep 17 00:00:00 2001
+From: Martin Magr <mmagr at redhat.com>
+Date: Thu, 19 Jun 2014 12:49:20 +0200
+Subject: [PATCH] Change default documentation URL
+
+Documentation should point to RDO docs by default. This patch is changing it.
+
+Fixes: rhbz#1092019
+---
+ manifests/init.pp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/manifests/init.pp b/manifests/init.pp
+index aa3f823..640a964 100644
+--- a/manifests/init.pp
++++ b/manifests/init.pp
+@@ -185,7 +185,7 @@ class horizon(
+   $available_regions       = undef,
+   $api_result_limit        = 1000,
+   $log_level               = 'DEBUG',
+-  $help_url                = 'http://docs.openstack.org',
++  $help_url                = 'http://openstack.redhat.com/Docs',
+   $local_settings_template = 'horizon/local_settings.py.erb',
+   $configure_apache        = true,
+   $bind_address            = undef,
+-- 
+1.9.3
diff --git a/sources b/sources
index a887d70..1e6ae7a 100644
--- a/sources
+++ b/sources
@@ -5,7 +5,7 @@
 6e70f75bbb494957eb64e5b71f835bd3  common-2c0ed2844c606fd806bde0c02e47e79c88fab4a9.tar.gz
 8cff08df8d7fe83817af8b4ba5b13227  concat-031bf261289dcbb32e63b053ed5b3a82117698c0.tar.gz
 3c338845ca69b093a065cae1c35996c0  firewall-c147a624fb3dba7df625d0d7571b1b6669bcfca5.tar.gz
-026adeaf3615ec8e4b20f3980a42f604  galera-43d31b5cbf688190ea530ce7d8bbc422e2e8a8e3.tar.gz
+4215c82a4f158d748023fde09d0c061f  galera-3f63bd5ffdd707b42ef37a0ead3c2cf7e803586f.tar.gz
 590eefb9f7520cf37b3513031dba426f  glance-cb0daf02d7a991be642e62294912d93b036c6a5a.tar.gz
 7d21112588ba43525f2006fd65a00b07  gluster-80c2b13448c97c70a4b4bc0e402e00ecb5d681d5.tar.gz
 edef1e76ec9200bb1989302f19ea18b9  haproxy-f381510e940ee11feb044c1c728ba2e5af807c79.tar.gz
@@ -16,14 +16,14 @@ b92cb5bb97ea2c2ccdd6fbd361cbb2e7  inifile-fe9b0d5229ea37179a08c4b49239da9bc950ac
 d91faa359ff81cc3e5bdc2a4217afff5  memcached-49dbf102fb6eee90297b2ed6a1fa463a8c5ccee7.tar.gz
 8506a98c0ceddf5299bdfe579e256c3f  module-data-159fc5e0e21ce9df96c777f0064b5eca88e29cae.tar.gz
 25f400100566e0a10580b84835126631  mongodb-3f392925710f1758a95f1775d700b5fb787a003d.tar.gz
-e90d1ac45fcdfe905452bfe8132c8ee9  mysql-54588506e6d82bbd079739799a3fa50696a83a01.tar.gz
+9a74df5dd93d041d7f0095ca769294c9  mysql-8d5fed32c22c5e4231d5a475cfe8060ce8b2ed0f.tar.gz
 e5a5e314c4b96d79d467cd0afa72b60f  neutron-66c436bc2f06c5a71d79c674697394a11ec227f9.tar.gz
 2f0d23068f0eb1916755787b1d7bb9ae  nova-1e77a9d48a85a3ae6d30993b3c887f58e4a5973c.tar.gz
 ee40158527431488131f4331092b958c  nssdb-b3799a9a7c62c3b5b7968f9860220a885b45fb8a.tar.gz
 b210832794c85b5f4e5aa75de0007b51  openstack-c20039004cb39e78c93cd00f154c3b9ba6404951.tar.gz
-619f2768622de37a65b925caf2e040ee  pacemaker-fc9ef90dca8a20ae2a52cdb34507f3c5d1c60124.tar.gz
+30968baadd9a70399d427805fc44da44  pacemaker-2aa760c3497840ad2474f15737846e2ad95c54e5.tar.gz
 625ce5ea3a37e0d1e4a0b1c09b6495ff  puppet-07ec49d1f67a498b31b4f164678a76c464e129c4.tar.gz
-77ccfe862e8ec26223ddfd2a45c5dbcf  qpid-1d6b2752c5c8cd3439dc31b62a2f163886ce22a5.tar.gz
+0597e6eb94ca2cbbf3b22b4294e60dae  qpid-1f0c32b39ad17e7acbd440b50fb6f0875971f5e1.tar.gz
 a05c3e7ba8e2055a15901d1ddbd8cb79  rabbitmq-e7447851a60a419cd51a09ccf807964b36fdebac.tar.gz
 b5d0c1c4cd711a3f762052813ad6a1bc  rsync-357d51f3a6a22bc3da842736176c3510e507b4fb.tar.gz
 ed84fcfd855b066f6d74777d5d6b76cc  sahara-f4e5681cfb289113be1ba49c12709145ecbad938.tar.gz


More information about the scm-commits mailing list