Class: VagrantPlugins::DataBags::DataBagsContainer

Inherits:
Object
  • Object
show all
Includes:
Singleton, FileUtil
Defined in:
lib/vagrant-databags/data_bags.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from FileUtil

#escape_glob_dir, #find_all_object_dirs, #find_all_objects, #object_from_json_file

Constructor Details

#initializeDataBagsContainer

Returns a new instance of DataBagsContainer.



18
19
20
# File 'lib/vagrant-databags/data_bags.rb', line 18

def initialize
  @machine_data_bags_map = {}
end

Instance Attribute Details

#machine_data_bagsHash<Symbol, Hash<Symbol, MachineDataBags>>

Returns:



13
14
15
# File 'lib/vagrant-databags/data_bags.rb', line 13

def machine_data_bags
  @machine_data_bags
end

#temp_foldersArray<String> (readonly)

Returns:

  • (Array<String>)


16
17
18
# File 'lib/vagrant-databags/data_bags.rb', line 16

def temp_folders
  @temp_folders
end

Instance Method Details

#clean(machine, provisioner_type) ⇒ Object

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol)


104
105
106
107
108
109
# File 'lib/vagrant-databags/data_bags.rb', line 104

def clean(machine, provisioner_type)
  abs_temp_folder = get_abs_temp_folder(machine, provisioner_type)
  Dir[::File.join(abs_temp_folder, "*")].each do |f|
    ::FileUtils.rm_r f, :force => true
  end
end

#destroy(machine) ⇒ Object

Parameters:

  • machine (::Vagrant::Machine)


98
99
100
# File 'lib/vagrant-databags/data_bags.rb', line 98

def destroy(machine)
  ::FileUtils.rm_r get_abs_temp_folder(machine), :force => true
end

#get_abs_temp_folder(machine, provisioner_type = nil) ⇒ String

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol) (defaults to: nil)

Returns:

  • (String)


114
115
116
# File 'lib/vagrant-databags/data_bags.rb', line 114

def get_abs_temp_folder(machine, provisioner_type = nil)
  ::File.join(machine.env.root_path, get_rel_temp_folder(machine, provisioner_type))
end

#get_machine_data_bags(machine, provisioner_type) ⇒ MachineDataBags

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol)

Returns:



46
47
48
49
50
51
52
53
54
55
# File 'lib/vagrant-databags/data_bags.rb', line 46

def get_machine_data_bags(machine, provisioner_type)
  unless @machine_data_bags_map.key?(machine.name.to_sym)
    @machine_data_bags_map[machine.name.to_sym] = {}
  end
  unless @machine_data_bags_map[machine.name.to_sym].key?(provisioner_type.to_sym)
    @machine_data_bags_map[machine.name.to_sym][provisioner_type.to_sym] = MachineDataBags.new
  end

  @machine_data_bags_map[machine.name.to_sym][provisioner_type.to_sym]
end

#get_rel_temp_folder(machine, provisioner_type = nil) ⇒ String

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol) (defaults to: nil)

Returns:

  • (String)


121
122
123
124
125
126
127
# File 'lib/vagrant-databags/data_bags.rb', line 121

def get_rel_temp_folder(machine, provisioner_type = nil)
  if provisioner_type.nil?
    ::File.join(".vagrant", "machines", machine.name.to_s, "databags")
  else
    ::File.join(".vagrant", "machines", machine.name.to_s, "databags", provisioner_type.to_s)
  end
end

#init_machine_data_bag_folder(machine, provisioner_type) ⇒ Array

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol)

Returns:

  • (Array)


60
61
62
63
64
# File 'lib/vagrant-databags/data_bags.rb', line 60

def init_machine_data_bag_folder(machine, provisioner_type)
  rel_temp_folder = get_rel_temp_folder(machine, provisioner_type)
  ::FileUtils.mkdir_p ::File.join(machine.env.root_path, rel_temp_folder)
  [:host, rel_temp_folder]
end

#init_machine_data_bags(machine, provisioner_type, data_bags_path) ⇒ MachineDataBags

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol)
  • data_bags_path (Array<String>)

Returns:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/vagrant-databags/data_bags.rb', line 26

def init_machine_data_bags(machine, provisioner_type, data_bags_path)
  machine_data_bags = get_machine_data_bags(machine, provisioner_type)
  data_bags_path.each do |data_bag_path|
    if data_bag_path[0] == :host
      data_bags_root_path = ::File.join(machine.env.root_path, data_bag_path[1])
      find_all_object_dirs(data_bags_root_path).each do |data_bag_name|
        find_all_objects(::File.join(data_bags_root_path, data_bag_name)).each do |item_file_name|
          item = object_from_json_file(::File.join(data_bags_root_path, data_bag_name, item_file_name))
          machine_data_bags.add_data_bag_item(data_bag_name, item['id'], item)
        end
      end
    end
  end
  @machine_data_bags_map[machine.name.to_sym][provisioner_type.to_sym] = machine_data_bags
  machine_data_bags
end

#persist_machine_data_bags(machine, provisioner_type) ⇒ Array

Parameters:

  • machine (::Vagrant::Machine)
  • provisioner_type (Symbol)

Returns:

  • (Array)


69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/vagrant-databags/data_bags.rb', line 69

def persist_machine_data_bags(machine, provisioner_type)
  machine_data_bags = get_machine_data_bags(machine, provisioner_type)
  rel_temp_folder = get_rel_temp_folder(machine, provisioner_type)
  temp_folder = ::File.join(machine.env.root_path, rel_temp_folder)

  machine_data_bags.data_bags.each do |data_bag_name, data_bag|
    data_bag_folder = ::File.join(temp_folder, data_bag_name)
    ::FileUtils.mkdir_p data_bag_folder
    data_bag.items.each do |item_id, item|
      open(File.join(data_bag_folder, "#{item_id}.json"), 'w') {|f| f << ::JSON.pretty_generate(item)}
    end

    find_all_objects(data_bag_folder).each do |file_name|
      item_id = ::File.basename(file_name, ".*")
      unless data_bag.items.key?(item_id) || data_bag.items.key?(item_id.to_sym)
        ::FileUtils.rm_r ::File.join(data_bag_folder, file_name), :force => true
      end
    end
  end

  find_all_object_dirs(temp_folder).each do |folder_name|
    unless machine_data_bags.data_bags.key?(folder_name)
      ::FileUtils.rm_r ::File.join(temp_folder, folder_name), :force => true
    end
  end
  [:host, rel_temp_folder]
end