vagrant-ovirt 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/.gitignore +20 -0
  2. data/Gemfile +12 -0
  3. data/LICENSE +22 -0
  4. data/README.md +219 -0
  5. data/Rakefile +7 -0
  6. data/example_box/Vagrantfile +22 -0
  7. data/example_box/metadata.json +4 -0
  8. data/example_box/ovirt.box +0 -0
  9. data/lib/vagrant-ovirt/action/connect_ovirt.rb +84 -0
  10. data/lib/vagrant-ovirt/action/create_network_interfaces.rb +96 -0
  11. data/lib/vagrant-ovirt/action/create_vm.rb +114 -0
  12. data/lib/vagrant-ovirt/action/destroy_vm.rb +25 -0
  13. data/lib/vagrant-ovirt/action/is_created.rb +18 -0
  14. data/lib/vagrant-ovirt/action/message_already_created.rb +16 -0
  15. data/lib/vagrant-ovirt/action/message_not_created.rb +16 -0
  16. data/lib/vagrant-ovirt/action/read_ssh_info.rb +68 -0
  17. data/lib/vagrant-ovirt/action/read_state.rb +37 -0
  18. data/lib/vagrant-ovirt/action/set_name_of_domain.rb +31 -0
  19. data/lib/vagrant-ovirt/action/start_vm.rb +37 -0
  20. data/lib/vagrant-ovirt/action/sync_folders.rb +58 -0
  21. data/lib/vagrant-ovirt/action/timed_provision.rb +21 -0
  22. data/lib/vagrant-ovirt/action/wait_till_up.rb +108 -0
  23. data/lib/vagrant-ovirt/action.rb +89 -0
  24. data/lib/vagrant-ovirt/config.rb +57 -0
  25. data/lib/vagrant-ovirt/errors.rb +61 -0
  26. data/lib/vagrant-ovirt/plugin.rb +74 -0
  27. data/lib/vagrant-ovirt/provider.rb +76 -0
  28. data/lib/vagrant-ovirt/util/collection.rb +21 -0
  29. data/lib/vagrant-ovirt/util/timer.rb +17 -0
  30. data/lib/vagrant-ovirt/util.rb +9 -0
  31. data/lib/vagrant-ovirt/version.rb +6 -0
  32. data/lib/vagrant-ovirt.rb +47 -0
  33. data/locales/en.yml +82 -0
  34. data/tools/prepare_redhat_for_box.sh +138 -0
  35. data/vagrant-ovirt.gemspec +23 -0
  36. metadata +128 -0
@@ -0,0 +1,76 @@
1
+ require 'vagrant'
2
+
3
+ module VagrantPlugins
4
+ module OVirtProvider
5
+
6
+ # This is the base class for a provider for the V2 API. A provider
7
+ # is responsible for creating compute resources to match the
8
+ # needs of a Vagrant-configured system.
9
+ class Provider < Vagrant.plugin('2', :provider)
10
+ def initialize(machine)
11
+ @machine = machine
12
+ end
13
+
14
+ # This should return an action callable for the given name.
15
+ def action(name)
16
+ # Attempt to get the action method from the Action class if it
17
+ # exists, otherwise return nil to show that we don't support the
18
+ # given action.
19
+ action_method = "action_#{name}"
20
+ return Action.send(action_method) if Action.respond_to?(action_method)
21
+ nil
22
+ end
23
+
24
+ # This method is called if the underying machine ID changes. Providers
25
+ # can use this method to load in new data for the actual backing
26
+ # machine or to realize that the machine is now gone (the ID can
27
+ # become `nil`).
28
+ def machine_id_changed
29
+ end
30
+
31
+ # This should return a hash of information that explains how to
32
+ # SSH into the machine. If the machine is not at a point where
33
+ # SSH is even possible, then `nil` should be returned.
34
+ def ssh_info
35
+ # Run a custom action called "read_ssh_info" which does what it says
36
+ # and puts the resulting SSH info into the `:machine_ssh_info` key in
37
+ # the environment.
38
+ #
39
+ # Ssh info has following format..
40
+ #
41
+ #{
42
+ # :host => "1.2.3.4",
43
+ # :port => "22",
44
+ # :username => "mitchellh",
45
+ # :private_key_path => "/path/to/my/key"
46
+ #}
47
+ env = @machine.action("read_ssh_info")
48
+ env[:machine_ssh_info]
49
+ end
50
+
51
+ # This should return the state of the machine within this provider.
52
+ # The state must be an instance of {MachineState}.
53
+ def state
54
+ # Run a custom action we define called "read_state" which does
55
+ # what it says. It puts the state in the `:machine_state_id`
56
+ # key in the environment.
57
+ env = @machine.action("read_state")
58
+
59
+ state_id = env[:machine_state_id]
60
+
61
+ # Get the short and long description
62
+ short = I18n.t("vagrant_ovirt.states.short_#{state_id}")
63
+ long = I18n.t("vagrant_ovirt.states.long_#{state_id}")
64
+
65
+ # Return the MachineState object
66
+ Vagrant::MachineState.new(state_id, short, long)
67
+ end
68
+
69
+ def to_s
70
+ id = @machine.id.nil? ? "new" : @machine.id
71
+ "oVirt (#{id})"
72
+ end
73
+ end
74
+ end
75
+ end
76
+
@@ -0,0 +1,21 @@
1
+ module VagrantPlugins
2
+ module OVirtProvider
3
+ module Util
4
+ module Collection
5
+ # This method finds a matching _thing_ in a collection of
6
+ # _things_. This works matching if the ID or NAME equals to
7
+ # `name`. Or, if `name` is a regexp, a partial match is chosen
8
+ # as well.
9
+ def self.find_matching(collection, name)
10
+ collection.each do |single|
11
+ return single if single.name == name
12
+ return single if single.id == name
13
+ end
14
+
15
+ nil
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,17 @@
1
+ module VagrantPlugins
2
+ module OVirtProvider
3
+ module Util
4
+ class Timer
5
+ # A basic utility method that times the execution of the given
6
+ # block and returns it.
7
+ def self.time
8
+ start_time = Time.now.to_f
9
+ yield
10
+ end_time = Time.now.to_f
11
+
12
+ end_time - start_time
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module VagrantPlugins
2
+ module OVirtProvider
3
+ module Util
4
+ autoload :Collection, 'vagrant-ovirt/util/collection'
5
+ autoload :Timer, 'vagrant-ovirt/util/timer'
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,6 @@
1
+ module VagrantPlugins
2
+ module OVirtProvider
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
6
+
@@ -0,0 +1,47 @@
1
+ require 'pathname'
2
+ require 'vagrant-ovirt/plugin'
3
+
4
+ module VagrantPlugins
5
+ module OVirtProvider
6
+ lib_path = Pathname.new(File.expand_path("../vagrant-ovirt", __FILE__))
7
+ autoload :Action, lib_path.join("action")
8
+ autoload :Errors, lib_path.join("errors")
9
+ autoload :Util, lib_path.join("util")
10
+
11
+ # Hold connection handler so there is no need to connect more times than
12
+ # one. This can be annoying when there are more machines to create, or when
13
+ # doing state action first and then some other.
14
+ #
15
+ # TODO Don't sure if this is the best solution
16
+ @@ovirt_connection = nil
17
+ @@ovirt_client = nil
18
+ def self.ovirt_connection
19
+ @@ovirt_connection
20
+ end
21
+
22
+ def self.ovirt_connection=(conn)
23
+ @@ovirt_connection = conn
24
+ end
25
+
26
+ def self.ovirt_client
27
+ @@ovirt_client
28
+ end
29
+
30
+ def self.ovirt_client=(conn)
31
+ @@ovirt_client = conn
32
+ end
33
+
34
+
35
+ def self.source_root
36
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
37
+ end
38
+ end
39
+ end
40
+
41
+ # Set default provider with bash environment variable like this:
42
+ # export VAGRANT_DEFAULT_PROVIDER=ovirt
43
+ Vagrant::Environment.class_eval do
44
+ def default_provider
45
+ (ENV['VAGRANT_DEFAULT_PROVIDER'] || :virtualbox).to_sym
46
+ end
47
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,82 @@
1
+ en:
2
+ vagrant_ovirt:
3
+ creating_vm: |-
4
+ Creating VM with the following settings...
5
+ destroy_vm: |-
6
+ Removing VM...
7
+ not_created: |-
8
+ VM is not created. Please run `vagrant up` first.
9
+ starting_vm: |-
10
+ Starting VM.
11
+ error_recovering: |-
12
+ An error occured. Recovering..
13
+ waiting_for_ip: |-
14
+ Waiting for VM to get an IP address...
15
+ waiting_for_ssh: |-
16
+ Waiting for SSH to become available...
17
+ rsync_folder: |-
18
+ Rsyncing folder: %{hostpath} => %{guestpath}
19
+ wait_for_ready_vm: |-
20
+ Waiting for VM to become "ready" to start...
21
+ already_created: |-
22
+ VM is already created.
23
+ ready: |-
24
+ Machine is booted and ready for use!
25
+
26
+ errors:
27
+ fog_ovirt_connection_error: |-
28
+ Error while connecting to oVirt: %{error_message}
29
+ no_datacenter_error: |-
30
+ No usable datacenter found! Please check if datacenter specified in
31
+ configuration is avaliable.
32
+ no_cluster_error: |-
33
+ No usable cluster found! Please check if cluster specified in
34
+ configuration is avaliable.
35
+ no_quota_error: |-
36
+ No usable quota found! Please check if quota specified in
37
+ configuration is avaliable.
38
+ no_template_error: |-
39
+ No template %{template_name} found!
40
+ fog_create_server_error: |-
41
+ Error while creating domain: %{error_message}
42
+ interface_slot_not_available: |-
43
+ Interface adapter number is already in use. Please specify other adapter
44
+ number.
45
+ add_interface_error: |-
46
+ Error while adding new interface to VM. %{error_message}
47
+ no_vm_error: |-
48
+ No VM %{vm_name} found.
49
+ no_network_error: |-
50
+ No network %{network_name} found.
51
+ start_vm_error: |-
52
+ Unable to start VM: %{error_message}
53
+ no_ip_address_error: |-
54
+ No IP address found.
55
+ rsync_error: |-
56
+ There was an error when attemping to rsync a share folder.
57
+ Please inspect the error message below for more info.
58
+
59
+ Host path: %{hostpath}
60
+ Guest path: %{guestpath}
61
+ Error: %{stderr}
62
+
63
+ states:
64
+ short_paused: |-
65
+ pause
66
+ short_shutoff: |-
67
+ shutoff
68
+ long_shutoff: |-
69
+ The oVirt machine is not running. Run `vagrant up` to start it.
70
+ short_down: |-
71
+ shutoff
72
+ long_down: |-
73
+ The oVirt machine is not running. Run `vagrant up` to start it.
74
+ short_not_created: |-
75
+ not created
76
+ long_not_created: |-
77
+ The oVirt domain is not created. Run `vagrant up` to create it.
78
+ short_running: |-
79
+ running
80
+ long_running: |-
81
+ The oVirt domain is running. To stop this machine, you can run
82
+ `vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
@@ -0,0 +1,138 @@
1
+ #!/bin/bash +x
2
+
3
+ # This script should help to prepare RedHat and RedHat like OS (CentOS,
4
+ # Scientific Linux, ...) for Vagrant usage.
5
+
6
+ # To create new box image, just install minimal base system in VM. Then upload
7
+ # this script to the VM and run it. After script has finished, halt the machine
8
+ # and then create an oVirt template, which will be used for creating new
9
+ # vagrant machines.
10
+
11
+
12
+ # We need a hostname.
13
+ if [ $# -ne 1 ]; then
14
+ echo "Usage: $0 <hostname>"
15
+ echo "Hostname should be in format vagrant-[os-name], e.g. vagrant-redhat63."
16
+ exit 1
17
+ fi
18
+
19
+
20
+ # On which version of RedHet are we running?
21
+ RHEL_MAJOR_VERSION=$(sed 's/.*release \([0-9]\)\..*/\1/' /etc/redhat-release)
22
+ if [ $? -ne 0 ]; then
23
+ echo "Is this a RedHat distro?"
24
+ exit 1
25
+ fi
26
+ echo "* Found RedHat ${RHEL_MAJOR_VERSION} version."
27
+
28
+
29
+ # Setup hostname vagrant-something.
30
+ FQDN="$1.vagrantup.com"
31
+ if grep '^HOSTNAME=' /etc/sysconfig/network > /dev/null; then
32
+ sed -i 's/HOSTNAME=\(.*\)/HOSTNAME='${FQDN}'/' /etc/sysconfig/network
33
+ else
34
+ echo "HOSTNAME=${FQDN}" >> /etc/sysconfig/network
35
+ fi
36
+
37
+
38
+ # Enable EPEL repository.
39
+ yum -y install wget
40
+ cd ~root
41
+ if [ $RHEL_MAJOR_VERSION -eq 5 ]; then
42
+ wget http://ftp.astral.ro/mirrors/fedora/pub/epel/5/i386/epel-release-5-4.noarch.rpm
43
+ EPEL_PKG="epel-release-5-4.noarch.rpm"
44
+ else
45
+ wget http://ftp.astral.ro/mirrors/fedora/pub/epel/6/i386/epel-release-6-8.noarch.rpm
46
+ EPEL_PKG="epel-release-6-8.noarch.rpm"
47
+ fi
48
+ rpm -i ~root/${EPEL_PKG}
49
+ rm -f ~root/${EPEL_PKG}
50
+
51
+
52
+ # Install some required software.
53
+ yum -y install openssh-server openssh-clients sudo \
54
+ ruby ruby-devel make gcc rubygems rsync nmap
55
+ chkconfig sshd on
56
+ gem install puppet
57
+ gem install chef
58
+
59
+
60
+ # Users, groups, passwords and sudoers.
61
+ echo 'vagrant' | passwd --stdin root
62
+ grep 'vagrant' /etc/passwd > /dev/null
63
+ if [ $? -ne 0 ]; then
64
+ echo '* Creating user vagrant.'
65
+ useradd vagrant
66
+ echo 'vagrant' | passwd --stdin vagrant
67
+ fi
68
+ grep '^admin:' /etc/group > /dev/null || groupadd admin
69
+ usermod -G admin vagrant
70
+
71
+ echo 'Defaults env_keep += "SSH_AUTH_SOCK"' >> /etc/sudoers
72
+ echo '%admin ALL=NOPASSWD: ALL' >> /etc/sudoers
73
+ sed -i 's/Defaults\s*requiretty/Defaults !requiretty/' /etc/sudoers
74
+
75
+
76
+ # SSH setup
77
+ # Add Vagrant ssh key for root accout.
78
+ sed -i 's/.*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
79
+
80
+ [ -d ~root/.ssh ] || mkdir ~root/.ssh
81
+ chmod 700 ~root/.ssh
82
+ cat > ~root/.ssh/authorized_keys << EOF
83
+ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
84
+ EOF
85
+ chmod 600 ~root/.ssh/authorized_keys
86
+
87
+
88
+ # Disable firewall and switch SELinux to permissive mode.
89
+ chkconfig iptables off
90
+ chkconfig ip6tables off
91
+ sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/sysconfig/selinux
92
+ sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
93
+
94
+
95
+ # Networking setup..
96
+
97
+ # Problem situation: Two interfaces are connected to same network. One interface
98
+ # wants to renew DHCP lease and asks server for address. DHCPACK message from
99
+ # server arrives, client moves to BOUND state. The client performs a check on
100
+ # the suggested address to ensure that the address is not already in use. On
101
+ # arping for specified IP address, other interface replies and that's why
102
+ # dhclient-script replies with DHCPDECLINE message. (See RFC2131, 4.4.1.).
103
+ # Solution: Set sysctl to reply only if the target IP address is local address
104
+ # configured on the incoming interface. (See kernel documentation
105
+ # Documentation/networking/ip-sysctl.txt)
106
+ set_sysctl()
107
+ {
108
+ grep $1 /etc/sysctl.conf > /dev/null
109
+ [ $? -eq 0 ] && sed -i '/'$1'/d' /etc/sysctl.conf
110
+ echo "$1 = $2" >> /etc/sysctl.conf
111
+ }
112
+ set_sysctl 'net.ipv4.conf.all.arp_ignore' 1
113
+ set_sysctl 'net.ipv4.conf.all.arp_announce' 2
114
+ set_sysctl 'net.ipv4.conf.all.rp_filter' 3
115
+
116
+ echo 'for NETWORK in $(ip a | grep -w inet | grep -v "127.0.0.1" | awk "{ print \$2 }"); do nmap -sP $NETWORK; done' > /etc/rc3.d/S99ping_broadcast
117
+ chmod +x /etc/rc3.d/S99ping_broadcast
118
+
119
+
120
+ # Don't fix ethX names to hw address.
121
+ rm -f /etc/udev/rules.d/*persistent-net.rules
122
+ rm -f /etc/udev/rules.d/*-net.rules
123
+ rm -fr /var/lib/dhclient/*
124
+
125
+ # Interface eth0 should get IP address via dhcp.
126
+ cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
127
+ DEVICE="eth0"
128
+ BOOTPROTO="dhcp"
129
+ ONBOOT="yes"
130
+ NM_CONTROLLED="no"
131
+ EOF
132
+
133
+
134
+ # Do some cleanup..
135
+ rm -f ~root/.bash_history
136
+ rm -r "$(gem env gemdir)"/doc/*
137
+ yum clean all
138
+
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/vagrant-ovirt/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Lukas Stanek"]
6
+ gem.email = ["ls@elostech.cz"]
7
+ gem.description = %q{Vagrant provider for oVirt.}
8
+ gem.summary = %q{Vagrant provider for oVirt.}
9
+ gem.homepage = "https://github.com/pradels/vagrant-ovirt"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "vagrant-ovirt"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = VagrantPlugins::OVirtProvider::VERSION
17
+
18
+ gem.add_runtime_dependency "fog", "~> 1.10.1"
19
+ gem.add_runtime_dependency "rbovirt", "~> 0.0.19"
20
+
21
+ gem.add_development_dependency "rake"
22
+ end
23
+
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-ovirt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lukas Stanek
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fog
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.10.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.10.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: rbovirt
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.0.19
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.19
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Vagrant provider for oVirt.
63
+ email:
64
+ - ls@elostech.cz
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - Gemfile
71
+ - LICENSE
72
+ - README.md
73
+ - Rakefile
74
+ - example_box/Vagrantfile
75
+ - example_box/metadata.json
76
+ - example_box/ovirt.box
77
+ - lib/vagrant-ovirt.rb
78
+ - lib/vagrant-ovirt/action.rb
79
+ - lib/vagrant-ovirt/action/connect_ovirt.rb
80
+ - lib/vagrant-ovirt/action/create_network_interfaces.rb
81
+ - lib/vagrant-ovirt/action/create_vm.rb
82
+ - lib/vagrant-ovirt/action/destroy_vm.rb
83
+ - lib/vagrant-ovirt/action/is_created.rb
84
+ - lib/vagrant-ovirt/action/message_already_created.rb
85
+ - lib/vagrant-ovirt/action/message_not_created.rb
86
+ - lib/vagrant-ovirt/action/read_ssh_info.rb
87
+ - lib/vagrant-ovirt/action/read_state.rb
88
+ - lib/vagrant-ovirt/action/set_name_of_domain.rb
89
+ - lib/vagrant-ovirt/action/start_vm.rb
90
+ - lib/vagrant-ovirt/action/sync_folders.rb
91
+ - lib/vagrant-ovirt/action/timed_provision.rb
92
+ - lib/vagrant-ovirt/action/wait_till_up.rb
93
+ - lib/vagrant-ovirt/config.rb
94
+ - lib/vagrant-ovirt/errors.rb
95
+ - lib/vagrant-ovirt/plugin.rb
96
+ - lib/vagrant-ovirt/provider.rb
97
+ - lib/vagrant-ovirt/util.rb
98
+ - lib/vagrant-ovirt/util/collection.rb
99
+ - lib/vagrant-ovirt/util/timer.rb
100
+ - lib/vagrant-ovirt/version.rb
101
+ - locales/en.yml
102
+ - tools/prepare_redhat_for_box.sh
103
+ - vagrant-ovirt.gemspec
104
+ homepage: https://github.com/pradels/vagrant-ovirt
105
+ licenses: []
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.8.25
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: Vagrant provider for oVirt.
128
+ test_files: []