kerbi 0.0.1 → 0.0.5
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/lib/cli/base_handler.rb +194 -0
- data/lib/cli/base_serializer.rb +120 -0
- data/lib/cli/config_handler.rb +51 -0
- data/lib/cli/entry_serializers.rb +99 -0
- data/lib/cli/project_handler.rb +2 -2
- data/lib/cli/release_handler.rb +41 -0
- data/lib/cli/release_serializer.rb +46 -0
- data/lib/cli/root_handler.rb +34 -13
- data/lib/cli/state_handler.rb +88 -0
- data/lib/cli/values_handler.rb +4 -3
- data/{boilerplate → lib/code-gen/new-project}/Gemfile.erb +0 -0
- data/lib/code-gen/new-project/kerbifile.rb.erb +9 -0
- data/lib/code-gen/new-project/values.yaml.erb +1 -0
- data/lib/config/cli_schema.rb +343 -28
- data/lib/config/config_file.rb +60 -0
- data/lib/config/globals.rb +4 -0
- data/lib/config/run_opts.rb +162 -0
- data/lib/config/state_consts.rb +11 -0
- data/lib/kerbi.rb +35 -10
- data/lib/main/code_gen.rb +1 -1
- data/lib/main/errors.rb +115 -0
- data/lib/main/mixer.rb +20 -10
- data/lib/mixins/cli_state_helpers.rb +108 -0
- data/lib/mixins/cm_backend_testing.rb +109 -0
- data/lib/mixins/entry_tag_logic.rb +183 -0
- data/lib/state/base_backend.rb +93 -0
- data/lib/state/config_map_backend.rb +173 -0
- data/lib/state/entry.rb +173 -0
- data/lib/state/entry_set.rb +137 -0
- data/lib/state/metadata.yaml.erb +11 -0
- data/lib/state/mixers.rb +23 -0
- data/lib/state/resources.yaml.erb +17 -0
- data/lib/utils/cli.rb +108 -9
- data/lib/utils/helm.rb +10 -12
- data/lib/utils/k8s_auth.rb +87 -0
- data/lib/utils/misc.rb +36 -1
- data/lib/utils/mixing.rb +1 -1
- data/lib/utils/values.rb +13 -22
- data/spec/cli/config_handler_spec.rb +38 -0
- data/spec/cli/release_handler_spec.rb +127 -0
- data/spec/cli/root_handler_spec.rb +100 -0
- data/spec/cli/state_handler_spec.rb +108 -0
- data/spec/cli/values_handler_spec.rb +17 -0
- data/spec/fixtures/expectations/common/bad-tag.txt +1 -0
- data/spec/fixtures/expectations/config/bad-set.txt +1 -0
- data/spec/fixtures/expectations/config/set.txt +1 -0
- data/spec/fixtures/expectations/config/show-default.yaml +6 -0
- data/spec/fixtures/expectations/release/delete.txt +1 -0
- data/spec/fixtures/expectations/release/init-already-existed.txt +2 -0
- data/spec/fixtures/expectations/release/init-both-created.txt +2 -0
- data/spec/fixtures/expectations/release/list.txt +5 -0
- data/spec/fixtures/expectations/release/status-all-working.txt +5 -0
- data/spec/fixtures/expectations/release/status-data-unreadable.txt +5 -0
- data/spec/fixtures/expectations/release/status-not-provisioned.txt +5 -0
- data/spec/fixtures/expectations/root/template-inlines.yaml +31 -0
- data/spec/fixtures/expectations/root/template-production.yaml +31 -0
- data/spec/fixtures/expectations/root/template-read-inlines.yaml +31 -0
- data/spec/fixtures/expectations/root/template-read.yaml +31 -0
- data/spec/fixtures/expectations/root/template-write.yaml +31 -0
- data/spec/fixtures/expectations/root/template.yaml +31 -0
- data/spec/fixtures/expectations/root/values.json +28 -0
- data/spec/fixtures/expectations/state/delete.txt +1 -0
- data/spec/fixtures/expectations/state/demote.txt +1 -0
- data/spec/fixtures/expectations/state/list.json +51 -0
- data/spec/fixtures/expectations/state/list.txt +6 -0
- data/spec/fixtures/expectations/state/list.yaml +35 -0
- data/spec/fixtures/expectations/state/promote.txt +1 -0
- data/spec/fixtures/expectations/state/prune-candidates.txt +1 -0
- data/spec/fixtures/expectations/state/retag.txt +1 -0
- data/spec/fixtures/expectations/state/set.txt +1 -0
- data/spec/fixtures/expectations/state/show.json +13 -0
- data/spec/fixtures/expectations/state/show.txt +13 -0
- data/spec/fixtures/expectations/state/show.yaml +8 -0
- data/spec/fixtures/expectations/values/order-of-precedence.yaml +4 -0
- data/spec/main/configmap_backend_spec.rb +110 -0
- data/spec/main/project_code_gen_spec.rb +8 -2
- data/spec/main/state_entry_set_spec.rb +112 -0
- data/spec/main/state_entry_spec.rb +109 -0
- data/spec/mini-projects/hello-kerbi/common/metadata.yaml.erb +5 -0
- data/spec/mini-projects/hello-kerbi/consts.rb +5 -0
- data/spec/mini-projects/hello-kerbi/helpers.rb +8 -0
- data/spec/mini-projects/hello-kerbi/kerbifile.rb +18 -0
- data/spec/mini-projects/hello-kerbi/pod-and-service.yaml.erb +23 -0
- data/spec/mini-projects/hello-kerbi/values/production.yaml +2 -0
- data/spec/mini-projects/hello-kerbi/values/v2.yaml +2 -0
- data/spec/mini-projects/hello-kerbi/values/values.yaml +4 -0
- data/spec/spec_helper.rb +143 -1
- data/spec/utils/helm_spec.rb +89 -109
- data/spec/utils/k8s_auth_spec.rb +32 -0
- data/spec/utils/misc_utils_spec.rb +9 -0
- data/spec/utils/values_utils_spec.rb +12 -19
- metadata +143 -16
- data/boilerplate/kerbifile.rb.erb +0 -9
- data/boilerplate/values.yaml.erb +0 -1
- data/lib/cli/base.rb +0 -83
- data/lib/config/cli_opts.rb +0 -50
- data/lib/config/manager.rb +0 -36
- data/lib/main/state_manager.rb +0 -47
- data/lib/utils/kubectl.rb +0 -58
- data/spec/main/examples_spec.rb +0 -12
- data/spec/main/state_manager_spec.rb +0 -84
- data/spec/utils/state_utils.rb +0 -15
@@ -0,0 +1,127 @@
|
|
1
|
+
require_relative './../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe "$ kerbi release [COMMAND]" do
|
4
|
+
|
5
|
+
let(:namespace) { "kerbi-spec" }
|
6
|
+
let(:release_name) { "kerbi-spec" }
|
7
|
+
let(:cm_name) { Kerbi::State::ConfigMapBackend.mk_cm_name(release_name) }
|
8
|
+
let(:exps_dir) { "release" }
|
9
|
+
|
10
|
+
let(:set) do
|
11
|
+
new_state_set(
|
12
|
+
one: { values: {x: "x"}, created_at: Time.new(2000).to_s },
|
13
|
+
two: { message: "message", created_at: Time.new(2001).to_s },
|
14
|
+
"[cand]-three".to_sym => { created_at: Time.new(2002).to_s },
|
15
|
+
"[cand]-four".to_sym => { created_at: Time.new(2003).to_s }
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
before :each do
|
20
|
+
create_ns(release_name)
|
21
|
+
delete_cm(cm_name, namespace)
|
22
|
+
backend = make_backend(release_name, namespace)
|
23
|
+
configmap_dict = backend.template_resource(set.entries)
|
24
|
+
backend.apply_resource(configmap_dict)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "$ kerbi release init [RELEASE_NAME]" do
|
28
|
+
let(:cmd) { "release init #{release_name}" }
|
29
|
+
context "when resources already existed" do
|
30
|
+
it "echoes the correct text" do
|
31
|
+
exp_cli_eq_file(cmd, exps_dir, "init-already-existed")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when the resources did not exist" do
|
36
|
+
it "echoes the correct text" do
|
37
|
+
delete_ns(namespace)
|
38
|
+
exp_cli_eq_file(cmd, exps_dir, "init-both-created")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "$ kerbi release delete [RELEASE_NAME]" do
|
44
|
+
before :each do
|
45
|
+
backend = make_backend(release_name, namespace)
|
46
|
+
backend.provision_missing_resources
|
47
|
+
end
|
48
|
+
|
49
|
+
let(:cmd) { "release delete #{release_name} " \
|
50
|
+
"--namespace #{namespace} " \
|
51
|
+
"--confirm"
|
52
|
+
}
|
53
|
+
|
54
|
+
it "deletes the resource" do
|
55
|
+
backend = make_backend(release_name, namespace)
|
56
|
+
expect(backend.read_write_ready?).to eq(true)
|
57
|
+
backend = make_backend(release_name, namespace)
|
58
|
+
exp_cli_eq_file(cmd, exps_dir, "delete")
|
59
|
+
expect(backend.read_write_ready?).to eq(false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "$ kerbi release status [RELEASE_NAME]" do
|
64
|
+
let(:cmd) { "release status #{release_name}" }
|
65
|
+
context "when resources are provisioned" do
|
66
|
+
context "when the data is readable" do
|
67
|
+
it "echoes the correct text" do
|
68
|
+
exp_cli_eq_file(cmd, exps_dir, "status-all-working")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
context "when the data is not readable" do
|
72
|
+
it "echoes the correct text" do
|
73
|
+
backend = make_backend(release_name, namespace)
|
74
|
+
corrupt_cm(backend)
|
75
|
+
exp_cli_eq_file(cmd, exps_dir, "status-data-unreadable")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when connected but resources not provisioned" do
|
81
|
+
it "echoes the correct text" do
|
82
|
+
delete_ns(namespace)
|
83
|
+
exp_cli_eq_file(cmd, exps_dir, "status-not-provisioned")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "$ kerbi release list" do
|
89
|
+
|
90
|
+
before(:each) { delete_ns("kerbi-spec") }
|
91
|
+
|
92
|
+
def provision(release_name, namespace, entry_count)
|
93
|
+
backend = make_backend(release_name, namespace)
|
94
|
+
backend.provision_missing_resources(quiet: true)
|
95
|
+
expect(backend.read_write_ready?).to eq(true)
|
96
|
+
|
97
|
+
if entry_count >= 0
|
98
|
+
entries = []
|
99
|
+
entry_count.times do |i|
|
100
|
+
entries << new_state("#{i + 1}.0.0")
|
101
|
+
end
|
102
|
+
new_dict = backend.template_resource(entries)
|
103
|
+
backend.apply_resource(new_dict, mode: "update")
|
104
|
+
else
|
105
|
+
corrupt_cm(backend)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
before :all do
|
110
|
+
delete_ns("tuna")
|
111
|
+
delete_ns("macron")
|
112
|
+
|
113
|
+
provision("tuna", "tuna", 2)
|
114
|
+
provision("dirt", "tuna", -1)
|
115
|
+
provision("tuna", "macron", 0)
|
116
|
+
end
|
117
|
+
|
118
|
+
after :all do
|
119
|
+
delete_ns("tuna")
|
120
|
+
delete_ns("macron")
|
121
|
+
end
|
122
|
+
|
123
|
+
it "works" do
|
124
|
+
exp_cli_eq_file("release list", exps_dir, "list")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require_relative './../spec_helper'
|
2
|
+
require 'io/console'
|
3
|
+
|
4
|
+
RSpec.describe "$ kerbi [COMMAND]" do
|
5
|
+
let(:namespace) { "kerbi-spec" }
|
6
|
+
let(:release_name) { "kerbi-spec" }
|
7
|
+
let(:exps_dir) { "root" }
|
8
|
+
let(:root_dir) { "#{__dir__}/../../examples/hello-kerbi" }
|
9
|
+
|
10
|
+
spec_bundles = [
|
11
|
+
["", "template"],
|
12
|
+
["-f production", "template-production"],
|
13
|
+
["-f production --set pod.image=ubuntu", "template-inlines"]
|
14
|
+
].freeze
|
15
|
+
|
16
|
+
describe "$ kerbi template" do
|
17
|
+
|
18
|
+
context "without state" do
|
19
|
+
spec_bundles.each do |bundle|
|
20
|
+
context "with #{bundle[0].presence || "no args"}" do
|
21
|
+
it "echos the expected text" do
|
22
|
+
cmd = hello_kerbi("template foo #{bundle[0]}")
|
23
|
+
exp_cli_eq_file(cmd, "root", bundle[1], "yaml")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with state" do
|
30
|
+
|
31
|
+
let(:backend){ make_backend(release_name, namespace) }
|
32
|
+
|
33
|
+
before :each do
|
34
|
+
create_ns(namespace)
|
35
|
+
delete_cm(backend.resource_name, namespace)
|
36
|
+
backend.provision_missing_resources(quiet: true)
|
37
|
+
end
|
38
|
+
|
39
|
+
def exp_vals(which)
|
40
|
+
str_keyed_hash = read_exp_file("root", "values", "json")
|
41
|
+
str_keyed_hash.deep_symbolize_keys[which.to_sym]
|
42
|
+
end
|
43
|
+
|
44
|
+
def template_write_cmd(pod_image)
|
45
|
+
base_cmd = "template #{release_name} " \
|
46
|
+
"--set pod.image=#{pod_image}" \
|
47
|
+
" --write-state foo"
|
48
|
+
hello_kerbi(base_cmd)
|
49
|
+
end
|
50
|
+
|
51
|
+
context "with writing" do
|
52
|
+
before :each do
|
53
|
+
cmd = template_write_cmd("centos")
|
54
|
+
exp_cli_eq_file(cmd, "root", "template-write", "yaml")
|
55
|
+
end
|
56
|
+
|
57
|
+
context "--write-state when the entry does not yet exist" do
|
58
|
+
it "creates a new entry with the expected values" do
|
59
|
+
entry = backend.entries[0]
|
60
|
+
expect(backend.entries.count).to eq(1)
|
61
|
+
expect(entry.tag).to eq("foo")
|
62
|
+
expect(entry.values).to eq(exp_vals("centos"))
|
63
|
+
expect(entry.default_values).to eq(exp_vals("nginx"))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "--write-state with an existing state entry" do
|
68
|
+
it "updates the existing entry with the expected values" do
|
69
|
+
cli(template_write_cmd("centos"))
|
70
|
+
cli(template_write_cmd("debian"))
|
71
|
+
expect(backend.entries.count).to eq(1)
|
72
|
+
entry = backend.entries[0]
|
73
|
+
expect(entry.tag).to eq("foo")
|
74
|
+
expect(entry.values).to eq(exp_vals("debian"))
|
75
|
+
expect(entry.default_values).to eq(exp_vals("nginx"))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "--read-state with an existing state entry" do
|
81
|
+
before(:each) { cli(template_write_cmd("centos")) }
|
82
|
+
|
83
|
+
context "without inline overrides" do
|
84
|
+
it "echos the expected text" do
|
85
|
+
cmd = hello_kerbi("template #{release_name} --read-state foo")
|
86
|
+
exp_cli_eq_file(cmd, "root", "template-read", "yaml")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "with inline overrides" do
|
91
|
+
it "echos the expected text, preferring the inline over the state" do
|
92
|
+
base = "template #{release_name} --read-state foo --set pod.image=busybox"
|
93
|
+
cmd = hello_kerbi(base)
|
94
|
+
exp_cli_eq_file(cmd, "root", "template-read-inlines", "yaml")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require_relative './../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe "$ kerbi state [COMMAND]" do
|
4
|
+
|
5
|
+
let(:namespace) { "kerbi-spec" }
|
6
|
+
let(:release_name) { "kerbi-spec" }
|
7
|
+
let(:cm_name) { Kerbi::State::ConfigMapBackend.mk_cm_name(release_name) }
|
8
|
+
let(:exps_dir) { "state" }
|
9
|
+
|
10
|
+
let(:set) do
|
11
|
+
new_state_set(
|
12
|
+
one: { values: {x: "x"}, created_at: Time.new(2000).to_s },
|
13
|
+
two: { message: "message", created_at: Time.new(2001).to_s },
|
14
|
+
"[cand]-three".to_sym => { created_at: Time.new(2002).to_s },
|
15
|
+
"[cand]-four".to_sym => { created_at: Time.new(2003).to_s }
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
before :each do
|
20
|
+
create_ns(release_name)
|
21
|
+
delete_cm(cm_name, namespace)
|
22
|
+
backend = make_backend(release_name, namespace)
|
23
|
+
configmap_dict = backend.template_resource(set.entries)
|
24
|
+
backend.apply_resource(configmap_dict)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "$ kerbi state list [RELEASE_NAME]" do
|
28
|
+
cmd_group_spec("state list kerbi-spec", "state", "list")
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "$ kerbi state show [TAG]" do
|
32
|
+
cmd_group_spec(
|
33
|
+
"state show kerbi-spec one",
|
34
|
+
"state",
|
35
|
+
"show"
|
36
|
+
)
|
37
|
+
|
38
|
+
cmd_group_spec(
|
39
|
+
"state show kerbi-spec @oldest",
|
40
|
+
"state",
|
41
|
+
"show",
|
42
|
+
context_append: " using @oldest instead of a literal tag"
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "$ kerbi state retag [RELEASE_NAME] [OLD_TAG] [NEW_TAG]" do
|
47
|
+
def make_cmd(old_tag)
|
48
|
+
"state retag #{namespace} #{old_tag} born-again"
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when the old tag exists" do
|
52
|
+
context "using a literal tag" do
|
53
|
+
it "echos the expected text" do
|
54
|
+
exp_cli_eq_file(make_cmd("two"), exps_dir, "retag")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "using @latest or @oldest" do
|
59
|
+
it "echos the expected text" do
|
60
|
+
exp_cli_eq_file(make_cmd("@latest"), exps_dir, "retag")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when the old tag does not exist" do
|
66
|
+
it "echos the expected text" do
|
67
|
+
exp_cli_eq_file(make_cmd("bad-tag"), "common", "bad-tag")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "$ kerbi state promote [RELEASE_NAME] [TAG]" do
|
73
|
+
let(:cmd) { "state promote #{release_name} @candidate" }
|
74
|
+
it "echos the expected text" do
|
75
|
+
exp_cli_eq_file(cmd, exps_dir, "promote")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "$ kerbi state demote [RELEASE_NAME] [TAG]" do
|
80
|
+
let(:cmd) { "state demote #{release_name} @latest" }
|
81
|
+
it "echos the expected text" do
|
82
|
+
exp_cli_eq_file(cmd, exps_dir, "demote")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "$ kerbi state set [RELEASE_NAME] [TAG] [ATTR] [VAL]" do
|
87
|
+
let(:easy_part) { "state set #{release_name} @latest message" }
|
88
|
+
let(:cmd) { easy_part.split(" ") + ["new message", "-n", namespace] }
|
89
|
+
it "echos the expected text" do
|
90
|
+
exp_cli_eq_file(cmd, exps_dir, "set")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "$ kerbi state delete [RELEASE_NAME] [TAG]" do
|
95
|
+
let(:cmd) { "state delete #{release_name} @latest" }
|
96
|
+
it "echos the expected text" do
|
97
|
+
exp_cli_eq_file(cmd, exps_dir, "delete")
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "$ kerbi state prune-candidates [RELEASE_NAME]" do
|
102
|
+
let(:cmd) { "state prune-candidates #{release_name}" }
|
103
|
+
it "echos the expected text" do
|
104
|
+
exp_cli_eq_file(cmd, exps_dir, "prune-candidates")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative './../spec_helper'
|
2
|
+
require 'io/console'
|
3
|
+
|
4
|
+
RSpec.describe "$ kerbi values [COMMAND]" do
|
5
|
+
let(:namespace) { "kerbi-spec" }
|
6
|
+
|
7
|
+
describe "$ kerbi values show" do
|
8
|
+
context "without state" do
|
9
|
+
it "respects --set > -f > defaults" do
|
10
|
+
base = "values show -f v2 -f production --set service.type=NodePort"
|
11
|
+
cmd = hello_kerbi(base)
|
12
|
+
exp_cli_eq_file(cmd, "values", "order-of-precedence", "yaml")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
\e[1;31;49mState given by tag bad-tag not found\e[0m
|
@@ -0,0 +1 @@
|
|
1
|
+
\e[1;31;49mIllegal config assignment. 'bad-key' not in ["state-backend", "namespace", "auth-type", "kube-config-context", "username", "password", "token"]\e[0m
|
@@ -0,0 +1 @@
|
|
1
|
+
\e[0;32;49mUpdated config[namespace] from => kerbi-spec\e[0m
|
@@ -0,0 +1 @@
|
|
1
|
+
Deleted configmaps/kerbi-spec/kerbi-kerbi-spec-db
|
@@ -0,0 +1,5 @@
|
|
1
|
+
\e[1;39;49m1. Create Kubernetes client: \e[0m\e[1;32;49mSuccess\e[0m
|
2
|
+
\e[1;39;49m2. List cluster namespaces: \e[0m\e[1;32;49mSuccess\e[0m
|
3
|
+
\e[1;39;49m3. Target namespace kerbi-spec exists: \e[0m\e[1;32;49mSuccess\e[0m
|
4
|
+
\e[1;39;49m4. Resource kerbi-spec/cm/kerbi-kerbi-spec-db exists: \e[0m\e[1;32;49mSuccess\e[0m
|
5
|
+
\e[1;39;49m5. Data from resource is readable: \e[0m\e[1;32;49mSuccess\e[0m
|
@@ -0,0 +1,5 @@
|
|
1
|
+
\e[1;39;49m1. Create Kubernetes client: \e[0m\e[1;32;49mSuccess\e[0m
|
2
|
+
\e[1;39;49m2. List cluster namespaces: \e[0m\e[1;32;49mSuccess\e[0m
|
3
|
+
\e[1;39;49m3. Target namespace kerbi-spec exists: \e[0m\e[1;32;49mSuccess\e[0m
|
4
|
+
\e[1;39;49m4. Resource kerbi-spec/cm/kerbi-kerbi-spec-db exists: \e[0m\e[1;32;49mSuccess\e[0m
|
5
|
+
\e[1;39;49m5. Data from resource is readable: \e[0m\e[1;31;49mFailure\e[0m
|
@@ -0,0 +1,5 @@
|
|
1
|
+
\e[1;39;49m1. Create Kubernetes client: \e[0m\e[1;32;49mSuccess\e[0m
|
2
|
+
\e[1;39;49m2. List cluster namespaces: \e[0m\e[1;32;49mSuccess\e[0m
|
3
|
+
\e[1;39;49m3. Target namespace kerbi-spec exists: \e[0m\e[1;31;49mFailure\e[0m
|
4
|
+
\e[1;39;49m4. Resource kerbi-spec/cm/kerbi-kerbi-spec-db exists: \e[0m\e[1;31;49mFailure\e[0m
|
5
|
+
\e[1;39;49m5. Data from resource is readable: \e[0m\e[1;31;49mFailure\e[0m
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: foo
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: ubuntu:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: foo
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: LoadBalancer
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: foo
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: nginx:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: foo
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: LoadBalancer
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: kerbi-spec
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: busybox:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: kerbi-spec
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: ClusterIP
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: kerbi-spec
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: centos:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: kerbi-spec
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: ClusterIP
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: kerbi-spec
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: centos:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: kerbi-spec
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: ClusterIP
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,31 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Pod
|
3
|
+
metadata:
|
4
|
+
name: hello-kerbi
|
5
|
+
namespace: foo
|
6
|
+
annotations:
|
7
|
+
author: person
|
8
|
+
labels:
|
9
|
+
app: hello-kerbi
|
10
|
+
spec:
|
11
|
+
containers:
|
12
|
+
- name: main
|
13
|
+
image: nginx:alpine
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
apiVersion: v1
|
18
|
+
kind: Service
|
19
|
+
metadata:
|
20
|
+
name: hello-kerbi
|
21
|
+
namespace: foo
|
22
|
+
annotations:
|
23
|
+
author: person
|
24
|
+
labels:
|
25
|
+
app: hello-kerbi
|
26
|
+
spec:
|
27
|
+
type: ClusterIP
|
28
|
+
selector:
|
29
|
+
app: hello-kerbi
|
30
|
+
ports:
|
31
|
+
- port: 80
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"centos": {
|
3
|
+
"pod": {
|
4
|
+
"image": "centos"
|
5
|
+
},
|
6
|
+
"service": {
|
7
|
+
"type": "ClusterIP"
|
8
|
+
}
|
9
|
+
},
|
10
|
+
|
11
|
+
"nginx": {
|
12
|
+
"pod": {
|
13
|
+
"image": "nginx"
|
14
|
+
},
|
15
|
+
"service": {
|
16
|
+
"type": "ClusterIP"
|
17
|
+
}
|
18
|
+
},
|
19
|
+
|
20
|
+
"debian": {
|
21
|
+
"pod": {
|
22
|
+
"image": "debian"
|
23
|
+
},
|
24
|
+
"service": {
|
25
|
+
"type": "ClusterIP"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
Deleted state[two]. Remaining entries: 3
|
@@ -0,0 +1 @@
|
|
1
|
+
\e[0;32;49mUpdated state[[cand]-two].tag from two => [cand]-two\e[0m
|
@@ -0,0 +1,51 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"tag": "[cand]-four",
|
4
|
+
"message": null,
|
5
|
+
"created_at": "2003-01-01 00:00:00 +0000",
|
6
|
+
"values": {
|
7
|
+
},
|
8
|
+
"default_values": {
|
9
|
+
},
|
10
|
+
"overridden_keys": [
|
11
|
+
|
12
|
+
]
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"tag": "[cand]-three",
|
16
|
+
"message": null,
|
17
|
+
"created_at": "2002-01-01 00:00:00 +0000",
|
18
|
+
"values": {
|
19
|
+
},
|
20
|
+
"default_values": {
|
21
|
+
},
|
22
|
+
"overridden_keys": [
|
23
|
+
|
24
|
+
]
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"tag": "two",
|
28
|
+
"message": "message",
|
29
|
+
"created_at": "2001-01-01 00:00:00 +0000",
|
30
|
+
"values": {
|
31
|
+
},
|
32
|
+
"default_values": {
|
33
|
+
},
|
34
|
+
"overridden_keys": [
|
35
|
+
|
36
|
+
]
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"tag": "one",
|
40
|
+
"message": null,
|
41
|
+
"created_at": "2000-01-01 00:00:00 +0000",
|
42
|
+
"values": {
|
43
|
+
"x": "x"
|
44
|
+
},
|
45
|
+
"default_values": {
|
46
|
+
},
|
47
|
+
"overridden_keys": [
|
48
|
+
"x"
|
49
|
+
]
|
50
|
+
}
|
51
|
+
]
|