Skip to content

Commit 8f4047e

Browse files
committed
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
1 parent 49dbaff commit 8f4047e

File tree

4 files changed

+78
-56
lines changed

4 files changed

+78
-56
lines changed

lib/puppet/provider/vs_bridge/ovs.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
require "puppet"
1+
require 'puppet'
22

33
Puppet::Type.type(:vs_bridge).provide(:ovs) do
4-
optional_commands :vsctl => "/usr/bin/ovs-vsctl",
5-
:ip => "/sbin/ip"
4+
commands :vsctl => 'ovs-vsctl'
5+
commands :ip => 'ip'
66

77
def exists?
88
vsctl("br-exists", @resource[:name])
@@ -11,22 +11,23 @@ def exists?
1111
end
1212

1313
def create
14-
vsctl("add-br", @resource[:name])
15-
ip("link", "set", @resource[:name], "up")
16-
external_ids = @resource[:external_ids] if@resource[:external_ids]
14+
vsctl('add-br', @resource[:name])
15+
ip('link', 'set', @resource[:name], 'up')
16+
external_ids = @resource[:external_ids] if @resource[:external_ids]
1717
end
1818

1919
def destroy
20-
vsctl("del-br", @resource[:name])
20+
ip('link', 'set', @resource[:name], 'down')
21+
vsctl('del-br', @resource[:name])
2122
end
2223

23-
def _split(string, splitter=",")
24-
return Hash[string.split(splitter).map{|i| i.split("=")}]
24+
def _split(string, splitter=',')
25+
return Hash[string.split(splitter).map{|i| i.split('=')}]
2526
end
2627

2728
def external_ids
28-
result = vsctl("br-get-external-id", @resource[:name])
29-
return result.split("\n").join(",")
29+
result = vsctl('br-get-external-id', @resource[:name])
30+
return result.split("\n").join(',')
3031
end
3132

3233
def external_ids=(value)
@@ -35,7 +36,7 @@ def external_ids=(value)
3536

3637
new_ids.each_pair do |k,v|
3738
unless old_ids.has_key?(k)
38-
vsctl("br-set-external-id", @resource[:name], k, v)
39+
vsctl('br-set-external-id', @resource[:name], k, v)
3940
end
4041
end
4142
end

lib/puppet/provider/vs_port/ovs.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
require "puppet"
1+
require 'puppet'
22

33
Puppet::Type.type(:vs_port).provide(:ovs) do
4-
optional_commands :vsctl => "/usr/bin/ovs-vsctl"
4+
desc 'Openvswitch port manipulation'
5+
6+
commands :vsctl => 'ovs-vsctl'
57

68
def exists?
7-
vsctl("list-ports", @resource[:bridge]).include? @resource[:interface]
9+
vsctl('list-ports', @resource[:bridge]).include? @resource[:interface]
10+
rescue Puppet::ExecutionFailure => e
11+
return false
812
end
913

1014
def create
11-
vsctl("add-port", @resource[:bridge], @resource[:interface])
15+
vsctl('add-port', @resource[:bridge], @resource[:interface])
1216
end
1317

1418
def destroy
15-
vsctl("del-port", @resource[:bridge], @resource[:interface])
19+
vsctl('del-port', @resource[:bridge], @resource[:interface])
1620
end
1721
end

lib/puppet/type/vs_bridge.rb

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
1-
require "puppet"
1+
require 'puppet'
22

3-
module Puppet
4-
Puppet::Type.newtype(:vs_bridge) do
5-
@doc = "A Switch - For example 'br-int' in OpenStack"
3+
Puppet::Type.newtype(:vs_bridge) do
4+
desc 'A Switch - For example "br-int" in OpenStack'
65

7-
ensurable
6+
ensurable
87

9-
newparam(:name) do
10-
isnamevar
11-
desc "The bridge to configure"
12-
end
8+
newparam(:name, :namevar => true) do
9+
desc 'The bridge to configure'
1310

14-
newproperty(:external_ids) do
15-
desc "External IDs for the bridge"
11+
validate do |value|
12+
if !value.is_a?(String)
13+
raise ArgumentError, "Invalid name #{value}. Requires a String, not a #{value.class}"
14+
end
1615
end
16+
end
1717

18+
newproperty(:external_ids) do
19+
desc 'External IDs for the bridge: "key1=value2,key2=value2"'
20+
21+
validate do |value|
22+
if !value.is_a?(String)
23+
raise ArgumentError, "Invalid external_ids #{value}. Requires a String, not a #{value.class}"
24+
end
25+
if value !~ /^(?>[a-zA-Z]\w*=\w*){1}(?>[,][a-zA-Z]\w*=\w*)*$/
26+
raise ArgumentError, "Invalid external_ids #{value}. Must a list of key1=value2,key2=value2"
27+
end
28+
end
1829
end
1930
end

lib/puppet/type/vs_port.rb

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,49 @@
1-
require "puppet"
1+
require 'puppet'
22

3-
module Puppet
4-
Puppet::Type.newtype(:vs_port) do
5-
@doc = "A Virtual Switch Port"
3+
Puppet::Type.newtype(:vs_port) do
4+
desc 'A Virtual Switch Port'
65

7-
ensurable
6+
ensurable
87

9-
newparam(:interface) do
10-
isnamevar
11-
desc "The interface to attach to the bridge"
12-
end
8+
newparam(:interface, :namevar => true) do
9+
desc 'The interface to attach to the bridge'
1310

14-
newparam(:bridge) do
15-
desc "What bridge to use"
11+
validate do |value|
12+
if !value.is_a?(String)
13+
raise ArgumentError, "Invalid interface #{value}. Requires a String, not a #{value.class}"
14+
end
1615
end
16+
end
1717

18-
# newparam(:keep_ip, :boolean => true, :parent => Puppet::Parameter::Boolean) do
19-
newparam(:keep_ip) do
20-
desc "True: keep physical interface's details and assign them to the bridge"
18+
newparam(:bridge) do
19+
desc "What bridge to use"
2120

22-
defaultto false
21+
validate do |value|
22+
if !value.is_a?(String)
23+
raise ArgumentError, "Invalid bridge #{value}. Requires a String, not a #{value.class}'"
24+
end
2325
end
26+
end
27+
28+
newparam(:keep_ip) do
29+
desc "True: keep physical interface's details and assign them to the bridge"
2430

25-
newparam(:sleep) do
26-
desc "Waiting time, in seconds (0 by default), for network to sync after activating port, used with keep_ip only"
31+
defaultto false
32+
end
33+
34+
newparam(:sleep) do
35+
desc "Waiting time, in seconds (0 by default), for network to sync after activating port, used with keep_ip only"
36+
37+
defaultto '0'
2738

28-
defaultto '0'
29-
30-
validate do |value|
31-
if value.to_i.class != Fixnum || value.to_i < 0
32-
raise ArgumentError, "sleep requires a positive integer"
33-
end
39+
validate do |value|
40+
if value.to_i.class != Fixnum || value.to_i < 0
41+
raise ArgumentError, "sleep requires a positive integer"
3442
end
3543
end
36-
37-
autorequire(:vs_bridge) do
38-
[self[:bridge]]
39-
end
44+
end
4045

46+
autorequire(:vs_bridge) do
47+
self[:bridge] if self[:bridge]
4148
end
4249
end
43-

0 commit comments

Comments
 (0)