vagrant-libvirt 0.0.40 → 0.0.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. metadata +13 -103
  3. data/.coveralls.yml +0 -1
  4. data/.github/issue_template.md +0 -37
  5. data/.gitignore +0 -21
  6. data/.travis.yml +0 -28
  7. data/CHANGELOG.md +0 -99
  8. data/Gemfile +0 -27
  9. data/LICENSE +0 -22
  10. data/README.md +0 -1311
  11. data/Rakefile +0 -8
  12. data/example_box/README.md +0 -29
  13. data/example_box/Vagrantfile +0 -60
  14. data/example_box/metadata.json +0 -5
  15. data/lib/vagrant-libvirt.rb +0 -29
  16. data/lib/vagrant-libvirt/action.rb +0 -362
  17. data/lib/vagrant-libvirt/action/create_domain.rb +0 -313
  18. data/lib/vagrant-libvirt/action/create_domain_volume.rb +0 -87
  19. data/lib/vagrant-libvirt/action/create_network_interfaces.rb +0 -294
  20. data/lib/vagrant-libvirt/action/create_networks.rb +0 -353
  21. data/lib/vagrant-libvirt/action/destroy_domain.rb +0 -83
  22. data/lib/vagrant-libvirt/action/destroy_networks.rb +0 -95
  23. data/lib/vagrant-libvirt/action/forward_ports.rb +0 -221
  24. data/lib/vagrant-libvirt/action/halt_domain.rb +0 -35
  25. data/lib/vagrant-libvirt/action/handle_box_image.rb +0 -156
  26. data/lib/vagrant-libvirt/action/handle_storage_pool.rb +0 -57
  27. data/lib/vagrant-libvirt/action/is_created.rb +0 -18
  28. data/lib/vagrant-libvirt/action/is_running.rb +0 -21
  29. data/lib/vagrant-libvirt/action/is_suspended.rb +0 -42
  30. data/lib/vagrant-libvirt/action/message_already_created.rb +0 -16
  31. data/lib/vagrant-libvirt/action/message_not_created.rb +0 -16
  32. data/lib/vagrant-libvirt/action/message_not_running.rb +0 -16
  33. data/lib/vagrant-libvirt/action/message_not_suspended.rb +0 -16
  34. data/lib/vagrant-libvirt/action/package_domain.rb +0 -105
  35. data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +0 -94
  36. data/lib/vagrant-libvirt/action/prepare_nfs_valid_ids.rb +0 -17
  37. data/lib/vagrant-libvirt/action/prune_nfs_exports.rb +0 -27
  38. data/lib/vagrant-libvirt/action/read_mac_addresses.rb +0 -40
  39. data/lib/vagrant-libvirt/action/remove_libvirt_image.rb +0 -20
  40. data/lib/vagrant-libvirt/action/remove_stale_volume.rb +0 -50
  41. data/lib/vagrant-libvirt/action/resume_domain.rb +0 -34
  42. data/lib/vagrant-libvirt/action/set_boot_order.rb +0 -109
  43. data/lib/vagrant-libvirt/action/set_name_of_domain.rb +0 -64
  44. data/lib/vagrant-libvirt/action/share_folders.rb +0 -71
  45. data/lib/vagrant-libvirt/action/start_domain.rb +0 -303
  46. data/lib/vagrant-libvirt/action/suspend_domain.rb +0 -40
  47. data/lib/vagrant-libvirt/action/wait_till_up.rb +0 -102
  48. data/lib/vagrant-libvirt/cap/mount_p9.rb +0 -42
  49. data/lib/vagrant-libvirt/cap/nic_mac_addresses.rb +0 -17
  50. data/lib/vagrant-libvirt/cap/synced_folder.rb +0 -113
  51. data/lib/vagrant-libvirt/config.rb +0 -698
  52. data/lib/vagrant-libvirt/driver.rb +0 -118
  53. data/lib/vagrant-libvirt/errors.rb +0 -149
  54. data/lib/vagrant-libvirt/plugin.rb +0 -92
  55. data/lib/vagrant-libvirt/provider.rb +0 -130
  56. data/lib/vagrant-libvirt/templates/default_storage_pool.xml.erb +0 -13
  57. data/lib/vagrant-libvirt/templates/domain.xml.erb +0 -229
  58. data/lib/vagrant-libvirt/templates/private_network.xml.erb +0 -34
  59. data/lib/vagrant-libvirt/templates/public_interface.xml.erb +0 -23
  60. data/lib/vagrant-libvirt/util.rb +0 -11
  61. data/lib/vagrant-libvirt/util/collection.rb +0 -19
  62. data/lib/vagrant-libvirt/util/erb_template.rb +0 -22
  63. data/lib/vagrant-libvirt/util/error_codes.rb +0 -100
  64. data/lib/vagrant-libvirt/util/network_util.rb +0 -138
  65. data/lib/vagrant-libvirt/util/timer.rb +0 -17
  66. data/lib/vagrant-libvirt/version.rb +0 -5
  67. data/locales/en.yml +0 -159
  68. data/spec/spec_helper.rb +0 -9
  69. data/spec/support/environment_helper.rb +0 -46
  70. data/spec/support/libvirt_context.rb +0 -30
  71. data/spec/support/sharedcontext.rb +0 -34
  72. data/spec/unit/action/destroy_domain_spec.rb +0 -97
  73. data/spec/unit/action/set_name_of_domain_spec.rb +0 -21
  74. data/spec/unit/action/wait_till_up_spec.rb +0 -127
  75. data/spec/unit/config_spec.rb +0 -106
  76. data/spec/unit/templates/domain_all_settings.xml +0 -133
  77. data/spec/unit/templates/domain_defaults.xml +0 -46
  78. data/spec/unit/templates/domain_spec.rb +0 -75
  79. data/tools/create_box.sh +0 -130
  80. data/tools/prepare_redhat_for_box.sh +0 -119
  81. data/vagrant-libvirt.gemspec +0 -28
@@ -1,118 +0,0 @@
1
- require 'fog/libvirt'
2
- require 'log4r'
3
-
4
- module VagrantPlugins
5
- module ProviderLibvirt
6
- class Driver
7
- # store the connection at the process level
8
- #
9
- # possibly this should be a connection pool using the connection
10
- # settings as a key to allow per machine connection attributes
11
- # to be used.
12
- @@connection = nil
13
-
14
- def initialize(machine)
15
- @logger = Log4r::Logger.new('vagrant_libvirt::driver')
16
- @machine = machine
17
- end
18
-
19
- def connection
20
- # If already connected to libvirt, just use it and don't connect
21
- # again.
22
- return @@connection if @@connection
23
-
24
- # Get config options for libvirt provider.
25
- config = @machine.provider_config
26
- uri = config.uri
27
-
28
- conn_attr = {}
29
- conn_attr[:provider] = 'libvirt'
30
- conn_attr[:libvirt_uri] = uri
31
- conn_attr[:libvirt_username] = config.username if config.username
32
- conn_attr[:libvirt_password] = config.password if config.password
33
-
34
- # Setup command for retrieving IP address for newly created machine
35
- # with some MAC address. Get it from dnsmasq leases table
36
- ip_command = %q( awk "/$mac/ {print \$1}" /proc/net/arp )
37
- conn_attr[:libvirt_ip_command] = ip_command
38
-
39
- @logger.info("Connecting to Libvirt (#{uri}) ...")
40
- begin
41
- @@connection = Fog::Compute.new(conn_attr)
42
- rescue Fog::Errors::Error => e
43
- raise Errors::FogLibvirtConnectionError,
44
- error_message: e.message
45
- end
46
-
47
- @@connection
48
- end
49
-
50
- def get_domain(mid)
51
- begin
52
- domain = connection.servers.get(mid)
53
- rescue Libvirt::RetrieveError => e
54
- if e.libvirt_code == ProviderLibvirt::Util::ErrorCodes::VIR_ERR_NO_DOMAIN
55
- @logger.debug("machine #{mid} not found #{e}.")
56
- return nil
57
- else
58
- raise e
59
- end
60
- end
61
-
62
- domain
63
- end
64
-
65
- def created?(mid)
66
- domain = get_domain(mid)
67
- !domain.nil?
68
- end
69
-
70
- def get_ipaddress(machine)
71
- # Find the machine
72
- domain = get_domain(machine.id)
73
-
74
- if domain.nil?
75
- # The machine can't be found
76
- return nil
77
- end
78
-
79
- # Get IP address from arp table
80
- ip_address = nil
81
- begin
82
- domain.wait_for(2) do
83
- addresses.each_pair do |_type, ip|
84
- # Multiple leases are separated with a newline, return only
85
- # the most recent address
86
- ip_address = ip[0].split("\n").first unless ip[0].nil?
87
- end
88
- !ip_address.nil?
89
- end
90
- rescue Fog::Errors::TimeoutError
91
- @logger.info('Timeout at waiting for an ip address for machine %s' % machine.name)
92
- end
93
-
94
- unless ip_address
95
- @logger.info('No arp table entry found for machine %s' % machine.name)
96
- return nil
97
- end
98
-
99
- ip_address
100
- end
101
-
102
- def state(machine)
103
- # may be other error states with initial retreival we can't handle
104
- begin
105
- domain = get_domain(machine.id)
106
- rescue Libvirt::RetrieveError => e
107
- @logger.debug("Machine #{machine.id} not found #{e}.")
108
- return :not_created
109
- end
110
-
111
- # TODO: terminated no longer appears to be a valid fog state, remove?
112
- return :not_created if domain.nil? || domain.state.to_sym == :terminated
113
-
114
- domain.state.tr('-', '_').to_sym
115
- end
116
- end
117
- end
118
- end
@@ -1,149 +0,0 @@
1
- require 'vagrant'
2
-
3
- module VagrantPlugins
4
- module ProviderLibvirt
5
- module Errors
6
- class VagrantLibvirtError < Vagrant::Errors::VagrantError
7
- error_namespace('vagrant_libvirt.errors')
8
- end
9
-
10
- # package not supported
11
- class PackageNotSupported < VagrantLibvirtError
12
- error_key(:package_not_supported)
13
- end
14
-
15
- # Storage pools and volumes exceptions
16
- class NoStoragePool < VagrantLibvirtError
17
- error_key(:no_storage_pool)
18
- end
19
-
20
- class DomainVolumeExists < VagrantLibvirtError
21
- error_key(:domain_volume_exists)
22
- end
23
-
24
- class NoDomainVolume < VagrantLibvirtError
25
- error_key(:no_domain_volume)
26
- end
27
-
28
- class CreatingStoragePoolError < VagrantLibvirtError
29
- error_key(:creating_storage_pool_error)
30
- end
31
-
32
- class ImageUploadError < VagrantLibvirtError
33
- error_key(:image_upload_error)
34
- end
35
-
36
- # Box exceptions
37
- class NoBoxVolume < VagrantLibvirtError
38
- error_key(:no_box_volume)
39
- end
40
-
41
- class NoBoxVirtualSizeSet < VagrantLibvirtError
42
- error_key(:no_box_virtual_size)
43
- end
44
-
45
- class NoBoxFormatSet < VagrantLibvirtError
46
- error_key(:no_box_format)
47
- end
48
-
49
- class WrongBoxFormatSet < VagrantLibvirtError
50
- error_key(:wrong_box_format)
51
- end
52
-
53
- # Fog libvirt exceptions
54
- class FogError < VagrantLibvirtError
55
- error_key(:fog_error)
56
- end
57
-
58
- class FogLibvirtConnectionError < VagrantLibvirtError
59
- error_key(:fog_libvirt_connection_error)
60
- end
61
-
62
- class FogCreateVolumeError < VagrantLibvirtError
63
- error_key(:fog_create_volume_error)
64
- end
65
-
66
- class FogCreateDomainVolumeError < VagrantLibvirtError
67
- error_key(:fog_create_domain_volume_error)
68
- end
69
-
70
- class FogCreateServerError < VagrantLibvirtError
71
- error_key(:fog_create_server_error)
72
- end
73
-
74
- # Network exceptions
75
- class ManagementNetworkError < VagrantLibvirtError
76
- error_key(:management_network_error)
77
- end
78
-
79
- class NetworkNameAndAddressMismatch < VagrantLibvirtError
80
- error_key(:network_name_and_address_mismatch)
81
- end
82
-
83
- class DHCPMismatch < VagrantLibvirtError
84
- error_key(:dhcp_mismatch)
85
- end
86
-
87
- class CreateNetworkError < VagrantLibvirtError
88
- error_key(:create_network_error)
89
- end
90
-
91
- class DestroyNetworkError < VagrantLibvirtError
92
- error_key(:destroy_network_error)
93
- end
94
-
95
- class NetworkNotAvailableError < VagrantLibvirtError
96
- error_key(:network_not_available_error)
97
- end
98
-
99
- class AutostartNetworkError < VagrantLibvirtError
100
- error_key(:autostart_network_error)
101
- end
102
-
103
- class ActivateNetworkError < VagrantLibvirtError
104
- error_key(:activate_network_error)
105
- end
106
-
107
- class TunnelPortNotDefined < VagrantLibvirtError
108
- error_key(:tunnel_port_not_defined)
109
- end
110
-
111
- class ManagementNetworkRequired < VagrantLibvirtError
112
- error_key(:management_network_required)
113
- end
114
-
115
- # Other exceptions
116
- class InterfaceSlotNotAvailable < VagrantLibvirtError
117
- error_key(:interface_slot_not_available)
118
- end
119
-
120
- class RsyncError < VagrantLibvirtError
121
- error_key(:rsync_error)
122
- end
123
-
124
- class DomainNameExists < VagrantLibvirtError
125
- error_key(:domain_name_exists)
126
- end
127
-
128
- class NoDomainError < VagrantLibvirtError
129
- error_key(:no_domain_error)
130
- end
131
-
132
- class AttachDeviceError < VagrantLibvirtError
133
- error_key(:attach_device_error)
134
- end
135
-
136
- class DetachDeviceError < VagrantLibvirtError
137
- error_key(:detach_device_error)
138
- end
139
-
140
- class NoIpAddressError < VagrantLibvirtError
141
- error_key(:no_ip_address_error)
142
- end
143
-
144
- class DeleteSnapshotError < VagrantLibvirtError
145
- error_key(:delete_snapshot_error)
146
- end
147
- end
148
- end
149
- end
@@ -1,92 +0,0 @@
1
- begin
2
- require 'vagrant'
3
- rescue LoadError
4
- raise 'The Vagrant Libvirt plugin must be run within Vagrant.'
5
- end
6
-
7
- # compatibility fix to define constant not available vagrant <1.6
8
- ::Vagrant::MachineState::NOT_CREATED_ID ||= :not_created
9
-
10
- module VagrantPlugins
11
- module ProviderLibvirt
12
- class Plugin < Vagrant.plugin('2')
13
- name 'libvirt'
14
- description <<-DESC
15
- Vagrant plugin to manage VMs in libvirt.
16
- DESC
17
-
18
- config('libvirt', :provider) do
19
- require_relative 'config'
20
- Config
21
- end
22
-
23
- provider('libvirt', parallel: true, box_optional: true) do
24
- require_relative 'provider'
25
- Provider
26
- end
27
-
28
- action_hook(:remove_libvirt_image) do |hook|
29
- hook.after Vagrant::Action::Builtin::BoxRemove, Action.remove_libvirt_image
30
- end
31
-
32
- guest_capability('linux', 'mount_p9_shared_folder') do
33
- require_relative 'cap/mount_p9'
34
- Cap::MountP9
35
- end
36
-
37
- provider_capability(:libvirt, :nic_mac_addresses) do
38
- require_relative 'cap/nic_mac_addresses'
39
- Cap::NicMacAddresses
40
- end
41
-
42
- # lower priority than nfs or rsync
43
- # https://github.com/vagrant-libvirt/vagrant-libvirt/pull/170
44
- synced_folder('9p', 4) do
45
- require_relative 'cap/synced_folder'
46
- VagrantPlugins::SyncedFolder9p::SyncedFolder
47
- end
48
-
49
- # This initializes the internationalization strings.
50
- def self.setup_i18n
51
- I18n.load_path << File.expand_path('locales/en.yml',
52
- ProviderLibvirt.source_root)
53
- I18n.reload!
54
- end
55
-
56
- # This sets up our log level to be whatever VAGRANT_LOG is.
57
- def self.setup_logging
58
- require 'log4r'
59
-
60
- level = nil
61
- begin
62
- level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
63
- rescue NameError
64
- # This means that the logging constant wasn't found,
65
- # which is fine. We just keep `level` as `nil`. But
66
- # we tell the user.
67
- level = nil
68
- end
69
-
70
- # Some constants, such as "true" resolve to booleans, so the
71
- # above error checking doesn't catch it. This will check to make
72
- # sure that the log level is an integer, as Log4r requires.
73
- level = nil unless level.is_a?(Integer)
74
-
75
- # Set the logging level on all "vagrant" namespaced
76
- # logs as long as we have a valid level.
77
- if level
78
- logger = Log4r::Logger.new('vagrant_libvirt')
79
- logger.outputters = Log4r::Outputter.stderr
80
- logger.level = level
81
- logger = nil
82
- end
83
- end
84
-
85
- # Setup logging and i18n before any autoloading loads other classes
86
- # with logging configured as this prevents inheritance of the log level
87
- # from the parent logger.
88
- setup_logging
89
- setup_i18n
90
- end
91
- end
92
- end
@@ -1,130 +0,0 @@
1
- require 'vagrant'
2
-
3
- module VagrantPlugins
4
- module ProviderLibvirt
5
- autoload :Driver, 'vagrant-libvirt/driver'
6
-
7
- # This is the base class for a provider for the V2 API. A provider
8
- # is responsible for creating compute resources to match the
9
- # needs of a Vagrant-configured system.
10
- class Provider < Vagrant.plugin('2', :provider)
11
- def initialize(machine)
12
- @machine = machine
13
- raise 'REQUIRE USE RUBY >= 1.9.3 VERSION' if RUBY_VERSION < '1.9.3'
14
- end
15
-
16
- # This should return an action callable for the given name.
17
- def action(name)
18
- # Attempt to get the action method from the Action class if it
19
- # exists, otherwise return nil to show that we don't support the
20
- # given action.
21
- action_method = "action_#{name}"
22
- return Action.send(action_method) if Action.respond_to?(action_method)
23
- nil
24
- end
25
-
26
- def driver
27
- return @driver if @driver
28
-
29
- @driver = Driver.new(@machine)
30
- end
31
-
32
- # This method is called if the underying machine ID changes. Providers
33
- # can use this method to load in new data for the actual backing
34
- # machine or to realize that the machine is now gone (the ID can
35
- # become `nil`).
36
- def machine_id_changed; end
37
-
38
- # This should return a hash of information that explains how to
39
- # SSH into the machine. If the machine is not at a point where
40
- # SSH is even possible, then `nil` should be returned.
41
- def ssh_info
42
- # Return the ssh_info if already retrieved otherwise call the driver
43
- # and save the result.
44
- #
45
- # Ssh info has following format..
46
- #
47
- # {
48
- # :host => "1.2.3.4",
49
- # :port => "22",
50
- # :username => "mitchellh",
51
- # :private_key_path => "/path/to/my/key"
52
- # }
53
- # note that modifing @machine.id or accessing @machine.state is not
54
- # thread safe, so be careful to avoid these here as this method may
55
- # be called from other threads of execution.
56
- return nil if state.id != :running
57
-
58
- ip = driver.get_ipaddress(@machine)
59
-
60
- # if can't determine the IP, just return nil and let the core
61
- # deal with it, similar to the docker provider
62
- return nil unless ip
63
-
64
- ssh_info = {
65
- host: ip,
66
- port: @machine.config.ssh.guest_port,
67
- forward_agent: @machine.config.ssh.forward_agent,
68
- forward_x11: @machine.config.ssh.forward_x11
69
- }
70
-
71
- if @machine.provider_config.connect_via_ssh
72
- ssh_info[:proxy_command] =
73
- "ssh '#{@machine.provider_config.host}' " \
74
- "-l '#{@machine.provider_config.username}' " \
75
- "-i '#{@machine.provider_config.id_ssh_key_file}' " \
76
- 'nc %h %p'
77
-
78
- end
79
-
80
- ssh_info
81
- end
82
-
83
- def mac_addresses
84
- # Run a custom action called "read_mac_addresses" which will return
85
- # a list of mac addresses used by the machine. The returned data will
86
- # be in the following format:
87
- #
88
- # {
89
- # <ADAPTER_ID>: <MAC>
90
- # }
91
- env = @machine.action('read_mac_addresses')
92
- env[:machine_mac_addresses]
93
- end
94
-
95
- # This should return the state of the machine within this provider.
96
- # The state must be an instance of {MachineState}.
97
- def state
98
- state_id = nil
99
- state_id = :not_created unless @machine.id
100
- state_id = :not_created if
101
- !state_id && (!@machine.id || !driver.created?(@machine.id))
102
- # Query the driver for the current state of the machine
103
- state_id = driver.state(@machine) if @machine.id && !state_id
104
- state_id = :unknown unless state_id
105
-
106
- # This is a special pseudo-state so that we don't set the
107
- # NOT_CREATED_ID while we're setting up the machine. This avoids
108
- # clearing the data dir.
109
- state_id = :preparing if @machine.id == 'preparing'
110
-
111
- # Get the short and long description
112
- short = state_id.to_s.tr('_', ' ')
113
- long = I18n.t("vagrant_libvirt.states.#{state_id}")
114
-
115
- # If we're not created, then specify the special ID flag
116
- if state_id == :not_created
117
- state_id = Vagrant::MachineState::NOT_CREATED_ID
118
- end
119
-
120
- # Return the MachineState object
121
- Vagrant::MachineState.new(state_id, short, long)
122
- end
123
-
124
- def to_s
125
- id = @machine.id.nil? ? 'new' : @machine.id
126
- "Libvirt (#{id})"
127
- end
128
- end
129
- end
130
- end