Class: RediPress::CLI::Configurations

Inherits:
Thor
  • Object
show all
Defined in:
lib/redipress/cli/configurations.rb

Instance Method Summary collapse

Instance Method Details

#executeObject



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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
76
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/redipress/cli/configurations.rb', line 9

def execute
  # Prepare
  prepare

  # Print a hello message
  prompt.ok("Hello, let's configure a server!")

  # Get the server host
  host = prompt_for_host

  # Print a new line
  new_line

  # Get the configuration
  configurations = prompt_for_configurations

  # Create a Hash to hold the options
  options = Hash.new

  # Loop over each configuration
  configurations.each do |configuration|
    # Print a new line
    new_line

    # Get the configuration's options
    options[configuration.slug] = prompt_for_configuration_options(configuration)
  end

  # Print a new line
  new_line

  # Prompt to continue
  exit(1) unless prompt.yes?("Proceed with the above settings?")

  # Loop over each configuration
  configurations.each do |configuration|
    # Print a new line
    new_line

    begin
      # Check if the configuration is compatible with the host
      compatible = configuration.compatible?(host, options)
    rescue => e
      # Print a new line
      new_line

      # Print an error message
      prompt.error("An exception was raised whilst running a configuration:")
      prompt.error("-------------------------------------------------------")

      raise e
    end

    # Check if the configuration is not compatible
    unless compatible
      # Print a warning message
      prompt.warning("'#{configuration.name}' is not compatible with #{host.username}@#{host.hostname}")

      exit 1
    end
  end

  # Print a message
  prompt.ok("The selected configurations appear to be compatible with #{host.username}@#{host.hostname}")

  # Create a Hash to hold the results
  results = Hash.new

  # Loop over each configuration
  configurations.each do |configuration|
    # Print a new line
    new_line

    # Print a message
    prompt.ok("Configuring '#{configuration.name}' ...")
    prompt.ok("------------------------------------------------------------")

    begin
      # Perform the configuration on the server
      results[configuration.slug] = configuration.configure(host, options[configuration.slug])
    rescue RediPress::ConfigurationFailed => e
      # Print a new line
      new_line

      # Print an error message
      prompt.error("Configuration '#{configuration.name}' failed:")
      prompt.error("------------------------------------------------------------")
      prompt.error(e.error)

      exit 1
    rescue => e
      # Print a new line
      new_line

      # Print an error message
      prompt.error("Configuration '#{configuration.name}' raised an error:")
      prompt.error("------------------------------------------------------------")

      raise e
    end
  end

  # Print a new line
  new_line

  # The server has been configured
  prompt.ok("Woo hoo! Your server has been configured.")

  # Loop over each configuration
  configurations.each do |configuration|
    # Get the result
    result = results[configuration.slug]

    # Go next if there aren't any results to output
    next if result.nil? || result.empty? || false == result.is_a?(Hash)

    # Print a new line
    new_line

    # Print the configuration's name
    prompt.ok(configuration.name)
    prompt.ok("------------------------------------------------------------")

    # Print a table containing the results
    puts TTY::Table.new(rows: result.map { |k, v| [" #{k} ", " #{v} "] }).render(:ascii)
  end

  nil
end