kube_cluster 0.8.0 → 0.9.0

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: 28348c8c7bfb6bb1e1340efeba20451d4b29c11a8e75454e87d805e3b6c4b36f
4
- data.tar.gz: c1aa1ee8775553e15026dce80414949bd57da1371dac6bda72766aeba117db1f
3
+ metadata.gz: '09a4ece33b5d85dc6b05a89a322f2dcb5521b9ff50794b83b1d9603cc933b96b'
4
+ data.tar.gz: 97e408aca7876972b6c15f83b96c8889df81e7d86af98c7586c00ebbcdad9ad3
5
5
  SHA512:
6
- metadata.gz: 48d13d3cd9b6578d44d2007392f89d3c1a3ab0838e1fcde8825d86b1e8cfe263f538ff3b5f92bf70155273c4e58bc68d2d7212c75a6c16a3bf1c06c56c0d91d8
7
- data.tar.gz: 8cba24053f71e5f4d9efd117c7a477b00b5cdba21b57f6a2afa88a53f632e93f26791d532bdde06d8842477d3e40b15a0c9434b4a50245bc94a3db357ffbab72
6
+ metadata.gz: 1a86af7b79ec182074ee9ec96eefbe15a30abbfce3d4bbfce60290fc0e6fee81de0bf4d665b7851cd24ae8701e3b29149776883ea8e81cd1f2fd1fc7bd61e228
7
+ data.tar.gz: 6ccb1f6c68c6f91b8d261f8babb3244d476d73f60e8bbe992e50215f22d165950dc8afd730c5f2a95a11905f482f82c5f3ba32b0fd6e1ffabbd565e91501ed92
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kube_cluster (0.8.0)
4
+ kube_cluster (0.9.0)
5
5
  activesupport (~> 8.0)
6
6
  kube_kubectl (~> 2.0)
7
7
  kube_schema (~> 1.5)
@@ -28,7 +28,7 @@ manifest = Kube::Cluster::Manifest.new(
28
28
  )
29
29
 
30
30
  stack = Kube::Cluster::Middleware::Stack.new do
31
- use Middleware::Namespace
31
+ use Middleware::SetNamespace
32
32
  use Middleware::Labels
33
33
  end
34
34
 
@@ -24,7 +24,7 @@ Kube::Cluster::Middleware::Stack.new {
24
24
  use Middleware::ServiceForDeployment
25
25
  use Middleware::IngressForService
26
26
  use Middleware::HPAForDeployment
27
- use Middleware::Namespace, "production"
27
+ use Middleware::SetNamespace, "production"
28
28
  use Middleware::Labels, managed_by: "kube_cluster"
29
29
  use Middleware::ResourcePreset
30
30
  use Middleware::SecurityContext
@@ -14,7 +14,7 @@ module Kube
14
14
  # manifest << Kube::Cluster["Deployment"].new { ... }
15
15
  #
16
16
  # stack = Kube::Cluster::Middleware::Stack.new do
17
- # use Middleware::Namespace, "production"
17
+ # use Middleware::SetNamespace, "production"
18
18
  # use Middleware::Labels, app: "web-app"
19
19
  # end
20
20
  #
@@ -77,7 +77,7 @@ test do
77
77
  }
78
78
 
79
79
  stack = Middleware::Stack.new do
80
- use Middleware::Namespace, "production"
80
+ use Middleware::SetNamespace, "production"
81
81
  end
82
82
  stack.call(m)
83
83
 
@@ -91,7 +91,7 @@ test do
91
91
  metadata.name = "test"
92
92
  }
93
93
 
94
- Middleware::Namespace.new("production").call(m)
94
+ Middleware::SetNamespace.new("production").call(m)
95
95
 
96
96
  yaml = m.to_yaml
97
97
  yaml.should.include "namespace: production"
@@ -102,7 +102,7 @@ test do
102
102
  m << Kube::Cluster["ConfigMap"].new { metadata.name = "a" }
103
103
  m << Kube::Cluster["ConfigMap"].new { metadata.name = "b" }
104
104
 
105
- Middleware::Namespace.new("production").call(m)
105
+ Middleware::SetNamespace.new("production").call(m)
106
106
 
107
107
  names = m.map { |r| r.to_h.dig(:metadata, :name) }
108
108
  names.should == %w[a b]
@@ -117,7 +117,7 @@ test do
117
117
  }
118
118
 
119
119
  stack = Middleware::Stack.new do
120
- use Middleware::Namespace, "staging"
120
+ use Middleware::SetNamespace, "staging"
121
121
  use Middleware::Labels, app: "myapp", managed_by: "kube_cluster"
122
122
  end
123
123
  stack.call(m)
@@ -144,7 +144,7 @@ test do
144
144
  m = Kube::Cluster::Manifest.new
145
145
  m << Kube::Cluster["ConfigMap"].new { metadata.name = "test" }
146
146
 
147
- Middleware::Namespace.new("production").call(m)
147
+ Middleware::SetNamespace.new("production").call(m)
148
148
 
149
149
  enum = m.each
150
150
  enum.should.be.instance_of Enumerator
@@ -197,7 +197,7 @@ test do
197
197
 
198
198
  stack = Middleware::Stack.new do
199
199
  use Middleware::ServiceForDeployment # generates Service
200
- use Middleware::Namespace, "production" # namespaces everything
200
+ use Middleware::SetNamespace, "production" # namespaces everything
201
201
  use Middleware::Labels, managed_by: "middleware" # labels everything
202
202
  end
203
203
  stack.call(m)
@@ -14,7 +14,11 @@ module Kube
14
14
  # end
15
15
  #
16
16
  class Namespace < Middleware
17
- def initialize(namespace, filter: DEFAULT_FILTER)
17
+ def initialize(namespace, filter: DEFAULT_FILTER, force: false)
18
+ unless force
19
+ raise "Middleware::Namespace is deprecated... use Middleware::SetNamespace"
20
+ end
21
+
18
22
  super(filter: filter)
19
23
  @namespace = namespace
20
24
  end
@@ -35,73 +39,73 @@ module Kube
35
39
  end
36
40
  end
37
41
 
38
- test do
39
- Middleware = Kube::Cluster::Middleware
40
-
41
- it "sets_namespace_on_configmap" do
42
- m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "test" })
43
-
44
- Middleware::Namespace.new("production").call(m)
45
-
46
- m.resources.first.to_h.dig(:metadata, :namespace).should == "production"
47
- end
48
-
49
- it "sets_namespace_on_deployment" do
50
- m = manifest(Kube::Cluster["Deployment"].new { metadata.name = "web" })
51
-
52
- Middleware::Namespace.new("staging").call(m)
53
-
54
- m.resources.first.to_h.dig(:metadata, :namespace).should == "staging"
55
- end
56
-
57
- it "skips_namespace_resource" do
58
- m = manifest(Kube::Cluster["Namespace"].new { metadata.name = "my-ns" })
59
-
60
- Middleware::Namespace.new("production").call(m)
61
-
62
- m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
63
- end
64
-
65
- it "skips_cluster_role" do
66
- m = manifest(Kube::Cluster["ClusterRole"].new { metadata.name = "admin" })
67
-
68
- Middleware::Namespace.new("production").call(m)
69
-
70
- m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
71
- end
72
-
73
- it "skips_cluster_role_binding" do
74
- m = manifest(Kube::Cluster["ClusterRoleBinding"].new { metadata.name = "admin-binding" })
75
-
76
- Middleware::Namespace.new("production").call(m)
77
-
78
- m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
79
- end
80
-
81
- it "overwrites_existing_namespace" do
82
- m = manifest(Kube::Cluster["ConfigMap"].new {
83
- metadata.name = "test"
84
- metadata.namespace = "old"
85
- })
86
-
87
- Middleware::Namespace.new("new").call(m)
88
-
89
- m.resources.first.to_h.dig(:metadata, :namespace).should == "new"
90
- end
91
-
92
- it "returns_new_resource_instance" do
93
- resource = Kube::Cluster["ConfigMap"].new { metadata.name = "test" }
94
- manifest(resource).tap do |m|
95
- Middleware::Namespace.new("production").call(m)
96
- resource.equal?(m.resources.first).should.be.false
97
- end
98
- end
99
-
100
- private
101
-
102
- def manifest(*resources)
103
- Kube::Cluster::Manifest.new.tap do |manifest|
104
- resources.each { |x| manifest << x }
105
- end
106
- end
107
- end
42
+ #test do
43
+ # Middleware = Kube::Cluster::Middleware
44
+ #
45
+ # it "sets_namespace_on_configmap" do
46
+ # m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "test" })
47
+ #
48
+ # Middleware::Namespace.new("production").call(m)
49
+ #
50
+ # m.resources.first.to_h.dig(:metadata, :namespace).should == "production"
51
+ # end
52
+ #
53
+ # it "sets_namespace_on_deployment" do
54
+ # m = manifest(Kube::Cluster["Deployment"].new { metadata.name = "web" })
55
+ #
56
+ # Middleware::Namespace.new("staging").call(m)
57
+ #
58
+ # m.resources.first.to_h.dig(:metadata, :namespace).should == "staging"
59
+ # end
60
+ #
61
+ # it "skips_namespace_resource" do
62
+ # m = manifest(Kube::Cluster["Namespace"].new { metadata.name = "my-ns" })
63
+ #
64
+ # Middleware::Namespace.new("production").call(m)
65
+ #
66
+ # m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
67
+ # end
68
+ #
69
+ # it "skips_cluster_role" do
70
+ # m = manifest(Kube::Cluster["ClusterRole"].new { metadata.name = "admin" })
71
+ #
72
+ # Middleware::Namespace.new("production").call(m)
73
+ #
74
+ # m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
75
+ # end
76
+ #
77
+ # it "skips_cluster_role_binding" do
78
+ # m = manifest(Kube::Cluster["ClusterRoleBinding"].new { metadata.name = "admin-binding" })
79
+ #
80
+ # Middleware::Namespace.new("production").call(m)
81
+ #
82
+ # m.resources.first.to_h.dig(:metadata, :namespace).should.be.nil
83
+ # end
84
+ #
85
+ # it "overwrites_existing_namespace" do
86
+ # m = manifest(Kube::Cluster["ConfigMap"].new {
87
+ # metadata.name = "test"
88
+ # metadata.namespace = "old"
89
+ # })
90
+ #
91
+ # Middleware::Namespace.new("new").call(m)
92
+ #
93
+ # m.resources.first.to_h.dig(:metadata, :namespace).should == "new"
94
+ # end
95
+ #
96
+ # it "returns_new_resource_instance" do
97
+ # resource = Kube::Cluster["ConfigMap"].new { metadata.name = "test" }
98
+ # manifest(resource).tap do |m|
99
+ # Middleware::Namespace.new("production").call(m)
100
+ # resource.equal?(m.resources.first).should.be.false
101
+ # end
102
+ # end
103
+ #
104
+ # private
105
+ #
106
+ # def manifest(*resources)
107
+ # Kube::Cluster::Manifest.new.tap do |manifest|
108
+ # resources.each { |x| manifest << x }
109
+ # end
110
+ # end
111
+ #end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require 'kube/cluster'
5
+
6
+ module Kube
7
+ module Cluster
8
+ class Middleware
9
+ # Sets +metadata.namespace+ on all namespace-scoped resources,
10
+ # skipping HelmCharts and resources that already have a
11
+ # non-default namespace set.
12
+ #
13
+ # use SetNamespace, 'authelia'
14
+ #
15
+ class SetNamespace < Middleware
16
+ def initialize(namespace)
17
+ super(filter: ->(r) { r.kind != 'HelmChart' })
18
+ @namespace = namespace
19
+ end
20
+
21
+ def call(manifest)
22
+ manifest.resources.map! { |resource|
23
+ filter(resource) {
24
+ next resource if resource.cluster_scoped?
25
+
26
+ h = resource.to_h
27
+ h[:metadata] ||= {}
28
+ next resource if h[:metadata][:namespace] && h[:metadata][:namespace] != 'default'
29
+
30
+ h[:metadata][:namespace] = @namespace
31
+ resource.rebuild(h)
32
+ }
33
+ }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require 'kube/cluster'
5
+
6
+ module Kube
7
+ module Cluster
8
+ class Middleware
9
+ # Adds +reloader.stakater.com/auto: "true"+ to Deployments,
10
+ # StatefulSets, and DaemonSets so Stakater Reloader triggers
11
+ # rolling restarts when referenced ConfigMaps or Secrets change.
12
+ #
13
+ # use SetReloaderAuto
14
+ #
15
+ class SetReloaderAuto < Middleware
16
+ KINDS = %w[Deployment StatefulSet DaemonSet].freeze
17
+
18
+ def initialize
19
+ super(filter: ->(r) { KINDS.include?(r.kind) })
20
+ end
21
+
22
+ def call(manifest)
23
+ manifest.resources.map! { |resource|
24
+ filter(resource) {
25
+ h = resource.to_h
26
+ h[:metadata] ||= {}
27
+ h[:metadata][:annotations] ||= {}
28
+ h[:metadata][:annotations][:'reloader.stakater.com/auto'] = 'true'
29
+ resource.rebuild(h)
30
+ }
31
+ }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -9,7 +9,7 @@ module Kube
9
9
  # stack = Kube::Cluster::Middleware::Stack.new do
10
10
  # use Middleware::ServiceForDeployment
11
11
  # use Middleware::Labels, app: "web"
12
- # use Middleware::Namespace, "production"
12
+ # use Middleware::SetNamespace, "production"
13
13
  # end
14
14
  #
15
15
  # stack.call(manifest)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kube
4
4
  module Cluster
5
- VERSION = "0.8.0"
5
+ VERSION = "0.9.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kube_cluster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan K
@@ -202,6 +202,8 @@ files:
202
202
  - lib/kube/cluster/middleware/resource_preset.rb
203
203
  - lib/kube/cluster/middleware/security_context.rb
204
204
  - lib/kube/cluster/middleware/service_for_deployment.rb
205
+ - lib/kube/cluster/middleware/set_namespace.rb
206
+ - lib/kube/cluster/middleware/set_reloader_auto.rb
205
207
  - lib/kube/cluster/middleware/stack.rb
206
208
  - lib/kube/cluster/resource.rb
207
209
  - lib/kube/cluster/resource/dirty_tracking.rb