Class: Gitlab::QA::Runtime::OmnibusConfiguration

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/qa/runtime/omnibus_configuration.rb

Instance Method Summary collapse

Constructor Details

#initialize(prefixed_config = nil) ⇒ OmnibusConfiguration

Returns a new instance of OmnibusConfiguration.

Parameters:

  • prefixed_config (defaults to: nil)

    The configuration to be prefixed to the new configuration



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 11

def initialize(prefixed_config = nil)
  @config = ["# Generated by GitLab QA Omnibus Configurator at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"]

  return unless prefixed_config

  # remove generation statement if it exists within the prefixed configuration that was passed
  # and insert the rest AFTER the very first generation statement
  config_to_insert = prefixed_config.to_s
  generation_regexp = /# Generated by GitLab QA Omnibus Configurator.*\n/
  config_to_insert = config_to_insert.gsub(generation_regexp, '') if config_to_insert.match?(generation_regexp)
  @config.insert(1, config_to_insert)
end

Instance Method Details

#<<(config) ⇒ Object

rubocop:enable Metrics/AbcSize



75
76
77
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 75

def <<(config)
  @config << config.strip unless config.strip.empty?
end

#configurationObject

Raises:

  • (NotImplementedError)


28
29
30
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 28

def configuration
  raise NotImplementedError
end

#exec_commandsObject

Commands to execute before tests are run against GitLab (after reconfigure)



38
39
40
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 38

def exec_commands
  []
end

#prepareObject

Before hook for any additional configuration This would usually be a container that needs to be running

Returns:

  • Any instance of [Gitlab::QA::Component::Base]



35
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 35

def prepare; end

#sanitize!Object

Ensures no duplicate entries and sanitizes configurations rubocop:disable Metrics/AbcSize

Raises:

  • RuntimeError if competing configurations exist



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
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 45

def sanitize!
  sanitized = @config.map do |config|
    next config if config.start_with?('#') || config.match(/\w+\(/) # allow for comments and method invocations

    # sometimes "=" is part of a Hash. Only split based on the first "="
    k, v = config.split("=", 2)
    # make sure each config is well-formed
    # e.g., gitlab_rails['packages_enabled'] = true
    #   NOT gitlab_rails['packages_enabled']=true

    v.nil? ? k.strip : "#{k.strip} = #{v.strip.tr('"', "'")}".strip
  end.uniq

  errors = []

  # check for duplicates
  duplicate_keys = []
  duplicates = sanitized.reject do |n|
    key = n.split('=').first
    duplicate_keys << key unless duplicate_keys.include?(key)
  end

  duplicates.each { |duplicate| errors << "Duplicate entry found: `#{duplicate}`" }

  raise "Errors exist within the Omnibus Configuration!\n#{errors.join(',')}" if errors.any?

  @config = sanitized
end

#to_sObject



24
25
26
# File 'lib/gitlab/qa/runtime/omnibus_configuration.rb', line 24

def to_s
  sanitize!.join("\n")
end