kube_cluster 0.12.0 → 0.13.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: f16ae8575bffccee587a228fa9326be4acc060084585037553a33937ed534838
4
- data.tar.gz: 00b2aefbbf3a939c0e5311514355e695addc901b0f48830670f2a40713f24750
3
+ metadata.gz: 970ae0c50e86707bbfc361c9d55400538e3e2841b110163fa2499a49a710b972
4
+ data.tar.gz: 2d28592acc30a97967e39620db07ed7675ad450b4a199e2c14f8d4dfed3529c6
5
5
  SHA512:
6
- metadata.gz: 17b8b21e329183c3684e167d99ff4f57f6796abd75457ff1af13028ef8342d35c102d76d70b403b15fb9069b9fb78127e17f8e2e9cbccaa03117ffc9ce767103
7
- data.tar.gz: 9e51dce9d55a284e02550c0de71c5edcdf56e0e218809449af9e68b5a24fdd1c2eafe7b2afcfc730ba41afe1be5906c0668d18290904af9359fc649ca20fd8b6
6
+ metadata.gz: f708b01553ec43d5a6cebd7240b6ce8ad3f11a302237c47152984a7f9bd0dea2a2442601a96a38cdc8301811f10feced0fea2953b71e4684eb8932792824bb03
7
+ data.tar.gz: 6213f76ec4b1a989502dffd5a34c9ee55788900292e6a30b646750474eb3f99b40830cafffd2c8365ca111260cd73edf52cc4b3595c3e60d81518ee8f40818ef
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kube_cluster (0.12.0)
4
+ kube_cluster (0.13.0)
5
5
  activesupport (~> 8.0)
6
6
  kube_kubectl (~> 2.0)
7
- kube_schema (~> 1.6)
7
+ kube_schema (~> 1.7)
8
8
  scampi (~> 0.1)
9
9
 
10
10
  GEM
@@ -137,7 +137,7 @@ GEM
137
137
  rubyshell (~> 1.5)
138
138
  shellwords (~> 0.2.2)
139
139
  string_builder (~> 1.2.2)
140
- kube_schema (1.6.0)
140
+ kube_schema (1.7.0)
141
141
  json_schemer (~> 2.5.0)
142
142
  rubyshell (~> 1.5.0)
143
143
  language_server-protocol (3.17.0.5)
data/kube_cluster.gemspec CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency "rake", "~> 13.0"
34
34
  spec.add_development_dependency "rubocop", "~> 1.21"
35
35
 
36
- spec.add_dependency "kube_schema", "~> 1.6"
36
+ spec.add_dependency "kube_schema", "~> 1.7"
37
37
  spec.add_dependency "kube_kubectl", "~> 2.0"
38
38
  spec.add_dependency "activesupport", "~> 8.0"
39
39
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # TEMPORARILY DISABLED: metacontroller.k8s.io CRDs (CompositeController) are not
4
- # registered in kube_schema, so subclassing the kind raises at load time and
5
- # aborts `require "kube/cluster"`. Commented out until the schema is registered.
6
- =begin
7
3
  require "bundler/setup"
8
4
  require "kube/cluster"
9
5
 
@@ -68,8 +64,9 @@ test do
68
64
  it "initializes without error" do
69
65
  Kube::Cluster::Standard::MetaController::CompositeController
70
66
  .new(
71
- name: nil,
72
- webhook_url: nil,
67
+ name: "my-controller",
68
+ webhook_url: "http://hook.default.svc/sync",
69
+ parent_resource: { apiVersion: "apps/v1", resource: "deployments" },
73
70
  )
74
71
  .to_yaml
75
72
  .is_a?(String)
@@ -77,4 +74,3 @@ test do
77
74
  end
78
75
  end
79
76
  end
80
- =end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # TEMPORARILY DISABLED: metacontroller.k8s.io CRDs (DecoratorController) are not
4
- # registered in kube_schema, so subclassing the kind raises at load time and
5
- # aborts `require "kube/cluster"`. Commented out until the schema is registered.
6
- =begin
7
3
  require "bundler/setup"
8
4
  require "kube/cluster"
9
5
 
@@ -67,8 +63,9 @@ test do
67
63
  it "initializes without error" do
68
64
  Kube::Cluster::Standard::MetaController::DecoratorController
69
65
  .new(
70
- name: nil,
71
- webhook_url: nil,
66
+ name: "my-controller",
67
+ webhook_url: "http://hook.default.svc/sync",
68
+ resources: { { apiVersion: "v1", resource: "pods" } => {} },
72
69
  )
73
70
  .to_yaml
74
71
  .is_a?(String)
@@ -76,4 +73,3 @@ test do
76
73
  end
77
74
  end
78
75
  end
79
- =end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module Perses
10
+ # The Perses application instance the operator reconciles. Defaults to a
11
+ # file-backed database under /perses.
12
+ class Perses < Kube::Cluster["Perses"]
13
+ def initialize(name:, image:, port: 8080, &block)
14
+ super() {
15
+ metadata.name = name
16
+ spec.image = image
17
+ spec.containerPort = port
18
+ spec.config = {
19
+ database: {
20
+ file: {
21
+ folder: "/perses",
22
+ extension: "json",
23
+ },
24
+ },
25
+ }
26
+ instance_exec(&block) if block
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ test do
36
+ describe "Perses::Perses" do
37
+ it "initializes without error" do
38
+ Kube::Cluster::Standard::Perses::Perses
39
+ .new(name: "perses", image: "persesdev/perses:latest")
40
+ .to_yaml
41
+ .is_a?(String)
42
+ .should == true
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module Perses
10
+ # A Perses datasource, proxied over HTTP to the given url.
11
+ class PersesDatasource < Kube::Cluster["PersesDatasource"]
12
+ def initialize(name:, plugin_kind:, url:, display_name: nil, default: false, &block)
13
+ super() {
14
+ metadata.name = name
15
+ spec.config = {
16
+ default: default,
17
+ display: { name: display_name || name },
18
+ plugin: {
19
+ kind: plugin_kind,
20
+ spec: {
21
+ proxy: {
22
+ kind: "HTTPProxy",
23
+ spec: { url: url },
24
+ },
25
+ },
26
+ },
27
+ }
28
+ instance_exec(&block) if block
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ test do
38
+ describe "Perses::PersesDatasource" do
39
+ it "initializes without error" do
40
+ Kube::Cluster::Standard::Perses::PersesDatasource
41
+ .new(
42
+ name: "victoriametrics",
43
+ plugin_kind: "PrometheusDatasource",
44
+ url: "http://vmsingle-vmsingle.metrics.svc:8429",
45
+ )
46
+ .to_yaml
47
+ .is_a?(String)
48
+ .should == true
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module VictoriaMetrics
10
+ # Collects Kubernetes pod logs and remote-writes them to a VLSingle.
11
+ class VLAgent < Kube::Cluster["VLAgent"]
12
+ def initialize(name:, remote_write_url:, &block)
13
+ super() {
14
+ metadata.name = name
15
+ spec.useStrictSecurity = true
16
+ spec.k8sCollector = {
17
+ enabled: true,
18
+ msgFields: %w[msg message log.msg],
19
+ timeFields: %w[time ts timestamp],
20
+ }
21
+ spec.remoteWrite = [{ url: remote_write_url }]
22
+ instance_exec(&block) if block
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ test do
32
+ describe "VictoriaMetrics::VLAgent" do
33
+ it "initializes without error" do
34
+ Kube::Cluster::Standard::VictoriaMetrics::VLAgent
35
+ .new(name: "vlagent", remote_write_url: "http://vlsingle-vlsingle.metrics.svc:9428/internal/insert")
36
+ .to_yaml
37
+ .is_a?(String)
38
+ .should == true
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module VictoriaMetrics
10
+ # Single-node VictoriaLogs store.
11
+ class VLSingle < Kube::Cluster["VLSingle"]
12
+ def initialize(name:, retention_period: "30d", &block)
13
+ super() {
14
+ metadata.name = name
15
+ spec.retentionPeriod = retention_period
16
+ instance_exec(&block) if block
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ test do
26
+ describe "VictoriaMetrics::VLSingle" do
27
+ it "initializes without error" do
28
+ Kube::Cluster::Standard::VictoriaMetrics::VLSingle
29
+ .new(name: "vlsingle")
30
+ .to_yaml
31
+ .is_a?(String)
32
+ .should == true
33
+ end
34
+ end
35
+ 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
+ module Standard
9
+ module VictoriaMetrics
10
+ # Scrapes targets (selecting all scrape objects by default) and
11
+ # remote-writes the samples into a VMSingle/VMCluster.
12
+ class VMAgent < Kube::Cluster["VMAgent"]
13
+ def initialize(name:, remote_write_url:, scrape_interval: "30s", select_all: true, &block)
14
+ super() {
15
+ metadata.name = name
16
+ spec.selectAllByDefault = select_all
17
+ spec.scrapeInterval = scrape_interval
18
+ spec.remoteWrite = [{ url: remote_write_url }]
19
+ instance_exec(&block) if block
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ test do
29
+ describe "VictoriaMetrics::VMAgent" do
30
+ it "initializes without error" do
31
+ Kube::Cluster::Standard::VictoriaMetrics::VMAgent
32
+ .new(name: "vmagent", remote_write_url: "http://vmsingle-vmsingle.metrics.svc:8429/api/v1/write")
33
+ .to_yaml
34
+ .is_a?(String)
35
+ .should == true
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module VictoriaMetrics
10
+ # Scrapes node-level endpoints (e.g. the kubelet) over HTTPS using the
11
+ # in-cluster service-account token.
12
+ class VMNodeScrape < Kube::Cluster["VMNodeScrape"]
13
+ def initialize(name:, job:, path: nil, interval: "30s", &block)
14
+ super() {
15
+ metadata.name = name
16
+ spec.scheme = "https"
17
+ spec.tlsConfig = { insecureSkipVerify: true }
18
+ spec.bearerTokenFile = "/var/run/secrets/kubernetes.io/serviceaccount/token"
19
+ spec.honorLabels = true
20
+ spec.interval = interval
21
+ spec.path = path if path
22
+ spec.relabelConfigs = [{ targetLabel: "job", replacement: job }]
23
+ instance_exec(&block) if block
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ test do
33
+ describe "VictoriaMetrics::VMNodeScrape" do
34
+ it "initializes without error" do
35
+ Kube::Cluster::Standard::VictoriaMetrics::VMNodeScrape
36
+ .new(name: "kubelet", job: "kubelet", path: "/metrics")
37
+ .to_yaml
38
+ .is_a?(String)
39
+ .should == true
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module VictoriaMetrics
10
+ # Declares how to scrape the endpoints behind a Service, selected by the
11
+ # app.kubernetes.io/name label, relabelling the metrics onto a job.
12
+ class VMServiceScrape < Kube::Cluster["VMServiceScrape"]
13
+ def initialize(name:, job:, match_name:, port:, &block)
14
+ super() {
15
+ metadata.name = name
16
+ spec.selector = { matchLabels: { "app.kubernetes.io/name" => match_name } }
17
+ spec.endpoints = [{ port: port, relabelConfigs: [{ targetLabel: "job", replacement: job }] }]
18
+ instance_exec(&block) if block
19
+ }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ test do
28
+ describe "VictoriaMetrics::VMServiceScrape" do
29
+ it "initializes without error" do
30
+ Kube::Cluster::Standard::VictoriaMetrics::VMServiceScrape
31
+ .new(name: "opencost", job: "opencost", match_name: "opencost", port: "http")
32
+ .to_yaml
33
+ .is_a?(String)
34
+ .should == true
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "kube/cluster"
5
+
6
+ module Kube
7
+ module Cluster
8
+ module Standard
9
+ module VictoriaMetrics
10
+ # Single-node VictoriaMetrics time-series database.
11
+ class VMSingle < Kube::Cluster["VMSingle"]
12
+ def initialize(name:, retention_period: "30d", &block)
13
+ super() {
14
+ metadata.name = name
15
+ spec.retentionPeriod = retention_period
16
+ instance_exec(&block) if block
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ test do
26
+ describe "VictoriaMetrics::VMSingle" do
27
+ it "initializes without error" do
28
+ Kube::Cluster::Standard::VictoriaMetrics::VMSingle
29
+ .new(name: "vmsingle")
30
+ .to_yaml
31
+ .is_a?(String)
32
+ .should == true
33
+ end
34
+ end
35
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kube
4
4
  module Cluster
5
- VERSION = "0.12.0"
5
+ VERSION = "0.13.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.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan K
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.6'
60
+ version: '1.7'
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: '1.6'
67
+ version: '1.7'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: kube_kubectl
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -228,9 +228,17 @@ files:
228
228
  - lib/kube/cluster/standard/kube_virt/virtual_machine.rb
229
229
  - lib/kube/cluster/standard/meta_controller/composite_controller.rb
230
230
  - lib/kube/cluster/standard/meta_controller/decorator_controller.rb
231
+ - lib/kube/cluster/standard/perses/perses.rb
232
+ - lib/kube/cluster/standard/perses/perses_datasource.rb
231
233
  - lib/kube/cluster/standard/persistent_volume_claim.rb
232
234
  - lib/kube/cluster/standard/secret.rb
233
235
  - lib/kube/cluster/standard/service.rb
236
+ - lib/kube/cluster/standard/victoria_metrics/vl_agent.rb
237
+ - lib/kube/cluster/standard/victoria_metrics/vl_single.rb
238
+ - lib/kube/cluster/standard/victoria_metrics/vm_agent.rb
239
+ - lib/kube/cluster/standard/victoria_metrics/vm_node_scrape.rb
240
+ - lib/kube/cluster/standard/victoria_metrics/vm_service_scrape.rb
241
+ - lib/kube/cluster/standard/victoria_metrics/vm_single.rb
234
242
  - lib/kube/cluster/standard/volume_processing.rb
235
243
  - lib/kube/cluster/version.rb
236
244
  - lib/kube/cluster/version.rb.erb