kubes 0.4.0 → 0.4.1
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/CHANGELOG.md +5 -0
- data/docs/_docs/config/hooks/docker.md +1 -1
- data/docs/_docs/config/hooks/kubectl.md +1 -1
- data/docs/_docs/config/hooks/ruby.md +1 -1
- data/docs/_docs/learn/dsl/review-project.md +4 -2
- data/docs/_docs/learn/yaml/review-project.md +4 -2
- data/docs/_includes/config/hooks/options.md +1 -1
- data/kubes.gemspec +3 -0
- data/lib/kubes.rb +3 -0
- data/lib/kubes/cli/compile.rb +8 -0
- data/lib/kubes/cli/init.rb +7 -2
- data/lib/kubes/compiler.rb +0 -7
- data/lib/kubes/version.rb +1 -1
- data/spec/fixtures/decorators/deployment/both/valueFrom.yaml +33 -0
- data/spec/fixtures/decorators/deployment/both/volumes.yaml +40 -0
- data/spec/kubes/compiler/decorator/post/deployment_spec.rb +27 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb9cf7b5db064114c31e2af08890c009831a4b68baf556052e672a71cf08f562
|
4
|
+
data.tar.gz: 70bdcad829b4cee02f69b4cf36fbac8e41023445c407f484bc171e2a67d9bd99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08dfce3916b92c0498915d0e7bf5d75608f111013eca67f5d9802f30250e0412c76afcd08f7ad2dd7d72ca413d13390a6d07b9d2c56b182fd0c04247ae1f9708'
|
7
|
+
data.tar.gz: dd255951bb8421f80d666492cd1e03ac363364abb441c4ded7db33562cd6450f6f2f397230c84c20a24f9b98d72e00cd3463cfde8c2ed1e93875dcd2aaa5ec58
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [0.4.1]
|
7
|
+
- kubes init: default namespace now includes Kubes.env
|
8
|
+
- fix kubes deploy: compile it gets called once and output folder kept
|
9
|
+
- include kubes_google dependency helpers
|
10
|
+
|
6
11
|
## [0.4.0]
|
7
12
|
- #26 features: kubes vs kubectl hooks, prune, etc
|
8
13
|
- hooks: kubes, kubectl, docker breaking changes.
|
@@ -58,7 +58,7 @@ Results in:
|
|
58
58
|
|
59
59
|
## exit_on_fail option
|
60
60
|
|
61
|
-
By default, if the hook commands fail, then
|
61
|
+
By default, if the hook commands fail, then kubes will exit with the original hook error code. You can change this behavior with the `exit_on_fail` option.
|
62
62
|
|
63
63
|
```ruby
|
64
64
|
before("build"
|
@@ -70,7 +70,7 @@ The `on` option is used to match the path the gets applied: .kubes/resources/**w
|
|
70
70
|
|
71
71
|
## exit on fail
|
72
72
|
|
73
|
-
By default, if the hook commands fail, then
|
73
|
+
By default, if the hook commands fail, then kubes will exit with the original hook error code. You can change this behavior with the `exit_on_fail` option.
|
74
74
|
|
75
75
|
```ruby
|
76
76
|
before("apply"
|
@@ -11,10 +11,12 @@ We'll create a namespace for the app resources:
|
|
11
11
|
.kubes/resources/shared/namespace.rb
|
12
12
|
|
13
13
|
```ruby
|
14
|
-
name "demo"
|
14
|
+
name "demo-#{Kubes.env}"
|
15
15
|
labels(app: "demo")
|
16
16
|
```
|
17
17
|
|
18
|
+
Notice, the `#{Kubes.env}`. Kubes adds the env to the namespace by default. You can change this with the `init --namespace` option.
|
19
|
+
|
18
20
|
## Deployment
|
19
21
|
|
20
22
|
The `web/deployment.rb` file is a little more interesting:
|
@@ -39,7 +41,7 @@ Also let's check the files in the base folder.
|
|
39
41
|
.kubes/resources/base/all.rb
|
40
42
|
|
41
43
|
```ruby
|
42
|
-
namespace "
|
44
|
+
namespace "demo-#{Kubes.env}"
|
43
45
|
labels(app: "demo")
|
44
46
|
```
|
45
47
|
|
@@ -14,11 +14,13 @@ We'll create a namespace for the app resources:
|
|
14
14
|
apiVersion: v1
|
15
15
|
kind: Namespace
|
16
16
|
metadata:
|
17
|
-
name: demo
|
17
|
+
name: demo-<%= Kubes.env %>
|
18
18
|
labels:
|
19
19
|
app: demo
|
20
20
|
```
|
21
21
|
|
22
|
+
Notice, the `<%= Kubes.env %>`. Kubes adds the env to the namespace by default. You can change this with the `init --namespace` option.
|
23
|
+
|
22
24
|
## Deployment
|
23
25
|
|
24
26
|
The `web/deployment.yaml` file is a little more interesting:
|
@@ -57,7 +59,7 @@ Also let's check the files in the base folder.
|
|
57
59
|
|
58
60
|
```yaml
|
59
61
|
metadata:
|
60
|
-
namespace: demo
|
62
|
+
namespace: demo-<%= Kubes.env %>
|
61
63
|
```
|
62
64
|
|
63
65
|
.kubes/resources/base/deployment.yaml
|
@@ -10,7 +10,7 @@ The command name corresponds to the `{{ include.command }}` commands: apply, del
|
|
10
10
|
|
11
11
|
Name | Description
|
12
12
|
---|---
|
13
|
-
label | A human-friendly label so you can see what hooks is being run
|
13
|
+
label | A human-friendly label so you can see what hooks is being run.
|
14
14
|
execute | The script or command to run. IE: path/to/some/script.sh
|
15
15
|
exit_on_fail | Whether or not to continue process if the script returns an failed exit code.
|
16
16
|
{% if include.command == "kubectl" %}on | What resource to run the hook on. IE: shared/namespace, web/deployment, web/service. Note: This option is only used by kubectl hooks.{% endif %}
|
data/kubes.gemspec
CHANGED
@@ -28,6 +28,9 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency "thor"
|
29
29
|
spec.add_dependency "zeitwerk"
|
30
30
|
|
31
|
+
# core helper libs
|
32
|
+
spec.add_dependency "kubes_google"
|
33
|
+
|
31
34
|
spec.add_development_dependency "bundler"
|
32
35
|
spec.add_development_dependency "byebug"
|
33
36
|
spec.add_development_dependency "cli_markdown"
|
data/lib/kubes.rb
CHANGED
data/lib/kubes/cli/compile.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
class Kubes::CLI
|
2
2
|
class Compile < Base
|
3
|
+
# Separate command like prune can call compile. Apply also calls Prune.
|
4
|
+
# Instead of moving Compile out of Prune, will use this class variable.
|
5
|
+
# In case we have other cases where compile is called in another area.
|
6
|
+
# We only want compiled to be called once so hooks only fire once.
|
7
|
+
# Done here so we don't clean and remove the .kubes/output folder.
|
8
|
+
@@compiled = false
|
3
9
|
def run
|
10
|
+
return if @@compiled
|
4
11
|
Clean.new(@options.merge(mute: true)).run
|
5
12
|
Kubes::Compiler.new(@options).run
|
13
|
+
@@compiled = true
|
6
14
|
end
|
7
15
|
end
|
8
16
|
end
|
data/lib/kubes/cli/init.rb
CHANGED
@@ -6,7 +6,7 @@ class Kubes::CLI
|
|
6
6
|
[:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files"],
|
7
7
|
[:type, aliases: ["t"], default: "yaml", desc: "Type: dsl or yaml"],
|
8
8
|
[:repo, required: true, desc: "Docker repo name. Example: user/repo. Configures .kubes/config.rb"],
|
9
|
-
[:namespace, aliases: ["n"], desc: "Namespace to use, defaults to
|
9
|
+
[:namespace, aliases: ["n"], desc: "Namespace to use, defaults to APP-ENV. IE: demo-dev"],
|
10
10
|
]
|
11
11
|
end
|
12
12
|
|
@@ -19,7 +19,12 @@ class Kubes::CLI
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def namespace
|
22
|
-
@options[:namespace] ||
|
22
|
+
@options[:namespace] || default_namespace
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_namespace
|
26
|
+
env = @options[:type] == "yaml" ? '<%= Kubes.env %>' : '#{Kubes.env}'
|
27
|
+
"#{app}-#{env}"
|
23
28
|
end
|
24
29
|
|
25
30
|
def excludes
|
data/lib/kubes/compiler.rb
CHANGED
@@ -8,13 +8,7 @@ module Kubes
|
|
8
8
|
@options = options
|
9
9
|
end
|
10
10
|
|
11
|
-
# Separate command like prune can call compile. Apply also calls Prune.
|
12
|
-
# Instead of moving Compile out of Prune, will use this class variable.
|
13
|
-
# In case we have other cases where compile is called in another area.
|
14
|
-
# We only want compiled to be called once so hooks only fire once.
|
15
|
-
@@compiled = false
|
16
11
|
def run
|
17
|
-
return if @@compiled
|
18
12
|
Kubes.config # trigger config load. So can set ENV['VAR'] in config/envs/dev.rb etc
|
19
13
|
run_hooks("kubes.rb", name: "compile") do
|
20
14
|
results = resources.map do |path|
|
@@ -28,7 +22,6 @@ module Kubes
|
|
28
22
|
end
|
29
23
|
|
30
24
|
puts "Compiled .kubes/resources files to .kubes/output" if show_compiled_message?
|
31
|
-
@@compiled = true
|
32
25
|
end
|
33
26
|
|
34
27
|
def resources
|
data/lib/kubes/version.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
metadata:
|
3
|
+
namespace: default
|
4
|
+
labels:
|
5
|
+
app: demo
|
6
|
+
role: web
|
7
|
+
name: demo-web
|
8
|
+
spec:
|
9
|
+
selector:
|
10
|
+
matchLabels:
|
11
|
+
app: demo
|
12
|
+
role: web
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
app: demo
|
17
|
+
role: web
|
18
|
+
spec:
|
19
|
+
containers:
|
20
|
+
- name: demo-web
|
21
|
+
image: gcr.io/project/demo-web:kubes-2020-06-23T00-07-54
|
22
|
+
env:
|
23
|
+
- name: MYSQL_ROOT_PASSWORD
|
24
|
+
valueFrom:
|
25
|
+
configMapKeyRef:
|
26
|
+
name: demo-config-map
|
27
|
+
key: password
|
28
|
+
secretKeyRef:
|
29
|
+
name: demo-secret
|
30
|
+
key: password
|
31
|
+
replicas: 1
|
32
|
+
apiVersion: apps/v1
|
33
|
+
kind: Deployment
|
@@ -0,0 +1,40 @@
|
|
1
|
+
---
|
2
|
+
metadata:
|
3
|
+
namespace: default
|
4
|
+
labels:
|
5
|
+
app: demo
|
6
|
+
role: web
|
7
|
+
name: demo-web
|
8
|
+
spec:
|
9
|
+
selector:
|
10
|
+
matchLabels:
|
11
|
+
app: demo
|
12
|
+
role: web
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
app: demo
|
17
|
+
role: web
|
18
|
+
spec:
|
19
|
+
containers:
|
20
|
+
- name: demo-web
|
21
|
+
image: gcr.io/project/demo-web:kubes-2020-06-23T00-07-54
|
22
|
+
volumeMounts:
|
23
|
+
- mountPath: /config-map
|
24
|
+
name: config-map-volume
|
25
|
+
volumes:
|
26
|
+
- configMap:
|
27
|
+
name: demo-config-map
|
28
|
+
items:
|
29
|
+
- key: k1
|
30
|
+
path: config-map.conf
|
31
|
+
name: config-map-volume
|
32
|
+
- secret:
|
33
|
+
secretName: demo-secret
|
34
|
+
items:
|
35
|
+
- key: k1
|
36
|
+
path: secrets.conf
|
37
|
+
name: secrets-volume
|
38
|
+
replicas: 1
|
39
|
+
apiVersion: apps/v1
|
40
|
+
kind: Pod
|
@@ -5,6 +5,7 @@ describe Kubes::Compiler::Decorator::Post do
|
|
5
5
|
YAML.load_file("spec/fixtures/decorators/deployment/#{name}.yaml")
|
6
6
|
end
|
7
7
|
before(:each) do
|
8
|
+
allow(Kubes::Compiler::Decorator::Hashable::Storage).to receive(:fetch).and_return("fakehash")
|
8
9
|
allow(Kubes::Compiler::Decorator::Hashable::Storage).to receive(:fetch).with("Secret", "demo-secret").and_return("fakehash")
|
9
10
|
allow(Kubes::Compiler::Decorator::Hashable::Storage).to receive(:fetch).with("ConfigMap", "demo-config-map").and_return("fakehash-config")
|
10
11
|
allow(Kubes::Compiler::Decorator::Hashable::Storage).to receive(:fetch).with("ConfigMap", "demo-config-map-2").and_return("fakehash-config2")
|
@@ -107,5 +108,31 @@ describe Kubes::Compiler::Decorator::Post do
|
|
107
108
|
expect(name).to eq("demo-config-map-2-fakehash-config2")
|
108
109
|
end
|
109
110
|
end
|
111
|
+
|
112
|
+
describe "valueFrom" do
|
113
|
+
let(:data) { fixture("both/valueFrom") }
|
114
|
+
it "run" do
|
115
|
+
decorator.run
|
116
|
+
data = decorator.data
|
117
|
+
valueFrom = data['spec']['template']['spec']['containers'][0]['env'][0]['valueFrom']
|
118
|
+
name = valueFrom['configMapKeyRef']['name']
|
119
|
+
expect(name).to eq("demo-config-map-fakehash-config")
|
120
|
+
name = valueFrom['secretKeyRef']['name']
|
121
|
+
expect(name).to eq("demo-secret-fakehash")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "volumes" do
|
126
|
+
let(:data) { fixture("both/volumes") }
|
127
|
+
it "run" do
|
128
|
+
decorator.run
|
129
|
+
data = decorator.data
|
130
|
+
volumes = data['spec']['template']['spec']['volumes']
|
131
|
+
name = volumes[0]['configMap']['name']
|
132
|
+
expect(name).to eq("demo-config-map-fakehash-config")
|
133
|
+
name = volumes[1]['secret']['secretName']
|
134
|
+
expect(name).to eq("demo-secret-fakehash")
|
135
|
+
end
|
136
|
+
end
|
110
137
|
end
|
111
138
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kubes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: kubes_google
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: bundler
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -588,6 +602,8 @@ files:
|
|
588
602
|
- spec/fixtures/artifacts/demo-web/service.yaml
|
589
603
|
- spec/fixtures/blocks/deployments.rb
|
590
604
|
- spec/fixtures/decorators/deployment/both/envFrom.yaml
|
605
|
+
- spec/fixtures/decorators/deployment/both/valueFrom.yaml
|
606
|
+
- spec/fixtures/decorators/deployment/both/volumes.yaml
|
591
607
|
- spec/fixtures/decorators/deployment/configMap/envFrom.yaml
|
592
608
|
- spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
|
593
609
|
- spec/fixtures/decorators/deployment/configMap/volumes.yaml
|
@@ -661,6 +677,8 @@ test_files:
|
|
661
677
|
- spec/fixtures/artifacts/demo-web/service.yaml
|
662
678
|
- spec/fixtures/blocks/deployments.rb
|
663
679
|
- spec/fixtures/decorators/deployment/both/envFrom.yaml
|
680
|
+
- spec/fixtures/decorators/deployment/both/valueFrom.yaml
|
681
|
+
- spec/fixtures/decorators/deployment/both/volumes.yaml
|
664
682
|
- spec/fixtures/decorators/deployment/configMap/envFrom.yaml
|
665
683
|
- spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
|
666
684
|
- spec/fixtures/decorators/deployment/configMap/volumes.yaml
|