Module: Forj::Destroy

Defined in:
lib/destroy.rb

Overview

This module provides the behavior to destroy your forge’s server(s)

Class Method Summary collapse

Class Method Details

.choose_server(server_list) ⇒ Object



105
106
107
108
109
110
111
112
# File 'lib/destroy.rb', line 105

def self.choose_server(server_list)
  say('Please, choose what you want to destroy')
  value = choose do |q|
    q.choices(*server_list)
  end

  value
end

.destroy(name, options) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/destroy.rb', line 26

def self.destroy(name, options)
   = Lorj::Account.new(options[:config])

  # Loading account at account layer
  unless .ac_load options[:account_name]
    PrcLib.fatal(1, "Invalid account '%s'. Use `forj show account` "\
                    'to get the list of valid accounts.',
                 options[:account_name])
  end

  o_cloud = Forj::CloudConnection.connect()

  o_forge = o_cloud.get(:forge, name)

  if o_forge[:servers].count > 0
    destroy_server(o_cloud, o_forge, options)
  else
    PrcLib.high_level_msg("No server(s) found on forge instance '%s'.\n",
                          name)
  end
end

.destroy_server(o_cloud, o_forge, options) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/destroy.rb', line 48

def self.destroy_server(o_cloud, o_forge, options)
  if options[:force]
    # Destroy all servers found
    o_cloud.delete(:forge)
  else
    server_list, servers_id = get_server_list(o_forge)

    server_name = choose_server(server_list)

    case server_name
    when 'abort'
      PrcLib.high_level_msg("No server destroyed on your demand.\n", name)
      return
    when 'all'
      # Destroy all servers found
      o_cloud.delete(:forge)
      return
    else
      # Destroy selected server
      found = server_name.match(/ - (.*)$/)
      if found
        o_cloud.delete(:forge, :forge_server => found[1])
      else
        o_cloud.delete(:forge, :forge_server => servers_id[server_name][0])
      end
    end
  end
end

.get_server_list(forge) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/destroy.rb', line 77

def self.get_server_list(forge)
  # Ask the user to get server(s) to destroy
  server_list = []
  servers_id = {}

  forge[:servers].each do |_type, server|
    server_name = server[:name]
    if servers_id.key?(server_name)
      servers_id[server_name] << server[:id]
    else
      servers_id[server_name] = [server[:id]]
    end
  end

  servers_id.each do |name, servers|
    if servers.length > 1
      servers.each { |id| server_list << name + ' - ' + id }
    else
      server_list << name
    end
  end

  server_list << 'all'
  server_list << 'abort'

  [server_list, servers_id]
end