Module: Fragrant
- Defined in:
- lib/fragrant.rb,
lib/fragrant/address_manager.rb,
lib/fragrant/vagrantfile_generator.rb
Defined Under Namespace
Classes: AddressManager, Frontend, VagrantfileGenerator
Constant Summary
collapse
- AddressRangeExhausted =
Class.new(StandardError)
Class Method Summary
collapse
Class Method Details
.add_task(task) ⇒ Object
26
27
28
29
|
# File 'lib/fragrant.rb', line 26
def self.add_task(task)
background_worker
tasks.push(task)
end
|
.address_manager ⇒ Object
20
21
22
23
24
|
# File 'lib/fragrant.rb', line 20
def self.address_manager
data_location = File.join(Fragrant.env_dir, "addresses.json")
range = ENV["FRAGRANT_IP_RANGE"] || "172.24.24.128/25"
@address_manager ||= AddressManager.new(data_location, range)
end
|
.background_worker ⇒ Object
56
57
58
|
# File 'lib/fragrant.rb', line 56
def self.background_worker
@background_worker ||= create_worker_thread
end
|
.create_worker_thread ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/fragrant.rb', line 36
def self.create_worker_thread
thread = Thread.new do
Thread.current.abort_on_exception = true
until Thread.current[:shutdown] do
unless Fragrant.tasks.empty?
task = Fragrant.tasks.pop
env = Vagrant::Environment.new({ :cwd => File.join(env_dir, task[:id]) })
env.cli(task[:args])
end
end
end
at_exit do
$stderr.puts "Waiting for any running Vagrant tasks to complete."
thread[:shutdown] = true
thread.join
end
thread
end
|
.env_dir ⇒ Object
12
13
14
15
16
17
18
|
# File 'lib/fragrant.rb', line 12
def self.env_dir
@env_dir ||= begin
dir = ENV["FRAGRANT_ENV_DIR"] || File.expand_path("~/.fragrant")
FileUtils.mkdir_p(dir)
dir
end
end
|
.tasks ⇒ Object
Tasks are two-element Arrays of a machine id and a set of vagrant args
32
33
34
|
# File 'lib/fragrant.rb', line 32
def self.tasks
@tasks ||= Queue.new
end
|