Class: KubernetesTemplateRendering::ResourceSet

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config:, template_directory:, rendered_directory:, definitions_path:, kubernetes_cluster_type:, spp: false, spps: [], variable_overrides: {}, source_repo: nil) ⇒ ResourceSet

Returns a new instance of ResourceSet.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 22

def initialize(config:, template_directory:, rendered_directory:, definitions_path:, kubernetes_cluster_type:,
               spp: false, spps: [], variable_overrides: {}, source_repo: nil)
  @spp                     = spp
  @variables               = config["variables"] || {}
  @deploy_group_config     = config["deploy_groups"]
  @omitted_resources       = config["omitted_resources"]
  @template_directory      = template_directory
  @target_output_directory = resolve_target_output_directory(config["directory"], config["subdirectory"])
  @regions                 = config["regions"] || []
  @colors                  = config["colors"] || []
  @rendered_directory      = rendered_directory
  @definitions_path        = definitions_path
  @kubernetes_cluster_type = kubernetes_cluster_type
  @variable_overrides      = variable_overrides
  @source_repo             = source_repo
  @resources               = {}
  @spps                    = Array(spps)

  if @kubernetes_cluster_type != "kube-platform"
    @target_output_directory.include?("%{plain_region}") or raise "#{@template_directory}: target_output_directory #{@target_output_directory} needs %{plain_region}"
  end
end

Instance Attribute Details

#colorsObject (readonly)

Returns the value of attribute colors.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def colors
  @colors
end

#definitions_pathObject (readonly)

Returns the value of attribute definitions_path.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def definitions_path
  @definitions_path
end

#deploy_group_configObject (readonly)

Returns the value of attribute deploy_group_config.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def deploy_group_config
  @deploy_group_config
end

#kubernetes_cluster_typeObject (readonly)

Returns the value of attribute kubernetes_cluster_type.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def kubernetes_cluster_type
  @kubernetes_cluster_type
end

#omitted_resourcesObject (readonly)

Returns the value of attribute omitted_resources.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def omitted_resources
  @omitted_resources
end

#output_directoryObject (readonly)

Returns the value of attribute output_directory.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def output_directory
  @output_directory
end

#regionsObject (readonly)

Returns the value of attribute regions.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def regions
  @regions
end

#source_repoObject (readonly)

Returns the value of attribute source_repo.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def source_repo
  @source_repo
end

#sppsObject (readonly)

Returns the value of attribute spps.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def spps
  @spps
end

#target_output_directoryObject (readonly)

Returns the value of attribute target_output_directory.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def target_output_directory
  @target_output_directory
end

#template_directoryObject (readonly)

Returns the value of attribute template_directory.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def template_directory
  @template_directory
end

#variable_overridesObject (readonly)

Returns the value of attribute variable_overrides.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def variable_overrides
  @variable_overrides
end

#variablesObject (readonly)

Returns the value of attribute variables.



17
18
19
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 17

def variables
  @variables
end

Instance Method Details

#normal_render(args) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 45

def normal_render(args)
  dynamic_output_directory? and raise "Directory must not be dynamic: #{target_output_directory}"

  variables["kubernetes_cluster_type"] = @kubernetes_cluster_type

  if (plain_region = variables["plain_region"])
    default_region_vars(plain_region)
  end

  output_directory = File.join(@rendered_directory, target_output_directory)
  render_create_directory(args, output_directory)
end

#reconcile_scopesObject

Bounded reconcile scope roots for this entry, one per region × color.

The sweep root is the parent directory of the entry's rendered output_directory, derived from the actual directory: pattern rather than assuming a fixed layout. For a .../<service> pattern that parent is the <region>/<cluster_type>/<color> base; for a <region>/<service> pattern it is <region>. The parent is shared with sibling entries, so leftovers from a deleted/renamed entry under it are swept. The renderer validates each base_root stays within rendered_directory (out-of-prefix, full or relative, is a hard error).

Each scope also carries spp: (whether this entry is an SPP definition) and spp_base_root: (the canonical <region>/<cluster_type>/<color>/spp/SPP-PLACEHOLDER prefix for that region × color) so the renderer can enforce the SPP layout guard before rendering.



87
88
89
90
91
92
93
94
95
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 87

def reconcile_scopes
  @regions.flat_map do |plain_region|
    @colors.map do |c|
      output_directory = File.join(@rendered_directory, format(@target_output_directory, plain_region: plain_region, color: c, type: @kubernetes_cluster_type))
      spp_base_root    = File.join(@rendered_directory, format(SPP_BASE_OUTPUT_DIRECTORY, plain_region: plain_region, color: c, type: @kubernetes_cluster_type))
      { base_root: File.dirname(output_directory), output_directory: output_directory, spp: @spp, spp_base_root: spp_base_root }
    end
  end
end

#render(args) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 58

def render(args)
  @regions.any? or raise "#{template_directory}: must have at least one region"
  @colors.any? or raise "#{template_directory}: must have at least one color"

  variables["kubernetes_cluster_type"] = @kubernetes_cluster_type

  @regions.each do |plain_region|
    default_region_vars(plain_region)

    @colors.each do |c|
      variables["color"] = c
      output_directory = File.join(@rendered_directory, format(@target_output_directory, plain_region: plain_region, color: c, type: @kubernetes_cluster_type))
      render_create_directory(args, output_directory)
    end
  end
end

#render_create_directory(args, output_directory) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/kubernetes_template_rendering/resource_set.rb', line 97

def render_create_directory(args, output_directory)
  prune_directory(output_directory) if args.prune?
  create_directory(output_directory)
  puts "Rendering templates to: #{Color.magenta(output_directory)}"
  puts "Variable assignments:"
  variables.each { |k, v| puts "\t#{Color.magenta(k)}=#{Color.blue(v)}" }
  puts
  if omitted_resources
    puts "Omitted resources:"
    omitted_resources.each { |ot| puts "\t#{ot}" }
  end
  puts
  resources(output_directory).each do |resource|
    resource.render(args)
  end
  expand_placeholders(args, output_directory)
  puts
end