Class: KubernetesTemplateRendering::TemplateDirectoryRenderer

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

Constant Summary collapse

DEFINITIONS_FILENAME =
"definitions.yaml"
SPP_FENCE_DIRNAME =
"spp"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(directories:, rendered_directory:, omitted_names: [], cluster_type: nil, region: nil, color: nil, variable_overrides: nil, source_repo: nil, spps: [], only: []) ⇒ TemplateDirectoryRenderer

Returns a new instance of TemplateDirectoryRenderer.



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 22

def initialize(directories:, rendered_directory:, omitted_names: [], cluster_type: nil, region: nil, color: nil,
               variable_overrides: nil, source_repo: nil, spps: [], only: [])
  @directories        = directories_with_definitions(Array(directories))
  @omitted_names      = Array(omitted_names)
  @rendered_directory = rendered_directory
  @cluster_type       = cluster_type
  @region             = region
  @color              = color
  @variable_overrides = variable_overrides || {}
  @source_repo        = source_repo
  @spps               = Array(spps)
  @only               = Array(only)
end

Instance Attribute Details

#cluster_typeObject (readonly)

Returns the value of attribute cluster_type.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def cluster_type
  @cluster_type
end

#colorObject (readonly)

Returns the value of attribute color.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def color
  @color
end

#directoriesObject (readonly)

Returns the value of attribute directories.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def directories
  @directories
end

#omitted_namesObject (readonly)

Returns the value of attribute omitted_names.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def omitted_names
  @omitted_names
end

#onlyObject (readonly)

Returns the value of attribute only.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def only
  @only
end

#regionObject (readonly)

Returns the value of attribute region.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def region
  @region
end

#rendered_directoryObject (readonly)

Returns the value of attribute rendered_directory.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def rendered_directory
  @rendered_directory
end

#source_repoObject (readonly)

Returns the value of attribute source_repo.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def source_repo
  @source_repo
end

#sppsObject (readonly)

Returns the value of attribute spps.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def spps
  @spps
end

#variable_overridesObject (readonly)

Returns the value of attribute variable_overrides.



19
20
21
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 19

def variable_overrides
  @variable_overrides
end

Instance Method Details

#render(args) ⇒ Object



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
# File 'lib/kubernetes_template_rendering/template_directory_renderer.rb', line 36

def render(args)
  if args.reconcile?
    sweep_scopes = collect_reconcile_scopes # validates out-of-prefix before any writes
    reconciler   = Reconciler.new(@rendered_directory) # marker captured before rendering/forking
  end

  child_pids = []
  failed_processes = [] # [[pid, status]]

  resource_sets.each do |name, resource_sets|
    puts "Rendering templates for definition #{Color.red(name)}..."
    resource_sets.each do |resource_set|
      if args.fork?
        if (pid = Process.fork)
          # this is the parent
          child_pids << pid
          wait_if_max_forked(child_pids, failed_processes)
        else
          # this is the child
          render_set(args, resource_set)
          Kernel.exit!(0) # skip at_exit handlers since parent will run those
        end
      else
        render_set(args, resource_set)
      end
    end
  end

  if args.fork?
    Process.waitall.each do |pid, status|
      status.success? or failed_processes << [pid, status]
    end

    if failed_processes.any?
      raise "Child process completed with non-zero status: #{failed_processes.inspect}"
    end
  end

  reconcile_sweep(reconciler, sweep_scopes) if args.reconcile?
end