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_managerObject



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_workerObject



56
57
58
# File 'lib/fragrant.rb', line 56

def self.background_worker
  @background_worker ||= create_worker_thread
end

.create_worker_threadObject



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_dirObject



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

.tasksObject

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