Class: KubernetesTemplateRendering::Reconciler
- Inherits:
-
Object
- Object
- KubernetesTemplateRendering::Reconciler
- 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
-
#marker_mtime ⇒ Object
readonly
Returns the value of attribute marker_mtime.
Instance Method Summary collapse
- #finish! ⇒ Object
-
#initialize(rendered_directory) ⇒ Reconciler
constructor
A new instance of Reconciler.
- #sweep!(root:, fences: []) ⇒ Object
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_mtime ⇒ Object (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 |