vagrant-cumulus 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 41553c80d4efcb5de885ab4f09ff684e5291a4b9
4
+ data.tar.gz: 0c6c7b8ad0909964c6d52aa4cc7a71027da14524
5
+ SHA512:
6
+ metadata.gz: cf81a470a3417c5ad0804d264e945177767c059e50db1753269b715d8a64642af0ef121f1e0185490b8f9f66b375fa1db25b31a06f915e27cb02d9e868bc540f
7
+ data.tar.gz: 9605980fe129323dcf9848f0fc63bac12f8d32ccae2bfcb5958f40583b2172078052780f10afd33a8fcea82dafff11670e12aa4d2acb6579fc694f4ae4e77641
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg
2
+ vendor
3
+ .bundle
4
+ Vagrantfile
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ # We depend on Vagrant for development, but we don't add it as a
5
+ # gem dependency because we expect to be installed within the
6
+ # Vagrant environment itself using `vagrant plugin`.
7
+ gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
8
+ gem "rake"
9
+ end
10
+
11
+ group :plugins do
12
+ gem "vagrant-cumulus", path: "."
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,153 @@
1
+ GIT
2
+ remote: git://github.com/mitchellh/vagrant.git
3
+ revision: e64cef9d31a22ea9ca007a16b8af8e97abf13904
4
+ specs:
5
+ vagrant (1.7.2)
6
+ bundler (>= 1.5.2, < 1.8.0)
7
+ childprocess (~> 0.5.0)
8
+ erubis (~> 2.7.0)
9
+ hashicorp-checkpoint (~> 0.1.1)
10
+ i18n (>= 0.6.0, <= 0.8.0)
11
+ listen (~> 2.8.0)
12
+ log4r (~> 1.1.9, < 1.1.11)
13
+ net-scp (~> 1.1.0)
14
+ net-sftp (~> 2.1)
15
+ net-ssh (>= 2.6.6, < 2.10.0)
16
+ nokogiri (= 1.6.3.1)
17
+ rb-kqueue (~> 0.2.0)
18
+ rest-client (>= 1.6.0, < 2.0)
19
+ wdm (~> 0.1.0)
20
+ winrm (~> 1.3)
21
+ winrm-fs (~> 0.2.0)
22
+
23
+ PATH
24
+ remote: .
25
+ specs:
26
+ vagrant-cumulus (0.1)
27
+
28
+ GEM
29
+ remote: https://rubygems.org/
30
+ specs:
31
+ builder (3.2.2)
32
+ celluloid (0.17.0)
33
+ bundler
34
+ celluloid-essentials
35
+ celluloid-extras
36
+ celluloid-fsm
37
+ celluloid-pool
38
+ celluloid-supervision
39
+ dotenv
40
+ nenv
41
+ rspec-logsplit (>= 0.1.2)
42
+ timers (~> 4.0.0)
43
+ celluloid-essentials (0.20.0)
44
+ bundler
45
+ dotenv
46
+ nenv
47
+ rspec-logsplit (>= 0.1.2)
48
+ timers (~> 4.0.0)
49
+ celluloid-extras (0.20.0)
50
+ bundler
51
+ dotenv
52
+ nenv
53
+ rspec-logsplit (>= 0.1.2)
54
+ timers (~> 4.0.0)
55
+ celluloid-fsm (0.20.0)
56
+ bundler
57
+ dotenv
58
+ nenv
59
+ rspec-logsplit (>= 0.1.2)
60
+ timers (~> 4.0.0)
61
+ celluloid-pool (0.20.0)
62
+ bundler
63
+ dotenv
64
+ nenv
65
+ rspec-logsplit (>= 0.1.2)
66
+ timers (~> 4.0.0)
67
+ celluloid-supervision (0.20.0)
68
+ bundler
69
+ dotenv
70
+ nenv
71
+ rspec-logsplit (>= 0.1.2)
72
+ timers (~> 4.0.0)
73
+ childprocess (0.5.6)
74
+ ffi (~> 1.0, >= 1.0.11)
75
+ domain_name (0.5.24)
76
+ unf (>= 0.0.5, < 1.0.0)
77
+ dotenv (2.0.2)
78
+ erubis (2.7.0)
79
+ ffi (1.9.10)
80
+ gssapi (1.2.0)
81
+ ffi (>= 1.0.1)
82
+ gyoku (1.3.1)
83
+ builder (>= 2.1.2)
84
+ hashicorp-checkpoint (0.1.4)
85
+ hitimes (1.2.2)
86
+ http-cookie (1.0.2)
87
+ domain_name (~> 0.5)
88
+ httpclient (2.6.0.1)
89
+ i18n (0.7.0)
90
+ listen (2.8.6)
91
+ celluloid (>= 0.15.2)
92
+ rb-fsevent (>= 0.9.3)
93
+ rb-inotify (>= 0.9)
94
+ little-plugger (1.1.3)
95
+ log4r (1.1.10)
96
+ logging (1.8.2)
97
+ little-plugger (>= 1.1.3)
98
+ multi_json (>= 1.8.4)
99
+ mime-types (2.6.1)
100
+ mini_portile (0.6.0)
101
+ multi_json (1.11.2)
102
+ nenv (0.2.0)
103
+ net-scp (1.1.2)
104
+ net-ssh (>= 2.6.5)
105
+ net-sftp (2.1.2)
106
+ net-ssh (>= 2.6.5)
107
+ net-ssh (2.9.2)
108
+ netrc (0.10.3)
109
+ nokogiri (1.6.3.1)
110
+ mini_portile (= 0.6.0)
111
+ nori (2.6.0)
112
+ rake (10.3.2)
113
+ rb-fsevent (0.9.5)
114
+ rb-inotify (0.9.5)
115
+ ffi (>= 0.5.0)
116
+ rb-kqueue (0.2.4)
117
+ ffi (>= 0.5.0)
118
+ rest-client (1.8.0)
119
+ http-cookie (>= 1.0.2, < 2.0)
120
+ mime-types (>= 1.16, < 3.0)
121
+ netrc (~> 0.7)
122
+ rspec-logsplit (0.1.3)
123
+ rubyntlm (0.4.0)
124
+ rubyzip (1.1.7)
125
+ timers (4.0.1)
126
+ hitimes
127
+ unf (0.1.4)
128
+ unf_ext
129
+ unf_ext (0.0.7.1)
130
+ uuidtools (2.1.5)
131
+ wdm (0.1.0)
132
+ winrm (1.3.3)
133
+ builder (>= 2.1.2)
134
+ gssapi (~> 1.2)
135
+ gyoku (~> 1.0)
136
+ httpclient (~> 2.2, >= 2.2.0.2)
137
+ logging (~> 1.6, >= 1.6.1)
138
+ nori (~> 2.0)
139
+ rubyntlm (~> 0.4.0)
140
+ uuidtools (~> 2.1.2)
141
+ winrm-fs (0.2.0)
142
+ erubis (~> 2.7)
143
+ logging (~> 1.6, >= 1.6.1)
144
+ rubyzip (~> 1.1)
145
+ winrm (~> 1.3.0)
146
+
147
+ PLATFORMS
148
+ ruby
149
+
150
+ DEPENDENCIES
151
+ rake
152
+ vagrant!
153
+ vagrant-cumulus!
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Dinesh Dutt
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Vagrant::Cumulus
2
+
3
+ This is a [Vagrant](http://www.vagrantup.com) 1.7+ plugin that adds a Cumulus Linux guest to Vagrant, allowing for OS detection and network configuration. Cumulus Linux is based off Debian, and so why need a plugin, you ask. Cumulus Linux names its front panel ports swp* instead of eth*, reserving eth0 for the management interface name. This foils interface configuration. Furthermore, Cumulus Linux ships with ifupdown2, a vastly improved, scalable and feature-rich improvement to the venerable ifupdown module in Debian for configuring interfaces. This plugin therefore exploits these differences of Cumulus Linux from Debian, leaving the rest to the Debian plugin.
4
+
5
+ > **NOTE:** This plugin requires Vagrant 1.7+,
6
+
7
+ ## Features
8
+
9
+ * Detect Cumulus Linux
10
+ * Configure network interfaces, including management and front panel ports
11
+ * Use ifupdown2 instead of ifupdown for interface configuration
12
+
13
+
14
+ ## Installation
15
+
16
+ Install using standard Vagrant 1.7+ plugin installation methods. The fastest way to get started is to use the standard Vagrant Cloud images:
17
+
18
+ ```
19
+ $ vagrant plugin install vagrant-cumulus
20
+
21
+ ## Usage
22
+
23
+ ... (create a Vagrant environment in a directory):
24
+ $ vagrant init CumulusVX
25
+ ...
26
+ $ vagrant up
27
+ ```
28
+ ## Usage
29
+
30
+ ## Contributing
31
+
32
+ 1. Fork it ( https://github.com/[my-github-username]/vagrant-cumulus/fork )
33
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
34
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
35
+ 4. Push to the branch (`git push origin my-new-feature`)
36
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # lib/vagrant-cumulus.rb
2
+
3
+ require 'bundler'
4
+
5
+ begin
6
+ require 'vagrant'
7
+ rescue LoadError
8
+ Bundler.require(:default, :development)
9
+ end
10
+
11
+ require 'vagrant-cumulus/plugin'
12
+
13
+ module VagrantPlugins
14
+ module GuestCumulus
15
+ # This returns the path to the source of this plugin.
16
+ def self.source_root
17
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,100 @@
1
+ module VagrantPlugins
2
+ module GuestCumulus
3
+ module Cap
4
+ class ChangeHostName
5
+ def self.change_host_name(machine, name)
6
+ new(machine, name).change!
7
+ end
8
+
9
+ attr_reader :machine, :new_hostname
10
+
11
+ def initialize(machine, new_hostname)
12
+ @machine = machine
13
+ @new_hostname = new_hostname
14
+ end
15
+
16
+ def change!
17
+ return unless should_change?
18
+
19
+ update_etc_hostname
20
+ update_etc_hosts
21
+ refresh_hostname_service
22
+ update_mailname
23
+ renew_dhcp
24
+ restart_lldp
25
+ end
26
+
27
+ def should_change?
28
+ new_hostname != current_hostname
29
+ end
30
+
31
+ def current_hostname
32
+ @current_hostname ||= get_current_hostname
33
+ end
34
+
35
+ def get_current_hostname
36
+ hostname = ""
37
+ sudo "hostname -f" do |type, data|
38
+ hostname = data.chomp if type == :stdout && hostname.empty?
39
+ end
40
+
41
+ hostname
42
+ end
43
+
44
+ def update_etc_hostname
45
+ sudo("echo '#{short_hostname}' > /etc/hostname")
46
+ end
47
+
48
+ # /etc/hosts should resemble:
49
+ # 127.0.0.1 localhost
50
+ # 127.0.1.1 host.fqdn.com host.fqdn host
51
+ def update_etc_hosts
52
+ if test("grep '#{current_hostname}' /etc/hosts")
53
+ # Current hostname entry is in /etc/hosts
54
+ ip_address = '([0-9]{1,3}\.){3}[0-9]{1,3}'
55
+ search = "^(#{ip_address})\\s+#{Regexp.escape(current_hostname)}(\\s.*)?$"
56
+ replace = "\\1 #{fqdn} #{short_hostname}"
57
+ expression = ['s', search, replace, 'g'].join('@')
58
+
59
+ sudo("sed -ri '#{expression}' /etc/hosts")
60
+ else
61
+ # Current hostname entry isn't in /etc/hosts, just append it
62
+ sudo("echo '127.0.1.1 #{fqdn} #{short_hostname}' >>/etc/hosts")
63
+ end
64
+ end
65
+
66
+ def refresh_hostname_service
67
+ sudo("hostname -F /etc/hostname")
68
+ end
69
+
70
+ def update_mailname
71
+ sudo("hostname --fqdn > /etc/mailname")
72
+ end
73
+
74
+ def renew_dhcp
75
+ sudo("ifdown -a; ifup -a; ifup eth0")
76
+ end
77
+
78
+ def restart_lldp
79
+ sudo("service lldpd restart")
80
+ end
81
+
82
+ def fqdn
83
+ new_hostname
84
+ end
85
+
86
+ def short_hostname
87
+ new_hostname.split('.').first
88
+ end
89
+
90
+ def sudo(cmd, &block)
91
+ machine.communicate.sudo(cmd, &block)
92
+ end
93
+
94
+ def test(cmd)
95
+ machine.communicate.test(cmd)
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,65 @@
1
+ require 'set'
2
+ require 'tempfile'
3
+ require "vagrant/util/template_renderer"
4
+ require_relative "../version"
5
+
6
+ module VagrantPlugins
7
+ module GuestCumulus
8
+ module Cap
9
+ # Configure Cumulus Linux mgmt and front panel ports
10
+ class ConfigureNetworks
11
+ include Vagrant::Util
12
+
13
+ def self.vm_network_config(machine, interface)
14
+ machine.config.vm.networks[interface-1]
15
+ end
16
+
17
+ def self.configure_networks(machine, networks)
18
+ machine.communicate.tap do |comm|
19
+ # First, remove any previous network modifications
20
+ # from the interface file.
21
+ comm.sudo("sed -e '/^#VAGRANT-BEGIN/,$ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces.pre")
22
+ comm.sudo("sed -ne '/^#VAGRANT-END/,$ p' /etc/network/interfaces | tail -n +2 > /tmp/vagrant-network-interfaces.post")
23
+
24
+ # Accumulate the configurations to add to the interfaces file as
25
+ # well as what interfaces we're actually configuring since we use that
26
+ # later.
27
+ interfaces = Set.new
28
+ entries = []
29
+ networks.each do |network|
30
+ interfaces.add(network[:interface])
31
+
32
+ type, config = vm_network_config(machine, network[:interface])
33
+ if config[:cumulus__intname]
34
+ network[:name] = config[:cumulus__intname]
35
+ else
36
+ network[:name] = network[:interface] == 0 ? 'eth0' : "swp#{network[:interface]}"
37
+ end
38
+
39
+ entry = TemplateRenderer.render("guests/cumulus/network_#{network[:type]}",
40
+ options: network,
41
+ template_root: "#{VagrantPlugins::GuestCumulus.source_root}/templates")
42
+
43
+ entries << entry
44
+ end
45
+
46
+ # Perform the careful dance necessary to reconfigure
47
+ # the network interfaces
48
+ temp = Tempfile.new("vagrant")
49
+ temp.binmode
50
+ temp.write(entries.join("\n"))
51
+ temp.close
52
+
53
+ comm.upload(temp.path, "/tmp/vagrant-network-entry")
54
+
55
+ comm.sudo('cat /tmp/vagrant-network-interfaces.pre /tmp/vagrant-network-entry /tmp/vagrant-network-interfaces.post > /etc/network/interfaces')
56
+ comm.sudo('rm -f /tmp/vagrant-network-interfaces.pre /tmp/vagrant-network-entry /tmp/vagrant-network-interfaces.post')
57
+
58
+ # ifreload will reload the interfaces correctly
59
+ comm.sudo("/sbin/ifreload -a")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,10 @@
1
+ module VagrantPlugins
2
+ module GuestCumulus
3
+ class Guest < Vagrant.plugin("2", :guest)
4
+
5
+ def detect?(machine)
6
+ machine.communicate.test("cat /etc/os-release | grep Cumulus")
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ begin
2
+ require 'vagrant'
3
+ rescue LoadError
4
+ raise 'The vagrant-cumulus plugin must be run within Vagrant'
5
+ end
6
+
7
+ # This is a sanity check to make sure no one is attempting to install
8
+ # this into an early Vagrant version.
9
+ if Vagrant::VERSION < '1.7.0'
10
+ fail 'The vagrant-cumulus plugin is only compatible with Vagrant 1.7+'
11
+ end
12
+
13
+ module VagrantPlugins
14
+ module GuestCumulus
15
+ class Plugin < Vagrant.plugin("2")
16
+ name "Cumulus guest"
17
+ description "Cumulus Linux guest support."
18
+
19
+ guest("cumulus", "debian") do
20
+ require_relative "guest"
21
+ Guest
22
+ end
23
+
24
+ guest_capability("cumulus", "configure_networks") do
25
+ require_relative "cap/configure_networks"
26
+ Cap::ConfigureNetworks
27
+ end
28
+
29
+ guest_capability("cumulus", "change_host_name") do
30
+ require_relative "cap/change_host_name"
31
+ Cap::ChangeHostName
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module GuestCumulus
3
+ VERSION = "0.1"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant. Do not modify.
3
+ auto <%= options[:name] %>
4
+ iface <%= options[:name] %> inet dhcp
5
+ <% if !options[:use_dhcp_assigned_default_route] %>
6
+ post-up route del default dev $IFACE table mgmt || true
7
+ <% else %>
8
+ # We need to disable eth0, see GH-2648
9
+ post-up route del default dev eth0 table mgmt
10
+ post-up dhclient $IFACE
11
+ pre-down route add default dev eth0 table mgmt
12
+ <% end %>
13
+ #VAGRANT-END
@@ -0,0 +1,8 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant. Do not modify.
3
+ auto <%= options[:name] %>
4
+ iface <%= options[:name] %>
5
+ <% if options[:ip] %>
6
+ address <%= options[:ip] %>
7
+ <% end %>
8
+ #VAGRANT-END
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant-cumulus/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vagrant-cumulus"
8
+ spec.version = VagrantPlugins::GuestCumulus::VERSION
9
+ spec.authors = ["Dinesh Dutt"]
10
+ spec.email = ["ddutt@cumulusnetworks.com"]
11
+ spec.summary = %q{Guest capabilities for Cumulus Linux}
12
+ spec.description = %q{Primarily to rename interfaces to match Cumulus Linux front panel port names}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "rake"
23
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-cumulus
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Dinesh Dutt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Primarily to rename interfaces to match Cumulus Linux front panel port
42
+ names
43
+ email:
44
+ - ddutt@cumulusnetworks.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - Gemfile.lock
52
+ - LICENSE.txt
53
+ - README.md
54
+ - Rakefile
55
+ - lib/vagrant-cumulus.rb
56
+ - lib/vagrant-cumulus/cap/change_host_name.rb
57
+ - lib/vagrant-cumulus/cap/configure_networks.rb
58
+ - lib/vagrant-cumulus/guest.rb
59
+ - lib/vagrant-cumulus/plugin.rb
60
+ - lib/vagrant-cumulus/version.rb
61
+ - templates/guests/cumulus/network_dhcp.erb
62
+ - templates/guests/cumulus/network_static.erb
63
+ - vagrant-cumulus.gemspec
64
+ homepage: ''
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.2.2
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Guest capabilities for Cumulus Linux
88
+ test_files: []