Class: KubernetesTemplateRendering::Reconciler

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

Overview

Bounded, marker-based reconcile sweep replacing the destructive per-entry rm -rf prune.

Lifecycle (driven by TemplateDirectoryRenderer):

1. Construct (touches a marker file; its mtime is the cutoff) BEFORE any rendering/forking.
2. Render writes files (mtime > marker); PlaceholderExpander copies preserve a just-rendered
 source mtime (also > marker).
3. After all rendering, `sweep!` each scope root: delete files strictly older than the marker
 (leftovers from deleted/renamed entries), then remove now-empty directories.

spp/ subtrees are fenced out of the base sweep; per the ticket, deleted-SPP cleanup is a manual git rm, never an automatic sweep.

Defined Under Namespace

Classes: OutOfScopeError, SppLayoutError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rendered_directory) ⇒ Reconciler

Returns a new instance of Reconciler.



26
27
28
29
30
31
# File 'lib/kubernetes_template_rendering/reconciler.rb', line 26

def initialize(rendered_directory)
  FileUtils.mkdir_p(rendered_directory)
  @marker = Tempfile.new(".reconcile-marker", rendered_directory)
  @marker.close
  @marker_mtime = File.mtime(@marker.path)
end

Instance Attribute Details

#marker_mtimeObject (readonly)

Returns the value of attribute marker_mtime.



24
25
26
# File 'lib/kubernetes_template_rendering/reconciler.rb', line 24

def marker_mtime
  @marker_mtime
end

Instance Method Details

#finish!Object



43
44
45
# File 'lib/kubernetes_template_rendering/reconciler.rb', line 43

def finish!
  @marker.unlink
end

#sweep!(root:, fences: []) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/kubernetes_template_rendering/reconciler.rb', line 33

def sweep!(root:, fences: [])
  return unless File.directory?(root)

  real_root = File.realpath(root)
  fence_set = fences.select { |fence| File.exist?(fence) }.map { |fence| File.realpath(fence) }

  delete_stale_files(root, real_root, fence_set)
  remove_empty_dirs(root, fence_set)
end