kube_cluster 0.2.0 → 0.3.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 +4 -4
- data/.github/workflows/release.yml +43 -0
- data/.github/workflows/tag-gem-version-bump.yml +47 -0
- data/.gitignore +2 -0
- data/Gemfile.lock +48 -52
- data/bin/console +3 -0
- data/bin/dev +4 -0
- data/docker-compose.yml +26 -0
- data/examples/01-basic-redis-pod/manifest.rb +60 -0
- data/examples/02-manifest-with-middleware/manifest.rb +37 -0
- data/examples/02-manifest-with-middleware/middleware/labels.rb +4 -0
- data/examples/02-manifest-with-middleware/middleware/namespace.rb +4 -0
- data/examples/02-manifest-with-middleware/templates/config_map.rb +13 -0
- data/examples/02-manifest-with-middleware/templates/deployment.rb +59 -0
- data/examples/02-manifest-with-middleware/templates/horizontal_pod_autoscaler.rb +30 -0
- data/examples/02-manifest-with-middleware/templates/ingress.rb +38 -0
- data/examples/02-manifest-with-middleware/templates/service.rb +12 -0
- data/examples/03-app-with-database/demo.rb +87 -0
- data/examples/03-app-with-database/helpers.rb +18 -0
- data/examples/03-app-with-database/my_app.rb +45 -0
- data/examples/03-app-with-database/postgresql.rb +81 -0
- data/examples/03-app-with-database/ruby_on_rails.rb +31 -0
- data/flake.lock +3 -3
- data/flake.nix +6 -0
- data/kube_cluster.gemspec +3 -1
- data/lib/kube/cli/cluster.rb +41 -0
- data/lib/kube/cluster/connection.rb +18 -0
- data/lib/kube/cluster/instance.rb +21 -0
- data/lib/kube/cluster/manifest.rb +25 -0
- data/lib/kube/cluster/middleware/annotations.rb +32 -0
- data/lib/kube/cluster/middleware/hpa_for_deployment.rb +111 -0
- data/lib/kube/cluster/middleware/ingress_for_service.rb +91 -0
- data/lib/kube/cluster/middleware/labels.rb +59 -0
- data/lib/kube/cluster/middleware/namespace.rb +31 -0
- data/lib/kube/cluster/middleware/pod_anti_affinity.rb +61 -0
- data/lib/kube/cluster/middleware/resource_preset.rb +64 -0
- data/lib/kube/cluster/middleware/security_context.rb +84 -0
- data/lib/kube/cluster/middleware/service_for_deployment.rb +71 -0
- data/lib/kube/cluster/middleware/stack.rb +43 -0
- data/lib/kube/cluster/middleware.rb +69 -0
- data/lib/kube/cluster/resource/dirty_tracking.rb +113 -0
- data/lib/kube/cluster/resource/persistence.rb +67 -0
- data/lib/kube/cluster/resource.rb +99 -0
- data/lib/kube/cluster/version.rb +1 -1
- data/lib/kube/cluster.rb +34 -7
- data/lib/kube/errors.rb +57 -0
- metadata +69 -17
- data/Rakefile +0 -11
- data/TREE_PLAN.md +0 -513
- data/bin/generate-command-schema-v1 +0 -44
- data/data/kubectl-command-tree-v1-minimal.json +0 -125
- data/data/kubectl-command-tree-v1.json +0 -1469
- data/examples/quick-repl/docker-compose.yml +0 -52
- data/exe/kube_cluster +0 -6
- data/lib/kube/cluster/command_node.rb +0 -89
- data/lib/kube/cluster/ctl.rb +0 -33
- data/lib/kube/cluster/query_builder.rb +0 -35
- data/lib/kube/cluster/resource_selector.rb +0 -19
- data/lib/kube/cluster/tree_node.rb +0 -51
data/lib/kube/cluster.rb
CHANGED
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "kube/schema"
|
|
4
|
+
require_relative "../kube/errors"
|
|
3
5
|
require_relative "cluster/version"
|
|
4
|
-
require_relative "cluster/
|
|
5
|
-
require_relative "cluster/
|
|
6
|
-
require_relative "cluster/
|
|
7
|
-
require_relative "cluster/
|
|
8
|
-
require_relative "cluster/
|
|
6
|
+
require_relative "cluster/connection"
|
|
7
|
+
require_relative "cluster/instance"
|
|
8
|
+
require_relative "cluster/resource"
|
|
9
|
+
require_relative "cluster/manifest"
|
|
10
|
+
require_relative "cluster/middleware"
|
|
11
|
+
require 'kube/ctl'
|
|
9
12
|
|
|
10
13
|
module Kube
|
|
14
|
+
def self.cluster
|
|
15
|
+
Cluster
|
|
16
|
+
end
|
|
17
|
+
|
|
11
18
|
module Cluster
|
|
12
|
-
def self.
|
|
13
|
-
|
|
19
|
+
def self.connect(kubeconfig:)
|
|
20
|
+
Instance.new(kubeconfig: kubeconfig)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns an anonymous subclass of Kube::Cluster::Resource for the
|
|
24
|
+
# given Kubernetes kind, mirroring Kube::Schema[kind] but with
|
|
25
|
+
# dirty tracking, persistence, and resource helper methods.
|
|
26
|
+
#
|
|
27
|
+
# Kube::Cluster["Deployment"].new { metadata.name = "web" }
|
|
28
|
+
#
|
|
29
|
+
def self.[](kind)
|
|
30
|
+
@resource_classes ||= {}
|
|
31
|
+
@resource_classes[kind] ||= begin
|
|
32
|
+
schema_class = Kube::Schema[kind]
|
|
33
|
+
Class.new(Resource) do
|
|
34
|
+
@schema = schema_class.schema
|
|
35
|
+
@defaults = schema_class.defaults
|
|
36
|
+
|
|
37
|
+
def self.schema = @schema || superclass.schema
|
|
38
|
+
def self.defaults = @defaults || superclass.defaults
|
|
39
|
+
end
|
|
40
|
+
end
|
|
14
41
|
end
|
|
15
42
|
end
|
|
16
43
|
end
|
data/lib/kube/errors.rb
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This file defines cluster-specific errors in the Kube namespace.
|
|
4
|
+
|
|
5
|
+
module Kube
|
|
6
|
+
# Base error class for the Kube namespace.
|
|
7
|
+
class Error < StandardError; end
|
|
8
|
+
# Raised when a kubectl command fails.
|
|
9
|
+
#
|
|
10
|
+
# begin
|
|
11
|
+
# resource.patch
|
|
12
|
+
# rescue Kube::CommandError => e
|
|
13
|
+
# e.subcommand # => "patch"
|
|
14
|
+
# e.stderr # => "Error from server (NotFound): ..."
|
|
15
|
+
# e.exit_code # => 1
|
|
16
|
+
# e.reason # => "NotFound" (parsed from stderr, or nil)
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
class CommandError < Error
|
|
20
|
+
attr_reader :subcommand, :stderr, :exit_code, :reason
|
|
21
|
+
|
|
22
|
+
def initialize(message = nil, subcommand: nil, stderr: nil, exit_code: nil, reason: nil)
|
|
23
|
+
@subcommand = subcommand
|
|
24
|
+
@stderr = stderr
|
|
25
|
+
@exit_code = exit_code
|
|
26
|
+
@reason = reason || parse_reason(stderr)
|
|
27
|
+
super(message || build_message)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.from_kubectl(subcommand:, stderr:, exit_code:)
|
|
31
|
+
new(
|
|
32
|
+
subcommand: subcommand,
|
|
33
|
+
stderr: stderr,
|
|
34
|
+
exit_code: exit_code
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def build_message
|
|
41
|
+
"kubectl #{@subcommand} failed (exit #{@exit_code}): #{@stderr}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Attempts to extract the reason from kubectl stderr.
|
|
45
|
+
# kubectl errors typically look like:
|
|
46
|
+
# Error from server (NotFound): deployments.apps "foo" not found
|
|
47
|
+
# Error from server (Forbidden): ...
|
|
48
|
+
# error: the server doesn't have a resource type "foo"
|
|
49
|
+
def parse_reason(stderr)
|
|
50
|
+
return nil if stderr.nil? || stderr.empty?
|
|
51
|
+
|
|
52
|
+
if stderr =~ /\((\w+)\)/
|
|
53
|
+
$1
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
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.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan K
|
|
@@ -57,56 +57,108 @@ dependencies:
|
|
|
57
57
|
requirements:
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version:
|
|
60
|
+
version: 1.2.0
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
67
|
+
version: 1.2.0
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: kube_kit
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: kube_kubectl
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: 2.0.0
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: 2.0.0
|
|
68
96
|
description: 'OOP abstraction that allows you to deploy and manage kubernetes resources
|
|
69
97
|
using Ruby.
|
|
70
98
|
|
|
71
99
|
'
|
|
72
100
|
email:
|
|
73
101
|
- nathankidd@hey.com
|
|
74
|
-
executables:
|
|
75
|
-
- kube_cluster
|
|
102
|
+
executables: []
|
|
76
103
|
extensions: []
|
|
77
104
|
extra_rdoc_files: []
|
|
78
105
|
files:
|
|
79
106
|
- ".envrc"
|
|
107
|
+
- ".github/workflows/release.yml"
|
|
108
|
+
- ".github/workflows/tag-gem-version-bump.yml"
|
|
80
109
|
- ".gitignore"
|
|
81
110
|
- ".rubocop.yml"
|
|
82
111
|
- Gemfile
|
|
83
112
|
- Gemfile.lock
|
|
84
113
|
- LICENSE
|
|
85
114
|
- README.md
|
|
86
|
-
- Rakefile
|
|
87
|
-
- TREE_PLAN.md
|
|
88
115
|
- bin/console
|
|
89
|
-
- bin/
|
|
116
|
+
- bin/dev
|
|
90
117
|
- bin/increment-version
|
|
91
118
|
- bin/release-gem
|
|
92
119
|
- bin/setup
|
|
93
120
|
- bin/tag-version
|
|
94
121
|
- bin/test
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
- examples/
|
|
98
|
-
-
|
|
122
|
+
- docker-compose.yml
|
|
123
|
+
- examples/01-basic-redis-pod/manifest.rb
|
|
124
|
+
- examples/02-manifest-with-middleware/manifest.rb
|
|
125
|
+
- examples/02-manifest-with-middleware/middleware/labels.rb
|
|
126
|
+
- examples/02-manifest-with-middleware/middleware/namespace.rb
|
|
127
|
+
- examples/02-manifest-with-middleware/templates/config_map.rb
|
|
128
|
+
- examples/02-manifest-with-middleware/templates/deployment.rb
|
|
129
|
+
- examples/02-manifest-with-middleware/templates/horizontal_pod_autoscaler.rb
|
|
130
|
+
- examples/02-manifest-with-middleware/templates/ingress.rb
|
|
131
|
+
- examples/02-manifest-with-middleware/templates/service.rb
|
|
132
|
+
- examples/03-app-with-database/demo.rb
|
|
133
|
+
- examples/03-app-with-database/helpers.rb
|
|
134
|
+
- examples/03-app-with-database/my_app.rb
|
|
135
|
+
- examples/03-app-with-database/postgresql.rb
|
|
136
|
+
- examples/03-app-with-database/ruby_on_rails.rb
|
|
99
137
|
- flake.lock
|
|
100
138
|
- flake.nix
|
|
101
139
|
- kube_cluster.gemspec
|
|
140
|
+
- lib/kube/cli/cluster.rb
|
|
102
141
|
- lib/kube/cluster.rb
|
|
103
|
-
- lib/kube/cluster/
|
|
104
|
-
- lib/kube/cluster/
|
|
105
|
-
- lib/kube/cluster/
|
|
106
|
-
- lib/kube/cluster/
|
|
107
|
-
- lib/kube/cluster/
|
|
142
|
+
- lib/kube/cluster/connection.rb
|
|
143
|
+
- lib/kube/cluster/instance.rb
|
|
144
|
+
- lib/kube/cluster/manifest.rb
|
|
145
|
+
- lib/kube/cluster/middleware.rb
|
|
146
|
+
- lib/kube/cluster/middleware/annotations.rb
|
|
147
|
+
- lib/kube/cluster/middleware/hpa_for_deployment.rb
|
|
148
|
+
- lib/kube/cluster/middleware/ingress_for_service.rb
|
|
149
|
+
- lib/kube/cluster/middleware/labels.rb
|
|
150
|
+
- lib/kube/cluster/middleware/namespace.rb
|
|
151
|
+
- lib/kube/cluster/middleware/pod_anti_affinity.rb
|
|
152
|
+
- lib/kube/cluster/middleware/resource_preset.rb
|
|
153
|
+
- lib/kube/cluster/middleware/security_context.rb
|
|
154
|
+
- lib/kube/cluster/middleware/service_for_deployment.rb
|
|
155
|
+
- lib/kube/cluster/middleware/stack.rb
|
|
156
|
+
- lib/kube/cluster/resource.rb
|
|
157
|
+
- lib/kube/cluster/resource/dirty_tracking.rb
|
|
158
|
+
- lib/kube/cluster/resource/persistence.rb
|
|
108
159
|
- lib/kube/cluster/version.rb
|
|
109
160
|
- lib/kube/cluster/version.rb.erb
|
|
161
|
+
- lib/kube/errors.rb
|
|
110
162
|
homepage: https://github.com/general-intelligence-systems/kube_cluster
|
|
111
163
|
licenses:
|
|
112
164
|
- Apache-2.0
|