vagrant-libvirt 0.0.40 → 0.0.41

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 (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,353 +0,0 @@
1
- require 'log4r'
2
- require 'vagrant/util/network_ip'
3
- require 'vagrant/util/scoped_hash_override'
4
- require 'ipaddr'
5
- require 'thread'
6
-
7
- module VagrantPlugins
8
- module ProviderLibvirt
9
- module Action
10
- # Prepare all networks needed for domain connections.
11
- class CreateNetworks
12
- include Vagrant::Util::NetworkIP
13
- include Vagrant::Util::ScopedHashOverride
14
- include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate
15
- include VagrantPlugins::ProviderLibvirt::Util::NetworkUtil
16
-
17
- @@lock = Mutex.new
18
-
19
- def initialize(app, env)
20
- mess = 'vagrant_libvirt::action::create_networks'
21
- @logger = Log4r::Logger.new(mess)
22
- @app = app
23
-
24
- @available_networks = []
25
- @options = {}
26
- @libvirt_client = env[:machine].provider.driver.connection.client
27
- end
28
-
29
- def call(env)
30
- # only one vm at a time should try to set up networks
31
- # otherwise they'll have inconsitent views of current state
32
- # and conduct redundant operations that cause errors
33
- @@lock.synchronize do
34
- # Iterate over networks If some network is not
35
- # available, create it if possible. Otherwise raise an error.
36
- configured_networks(env, @logger).each do |options|
37
- # Only need to create private networks
38
- next if options[:iface_type] != :private_network ||
39
- options.fetch(:tunnel_type, nil)
40
- @logger.debug "Searching for network with options #{options}"
41
-
42
- # should fix other methods so this doesn't have to be instance var
43
- @options = options
44
-
45
- # Get a list of all (active and inactive) libvirt networks. This
46
- # list is used throughout this class and should be easier to
47
- # process than libvirt API calls.
48
- @available_networks = libvirt_networks(
49
- env[:machine].provider.driver.connection.client
50
- )
51
-
52
- # Prepare a hash describing network for this specific interface.
53
- @interface_network = {
54
- name: nil,
55
- ip_address: nil,
56
- netmask: @options[:netmask],
57
- network_address: nil,
58
- bridge_name: nil,
59
- ipv6_address: options[:ipv6_address] || nil,
60
- ipv6_prefix: options[:ipv6_prefix] || nil,
61
- created: false,
62
- active: false,
63
- autostart: options[:autostart] || false,
64
- guest_ipv6: @options[:guest_ipv6] || 'yes',
65
- libvirt_network: nil
66
- }
67
-
68
- if @options[:ip]
69
- handle_ip_option(env)
70
- elsif @options[:type].to_s == 'dhcp'
71
- handle_dhcp_private_network(env)
72
- elsif @options[:network_name]
73
- handle_network_name_option(env)
74
- else
75
- raise Errors::CreateNetworkError, error_message: @options
76
- end
77
-
78
- autostart_network if @interface_network[:autostart]
79
- activate_network unless @interface_network[:active]
80
- end
81
- end
82
-
83
- @app.call(env)
84
- end
85
-
86
- private
87
-
88
- def lookup_network_by_ip(ip)
89
- @logger.debug "looking up network with ip == #{ip}"
90
- @available_networks.find { |network| network[:network_address] == ip }
91
- end
92
-
93
- # Return hash of network for specified name, or nil if not found.
94
- def lookup_network_by_name(network_name)
95
- @logger.debug "looking up network named #{network_name}"
96
- @available_networks.find { |network| network[:name] == network_name }
97
- end
98
-
99
- # Return hash of network for specified bridge, or nil if not found.
100
- def lookup_bridge_by_name(bridge_name)
101
- @logger.debug "looking up bridge named #{bridge_name}"
102
- @available_networks.find { |network| network[:bridge_name] == bridge_name }
103
- end
104
-
105
- # Throw an error if dhcp setting for an existing network does not
106
- # match what was configured in the vagrantfile
107
- # since we always enable dhcp for the management network
108
- # this ensures we wont start a vm vagrant cant reach
109
- # Allow the situation where DHCP is not requested (:libvirt__dhcp_enabled == false)
110
- # but where it is enabled on the virtual network
111
- def verify_dhcp
112
- if @interface_network[:dhcp_enabled] == true && @options[:dhcp_enabled] == false
113
- raise Errors::DHCPMismatch,
114
- network_name: @interface_network[:name],
115
- requested: @options[:dhcp_enabled] ? 'enabled' : 'disabled'
116
- end
117
- end
118
-
119
- # Handle only situations, when ip is specified. Variables @options and
120
- # @available_networks should be filled before calling this function.
121
- def handle_ip_option(env)
122
- return unless @options[:ip]
123
- net_address = nil
124
- unless @options[:forward_mode] == 'veryisolated'
125
- net_address = network_address(@options[:ip], @options[:netmask])
126
-
127
- # Set IP address of network (actually bridge). It will be used as
128
- # gateway address for machines connected to this network.
129
- @interface_network[:ip_address] = get_host_ip_addr(net_address)
130
- end
131
-
132
- @interface_network[:network_address] = net_address
133
-
134
- # if network is veryisolated, search by name
135
- network = if @options[:libvirt__forward_mode] == 'veryisolated'
136
- lookup_network_by_name(@options[:network_name])
137
- elsif net_address
138
- # otherwise, search by ip (if set)
139
- lookup_network_by_ip(net_address)
140
- else
141
- # leaving this here to mimic prior behavior. If we get
142
- # here, something's probably broken.
143
- lookup_network_by_name(@options[:network_name])
144
- end
145
- @interface_network = network if network
146
-
147
- verify_dhcp if @interface_network[:created]
148
-
149
- if @options[:network_name]
150
- @logger.debug 'Checking that network name does not clash with ip'
151
- if @interface_network[:created]
152
- # Just check for mismatch error here - if name and ip from
153
- # config match together.
154
- if @options[:network_name] != @interface_network[:name]
155
- raise Errors::NetworkNameAndAddressMismatch,
156
- ip_address: @options[:ip],
157
- network_name: @options[:network_name]
158
- end
159
- else
160
- # Network is not created, but name is set. We need to check,
161
- # whether network name from config doesn't already exist.
162
- if lookup_network_by_name @options[:network_name]
163
- raise Errors::NetworkNameAndAddressMismatch,
164
- ip_address: @options[:ip],
165
- network_name: @options[:network_name]
166
- end
167
-
168
- # Network with 'name' doesn't exist. Set it as name for new
169
- # network.
170
- @interface_network[:name] = @options[:network_name]
171
- end
172
- end
173
-
174
- # Do we need to create new network?
175
- unless @interface_network[:created]
176
-
177
- # TODO: stop after some loops. Don't create infinite loops.
178
-
179
- # Is name for new network set? If not, generate a unique one.
180
- count = 0
181
- while @interface_network[:name].nil?
182
- @logger.debug 'generating name for network'
183
-
184
- # Generate a network name.
185
- network_name = env[:root_path].basename.to_s.dup
186
- network_name << count.to_s
187
- count += 1
188
-
189
- # Check if network name is unique.
190
- next if lookup_network_by_name(network_name)
191
-
192
- @interface_network[:name] = network_name
193
- end
194
-
195
- # Generate a unique name for network bridge.
196
- @interface_network[:bridge_name] = generate_bridge_name
197
-
198
- # Create a private network.
199
- create_private_network(env)
200
- end
201
- end
202
-
203
- # Handle network_name option, if ip was not specified. Variables
204
- # @options and @available_networks should be filled before calling this
205
- # function.
206
- def handle_network_name_option(env)
207
- return if @options[:ip] || \
208
- !@options[:network_name] || \
209
- !@options[:libvirt__forward_mode] == 'veryisolated'
210
-
211
- network = lookup_network_by_name(@options[:network_name])
212
- @interface_network = network if network
213
-
214
- if @options[:libvirt__forward_mode] == 'veryisolated'
215
- # if this interface has a network address, something's wrong.
216
- if @interface_network[:network_address]
217
- raise Errors::NetworkNotAvailableError,
218
- network_name: @options[:network_name]
219
- end
220
- else
221
- if !@interface_network
222
- raise Errors::NetworkNotAvailableError,
223
- network_name: @options[:network_name]
224
- else
225
- verify_dhcp
226
- end
227
- end
228
-
229
- # Do we need to create new network?
230
- unless @interface_network[:created]
231
- @interface_network[:name] = @options[:network_name]
232
- @interface_network[:ip_address] ||= @options[:host_ip]
233
-
234
- # Generate a unique name for network bridge.
235
- @interface_network[:bridge_name] = generate_bridge_name
236
-
237
- # Create a private network.
238
- create_private_network(env)
239
- end
240
- end
241
-
242
- def handle_dhcp_private_network(env)
243
- net_address = '172.28.128.0'
244
- network = lookup_network_by_ip(net_address)
245
- @interface_network = network if network
246
-
247
- # Do we need to create new network?
248
- unless @interface_network[:created]
249
- @interface_network[:name] = 'vagrant-private-dhcp'
250
- @interface_network[:network_address] = net_address
251
-
252
- # Set IP address of network (actually bridge). It will be used as
253
- # gateway address for machines connected to this network.
254
- @interface_network[:ip_address] = get_host_ip_addr(net_address)
255
-
256
- # Generate a unique name for network bridge.
257
- @interface_network[:bridge_name] = generate_bridge_name
258
-
259
- # Create a private network.
260
- create_private_network(env)
261
- end
262
- end
263
-
264
- # Return provided address or first address of network otherwise
265
- def get_host_ip_addr(network)
266
- @options[:host_ip] ? IPAddr.new(@options[:host_ip]) : IPAddr.new(network).succ
267
- end
268
-
269
- # Return the first available virbr interface name
270
- def generate_bridge_name
271
- @logger.debug 'generating name for bridge'
272
- count = 0
273
- while lookup_bridge_by_name(bridge_name = "virbr#{count}")
274
- count += 1
275
- end
276
- @logger.debug "found available bridge name #{bridge_name}"
277
- bridge_name
278
- end
279
-
280
- def create_private_network(env)
281
- @network_name = @interface_network[:name]
282
- @network_bridge_name = @interface_network[:bridge_name]
283
- @network_address = @interface_network[:ip_address]
284
- @network_netmask = @interface_network[:netmask]
285
- @guest_ipv6 = @interface_network[:guest_ipv6]
286
-
287
- @network_ipv6_address = @interface_network[:ipv6_address]
288
- @network_ipv6_prefix = @interface_network[:ipv6_prefix]
289
-
290
- @network_forward_mode = @options[:forward_mode]
291
- if @options[:forward_device]
292
- @network_forward_device = @options[:forward_device]
293
- end
294
-
295
- if @options[:dhcp_enabled]
296
- # Find out DHCP addresses pool range.
297
- network_address = "#{@interface_network[:network_address]}/"
298
- network_address << (@interface_network[:netmask]).to_s
299
- net = @interface_network[:network_address] ? IPAddr.new(network_address) : nil
300
-
301
- # First is address of network, second is gateway (by default).
302
- # So start the range two addresses after network address by default.
303
- # TODO: Detect if this IP is not set on the interface.
304
- start_address = @options[:dhcp_start] || net.to_range.begin.succ
305
-
306
- # Default to last possible address. (Stop address must not be broadcast address.)
307
- stop_address = @options[:dhcp_stop] || (net.to_range.end & IPAddr.new('255.255.255.254'))
308
-
309
- @network_dhcp_enabled = true
310
- @network_dhcp_bootp_file = @options[:dhcp_bootp_file]
311
- @network_dhcp_bootp_server = @options[:dhcp_bootp_server]
312
- @network_range_start = start_address
313
- @network_range_stop = stop_address
314
- else
315
- @network_dhcp_enabled = false
316
- end
317
-
318
- begin
319
- @interface_network[:libvirt_network] = \
320
- @libvirt_client.define_network_xml(to_xml('private_network'))
321
- @logger.debug 'created network'
322
- rescue => e
323
- raise Errors::CreateNetworkError, error_message: e.message
324
- end
325
-
326
- created_networks_file = env[:machine].data_dir + 'created_networks'
327
-
328
- message = 'Saving information about created network '
329
- message << "#{@interface_network[:name]}, "
330
- message << "UUID=#{@interface_network[:libvirt_network].uuid} "
331
- message << "to file #{created_networks_file}."
332
- @logger.info(message)
333
-
334
- File.open(created_networks_file, 'a') do |file|
335
- file.puts @interface_network[:libvirt_network].uuid
336
- end
337
- end
338
-
339
- def autostart_network
340
- @interface_network[:libvirt_network].autostart = true
341
- rescue => e
342
- raise Errors::AutostartNetworkError, error_message: e.message
343
- end
344
-
345
- def activate_network
346
- @interface_network[:libvirt_network].create
347
- rescue => e
348
- raise Errors::ActivateNetworkError, error_message: e.message
349
- end
350
- end
351
- end
352
- end
353
- end
@@ -1,83 +0,0 @@
1
- require 'log4r'
2
-
3
- module VagrantPlugins
4
- module ProviderLibvirt
5
- module Action
6
- class DestroyDomain
7
- def initialize(app, _env)
8
- @logger = Log4r::Logger.new('vagrant_libvirt::action::destroy_domain')
9
- @app = app
10
- end
11
-
12
- def call(env)
13
- # Destroy the server, remove the tracking ID
14
- env[:ui].info(I18n.t('vagrant_libvirt.destroy_domain'))
15
-
16
- # Must delete any snapshots before domain can be destroyed
17
- # Fog libvirt currently doesn't support snapshots. Use
18
- # ruby-libvirt client directly. Note this is racy, see
19
- # http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotListNames
20
- libvirt_domain = env[:machine].provider.driver.connection.client.lookup_domain_by_uuid(
21
- env[:machine].id
22
- )
23
- begin
24
- libvirt_domain.list_snapshots.each do |name|
25
- @logger.info("Deleting snapshot '#{name}'")
26
- begin
27
- libvirt_domain.lookup_snapshot_by_name(name).delete
28
- rescue => e
29
- raise Errors::DeleteSnapshotError, error_message: e.message
30
- end
31
- end
32
- rescue
33
- # Some drivers (xen) don't support getting list of snapshots,
34
- # not much can be done here about it
35
- @logger.warn("Failed to get list of snapshots")
36
- end
37
-
38
- # must remove managed saves
39
- libvirt_domain.managed_save_remove if libvirt_domain.has_managed_save?
40
-
41
- domain = env[:machine].provider.driver.connection.servers.get(env[:machine].id.to_s)
42
-
43
- if env[:machine].provider_config.disks.empty? &&
44
- env[:machine].provider_config.cdroms.empty?
45
- # if using default configuration of disks and cdroms
46
- # cdroms are consider volumes, but cannot be destroyed
47
- domain.destroy(destroy_volumes: true)
48
- else
49
- domain.destroy(destroy_volumes: false)
50
-
51
- env[:machine].provider_config.disks.each do |disk|
52
- # shared disks remove only manually or ???
53
- next if disk[:allow_existing]
54
- diskname = libvirt_domain.name + '-' + disk[:device] + '.' + disk[:type].to_s
55
- # diskname is unique
56
- libvirt_disk = domain.volumes.select do |x|
57
- x.name == diskname
58
- end.first
59
- if libvirt_disk
60
- libvirt_disk.destroy
61
- elsif disk[:path]
62
- poolname = env[:machine].provider_config.storage_pool_name
63
- libvirt_disk = domain.volumes.select do |x|
64
- # FIXME: can remove pool/target.img and pool/123/target.img
65
- x.path =~ /\/#{disk[:path]}$/ && x.pool_name == poolname
66
- end.first
67
- libvirt_disk.destroy if libvirt_disk
68
- end
69
- end
70
-
71
- # remove root storage
72
- root_disk = domain.volumes.select do |x|
73
- x.name == libvirt_domain.name + '.img'
74
- end.first
75
- root_disk.destroy if root_disk
76
- end
77
-
78
- @app.call(env)
79
- end
80
- end
81
- end
82
- end
83
- end
@@ -1,95 +0,0 @@
1
- require 'log4r'
2
- require 'nokogiri'
3
-
4
- module VagrantPlugins
5
- module ProviderLibvirt
6
- module Action
7
- # Destroy all networks created for this specific domain. Skip
8
- # removing if network has still active connections.
9
- class DestroyNetworks
10
- def initialize(app, _env)
11
- @logger = Log4r::Logger.new('vagrant_libvirt::action::destroy_networks')
12
- @app = app
13
- end
14
-
15
- def call(env)
16
- # If there were some networks created for this machine, in machines
17
- # data directory, created_networks file holds UUIDs of each network.
18
- created_networks_file = env[:machine].data_dir + 'created_networks'
19
-
20
- @logger.info 'Checking if any networks were created'
21
- # If created_networks file doesn't exist, there are no networks we
22
- # need to remove.
23
- unless File.exist?(created_networks_file)
24
- env[:machine].id = nil
25
- return @app.call(env)
26
- end
27
-
28
- @logger.info 'File with created networks exists'
29
-
30
- # Iterate over each created network UUID and try to remove it.
31
- created_networks = []
32
- file = File.open(created_networks_file, 'r')
33
- file.readlines.each do |network_uuid|
34
- @logger.info "Checking for #{network_uuid}"
35
- # lookup_network_by_uuid throws same exception
36
- # if there is an error or if the network just doesn't exist
37
- begin
38
- libvirt_network = env[:machine].provider.driver.connection.client.lookup_network_by_uuid(
39
- network_uuid
40
- )
41
- rescue Libvirt::RetrieveError => e
42
- # this network is already destroyed, so move on
43
- if e.message =~ /Network not found/
44
- @logger.info 'It is already undefined'
45
- next
46
- # some other error occured, so raise it again
47
- else
48
- raise e
49
- end
50
- end
51
-
52
- # Skip removing if network has still active connections.
53
- xml = Nokogiri::XML(libvirt_network.xml_desc)
54
- connections = xml.xpath('/network/@connections').first
55
- unless connections.nil?
56
- @logger.info 'Still has connections so will not undefine'
57
- created_networks << network_uuid
58
- next
59
- end
60
-
61
- # Shutdown network first.
62
- # Undefine network.
63
- begin
64
- libvirt_network.destroy
65
- libvirt_network.undefine
66
- @logger.info 'Undefined it'
67
- rescue => e
68
- raise Errors::DestroyNetworkError,
69
- network_name: libvirt_network.name,
70
- error_message: e.message
71
- end
72
- end
73
- file.close
74
-
75
- # Update status of created networks after removing some/all of them.
76
- # Not sure why we are doing this, something else seems to always delete the file
77
- if !created_networks.empty?
78
- File.open(created_networks_file, 'w') do |file|
79
- @logger.info 'Writing new created_networks file'
80
- created_networks.each do |network_uuid|
81
- file.puts network_uuid
82
- end
83
- end
84
- else
85
- @logger.info 'Deleting created_networks file'
86
- File.delete(created_networks_file)
87
- end
88
-
89
- env[:machine].id = nil
90
- @app.call(env)
91
- end
92
- end
93
- end
94
- end
95
- end