Class: KubernetesTemplateRendering::VariableOverrideParser

Inherits:
Object
  • Object
show all
Defined in:
lib/kubernetes_template_rendering/variable_override_parser.rb

Overview

Parses --variable-override / --variable-override-json values into (possibly nested) override fragments and deep-merges them, in command-line order, into one overrides hash.

Key forms:

* Legacy: KEY contains no "." -> top-level key, value kept as the raw string
(exactly the pre-0.7.0 behavior; never type-coerced).
* Dotted: KEY contains "." -> split on unescaped dots into a nested path ("\." is a
literal dot within a segment). The value is JSON-coerced when it parses as JSON
(2 -> Integer, true/false -> booleans, null -> nil, "2" -> String), else kept raw.

Defined Under Namespace

Classes: ParseError

Constant Summary collapse

UNESCAPED_DOT =
/(?<!\\)\./.freeze

Class Method Summary collapse

Class Method Details

.merge_json!(overrides, json) ⇒ Hash

Deep-merges a JSON object string into overrides.

Parameters:

  • overrides (Hash) —

    accumulated overrides hash (mutated in place)

  • json (String) —

    JSON object string

Returns:

  • (Hash) —

    overrides after merging

Raises:

  • (ParseError) —

    when json is invalid or not a JSON object



40
41
42
43
44
45
46
47
48
49
# File 'lib/kubernetes_template_rendering/variable_override_parser.rb', line 40

def merge_json!(overrides, json)
  fragment =
    begin
      JSON.parse(json)
    rescue JSON::ParserError => ex
      raise ParseError, "--variable-override-json value is not valid JSON: #{ex.message}"
    end
  fragment.is_a?(Hash) or raise ParseError, "--variable-override-json value must be a JSON object, got #{fragment.class}: #{json.inspect}"
  overrides.deep_merge!(fragment)
end

.merge_override!(overrides, raw) ⇒ Hash

Deep-merges a KEY:VALUE override fragment into overrides.

Parameters:

  • overrides (Hash) —

    accumulated overrides hash (mutated in place)

  • raw (String) —

    raw KEY:VALUE argument

Returns:

  • (Hash) —

    overrides after merging



27
28
29
30
31
32
# File 'lib/kubernetes_template_rendering/variable_override_parser.rb', line 27

def merge_override!(overrides, raw)
  key, value = raw.split(":", 2)
  return overrides if key.nil? || value.nil? # preserve legacy silent-skip of colon-less args

  overrides.deep_merge!(fragment_for(key, value))
end