rbeapi 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. data/CHANGELOG.md +16 -0
  2. data/Gemfile +3 -1
  3. data/Guardfile +2 -2
  4. data/README.md +35 -24
  5. data/Rakefile +48 -18
  6. data/gems/inifile/inifile.spec.tmpl +50 -14
  7. data/gems/net_http_unix/net_http_unix.spec.tmpl +48 -15
  8. data/gems/netaddr/netaddr.spec.tmpl +47 -14
  9. data/lib/rbeapi/api/bgp.rb +100 -4
  10. data/lib/rbeapi/api/interfaces.rb +4 -5
  11. data/lib/rbeapi/api/radius.rb +1 -1
  12. data/lib/rbeapi/api/routemaps.rb +405 -37
  13. data/lib/rbeapi/api/system.rb +21 -0
  14. data/lib/rbeapi/api/users.rb +361 -0
  15. data/lib/rbeapi/api/varp.rb +50 -22
  16. data/lib/rbeapi/api/vrrp.rb +1072 -0
  17. data/lib/rbeapi/client.rb +12 -4
  18. data/lib/rbeapi/eapilib.rb +1 -1
  19. data/lib/rbeapi/version.rb +1 -1
  20. data/rbeapi.spec.tmpl +57 -25
  21. data/spec/system/rbeapi/api/dns_spec.rb +2 -2
  22. data/spec/system/rbeapi/api/routemaps_spec.rb +344 -0
  23. data/spec/system/rbeapi/api/switchports_spec.rb +1 -1
  24. data/spec/system/rbeapi/api/system_spec.rb +44 -4
  25. data/spec/system/{api_varp_interfaces_spec.rb → rbeapi/api/varp_interfaces_spec.rb} +25 -16
  26. data/spec/system/rbeapi/api/varp_spec.rb +76 -0
  27. data/spec/unit/rbeapi/api/bgp/bgp_neighbors_spec.rb +2 -0
  28. data/spec/unit/rbeapi/api/bgp/bgp_spec.rb +54 -1
  29. data/spec/unit/rbeapi/api/interfaces/portchannel_spec.rb +1 -1
  30. data/spec/unit/rbeapi/api/routemaps/default_spec.rb +370 -0
  31. data/spec/unit/rbeapi/api/routemaps/fixture_routemaps.text +27 -0
  32. data/spec/unit/rbeapi/api/system/default_spec.rb +102 -0
  33. data/spec/unit/rbeapi/api/system/fixture_system.text +2 -0
  34. data/spec/unit/rbeapi/api/users/default_spec.rb +280 -0
  35. data/spec/unit/rbeapi/api/users/fixture_users.text +4 -0
  36. data/spec/unit/rbeapi/api/vrrp/default_spec.rb +582 -0
  37. data/spec/unit/rbeapi/api/vrrp/fixture_vrrp.text +186 -0
  38. metadata +28 -8
  39. data/spec/system/api_varp_spec.rb +0 -41
data/CHANGELOG.md CHANGED
@@ -1,6 +1,22 @@
1
1
  Ruby Client for eAPI
2
2
  ====================
3
3
 
4
+ ## v0.4.0, November, 2015
5
+
6
+ - New users API
7
+ - New routemap API
8
+ - New vrrp API
9
+ - BGP API: Add support for maximum_paths and maximum_ecmp_paths
10
+ - System API: add support for managing the global EOS ‘ip routing’ setting
11
+ - Updated RPM/SWIX packaging to handle Puppet All-In-One (AIO) agent paths
12
+ New package names are: rbeapi, rbeapi-puppet3 (formerly pe-puppet),
13
+ and rbeapi-puppet-aio
14
+ - Fixed port-channel get_members() issue with EOS 4.15 and above.
15
+ - Fixed issue with the eapi.conf wildcard connection
16
+ - Fixed issue that would cause a traceback when searching for eapi.conf if
17
+ $HOME was not set
18
+
19
+
4
20
  ## v0.3.0, August, 2015
5
21
 
6
22
  - API Change: Eliminated overloading the value option in command_builder. When
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gem 'net_http_unix'
6
6
  gem 'netaddr'
7
7
 
8
8
  group :development do
9
+ gem 'rubocop', '>=0.35.1'
9
10
  gem 'guard'
10
11
  gem 'guard-rspec'
11
12
  gem 'guard-rubocop'
@@ -13,6 +14,7 @@ group :development do
13
14
  end
14
15
 
15
16
  group :development, :test do
17
+ gem 'listen', '<=3.0.3'
16
18
  gem 'rake', '~> 10.1.0'
17
19
  gem 'rspec', '~> 3.0.0'
18
20
  gem 'rspec-mocks', '~> 3.0.0'
@@ -22,7 +24,7 @@ group :development, :test do
22
24
  gem 'pry', require: false
23
25
  gem 'pry-doc', require: false
24
26
  gem 'pry-stack_explorer', require: false
25
- gem 'rbeapi', '0.3.0', path: '.'
27
+ gem 'rbeapi', '0.4.0', path: '.'
26
28
  gem 'ci_reporter_rspec', require: false
27
29
  gem 'simplecov-json', require: false
28
30
  gem 'simplecov-rcov', require: false
data/Guardfile CHANGED
@@ -5,8 +5,8 @@
5
5
 
6
6
  guard :rspec, cmd: 'bundle exec rspec' do
7
7
  watch(%r{^spec\/.+_spec\.rb$})
8
- watch(%r{^lib\/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
9
- watch('spec/spec_helper.rb') { 'spec' }
8
+ watch(%r{^lib\/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { 'spec' }
10
10
  end
11
11
 
12
12
  guard :rubocop do
data/README.md CHANGED
@@ -214,8 +214,10 @@ and uploaded to [RubyGems](https://rubygems.org/).
214
214
  by the build. NOTE:
215
215
  [PuppetLabs](https://puppetlabs.com/misc/pe-files) provides a puppet agent SWIX which includes Ruby 1.9.3 in
216
216
  /opt/puppet/bin/ which is different from where you might otherwise install
217
- Ruby. If you have installed the puppet-enterprise SWIX, then you should
218
- build and use the ``pe-rbeapi`` swix, below. Otherwise, if you have installed
217
+ Ruby. If you have installed the puppet-enterprise 3.x SWIX, then you should
218
+ build and use the ``rbeapi-puppet3`` swix, below. If you have installed
219
+ the puppet-enterprise 2015.x SWIX, then you should build and use the
220
+ ``rbeapi-puppet-aio`` swix, below. Otherwise, if you have installed at least
219
221
  Ruby 1.9.3 in the standard system location, then the ``rbeapi`` SWIX may be
220
222
  used.
221
223
 
@@ -223,20 +225,29 @@ and uploaded to [RubyGems](https://rubygems.org/).
223
225
  $ bundle install --path .bundle/gems/
224
226
  $ bundle exec rake all_rpms
225
227
  ...
226
- RPMs are available in rpms/noarch/
227
- Copy the RPMs to an EOS device then run the 'swix create' command.
228
- Examples:
229
- Puppet Open Source:
230
- cd /mnt/flash; swix create rbeapi-0.3.0-1.swix \
231
- rubygem-rbeapi-0.3.0-1.eos4.noarch.rpm \
232
- rubygem-inifile-3.0.0-2.eos4.noarch.rpm \
233
- rubygem-netaddr-1.5.0-1.eos4.noarch.rpm \
234
- rubygem-net_http_unix-0.2.1-2.eos4.noarch.rpm
235
- Puppet-enterprise:
236
- cd/mnt/flash; swix create pe-rbeapi-0.3.0-1.swix \
237
- pe-rubygem-rbeapi-0.3.0-1.eos4.noarch.rpm \
238
- pe-rubygem-inifile-3.0.0-2.eos4.noarch.rpm \
239
- pe-rubygem-netaddr-1.5.0-1.eos4.noarch.rpm
228
+ RPMs are available in rpms/noarch/
229
+ Copy the RPMs to an EOS device then run the 'swix create' command.
230
+ Examples:
231
+ Puppet Open Source:
232
+ cd /mnt/flash; \
233
+ swix create rbeapi-0.4.0-1.swix \
234
+ rubygem-rbeapi-0.4.0-1.eos4.noarch.rpm \
235
+ rubygem-inifile-3.0.0-3.eos4.noarch.rpm \
236
+ rubygem-netaddr-1.5.0-2.eos4.noarch.rpm \
237
+ rubygem-net_http_unix-0.2.1-3.eos4.noarch.rpm
238
+ Puppet-enterprise agent (3.x):
239
+ cd/mnt/flash; \
240
+ swix create rbeapi-puppet3-0.4.0-1.swix \
241
+ rubygem-rbeapi-puppet3-0.4.0-1.eos4.noarch.rpm \
242
+ rubygem-inifile-puppet3-3.0.0-3.eos4.noarch.rpm \
243
+ rubygem-netaddr-puppet3-1.5.0-2.eos4.noarch.rpm
244
+ Puppet-All-in-one agent (2015.x/4.x):
245
+ cd/mnt/flash; \
246
+ swix create rbeapi-puppet-aio-0.4.0-1.swix \
247
+ rubygem-rbeapi-puppet-aio-0.4.0-1.eos4.noarch.rpm \
248
+ rubygem-inifile-puppet-aio-3.0.0-3.eos4.noarch.rpm \
249
+ rubygem-netaddr-puppet-aio-1.5.0-2.eos4.noarch.rpm \
250
+ rubygem-net_http_unix-puppet-aio-0.2.1-3.eos4.noarch.rpm
240
251
  ```
241
252
 
242
253
  On EOS:
@@ -244,13 +255,13 @@ and uploaded to [RubyGems](https://rubygems.org/).
244
255
  Arista# copy <URI-to-RPMs> flash:
245
256
  Arista# bash
246
257
  -bash-4.1# cd /mnt/flash/
247
- -bash-4.1# swix create pe-rbeapi-0.3.0-1.swix \
248
- pe-rubygem-rbeapi-0.1.0-1.eos4.noarch.rpm \
249
- pe-rubygem-inifile-3.0.0-1.eos4.noarch.rpm \
250
- pe-rubygem-netaddr-1.5.0-1.eos4.noarch.rpm
258
+ -bash-4.1# swix create rbeapi-puppet3-0.4.0-1.swix \
259
+ rubygem-rbeapi-puppet3-0.4.0-1.eos4.noarch.rpm \
260
+ rubygem-inifile-puppet3-3.0.0-1.eos4.noarch.rpm \
261
+ rubygem-netaddr-puppet3-1.5.0-1.eos4.noarch.rpm
251
262
  -bash-4.1# exit
252
- Arista# copy flash:pe-rbeapi-0.3.0-1.swix extension:
253
- Arista# extension pe-rbeapi-0.3.0-1.swix
263
+ Arista# copy flash:rbeapi-puppet3-0.4.0-1.swix extension:
264
+ Arista# extension rbeapi-puppet3-0.4.0-1.swix
254
265
  Arista# copy installed-extensions boot-extensions
255
266
  ```
256
267
 
@@ -258,8 +269,8 @@ and uploaded to [RubyGems](https://rubygems.org/).
258
269
 
259
270
  On EOS:
260
271
  ```
261
- Arista# no extension pe-rbeapi-0.2.0-1.swix
262
- Arista# extension pe-rbeapi-0.3.0-1.swix
272
+ Arista# no extension pe-rbeapi-0.3.0-1.swix
273
+ Arista# extension rbeapi-puppet3-0.4.0-1.swix
263
274
  Arista# copy installed-extensions boot-extensions
264
275
  ```
265
276
 
data/Rakefile CHANGED
@@ -15,7 +15,6 @@ task rpm: :build do
15
15
  system "sed -e 's/^Version:.*/Version: #{Rbeapi::VERSION}/g' " \
16
16
  'rbeapi.spec.tmpl > rbeapi.spec'
17
17
  system "rpmbuild #{RPM_OPTS} rbeapi.spec"
18
- system "rpmbuild #{RPM_OPTS} --define 'enterprise 1' rbeapi.spec"
19
18
  RPMS = `find rpms/noarch -name "*rbeapi*rpm"`
20
19
  puts "\n################################################\n#"
21
20
  puts "Created the following in rpms/noarch/\n#{RPMS}"
@@ -33,8 +32,6 @@ task :inifile do
33
32
  system "sed -e 's/^Version:.*/Version: #{INIFILE_VERSION}/g' " \
34
33
  'gems/inifile/inifile.spec.tmpl > gems/inifile/inifile.spec'
35
34
  system "rpmbuild #{RPM_OPTS} gems/inifile/inifile.spec"
36
- system "rpmbuild #{RPM_OPTS} --define 'enterprise 1' " \
37
- 'gems/inifile/inifile.spec'
38
35
  RPMS = `find rpms/noarch -name "*inifile*rpm"`
39
36
  puts "\n################################################\n#"
40
37
  puts "Created the following in rpms/noarch/\n#{RPMS}"
@@ -70,8 +67,6 @@ task :netaddr do
70
67
  system "sed -e 's/^Version:.*/Version: #{NETADDR_VERSION}/g' " \
71
68
  'gems/netaddr/netaddr.spec.tmpl > gems/netaddr/netaddr.spec'
72
69
  system "rpmbuild #{RPM_OPTS} gems/netaddr/netaddr.spec"
73
- system "rpmbuild #{RPM_OPTS} --define 'enterprise 1' " \
74
- 'gems/netaddr/netaddr.spec'
75
70
  RPMS = `find rpms/noarch -name "*netaddr*rpm"`
76
71
  puts "\n################################################\n#"
77
72
  puts "Created the following in rpms/noarch/\n#{RPMS}"
@@ -87,19 +82,54 @@ task all_rpms: :build do
87
82
  puts 'RPMs are available in rpms/noarch/'
88
83
  puts "Copy the RPMs to an EOS device then run the 'swix create' command."
89
84
  puts ' Examples: '
90
- puts ' Puppet Open Source: '
91
- puts ' cd /mnt/flash; \\'
92
- puts " swix create rbeapi-#{Rbeapi::VERSION}-1.swix \\"
93
- puts " rubygem-rbeapi-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \\"
94
- puts ' rubygem-inifile-3.0.0-2.eos4.noarch.rpm \\'
95
- puts ' rubygem-netaddr-1.5.0-1.eos4.noarch.rpm \\'
96
- puts ' rubygem-net_http_unix-0.2.1-2.eos4.noarch.rpm'
97
- puts ' Puppet-enterprise: '
98
- puts ' cd/mnt/flash; \\'
99
- puts " swix create pe-rbeapi-#{Rbeapi::VERSION}-1.swix \\"
100
- puts " pe-rubygem-rbeapi-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \\"
101
- puts ' pe-rubygem-inifile-3.0.0-2.eos4.noarch.rpm \\'
102
- puts ' pe-rubygem-netaddr-1.5.0-1.eos4.noarch.rpm'
85
+ puts ' Puppet Open Source: '
86
+ puts ' cd /mnt/flash; \\'
87
+ puts " swix create rbeapi-#{Rbeapi::VERSION}-1.swix \\"
88
+ puts " rubygem-rbeapi-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \\"
89
+ puts ' rubygem-inifile-3.0.0-3.eos4.noarch.rpm \\'
90
+ puts ' rubygem-netaddr-1.5.0-2.eos4.noarch.rpm \\'
91
+ puts ' rubygem-net_http_unix-0.2.1-3.eos4.noarch.rpm'
92
+ puts ' Puppet-enterprise agent (3.x): '
93
+ puts ' cd/mnt/flash; \\'
94
+ puts " swix create rbeapi-puppet3-#{Rbeapi::VERSION}-1.swix \\"
95
+ puts " rubygem-rbeapi-puppet3-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \\"
96
+ puts ' rubygem-inifile-puppet3-3.0.0-3.eos4.noarch.rpm \\'
97
+ puts ' rubygem-netaddr-puppet3-1.5.0-2.eos4.noarch.rpm'
98
+ puts ' Puppet-All-in-one agent (2015.x/4.x): '
99
+ puts ' cd/mnt/flash; \\'
100
+ puts " swix create rbeapi-puppet-aio-#{Rbeapi::VERSION}-1.swix \\"
101
+ puts " rubygem-rbeapi-puppet-aio-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \\"
102
+ puts ' rubygem-inifile-puppet-aio-3.0.0-3.eos4.noarch.rpm \\'
103
+ puts ' rubygem-netaddr-puppet-aio-1.5.0-2.eos4.noarch.rpm \\'
104
+ puts ' rubygem-net_http_unix-puppet-aio-0.2.1-3.eos4.noarch.rpm'
105
+ end
106
+
107
+ desc 'Generate SWIX files from RPMs'
108
+ task swix: :all_rpms do
109
+ SWIX = 'PYTHONPATH=${PYTHONPATH}:/nfs/misc/tools/swix \
110
+ /nfs/misc/tools/swix/swix'
111
+ system "cd rpms/noarch;
112
+ rm -f rbeapi-#{Rbeapi::VERSION}-1.swix;
113
+ #{SWIX} create rbeapi-#{Rbeapi::VERSION}-1.swix \
114
+ rubygem-rbeapi-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \
115
+ rubygem-inifile-3.0.0-3.eos4.noarch.rpm \
116
+ rubygem-netaddr-1.5.0-2.eos4.noarch.rpm"
117
+ system "cd rpms/noarch;
118
+ rm -f rbeapi-puppet3-#{Rbeapi::VERSION}-1.swix;
119
+ #{SWIX} create rbeapi-puppet3-#{Rbeapi::VERSION}-1.swix \
120
+ rubygem-rbeapi-puppet3-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \
121
+ rubygem-inifile-puppet3-3.0.0-3.eos4.noarch.rpm \
122
+ rubygem-netaddr-puppet3-1.5.0-2.eos4.noarch.rpm"
123
+ system "cd rpms/noarch;
124
+ rm -f rbeapi-puppet-aio-#{Rbeapi::VERSION}-1.swix;
125
+ #{SWIX} create rbeapi-puppet-aio-#{Rbeapi::VERSION}-1.swix \
126
+ rubygem-rbeapi-puppet-aio-#{Rbeapi::VERSION}-1.eos4.noarch.rpm \
127
+ rubygem-inifile-puppet-aio-3.0.0-3.eos4.noarch.rpm \
128
+ rubygem-netaddr-puppet-aio-1.5.0-2.eos4.noarch.rpm"
129
+ SWIXS = `find rpms/noarch -name "rbeapi*swix" -ls`
130
+ puts "\n################################################\n#"
131
+ puts "The following artifacts are in rpms/noarch/\n#{SWIXS}"
132
+ puts "#\n################################################\n\n"
103
133
  end
104
134
 
105
135
  task release: :build do
@@ -3,7 +3,7 @@
3
3
 
4
4
  Name: %{?enterprise:pe-}rubygem-%{gem_name}
5
5
  Version: 3.0.0
6
- Release: 2.eos4
6
+ Release: 3.eos4
7
7
  Summary: INI file reader and writer
8
8
 
9
9
  Group: Development/Languages
@@ -11,19 +11,8 @@ License: Unknown
11
11
  URL: http://rubygems.org/gems/inifile
12
12
  Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
13
13
 
14
- %if 0%{?enterprise:1} == 1
15
- # Use these settings for Puppet Enterprise
16
- %global gem /opt/puppet/bin/gem
17
- Requires: pe-ruby
18
- Requires: pe-rubygems
19
- Provides: pe-rubygem(%{gem_name}) = %{version}
20
- Provides: pe-rubygem-%{gem_name} = %{version}
21
- %else
22
- # Use these settings for all other installs
23
- %global gem gem
24
14
  Requires: ruby(abi) = %{rubyabi}
25
15
  Provides: ruby(%{gem_name}) = %{version}-%{release}
26
- %endif
27
16
 
28
17
  BuildArch: noarch
29
18
 
@@ -60,6 +49,25 @@ are also possible
60
49
  var1 = baz
61
50
  var2 = shoodle.
62
51
 
52
+ %package puppet3
53
+ Summary: Inifile rubygem packaged for Puppet 3.x on Arista EOS
54
+ Group: Development/Languages
55
+ Requires: pe-ruby
56
+ Requires: pe-rubygems
57
+ Provides: pe-rubygem(%{gem_name}) = %{version}
58
+ Provides: pe-rubygem-%{gem_name} = %{version}
59
+ %description puppet3
60
+ The inifile rubygem packaged for Puppet 3.x on Arista EOS.
61
+
62
+ %package puppet-aio
63
+ Summary: Inifile rubygem packaged for Puppet 2015 (4.x) on Arista EOS
64
+ Group: Development/Languages
65
+ # Use these settings for all other installs
66
+ Requires: puppet >= 4.0.0
67
+ Provides: rubygem-%{gem_name} = %{version}
68
+ %description puppet-aio
69
+ The inifile rubygem packaged for Puppet 2015 (4.x) on Arista EOS.
70
+
63
71
  %prep
64
72
  %setup -q -D -T -n .
65
73
 
@@ -70,13 +78,41 @@ install %{SOURCE0} %{buildroot}/
70
78
  %files
71
79
  /%{gem_name}-%{version}.gem
72
80
 
81
+ %files puppet3
82
+ /%{gem_name}-%{version}.gem
83
+
84
+ %files puppet-aio
85
+ /%{gem_name}-%{version}.gem
86
+
73
87
  %post
74
- %{gem} install --local /%{gem_name}-%{version}.gem > /dev/null 2>&1
88
+ GEM_OPTS="--no-document --local"
89
+ gem install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
75
90
 
76
91
  %preun
77
- %{gem} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
92
+ gem uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
93
+
94
+ %post puppet3
95
+ GEM=/opt/puppet/bin/gem
96
+ GEM_OPTS="--no-document --local"
97
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
98
+
99
+ %preun puppet3
100
+ GEM=/opt/puppet/bin/gem
101
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
102
+
103
+ %post puppet-aio
104
+ GEM=/opt/puppetlabs/puppet/bin/gem
105
+ GEM_OPTS="--no-document --local"
106
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
107
+
108
+ %preun puppet-aio
109
+ GEM=/opt/puppetlabs/puppet/bin/gem
110
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
78
111
 
79
112
  %changelog
113
+ * Fri Oct 30 2015 Jere Julian - 3.0.0-3
114
+ - Detect the location of the puppet-agent's gem install
115
+
80
116
  * Thu May 21 2015 Jere Julian - 3.0.0-2
81
117
  - Ubuntu requires we manually create the buildroot
82
118
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  Name: %{?enterprise:pe-}rubygem-%{gem_name}
5
5
  Version: 0.2.1
6
- Release: 2.eos4
6
+ Release: 3.eos4
7
7
  Summary: Wrapper around Net::HTTP with AF_UNIX support
8
8
 
9
9
  Group: Development/Languages
@@ -11,25 +11,30 @@ License: Apache 2.0
11
11
  URL: http://github.com/puppetlabs/net_http_unix
12
12
  Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
13
13
 
14
- %if 0%{?enterprise:1} == 1
15
- # Use these settings for Puppet Enterprise
16
- %global gem /opt/puppet/bin/gem
17
- Requires: pe-ruby
18
- Requires: pe-rubygems
19
- Provides: pe-rubygem(%{gem_name}) = %{version}
20
- Provides: pe-rubygem-%{gem_name} = %{version}
21
- %else
22
- # Use these settings for all other installs
23
- %global gem gem
24
14
  Requires: ruby(abi) = %{rubyabi}
25
15
  Provides: ruby(%{gem_name}) = %{version}-%{release}
26
- %endif
27
16
 
28
17
  BuildArch: noarch
29
18
 
30
19
  %description
31
20
  Wrapper around Net::HTTP with AF_UNIX support.
32
21
 
22
+ %package puppet3
23
+ Group: Development/Languages
24
+ Summary: Net_http_unix rubygem packaged for Puppet Enterprise 3.x agents
25
+ Requires: pe-ruby
26
+ Requires: pe-rubygems
27
+ Provides: pe-rubygem(%{gem_name}) = %{version}
28
+ Provides: pe-rubygem-%{gem_name} = %{version}
29
+ %description puppet3
30
+
31
+ %package puppet-aio
32
+ Group: Development/Languages
33
+ Summary: Net_http_unix rubygem packaged for Puppet All-In-One (4.x) agents
34
+ Requires: puppet >= 4.0.0
35
+ Provides: rubygem-%{gem_name} = %{version}
36
+ %description puppet-aio
37
+
33
38
  %prep
34
39
  %setup -q -D -T -n .
35
40
 
@@ -40,14 +45,42 @@ install %{SOURCE0} %{buildroot}/
40
45
  %files
41
46
  /%{gem_name}-%{version}.gem
42
47
 
48
+ %files puppet3
49
+ /%{gem_name}-%{version}.gem
50
+
51
+ %files puppet-aio
52
+ /%{gem_name}-%{version}.gem
53
+
43
54
  %post
44
- %{gem} install --local /%{gem_name}-%{version}.gem > /dev/null 2>&1
55
+ GEM_OPTS="--no-document --local"
56
+ gem install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
45
57
 
46
58
  %preun
47
- %{gem} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
59
+ gem uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
60
+
61
+ %post puppet3
62
+ GEM=/opt/puppet/bin/gem
63
+ GEM_OPTS="--no-document --local"
64
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
65
+
66
+ %preun puppet3
67
+ GEM=/opt/puppet/bin/gem
68
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
69
+
70
+ %post puppet-aio
71
+ GEM=/opt/puppetlabs/puppet/bin/gem
72
+ GEM_OPTS="--no-document --local"
73
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
74
+
75
+ %preun puppet-aio
76
+ GEM=/opt/puppetlabs/puppet/bin/gem
77
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1pckage puppet3
48
78
 
49
79
  %changelog
50
- * Tue May 21 2015 Jere Julian - 0.2.1-2
80
+ * Fri Oct 30 2015 Jere Julian - 0.2.1-3
81
+ - Detect the location of the puppet-agent's gem install
82
+
83
+ * Thu May 21 2015 Jere Julian - 0.2.1-2
51
84
  - Ubuntu requires we manually create the buildroot
52
85
 
53
86
  * Tue Mar 17 2015 Jere Julian - 0.2.1-1
@@ -3,31 +3,36 @@
3
3
 
4
4
  Name: %{?enterprise:pe-}rubygem-%{gem_name}
5
5
  Version: 1.5.0
6
- Release: 1.eos4
6
+ Release: 2.eos4
7
7
  Summary: A package for manipulating network addresses
8
8
  Group: Development/Languages
9
9
  License: Unknown
10
10
  Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
11
11
 
12
- %if 0%{?enterprise:1} == 1
13
- # Use these settings for Puppet Enterprise
14
- %global gem /opt/puppet/bin/gem
15
- Requires: pe-ruby
16
- Requires: pe-rubygems
17
- Provides: pe-rubygem(%{gem_name}) = %{version}
18
- Provides: pe-rubygem-%{gem_name} = %{version}
19
- %else
20
- # Use these settings for all other installs
21
- %global gem gem
22
12
  Requires: ruby(abi) = %{rubyabi}
23
13
  Provides: ruby(%{gem_name}) = %{version}-%{release}
24
- %endif
25
14
 
26
15
  BuildArch: noarch
27
16
 
17
+
28
18
  %description
29
19
  A package for manipulating network addresses.
30
20
 
21
+ %package puppet3
22
+ Summary: NetAddr rubygem packaged for Puppet Enterprise 3.x agents
23
+ Group: Development/Languages
24
+ Requires: pe-ruby
25
+ Requires: pe-rubygems
26
+ Provides: pe-rubygem(%{gem_name}) = %{version}
27
+ Provides: pe-rubygem-%{gem_name} = %{version}
28
+ %description puppet3
29
+
30
+ %package puppet-aio
31
+ Summary: NetAddr rubygem packaged for Puppet All-In-One (4.x) agents
32
+ Group: Development/Languages
33
+ Requires: puppet >= 4.0.0
34
+ Provides: rubygem-%{gem_name} = %{version}
35
+ %description puppet-aio
31
36
 
32
37
  %prep
33
38
  %setup -q -D -T -n .
@@ -39,12 +44,40 @@ install %{SOURCE0} %{buildroot}/
39
44
  %files
40
45
  /%{gem_name}-%{version}.gem
41
46
 
47
+ %files puppet3
48
+ /%{gem_name}-%{version}.gem
49
+
50
+ %files puppet-aio
51
+ /%{gem_name}-%{version}.gem
52
+
42
53
  %post
43
- %{gem} install --local /%{gem_name}-%{version}.gem > /dev/null 2>&1
54
+ GEM_OPTS="--no-document --local"
55
+ gem install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
44
56
 
45
57
  %preun
46
- %{gem} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
58
+ gem uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
59
+
60
+ %post puppet3
61
+ GEM=/opt/puppet/bin/gem
62
+ GEM_OPTS="--no-document --local"
63
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
64
+
65
+ %preun puppet3
66
+ GEM=/opt/puppet/bin/gem
67
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
68
+
69
+ %post puppet-aio
70
+ GEM=/opt/puppetlabs/puppet/bin/gem
71
+ GEM_OPTS="--no-document --local"
72
+ ${GEM} install ${GEM_OPTS} /%{gem_name}-%{version}.gem > /dev/null 2>&1
73
+
74
+ %preun puppet-aio
75
+ GEM=/opt/puppetlabs/puppet/bin/gem
76
+ ${GEM} uninstall %{gem_name} --version '= %{version}' > /dev/null 2>&1
47
77
 
48
78
  %changelog
79
+ * Fri Oct 30 2015 Jere Julian - 1.5.0-2
80
+ - Detect the location of the puppet-agent's gem install
81
+
49
82
  * Tue Jul 07 2015 Jere Julian <jere@arista.com> - 1.5.0-1
50
83
  - Initial package
@@ -55,11 +55,12 @@ module Rbeapi
55
55
  # Hash.
56
56
  def get
57
57
  config = get_block('^router bgp .*')
58
- return {} unless config
58
+ return nil unless config
59
59
 
60
60
  response = Bgp.parse_bgp_as(config)
61
61
  response.merge!(parse_router_id(config))
62
62
  response.merge!(parse_shutdown(config))
63
+ response.merge!(parse_maximum_paths(config))
63
64
  response.merge!(parse_networks(config))
64
65
  response[:neighbors] = @neighbors.getall
65
66
  response
@@ -110,6 +111,21 @@ module Rbeapi
110
111
  end
111
112
  private :parse_shutdown
112
113
 
114
+ ##
115
+ # parse_maximum_paths scans the BGP routing configuration for the
116
+ # maximum paths and maximum ecmp paths.
117
+ #
118
+ # @api private
119
+ #
120
+ # @param [String] :config The switch config.
121
+ #
122
+ # @return [Hash<Symbol, Object>] resource hash attribute
123
+ def parse_maximum_paths(config)
124
+ values = config.scan(/maximum-paths\s+(\d+)\s+ecmp\s+(\d+)/).first
125
+ { maximum_paths: values[0].to_i, maximum_ecmp_paths: values[1].to_i }
126
+ end
127
+ private :parse_maximum_paths
128
+
113
129
  ##
114
130
  # parse_networks scans the BGP routing configuration for all
115
131
  # the network entries.
@@ -133,6 +149,8 @@ module Rbeapi
133
149
 
134
150
  ##
135
151
  # create will create a new instance of BGP routing on the node.
152
+ # Optional parameters can be passed in to initialize BGP specific
153
+ # settings.
136
154
  #
137
155
  # @commands
138
156
  # router bgp <bgp_as>
@@ -140,10 +158,48 @@ module Rbeapi
140
158
  # @param [String] :bgp_as The BGP autonomous system number to be
141
159
  # configured for the local BGP routing instance.
142
160
  #
161
+ #
162
+ # @param [hash] :opts Optional keyword arguments
163
+ #
164
+ # @option :opts [String] :router_id The BGP routing process router-id
165
+ # value. When no ID has been specified (i.e. value not set), the
166
+ # local router ID is set to the following:
167
+ # * The loopback IP address when a single loopback interface is
168
+ # configured.
169
+ # * The loopback with the highest IP address when multiple loopback
170
+ # interfaces are configured.
171
+ # * The highest IP address on a physical interface when no loopback
172
+ # interfaces are configure
173
+ #
174
+ # @option :opts [Integer] :maximum_paths Maximum number of equal cost
175
+ # paths.
176
+ #
177
+ # @option :opts [Integer] :maximum_ecmp_paths Maximum number of installed
178
+ # ECMP routes. The maximum_paths option must be set if
179
+ # maximum_ecmp_paths is set.
180
+ #
181
+ # @option :opts [Boolean] :enable If true then the BGP router is enabled.
182
+ # If false then the BGP router is disabled.
183
+ #
143
184
  # @return [Boolean] returns true if the command completed successfully
144
- def create(bgp_as)
145
- value = bgp_as
146
- configure("router bgp #{value}")
185
+ def create(bgp_as, opts = {})
186
+ if opts[:maximum_ecmp_paths] && !opts[:maximum_paths]
187
+ message = 'maximum_paths must be set if maximum_ecmp_paths is set'
188
+ fail ArgumentError, message
189
+ end
190
+ cmds = ["router bgp #{bgp_as}"]
191
+ if opts.key?(:enable)
192
+ cmds << (opts[:enable] == true ? 'no shutdown' : 'shutdown')
193
+ end
194
+ cmds << "router-id #{opts[:router_id]}" if opts.key?(:router_id)
195
+ if opts.key?(:maximum_paths)
196
+ cmd = "maximum-paths #{opts[:maximum_paths]}"
197
+ if opts.key?(:maximum_ecmp_paths)
198
+ cmd << " ecmp #{opts[:maximum_ecmp_paths]}"
199
+ end
200
+ cmds << cmd
201
+ end
202
+ configure(cmds)
147
203
  end
148
204
 
149
205
  ##
@@ -250,6 +306,46 @@ module Rbeapi
250
306
  configure_bgp(command_builder('shutdown', opts))
251
307
  end
252
308
 
309
+ ##
310
+ # set_maximum_paths sets the maximum number of equal cost paths and
311
+ # the maximum number of installed ECMP routes.
312
+ #
313
+ # @commands
314
+ # router bgp <bgp_as>
315
+ # {no | default}
316
+ # maximum-paths <maximum_paths> [ecmp <maximum_ecmp_paths>]
317
+ #
318
+ # @param [Integer] :maximum_paths Maximum number of equal cost paths.
319
+ #
320
+ # @param [Integer] :maximum_ecmp_paths Maximum number of installed ECMP
321
+ # routes.
322
+ #
323
+ # @param [hash] :opts Optional keyword arguments
324
+ #
325
+ # @option :opts [Boolean] :enable If false then the command is
326
+ # negated. Default is true.
327
+ #
328
+ # @option :opts [Boolean] :default Configure the maximum paths using
329
+ # the default keyword
330
+ #
331
+ # @return [Boolean] returns true if the command complete successfully
332
+ def set_maximum_paths(maximum_paths, maximum_ecmp_paths, opts = {})
333
+ enable = opts.fetch(:enable, true)
334
+ default = opts[:default] || false
335
+
336
+ case default
337
+ when true
338
+ cmd = 'default maximum-paths'
339
+ when false
340
+ if enable
341
+ cmd = "maximum-paths #{maximum_paths} ecmp #{maximum_ecmp_paths}"
342
+ else
343
+ cmd = 'no maximum-paths'
344
+ end
345
+ end
346
+ configure_bgp(cmd)
347
+ end
348
+
253
349
  ##
254
350
  # add_network creates a new instance of a BGP network on the node.
255
351
  #