kustomizer 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 961ff655cafb23672a01fae7147f08a28d4198a59f72a07c092cfd8907acb98f
4
- data.tar.gz: fdafe50e353de94b2105fa754a31ff6a40b347585f1d0359924410581ffa7b58
3
+ metadata.gz: 68396a12fb43e0ef4405296a562b431f8e4c45403b00b11043899045c2637729
4
+ data.tar.gz: 48ee78953be0b1876e3176b8b7ddf1eb0f064dfc7ca29f24d3a23fb747ff521f
5
5
  SHA512:
6
- metadata.gz: 60136761417e2ddcdeef7af0e1fb8898ba1cdb95b62e638e0355fba04af252c9b14fce85801f924109ebbae4be01f19e83a3b9795dbb29a9ea49303e71f62bfa
7
- data.tar.gz: 1bce76a9ccb5549dc71e3bf1acb0a8c26f0ded8c0a785332f6d72c77d81fffc71ec9629fa593462312fe67bee80ffb19c5b78d792b5e6e3b3f02b0e39d805e93
6
+ metadata.gz: 87a0e6cc3c175393548e44b120a6d14a65aa894589b0551fbc56bb550b04e3fdd77902c86b6523abc7187f9a6af3f629ec4a1b69367413b9b61b5516ff7d0d42
7
+ data.tar.gz: 38323824b787ff945a22c46b2630db09af3ea667d83fce738ef96e0723b6445f6451f90b8b9205583f8c12651be76e9d8cb7df31b7be1baef054da513e5175cb
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kustomizer (0.1.1)
4
+ kustomizer (0.1.2)
5
5
  accessory (~> 0.1.9)
6
6
  base32-multi
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- accessory (0.1.9)
11
+ accessory (0.1.10)
12
12
  base32-multi (0.1.1)
13
13
  diff-lcs (1.4.4)
14
14
  rake (13.0.3)
@@ -35,4 +35,4 @@ DEPENDENCIES
35
35
  rspec (~> 3.0)
36
36
 
37
37
  BUNDLED WITH
38
- 2.2.5
38
+ 2.2.6
@@ -0,0 +1,15 @@
1
+ require 'kustomize/generator_plugin'
2
+
3
+ module CovalentKustomizer; end
4
+
5
+ class CovalentKustomizer::TestGenerator < Kustomize::GeneratorPlugin
6
+ match_on api_version: 'kustomizer.covalenthq.com/v1'
7
+
8
+ def initialize(rc)
9
+ @docs = rc['emit'] || []
10
+ end
11
+
12
+ def emit
13
+ @docs
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'kustomize/transformer_plugin'
2
+
3
+ module CovalentKustomizer; end
4
+
5
+ class CovalentKustomizer::TestTransformer < Kustomize::TransformerPlugin
6
+ match_on api_version: 'kustomizer.covalenthq.com/v1'
7
+
8
+ def initialize(rc)
9
+ @insertions = rc['insert'] || {}
10
+ end
11
+
12
+ def rewrite(rc)
13
+ rc.merge(@insertions)
14
+ end
15
+ end
@@ -14,4 +14,8 @@ class Kustomize::Emitter
14
14
  def to_yaml_stream
15
15
  self.emit.map(&:to_yaml).join("")
16
16
  end
17
+
18
+ def inspect
19
+ "#<#{self.class}>"
20
+ end
17
21
  end
@@ -1,12 +1,15 @@
1
1
  require 'kustomize/emitter/document_emitter'
2
2
  require 'kustomize/emitter/file_emitter'
3
3
  require 'kustomize/emitter/directory_emitter'
4
- require 'kustomize/emitter/plugin_emitter'
4
+ require 'kustomize/emitter/generator_plugins_emitter'
5
5
 
6
6
  require 'kustomize/transform/json_6902_patch_transform'
7
7
  require 'kustomize/transform/image_transform'
8
8
  require 'kustomize/transform/namespace_transform'
9
- require 'kustomize/transform/name_digest_autosuffix_transform'
9
+ require 'kustomize/transform/fingerprint_suffix_transform'
10
+ require 'kustomize/transform/ref_fixup_transform'
11
+ require 'kustomize/transform/purge_internal_annotations_transform'
12
+ require 'kustomize/transform/transformer_plugins_transform'
10
13
 
11
14
  class Kustomize::Emitter::DocumentEmitter::KustomizationDocumentEmitter < Kustomize::Emitter::DocumentEmitter
12
15
  def source_directory
@@ -20,18 +23,24 @@ class Kustomize::Emitter::DocumentEmitter::KustomizationDocumentEmitter < Kustom
20
23
  (@doc['bases'] || []) +
21
24
  (@doc['resources'] || [])
22
25
 
23
- gen_pathspecs =
26
+ gen_plugin_pathspecs =
24
27
  (@doc['generators'] || [])
25
28
 
26
29
  input_emitters = rc_pathspecs.map do |rel_path|
27
30
  build_input_emitter(rel_path)
28
31
  end
29
32
 
30
- input_emitters += gen_pathspecs.map do |rel_path|
31
- Kustomize::Emitter::PluginEmitter.new(
32
- build_input_emitter(rel_path),
33
+ gen_plugin_rc_emitters = gen_plugin_pathspecs.map do |rel_path|
34
+ build_input_emitter(rel_path)
35
+ end
36
+
37
+ unless gen_plugin_rc_emitters.empty?
38
+ gen_plugins_emitter = Kustomize::Emitter::GeneratorPluginsEmitter.new(
39
+ gen_plugin_rc_emitters,
33
40
  session: @session
34
41
  )
42
+
43
+ input_emitters.push(gen_plugins_emitter)
35
44
  end
36
45
 
37
46
  @input_emitters = input_emitters
@@ -66,6 +75,24 @@ class Kustomize::Emitter::DocumentEmitter::KustomizationDocumentEmitter < Kustom
66
75
  end
67
76
  end
68
77
 
78
+ def transformer_plugin_transforms
79
+ xformer_plugin_rc_emitters =
80
+ (@doc['transformers'] || []).map do |rel_path|
81
+ build_input_emitter(rel_path)
82
+ end
83
+
84
+ if xformer_plugin_rc_emitters.length > 0
85
+ xform = Kustomize::Transform::TransformerPluginsTransform.create(
86
+ xformer_plugin_rc_emitters,
87
+ session: @session
88
+ )
89
+
90
+ [xform]
91
+ else
92
+ []
93
+ end
94
+ end
95
+
69
96
  def namespace_transforms
70
97
  if new_ns = @doc['namespace']
71
98
  [Kustomize::Transform::NamespaceTransform.create(new_ns)]
@@ -74,24 +101,23 @@ class Kustomize::Emitter::DocumentEmitter::KustomizationDocumentEmitter < Kustom
74
101
  end
75
102
  end
76
103
 
77
- def name_digest_autosuffix_transforms
78
- [Kustomize::Transform::NameDigestAutosuffixTransform.create(self)]
79
- end
80
-
81
104
  def transforms
82
105
  return @transforms if @transforms
83
106
 
84
107
  @transforms = [
85
108
  self.namespace_transforms,
86
109
  self.image_transforms,
87
- self.name_digest_autosuffix_transforms,
88
- self.json_6902_patch_transforms
110
+ Kustomize::Transform::FingerprintSuffixTransform.instance,
111
+ self.json_6902_patch_transforms,
112
+ self.transformer_plugin_transforms,
113
+ Kustomize::Transform::RefFixupTransform.instance,
114
+ Kustomize::Transform::PurgeInternalAnnotationsTransform.instance
89
115
  ].flatten
90
116
  end
91
117
 
92
118
  def emit
93
- self.input_resources.map do |rc|
94
- self.transforms.inject(rc){ |doc, xform| xform.apply(doc) }
119
+ self.transforms.inject(self.input_resources) do |rcs, xform|
120
+ xform.rewrite_all(rcs)
95
121
  end
96
122
  end
97
123
  end
@@ -0,0 +1,26 @@
1
+ require 'kustomize/emitter'
2
+
3
+ class Kustomize::Emitter::GeneratorPluginsEmitter < Kustomize::Emitter
4
+ def initialize(plugin_rc_emitters, session:)
5
+ @session = session
6
+ @plugin_rc_emitters = plugin_rc_emitters
7
+ end
8
+
9
+ def plugin_rcs
10
+ @plugin_rc_emitters.flat_map(&:emit)
11
+ end
12
+
13
+ def plugin_instances
14
+ return @plugin_instances if @plugin_instances
15
+
16
+ @plugin_instances =
17
+ self.plugin_rcs.map do |rc|
18
+ plugin_klass = @session.plugin_manager.get(api_version: rc['apiVersion'], kind: rc['kind'])
19
+ plugin_klass.create(rc, session: @session)
20
+ end
21
+ end
22
+
23
+ def emit
24
+ self.plugin_instances.flat_map(&:emit)
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require 'kustomize/plugin'
2
+
3
+ class Kustomize::GeneratorPlugin < Kustomize::Plugin
4
+ def self.inherited(subklass)
5
+ reg = Kustomize::PluginRegistry.instance
6
+ reg.probe_queue.push(subklass)
7
+ end
8
+
9
+ def emit
10
+ []
11
+ end
12
+
13
+ def to_yaml_stream
14
+ self.emit.map(&:to_yaml).join("")
15
+ end
16
+ end
@@ -1,11 +1,36 @@
1
- module Kustomize; end
1
+ require 'pathname'
2
2
 
3
3
  class Kustomize::Plugin
4
- def initialize(rc)
5
- @rc = rc
4
+ def self.create(rc, session:)
5
+ inst = new(rc)
6
+ inst.session = session
7
+ inst
6
8
  end
7
9
 
8
- def emit
9
- raise NotImplementedError, "Kustomize plugins must implement #emit"
10
+ class << self
11
+ private :new
12
+ end
13
+
14
+ attr_accessor :session
15
+
16
+ def self.match_on(kind: nil, api_version: nil)
17
+ if kind
18
+ @kustomize_plugin_match_kind = kind
19
+ end
20
+
21
+ if api_version
22
+ @kustomize_plugin_match_api_version = api_version
23
+ end
24
+ end
25
+
26
+ def self.kustomize_plugin_match_kind
27
+ return @kustomize_plugin_match_kind if @kustomize_plugin_match_kind
28
+ self.name.split('::').last
29
+ end
30
+
31
+ def self.kustomize_plugin_match_api_version
32
+ return @kustomize_plugin_match_api_version if @kustomize_plugin_match_api_version
33
+ api_dir = Pathname.new(__FILE__).parent
34
+ api_dir.relative_path_from(api_dir.parent.parent).to_s
10
35
  end
11
36
  end
@@ -1,31 +1,46 @@
1
- require 'kustomize/plugin'
1
+ require 'singleton'
2
+
3
+ require 'kustomize/plugin_registry'
2
4
 
3
5
  class Kustomize::PluginManager
4
6
  def initialize(session:)
5
7
  @session = session
6
- @instances = {}
8
+ @registry = Kustomize::PluginRegistry.instance
7
9
  end
8
10
 
9
- def get(api_version, kind)
10
- cache_key = [api_version, kind]
11
- cached_inst = @instances[cache_key]
12
- return cached_inst if cached_inst
11
+ def get(api_version:, kind:)
12
+ plugin_klass = @registry.get(api_version: api_version, kind: kind)
13
+ return plugin_klass if plugin_klass
13
14
 
14
- @instances[cache_key] = self.load(api_version, kind)
15
+ try_loading(api_version, kind)
15
16
  end
16
17
 
17
- def load(api_version, kind)
18
- @session.load_paths
19
- .each{ |prefix| puts(prefix / api_version / "#{kind.downcase}.rb") }
18
+ private
19
+ def try_loading(api_version, kind)
20
+ rel_load_path = Pathname.new(api_version) / "#{underscore(kind)}.rb"
20
21
 
21
- load_path =
22
- @session.load_paths
23
- .map{ |prefix| prefix / api_version / "#{kind.downcase}.rb" }
22
+ abs_load_path =
23
+ @session.effective_load_paths
24
+ .map{ |prefix| prefix / rel_load_path }
24
25
  .find{ |f| f.file? }
25
26
 
26
- raise ArgumentError, "unknown kustomize plugin #{kind}" unless load_path
27
+ raise LoadError, "could not find kustomize plugin to load" unless abs_load_path
28
+
29
+ Kernel.require(abs_load_path)
30
+
31
+ plugin_klass = @registry.get(api_version: api_version, kind: kind)
32
+
33
+ raise LoadError, "#{abs_load_path} did not define expected plugin" unless plugin_klass
34
+
35
+ plugin_klass
36
+ end
27
37
 
28
- Class.new(Kustomize::Plugin)
29
- .tap{ |klass| klass.class_eval(load_path.read) }
38
+ private
39
+ def underscore(str)
40
+ str
41
+ .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
42
+ .gsub(/([a-z\d])([A-Z])/,'\1_\2')
43
+ .tr("-", "_")
44
+ .downcase
30
45
  end
31
46
  end
@@ -0,0 +1,39 @@
1
+ require 'singleton'
2
+
3
+ module Kustomize; end
4
+
5
+ class Kustomize::PluginRegistry
6
+ include Singleton
7
+
8
+ def initialize
9
+ @klasses = {}
10
+ @probe_queue = []
11
+ end
12
+
13
+ attr_reader :probe_queue
14
+
15
+ def get(api_version:, kind:)
16
+ drain_probe_queue!
17
+
18
+ rc_target_id = make_rc_target_id(api_version, kind)
19
+ @klasses[rc_target_id]
20
+ end
21
+
22
+ private
23
+ def drain_probe_queue!
24
+ return if @probe_queue.empty?
25
+
26
+ while plugin_klass = @probe_queue.shift
27
+ rc_target_id = make_rc_target_id(
28
+ plugin_klass.kustomize_plugin_match_api_version,
29
+ plugin_klass.kustomize_plugin_match_kind
30
+ )
31
+ @klasses[rc_target_id] = plugin_klass
32
+ end
33
+ end
34
+
35
+ private
36
+ def make_rc_target_id(api_version, kind)
37
+ [api_version, kind].join('/').to_s.intern
38
+ end
39
+ end
@@ -3,15 +3,18 @@ module Kustomize; end
3
3
  require 'kustomize/plugin_manager'
4
4
 
5
5
  class Kustomize::Session
6
- def plugin_manager
7
- return @plugin_manager if @plugin_manager
6
+ def initialize(load_paths: [])
7
+ @load_paths = load_paths
8
8
  @plugin_manager = Kustomize::PluginManager.new(session: self)
9
9
  end
10
10
 
11
- def load_paths
12
- return @load_paths if @load_paths
13
- @load_paths = [
14
- Pathname.new(__FILE__).expand_path.parent / 'plugin'
15
- ]
11
+ attr_reader :plugin_manager
12
+
13
+ def builtin_load_paths
14
+ [Pathname.new(__FILE__).expand_path.parent / 'builtin_plugins']
15
+ end
16
+
17
+ def effective_load_paths
18
+ @load_paths + self.builtin_load_paths
16
19
  end
17
20
  end
@@ -9,7 +9,15 @@ class Kustomize::Transform
9
9
  private :new
10
10
  end
11
11
 
12
- def apply(rc)
12
+ def rewrite_all(rcs)
13
+ rcs.map{ |rc| rewrite(rc) }
14
+ end
15
+
16
+ def rewrite(rc)
13
17
  rc
14
18
  end
19
+
20
+ def inspect
21
+ "#<#{self.class}>"
22
+ end
15
23
  end
@@ -0,0 +1,57 @@
1
+ require 'json'
2
+ require 'digest'
3
+ require 'set'
4
+ require 'singleton'
5
+
6
+ require 'accessory'
7
+ require 'digest/base32'
8
+
9
+ require 'kustomize/transform'
10
+
11
+ class Kustomize::Transform::FingerprintSuffixTransform < Kustomize::Transform
12
+ include Accessory
13
+ include Singleton
14
+
15
+ SUFFIX_JOINER = "-"
16
+
17
+ APPLICABLE_KINDS = Set[
18
+ 'Secret',
19
+ 'SealedSecret',
20
+ 'ConfigMap'
21
+ ]
22
+
23
+ NAME_LENS = Lens["metadata", "name"]
24
+
25
+ CONTENT_LENS_BY_KIND = {
26
+ "Secret" => Lens["data"],
27
+ "ConfigMap" => Lens["data"],
28
+ "SealedSecret" => Lens["spec", "encryptedData"]
29
+ }
30
+
31
+ FINGERPRINT_LENS = Lens['metadata', 'annotations', 'kustomizer.covalenthq.com/effective-fingerprint']
32
+
33
+ def rewrite(rc)
34
+ rc_kind = rc['kind']
35
+ return rc unless APPLICABLE_KINDS.member?(rc_kind)
36
+
37
+ FINGERPRINT_LENS.update_in(rc) do |orig_value|
38
+ next(:keep) if orig_value
39
+
40
+ content_part = CONTENT_LENS_BY_KIND[rc_kind].get_in(rc)
41
+ content_ser = content_part.to_json
42
+ fingerprint = Digest::SHA256.base32digest(content_ser, :zbase32)[0, 6]
43
+
44
+ [:set, fingerprint]
45
+ end
46
+
47
+ base_name = NAME_LENS.get_in(rc)
48
+ fingerprint = FINGERPRINT_LENS.get_in(rc)
49
+
50
+ NAME_LENS.update_in(rc) do |base_name|
51
+ suffixed_name = [base_name, fingerprint].join(SUFFIX_JOINER)
52
+ [:set, suffixed_name]
53
+ end
54
+
55
+ rc
56
+ end
57
+ end
@@ -27,7 +27,7 @@ class Kustomize::Transform::ImageTransform < Kustomize::Transform
27
27
  "Deployment" => Lens["spec", "template", "spec", "containers", Access.all, "image"]
28
28
  }
29
29
 
30
- def apply(rc_doc)
30
+ def rewrite(rc_doc)
31
31
  lens = LENS_BY_KIND[rc_doc['kind']]
32
32
  return rc_doc unless lens
33
33
 
@@ -44,7 +44,7 @@ class Kustomize::Transform::Json6902PatchTransform < Kustomize::Transform
44
44
  attr_reader :target
45
45
  attr_reader :patches
46
46
 
47
- def apply(resource_doc)
47
+ def rewrite(resource_doc)
48
48
  if @target.match?(resource_doc)
49
49
  @patches.inject(resource_doc){ |doc, patch| patch.apply(doc) }
50
50
  else
@@ -29,7 +29,7 @@ class Kustomize::Transform::NamespaceTransform < Kustomize::Transform
29
29
  ]
30
30
  }
31
31
 
32
- def apply(rc_doc)
32
+ def rewrite(rc_doc)
33
33
  rc_kind = rc_doc['kind']
34
34
  use_lenses = []
35
35
 
@@ -0,0 +1,31 @@
1
+ require 'singleton'
2
+
3
+ require 'accessory'
4
+
5
+ require 'kustomize/transform'
6
+
7
+ class Kustomize::Transform::PurgeInternalAnnotationsTransform < Kustomize::Transform
8
+ include Accessory
9
+ include Singleton
10
+
11
+ ANNOTS_LENS = Lens['metadata', 'annotations']
12
+
13
+ INTERNAL_ANNOT_PATTERN = /^kustomizer\.covalenthq\.com\//
14
+
15
+ def rewrite(rc)
16
+ ANNOTS_LENS.update_in(rc) do |orig_annots|
17
+ next(:keep) unless orig_annots and orig_annots.length.nonzero?
18
+
19
+ new_annots =
20
+ orig_annots.reject{ |k, v| INTERNAL_ANNOT_PATTERN.match?(k) }
21
+
22
+ if new_annots.length == orig_annots.length
23
+ :keep
24
+ elsif new_annots.empty?
25
+ :pop
26
+ else
27
+ [:set, new_annots]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,55 @@
1
+ require 'singleton'
2
+
3
+ require 'accessory'
4
+
5
+ require 'kustomize/transform'
6
+
7
+ class Kustomize::Transform::RefFixupTransform < Kustomize::Transform
8
+ include Accessory
9
+ include Singleton
10
+
11
+ SUFFIX_JOINER = "-"
12
+
13
+ NAME_LENS = Lens["metadata", "name"]
14
+
15
+ FINGERPRINT_LENS = Lens['metadata', 'annotations', 'kustomizer.covalenthq.com/effective-fingerprint']
16
+
17
+ KEY_REF_LENSES_BY_KIND = {
18
+ "Deployment" => [
19
+ Lens["spec", "template", "spec", "containers", Access.all, "envFrom", Access.all, "configMapRef", "name"],
20
+ Lens["spec", "template", "spec", "containers", Access.all, "env", Access.all, "valueFrom", "configMapKeyRef", "name"],
21
+ Lens["spec", "template", "spec", "volumes", Access.all, "configMap", "name"],
22
+
23
+ Lens["spec", "template", "spec", "containers", Access.all, "env", Access.all, "valueFrom", "secretKeyRef", "name"],
24
+ Lens["spec", "template", "spec", "volumes", Access.all, "secret", "name"],
25
+ Lens["spec", "template", "spec", "volumes", Access.all, "secret", "secretName"]
26
+ ]
27
+ }
28
+
29
+ def rewrite_all(rcs)
30
+ ref_fixups =
31
+ rcs.flat_map do |rc|
32
+ fingerprint = FINGERPRINT_LENS.get_in(rc)
33
+ next([]) unless fingerprint
34
+
35
+ suffixed_name = NAME_LENS.get_in(rc)
36
+ base_name = suffixed_name.gsub(/-#{fingerprint}$/, '')
37
+ [[base_name, suffixed_name]]
38
+ end.to_h
39
+
40
+ rcs.map do |rc|
41
+ key_ref_lenses = KEY_REF_LENSES_BY_KIND[rc['kind']]
42
+ next(rc) unless key_ref_lenses
43
+
44
+ key_ref_lenses.inject(rc) do |doc, lens|
45
+ lens.update_in(doc) do |base_name|
46
+ if suffixed_name = ref_fixups[base_name]
47
+ [:set, suffixed_name]
48
+ else
49
+ :keep
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ require 'kustomize/transform'
2
+
3
+ class Kustomize::Transform::TransformerPluginsTransform < Kustomize::Transform
4
+ def initialize(plugin_rc_emitters, session:)
5
+ @session = session
6
+ @plugin_rc_emitters = plugin_rc_emitters
7
+ end
8
+
9
+ def plugin_rcs
10
+ @plugin_rc_emitters.flat_map(&:emit)
11
+ end
12
+
13
+ def plugin_instances
14
+ return @plugin_instances if @plugin_instances
15
+
16
+ @plugin_instances =
17
+ self.plugin_rcs.map do |rc|
18
+ plugin_klass = @session.plugin_manager.get(api_version: rc['apiVersion'], kind: rc['kind'])
19
+ plugin_klass.create(rc, session: @session)
20
+ end
21
+ end
22
+
23
+ def rewrite_all(rcs)
24
+ self.plugin_instances.inject(rcs) do |docs, plugin_inst|
25
+ plugin_inst.rewrite_all(rcs)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ require 'kustomize/plugin'
2
+
3
+ class Kustomize::TransformerPlugin < Kustomize::Plugin
4
+ def self.inherited(subklass)
5
+ reg = Kustomize::PluginRegistry.instance
6
+ reg.probe_queue.push(subklass)
7
+ end
8
+
9
+ def rewrite_all(rcs)
10
+ rcs.map{ |rc| rewrite(rc) }
11
+ end
12
+
13
+ def rewrite(rc)
14
+ rc
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Kustomize
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kustomizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Levi Aul
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-16 00:00:00.000000000 Z
11
+ date: 2021-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: accessory
@@ -56,12 +56,15 @@ files:
56
56
  - bin/setup
57
57
  - kustomizer.gemspec
58
58
  - lib/kustomize.rb
59
+ - lib/kustomize/builtin_plugins/kustomizer.covalenthq.com/v1/test_generator.rb
60
+ - lib/kustomize/builtin_plugins/kustomizer.covalenthq.com/v1/test_transformer.rb
59
61
  - lib/kustomize/emitter.rb
60
62
  - lib/kustomize/emitter/directory_emitter.rb
61
63
  - lib/kustomize/emitter/document_emitter.rb
62
64
  - lib/kustomize/emitter/document_emitter/kustomization_document_emitter.rb
63
65
  - lib/kustomize/emitter/file_emitter.rb
64
- - lib/kustomize/emitter/plugin_emitter.rb
66
+ - lib/kustomize/emitter/generator_plugins_emitter.rb
67
+ - lib/kustomize/generator_plugin.rb
65
68
  - lib/kustomize/json_6902_patch.rb
66
69
  - lib/kustomize/json_6902_patch/add_op.rb
67
70
  - lib/kustomize/json_6902_patch/gsub_op.rb
@@ -70,13 +73,18 @@ files:
70
73
  - lib/kustomize/pathname_refinements.rb
71
74
  - lib/kustomize/plugin.rb
72
75
  - lib/kustomize/plugin_manager.rb
76
+ - lib/kustomize/plugin_registry.rb
73
77
  - lib/kustomize/session.rb
74
78
  - lib/kustomize/target_spec.rb
75
79
  - lib/kustomize/transform.rb
80
+ - lib/kustomize/transform/fingerprint_suffix_transform.rb
76
81
  - lib/kustomize/transform/image_transform.rb
77
82
  - lib/kustomize/transform/json_6902_patch_transform.rb
78
- - lib/kustomize/transform/name_digest_autosuffix_transform.rb
79
83
  - lib/kustomize/transform/namespace_transform.rb
84
+ - lib/kustomize/transform/purge_internal_annotations_transform.rb
85
+ - lib/kustomize/transform/ref_fixup_transform.rb
86
+ - lib/kustomize/transform/transformer_plugins_transform.rb
87
+ - lib/kustomize/transformer_plugin.rb
80
88
  - lib/kustomize/version.rb
81
89
  homepage: https://github.com/tsutsu/kustomize
82
90
  licenses:
@@ -1,30 +0,0 @@
1
- require 'kustomize/emitter'
2
-
3
- class Kustomize::Emitter::PluginEmitter < Kustomize::Emitter
4
- def initialize(input_emitter, session:)
5
- @session = session
6
- @input_emitter = input_emitter
7
- end
8
-
9
- def source_directory
10
- @source_path.parent
11
- end
12
-
13
- def input_emitters
14
- [@input_emitter]
15
- end
16
-
17
- def plugin_instances
18
- return @plugin_instances if @plugin_instances
19
-
20
- @plugin_instances =
21
- self.input_resources.map do |rc|
22
- plugin_klass = @session.plugin_manager.get(rc['apiVersion'], rc['kind'])
23
- plugin_klass.new(rc)
24
- end
25
- end
26
-
27
- def emit
28
- self.plugin_instances.flat_map(&:emit)
29
- end
30
- end
@@ -1,83 +0,0 @@
1
- require 'json'
2
- require 'digest'
3
- require 'set'
4
-
5
- require 'accessory'
6
- require 'digest/base32'
7
-
8
- require 'kustomize/transform'
9
- require 'kustomize/emitter/document_emitter/kustomization_document_emitter'
10
-
11
- class Kustomize::Transform::NameDigestAutosuffixTransform < Kustomize::Transform
12
- include Accessory
13
-
14
- SUFFIX_JOINER = "-"
15
-
16
- def self.create(kustomize_doc)
17
- raise ArgumentError unless kustomize_doc.kind_of?(Kustomize::Emitter::DocumentEmitter::KustomizationDocumentEmitter)
18
- self.new(kustomize_doc)
19
- end
20
-
21
- def initialize(kustomize_doc)
22
- @kustomize_doc = kustomize_doc
23
- end
24
-
25
- SECRET_KINDS = Set[
26
- 'Secret',
27
- 'SealedSecret'
28
- ]
29
-
30
- def suffixes
31
- return @suffixes if @suffixes
32
-
33
- secret_docs =
34
- @kustomize_doc.input_resources
35
- .filter{ |rc| SECRET_KINDS.member?(rc['kind']) }
36
-
37
- @suffixes =
38
- secret_docs.map do |rc|
39
- rc_kind = rc['kind']
40
-
41
- secret_name = NAME_LENSES_BY_KIND[rc_kind].first.get_in(rc)
42
- secret_content = CONTENT_LENSES_BY_KIND[rc_kind].get_in(rc)
43
- content_hash_suffix = Digest::SHA256.base32digest(secret_content.to_json, :zbase32)[0, 8]
44
-
45
- [secret_name, content_hash_suffix]
46
- end.to_h
47
- end
48
-
49
- CONTENT_LENSES_BY_KIND = {
50
- "Secret" => Lens["data"],
51
- "SealedSecret" => Lens["spec", "encryptedData"]
52
- }
53
-
54
- NAME_LENSES_BY_KIND = {
55
- "Deployment" => [
56
- Lens["spec", "template", "spec", "containers", Access.all, "env", Access.all, "valueFrom", "secretKeyRef", "name"]
57
- ],
58
-
59
- "Secret" => [
60
- Lens["metadata", "name"]
61
- ],
62
-
63
- "SealedSecret" => [
64
- Lens["spec", "template", "metadata", "name"]
65
- ]
66
- }
67
-
68
- def apply(rc_doc)
69
- name_lenses = NAME_LENSES_BY_KIND[rc_doc['kind']]
70
- return rc_doc unless name_lenses
71
-
72
- name_lenses.inject(rc_doc) do |doc, lens|
73
- lens.update_in(doc) do |orig_name|
74
- if self.suffixes.has_key?(orig_name)
75
- new_name = [orig_name, self.suffixes[orig_name]].join('-')
76
- [:set, new_name]
77
- else
78
- :keep
79
- end
80
- end
81
- end
82
- end
83
- end