Class: CavalerieWeb::VagrantManager

Inherits:
Object
  • Object
show all
Defined in:
lib/cavalerie_web/managers/vagrant_manager.rb

Class Method Summary collapse

Class Method Details

.destroy_containersObject



68
69
70
71
72
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 68

def self.destroy_containers
  VagrantManager.get_containers_names.each do |container_name|
    VagrantHelper.destroy_container container_name unless get_container_status(container_name) == "not created"
  end
end

.ensure_containers_are_runningObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 35

def self.ensure_containers_are_running
  begin
    VagrantManager.get_containers_names.each do |container_name|
      container_status = get_container_status container_name

      timer = 0
      max_timer = 30
      while container_status == "preparing" && timer < max_timer
        puts Message.notice "\"#{container_name}\" container is preparing. Waiting 2 seconds. (Current time: #{timer}s)"
        sleep 2
        timer += 2
        container_status = get_container_status container_name
      end

      raise ContainerNotRunningError, { container_name: container_name, container_status: container_status } unless container_status == "running"
    end
  rescue ContainerNotRunningError => error
    error_params = eval error.message
    abort Message.error "Container \"#{error_params[:container_name]}\" isn't running.\n\n\t\"#{error_params[:container_name]}\" container status: #{error_params[:container_status]}\n\nAre you sure you have already run the command \"cavalerie up\"?\nIf the problem persists, this often means there is already another Vagrant virtual machine running in VirtualBox.\nPlease find and delete any virtual machine named \"Vagrant-Dockerhost\" in VirtualBox, and run \"cavalerie up\" again."
  end
end

.get_all_containers_infoObject



95
96
97
98
99
100
101
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 95

def self.get_all_containers_info
  all_containers_info = {}
  Config.get_docker_configs["containers_names"].each do |container_name|
    all_containers_info[container_name] = VagrantManager.get_container_info container_name
  end
  all_containers_info
end

.get_container_info(container_name) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 83

def self.get_container_info container_name
  docker_configs = Config.get_docker_configs

  container_info = {
    ip: docker_configs["#{container_name}_container_ip"],
    os: docker_configs["#{container_name}_os"],
    version: docker_configs["#{container_name}_version"],
    status: get_container_status(container_name),
    others: get_container_other_info(container_name)
  }
end

.get_container_other_info(container_name) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 103

def self.get_container_other_info container_name
  docker_configs = Config.get_docker_configs
  others = {}

  docker_configs.each do |docker_config_key, docker_config_value|
    if docker_config_key.to_s.include? container_name
      already_registered_config = ["#{container_name}_container_ip", "#{container_name}_os", "#{container_name}_version"]
      is_an_other_key = already_registered_config.none? { |config| docker_config_key == config }
      others[docker_config_key] = docker_config_value if is_an_other_key
    end
  end

  others
end

.get_container_status(container_name) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 7

def self.get_container_status container_name
  status = VagrantHelper.status(container_name)

  begin
    case status
    when /not created \(docker\)/
      "not created"
    when /running \(docker\)/
      "running"
    when /saved \(docker\)/
      "saved"
    when /preparing \(docker\)/
      "preparing"
    when /poweroff \(docker\)/
      "poweroff"
    when /stopped \(docker\)/
      "stopped"
    when /host state unknown \(docker\)/
      "host state unknown"
    else
      raise UnknownDockerContainerStatusError, status
    end
  rescue UnknownDockerContainerStatusError => error
    abort Message.error "The container #{container_name} is in an unknown state.\n\nVagrant status command output:\n\n#{error.message}"
  end

end

.get_containers_namesObject



79
80
81
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 79

def self.get_containers_names
  Config.get_docker_configs["containers_names"]
end

.restart_container(container_name) ⇒ Object



74
75
76
77
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 74

def self.restart_container container_name
  VagrantHelper.destroy_container container_name
  VagrantHelper.start_container container_name
end

.start_containersObject



62
63
64
65
66
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 62

def self.start_containers
  VagrantManager.get_containers_names.each do |container_name|
    VagrantHelper.start_container container_name
  end
end

.start_or_restart_containersObject



57
58
59
60
# File 'lib/cavalerie_web/managers/vagrant_manager.rb', line 57

def self.start_or_restart_containers
  destroy_containers
  start_containers
end