sct 0.1.27 → 0.1.33
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/cluster/lib/.DS_Store +0 -0
- data/cluster/lib/cluster.rb +0 -0
- data/cluster/lib/cluster/commands_generator.rb +38 -50
- data/cluster/lib/cluster/module.rb +2 -2
- data/cluster/lib/cluster/resources/.DS_Store +0 -0
- data/cluster/lib/cluster/resources/corefile.yml +0 -0
- data/cluster/lib/cluster/runner.rb +173 -96
- data/sct/lib/.DS_Store +0 -0
- data/sct/lib/sct.rb +0 -0
- data/sct/lib/sct/.DS_Store +0 -0
- data/sct/lib/sct/cli_tools_distributor.rb +0 -0
- data/sct/lib/sct/command.rb +0 -0
- data/sct/lib/sct/commands/hostfile.rb +17 -13
- data/sct/lib/sct/commands/init.rb +0 -0
- data/sct/lib/sct/commands/mysqlproxy.rb +0 -0
- data/sct/lib/sct/commands_generator.rb +8 -8
- data/sct/lib/sct/tools.rb +0 -0
- data/sct/lib/sct/version.rb +1 -1
- data/sct_core/lib/.DS_Store +0 -0
- data/sct_core/lib/sct_core.rb +0 -0
- data/sct_core/lib/sct_core/.DS_Store +0 -0
- data/sct_core/lib/sct_core/command_executor.rb +0 -0
- data/sct_core/lib/sct_core/config.rb +0 -0
- data/sct_core/lib/sct_core/core_ext/string.rb +0 -0
- data/sct_core/lib/sct_core/helper.rb +29 -30
- data/sct_core/lib/sct_core/module.rb +0 -0
- data/sct_core/lib/sct_core/sct_pty.rb +0 -0
- data/sct_core/lib/sct_core/ui/implementations/shell.rb +0 -0
- data/sct_core/lib/sct_core/ui/interface.rb +0 -0
- data/sct_core/lib/sct_core/ui/ui.rb +0 -0
- data/sct_core/lib/sct_core/update_checker/update_checker.rb +2 -6
- data/shell/lib/shell.rb +1 -2
- data/shell/lib/shell/commands_generator.rb +2 -2
- data/shell/lib/shell/module.rb +2 -2
- data/shell/lib/shell/runner.rb +75 -26
- metadata +3 -10
- data/shell/README.md +0 -0
- data/shell/lib/shell/ClassLevelInheritableAttributes.rb +0 -25
- data/shell/lib/shell/docker/composer.rb +0 -16
- data/shell/lib/shell/docker/docker.rb +0 -218
- data/shell/lib/shell/docker/php.rb +0 -60
- data/shell/lib/shell/docker/yarn.rb +0 -17
- data/shell/lib/shell/tools.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2e41b42a8946aed6b8dbe5433b5c3ee3c81bff9d067468bbb1918a6e2c68923
|
4
|
+
data.tar.gz: 5ccbfd3297e07405b088c5ee403ee03bad743e8fa35503c3edf4d609e31ca9a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 526a75d3b045b8f627a41fe54f7ddae8bf953c132e609371469059955769c7f13b4e87d0dbf8e0c8d3994d5cbf4bcbbb8d01ed3d4fb604f12deea3eccc80eebf
|
7
|
+
data.tar.gz: 89e5331e801bdacb9b8ce26ff4077bee6c9a86c51793cc7152680e4f684e455785e0186fb1045306316dac3eb6455580d1cf1c646db816e64b690dd26715f3da
|
data/cluster/lib/.DS_Store
CHANGED
File without changes
|
data/cluster/lib/cluster.rb
CHANGED
File without changes
|
@@ -9,63 +9,71 @@ module Cluster
|
|
9
9
|
self.new.run
|
10
10
|
end
|
11
11
|
|
12
|
-
def run
|
12
|
+
def run
|
13
13
|
program :name, 'cluster'
|
14
14
|
program :version, Sct::VERSION
|
15
15
|
program :description, 'CLI for \'cluster\' - Manage your local kubernetes cluster'
|
16
16
|
|
17
17
|
global_option('--verbose') { $verbose = true }
|
18
18
|
|
19
|
-
command :
|
19
|
+
command :start do |c|
|
20
|
+
c.syntax = "sct cluster start"
|
21
|
+
c.description = "start the cluster"
|
20
22
|
|
21
|
-
c.
|
22
|
-
|
23
|
-
c.option '--clean', 'start a clean cluster. Old cluster will be purged if available.'
|
24
|
-
|
25
|
-
c.action do |args, options|
|
26
|
-
if options.clean
|
27
|
-
Cluster::Runner.new.reset
|
28
|
-
else
|
29
|
-
Cluster::Runner.new.launch
|
30
|
-
end
|
23
|
+
c.action do |args, options|
|
24
|
+
Cluster::Runner.new.start
|
31
25
|
end
|
32
26
|
|
33
27
|
end
|
34
28
|
|
35
|
-
command :
|
36
|
-
|
37
|
-
c.syntax = 'sct cluster down'
|
29
|
+
command :stop do |c|
|
30
|
+
c.syntax = 'sct cluster stop'
|
38
31
|
c.description = 'stop the cluster'
|
39
32
|
|
40
|
-
c.action do |args, options|
|
41
|
-
Cluster::Runner.new.
|
33
|
+
c.action do |args, options|
|
34
|
+
Cluster::Runner.new.stop
|
42
35
|
end
|
43
36
|
end
|
44
37
|
|
45
|
-
command :
|
38
|
+
command :restart do |c|
|
39
|
+
c.syntax = "sct cluster restart"
|
40
|
+
c.description = "restart the cluster"
|
41
|
+
|
42
|
+
c.action do |args, options|
|
43
|
+
Cluster::Runner.new.restart
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
command :delete do |c|
|
49
|
+
c.syntax = "sct cluster delete"
|
50
|
+
c.description = "delete the cluster"
|
51
|
+
|
52
|
+
c.action do |args, options|
|
53
|
+
Cluster::Runner.new.delete
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
46
57
|
|
58
|
+
command :reset do |c|
|
47
59
|
c.syntax = 'sct cluster reset'
|
48
|
-
c.description = '
|
60
|
+
c.description = 'delete the cluster and start a new cluster'
|
49
61
|
|
50
|
-
c.action do |args, options|
|
62
|
+
c.action do |args, options|
|
51
63
|
Cluster::Runner.new.reset
|
52
64
|
end
|
53
65
|
end
|
54
66
|
|
55
|
-
alias_command :'setup', :'reset'
|
56
|
-
|
57
67
|
command :status do |c|
|
58
|
-
|
59
68
|
c.syntax = 'sct cluster status'
|
60
69
|
c.description = 'see the status of your cluster'
|
61
70
|
|
62
|
-
c.action do |args, options|
|
71
|
+
c.action do |args, options|
|
63
72
|
Cluster::Runner.new.status
|
64
73
|
end
|
65
74
|
end
|
66
75
|
|
67
76
|
command :'update config' do |c|
|
68
|
-
|
69
77
|
c.syntax = 'sct cluster update config'
|
70
78
|
c.description = 'update the cluster configuration'
|
71
79
|
|
@@ -74,36 +82,16 @@ module Cluster
|
|
74
82
|
end
|
75
83
|
end
|
76
84
|
|
77
|
-
command :'
|
78
|
-
c.syntax = 'sct cluster
|
79
|
-
c.description = '
|
80
|
-
c.option '--stalled', 'delete stalled pods'
|
81
|
-
c.option '--all', 'delete all pods'
|
82
|
-
|
83
|
-
c.action do |args, options|
|
84
|
-
|
85
|
-
Cluster::Runner.new.delete_stalled_pods if options.stalled
|
86
|
-
Cluster::Runner.new.delete_all_pods if options.all
|
87
|
-
|
88
|
-
Cluster::Runner.new.delete_pods(args) if !args.empty?
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
command :'apply pods' do |c|
|
94
|
-
c.syntax = 'sct cluster apply pods'
|
95
|
-
c.description = 'apply pods from the k8s folder'
|
85
|
+
command :'apply deployments' do |c|
|
86
|
+
c.syntax = 'sct cluster apply deployments'
|
87
|
+
c.description = 'apply deployments from the k8s folder'
|
96
88
|
|
97
89
|
c.action do |args, options|
|
98
|
-
|
99
|
-
Cluster::Runner.new.apply_pods
|
100
|
-
|
90
|
+
Cluster::Runner.new.apply_deployments
|
101
91
|
end
|
102
92
|
end
|
103
93
|
|
104
|
-
default_command :status
|
105
|
-
|
106
94
|
run!
|
107
95
|
end
|
108
96
|
end
|
109
|
-
end
|
97
|
+
end
|
File without changes
|
File without changes
|
@@ -1,118 +1,165 @@
|
|
1
1
|
module Cluster
|
2
2
|
class Runner
|
3
3
|
|
4
|
-
def
|
5
|
-
|
4
|
+
def start
|
5
|
+
SctCore::Helper.ensure_windows_administrator # "sct hostfile" will need it later on
|
6
|
+
|
7
|
+
existing_cluster = cluster_exists?
|
8
|
+
|
6
9
|
start_cluster
|
7
|
-
run_command "kubectl delete pod -n kube-system #{pods("kube-system").map { |pod| pod[:name] if pod[:name].start_with? "registry-creds" } .compact.join(" ")}"
|
8
|
-
run_command "kubectl rollout status -n kube-system deployment/registry-creds"
|
9
|
-
post_start
|
10
|
-
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
run_command "
|
11
|
+
if existing_cluster
|
12
|
+
run_command "kubectl rollout restart -n kube-system deployment registry-creds"
|
13
|
+
run_command "kubectl rollout status -n kube-system deployment registry-creds"
|
15
14
|
else
|
16
|
-
|
15
|
+
create_secrets
|
16
|
+
enable_addons
|
17
|
+
wait_for_gcr_secret
|
18
|
+
run_command "kubectl apply -f ~/development/spend-cloud/k8s/ingress.yml"
|
19
|
+
wait_for_ingress_ip
|
20
|
+
run_command "kubectl apply -f ~/development/spend-cloud/k8s/dependencies.yml"
|
21
|
+
wait_for_pods
|
22
|
+
create_keycloak_database_user
|
23
|
+
run_command "kubectl apply -f ~/development/spend-cloud/k8s/keycloak-server.yml"
|
24
|
+
wait_for_pods
|
25
|
+
run_command "kubectl apply -f ~/development/spend-cloud/k8s/"
|
17
26
|
end
|
18
|
-
|
19
|
-
|
27
|
+
|
28
|
+
post_start
|
20
29
|
end
|
21
30
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
31
|
+
def stop
|
32
|
+
run_command "minikube stop"
|
33
|
+
end
|
34
|
+
|
35
|
+
def restart
|
36
|
+
SctCore::Helper.ensure_windows_administrator # "sct hostfile" will need it later on
|
37
|
+
|
38
|
+
stop
|
39
|
+
start
|
26
40
|
end
|
27
41
|
|
28
|
-
def
|
29
|
-
run_command "
|
42
|
+
def delete
|
43
|
+
run_command "minikube delete"
|
30
44
|
end
|
31
45
|
|
32
46
|
def reset
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
wait_for_gcr_secret
|
38
|
-
run_command "kubectl apply -f ~/development/spend-cloud/k8s/ingress.yml"
|
39
|
-
wait_for_ingress_ip
|
40
|
-
run_command "kubectl apply -f ~/development/spend-cloud/k8s/dependencies.yml"
|
41
|
-
wait_for_pods
|
42
|
-
run_command "kubectl apply -f ~/development/spend-cloud/k8s/"
|
43
|
-
post_start
|
47
|
+
SctCore::Helper.ensure_windows_administrator # "sct hostfile" will need it later on
|
48
|
+
|
49
|
+
delete
|
50
|
+
start
|
44
51
|
end
|
45
52
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
53
|
+
def status
|
54
|
+
print_contexts
|
55
|
+
print_minikube_status
|
56
|
+
|
57
|
+
if get_minikube_status.find_all { |status| status[1] == 'Stopped' }.count == 0
|
58
|
+
print_pods_status("kube-system")
|
59
|
+
print_pods_status
|
60
|
+
else
|
61
|
+
UI.important("Please check your minikube status. If all services are stopped you should start the minikube first.")
|
62
|
+
end
|
49
63
|
end
|
50
64
|
|
51
|
-
def
|
52
|
-
run_command "
|
65
|
+
def update_config
|
66
|
+
run_command "kubectl config use-context minikube"
|
53
67
|
|
54
|
-
|
68
|
+
run_command "kubectl replace -n kube-system -f #{File.expand_path('resources/corefile.yml', __dir__)}"
|
69
|
+
run_command "kubectl rollout restart -n kube-system deployment coredns"
|
70
|
+
run_command "kubectl rollout status -n kube-system deployment coredns"
|
71
|
+
end
|
55
72
|
|
56
|
-
|
73
|
+
def apply_deployments
|
74
|
+
run_command "kubectl apply -f ~/development/spend-cloud/k8s/"
|
57
75
|
end
|
58
76
|
|
59
|
-
def wait_for_pods
|
60
|
-
UI.important("Waiting for pods to become ready...")
|
61
77
|
|
62
|
-
|
63
|
-
|
78
|
+
def cluster_exists?
|
79
|
+
if system "minikube status", { out: "/dev/null" }
|
80
|
+
# cluster exists and is running
|
81
|
+
return true
|
82
|
+
end
|
64
83
|
|
65
|
-
|
84
|
+
if $?.exitstatus == 85
|
85
|
+
# cluster does not exist
|
86
|
+
return false
|
66
87
|
end
|
67
88
|
|
68
|
-
|
89
|
+
# cluster exists but is stopped
|
90
|
+
return true
|
69
91
|
end
|
70
92
|
|
71
|
-
def
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
stalled_pods = pods.select { |pod| pod[:stalled] }
|
76
|
-
|
77
|
-
if stalled_pods.empty?
|
78
|
-
UI.success("There are no stalled pods.") if feedback
|
93
|
+
def start_cluster
|
94
|
+
if SctCore::Helper.operatingSystem == SctCore::Helper::MAC_OS
|
95
|
+
run_command "minikube start --driver=hyperkit --vm=true --cpus=$(sysctl -n hw.ncpu) --memory=8G"
|
79
96
|
else
|
80
|
-
run_command "
|
97
|
+
run_command "minikube start --driver=docker --cpus=$(cat /proc/cpuinfo | grep processor | wc -l) --memory=3G"
|
81
98
|
end
|
99
|
+
update_config
|
82
100
|
end
|
83
101
|
|
84
|
-
def
|
85
|
-
|
102
|
+
def post_start
|
103
|
+
wait_for_pods
|
104
|
+
copy_proactive_accounts_file
|
105
|
+
if SctCore::Helper.operatingSystem != SctCore::Helper::WINDOWS
|
106
|
+
UI.success("\nAdding SSH tunnel to port 443!")
|
107
|
+
run_command "sudo ssh -f -N -i $(minikube ssh-key) docker@$(minikube ip) -L 443:127.0.0.1:443"
|
108
|
+
end
|
109
|
+
# run_command "sudo sct hostfile"
|
110
|
+
run_command "minikube tunnel &", { out: "/dev/null", err: "/dev/null" } if SctCore::Helper::is_windows? # leave this running detached forever in the background
|
111
|
+
UI.success("\n✔️ You can visit your environment at 👉 https://spend-cloud.dev.spend.cloud 👌")
|
86
112
|
end
|
87
113
|
|
88
|
-
def
|
89
|
-
|
114
|
+
def enable_addons
|
115
|
+
enable_addon "registry-creds"
|
116
|
+
enable_addon "ingress"
|
90
117
|
end
|
91
118
|
|
92
|
-
def
|
93
|
-
run_command "
|
119
|
+
def enable_addon(addon)
|
120
|
+
run_command "minikube addons enable #{addon}"
|
121
|
+
|
122
|
+
deployment = deployments("kube-system").find { |deployment| deployment[:name].include? addon }
|
123
|
+
|
124
|
+
run_command "kubectl rollout status -n kube-system deployment #{deployment[:name]}"
|
94
125
|
end
|
95
126
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
|
127
|
+
def wait_for_pods
|
128
|
+
UI.important("Waiting for pods to become ready...")
|
129
|
+
|
130
|
+
previous_lines = 0
|
100
131
|
|
101
|
-
|
102
|
-
|
132
|
+
while ! pods.all? { |pod| pod[:ready] }
|
133
|
+
pods_status_lines = get_pods_status.to_s.lines.map { |line| line.chomp }
|
134
|
+
|
135
|
+
current_lines = pods_status_lines.length
|
136
|
+
|
137
|
+
line_difference = current_lines - previous_lines
|
138
|
+
|
139
|
+
if line_difference < 0 # there are now less lines than before
|
140
|
+
line_difference.abs.times do
|
141
|
+
print "\033[1A\033[K" # move the cursor up a line and clear the line
|
142
|
+
end
|
143
|
+
|
144
|
+
print "\033[#{current_lines}A" # move the cursor all the way up to the start of the table
|
145
|
+
elsif previous_lines > 0
|
146
|
+
print "\033[#{previous_lines}A" # move the cursor all the way up to the start of the table
|
103
147
|
end
|
104
148
|
|
105
|
-
|
149
|
+
pods_status_lines.each do |line|
|
150
|
+
print "#{line}\033[K#{$/}" # print the content of the line, clear remaining characters and add a new line
|
151
|
+
end
|
152
|
+
|
153
|
+
previous_lines = current_lines
|
106
154
|
|
107
|
-
|
155
|
+
sleep 5
|
108
156
|
end
|
109
157
|
|
110
|
-
|
158
|
+
previous_lines.times do
|
159
|
+
print "\033[1A\033[K" # move the cursor up a line and clear the line
|
160
|
+
end
|
111
161
|
|
112
|
-
|
113
|
-
old_list = pods("kube-system").map { |pod| pod[:name] if pod[:name].start_with? "coredns" }.compact
|
114
|
-
run_command "kubectl delete pod -n kube-system #{old_list.join(" ")}" unless old_list.to_a.empty?
|
115
|
-
run_command "kubectl rollout status -n kube-system deployment/coredns"
|
162
|
+
UI.success("Pods are now ready.")
|
116
163
|
end
|
117
164
|
|
118
165
|
def deployments(namespace = "default")
|
@@ -150,13 +197,15 @@ module Cluster
|
|
150
197
|
columns = line.split(" ")
|
151
198
|
|
152
199
|
name = columns[0]
|
200
|
+
ready = columns[1].split("/").reduce { |l, r| l == r }
|
201
|
+
replicas = columns[1]
|
153
202
|
status = columns[2]
|
154
|
-
stalled = status == "ErrImagePull" || status == "ImagePullBackOff"
|
155
203
|
|
156
204
|
{
|
157
205
|
name: name,
|
158
|
-
|
159
|
-
|
206
|
+
ready: ready,
|
207
|
+
replicas: replicas,
|
208
|
+
status: status
|
160
209
|
}
|
161
210
|
end
|
162
211
|
end
|
@@ -193,18 +242,6 @@ module Cluster
|
|
193
242
|
UI.success("Ingress IP is now available.")
|
194
243
|
end
|
195
244
|
|
196
|
-
def status
|
197
|
-
print_contexts
|
198
|
-
print_minikube_status
|
199
|
-
|
200
|
-
if get_minikube_status.find_all { |status| status[1] == 'Stopped' }.count == 0
|
201
|
-
print_pods_status("kube-system")
|
202
|
-
print_pods_status
|
203
|
-
else
|
204
|
-
UI.important("Please check your minikube status. If all services are stopped you should start the minikube first.")
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
245
|
def print_contexts
|
209
246
|
output = `kubectl config get-contexts`
|
210
247
|
|
@@ -223,12 +260,11 @@ module Cluster
|
|
223
260
|
end
|
224
261
|
|
225
262
|
def print_minikube_status
|
226
|
-
|
227
263
|
puts Terminal::Table.new title: "Minikube status".green, headings: ['Name', 'Status'], rows: get_minikube_status
|
228
264
|
end
|
229
265
|
|
230
266
|
def get_minikube_status
|
231
|
-
output =
|
267
|
+
output = `minikube status`
|
232
268
|
|
233
269
|
lines = output.split "\n"
|
234
270
|
|
@@ -240,25 +276,66 @@ module Cluster
|
|
240
276
|
end
|
241
277
|
|
242
278
|
def print_pods_status(namespace = "default")
|
279
|
+
output = get_pods_status(namespace)
|
243
280
|
|
244
|
-
|
281
|
+
puts output if output
|
282
|
+
end
|
245
283
|
|
246
|
-
|
247
|
-
|
248
|
-
|
284
|
+
def get_pods_status(namespace = "default")
|
285
|
+
rows = pods(namespace).map do |pod|
|
286
|
+
status = pod[:status]
|
287
|
+
replicas = pod[:replicas]
|
249
288
|
|
250
|
-
rows = pods_list.map do |pod|
|
251
289
|
[
|
252
290
|
pod[:name],
|
253
|
-
|
291
|
+
status == "Running" ? status.green : status.red,
|
292
|
+
pod[:ready] ? replicas.green : replicas.red
|
254
293
|
]
|
255
294
|
end
|
256
295
|
|
257
|
-
|
296
|
+
if rows.empty?
|
297
|
+
return
|
298
|
+
end
|
299
|
+
|
300
|
+
return Terminal::Table.new title: "Pods (namespace: #{namespace})".green, headings: ['Name', 'Status', 'Replicas ready'], rows: rows
|
301
|
+
end
|
302
|
+
|
303
|
+
def copy_proactive_accounts_file
|
304
|
+
container_name = "proactive-config"
|
305
|
+
pod_id = pods().select {|pod| pod[:name].start_with?(container_name)}.first[:name]
|
306
|
+
|
307
|
+
begin
|
308
|
+
UI.important("Checking ProActive accounts file...")
|
309
|
+
run_command "kubectl exec #{pod_id} -- test -e /data/proactive_accounts.ini", [:out, :err] => File::NULL
|
310
|
+
rescue => e
|
311
|
+
UI.important("Copying ProActive accounts file to deployments...")
|
312
|
+
src_path = "#{Dir.home()}/development/spend-cloud/k8s/conf/proactive_accounts.ini"
|
313
|
+
command = "kubectl cp #{src_path} #{pod_id}:/data/proactive_accounts.ini -c #{container_name}"
|
314
|
+
run_command command
|
315
|
+
end
|
316
|
+
|
317
|
+
UI.success("ProActive accounts file is available")
|
318
|
+
end
|
319
|
+
|
320
|
+
def create_keycloak_database_user
|
321
|
+
container_name = "mysql-service"
|
322
|
+
pod_id = pods().select {|pod| pod[:name].start_with?(container_name)}.first[:name]
|
323
|
+
|
324
|
+
UI.important("Creating keycloak user")
|
325
|
+
create_user = "CREATE USER 'keycloak'@'%' IDENTIFIED BY 'keycloak';"
|
326
|
+
run_command "kubectl exec #{pod_id} -- mysql -e '#{create_user}' >> /dev/null"
|
327
|
+
|
328
|
+
UI.important("Creating keycloak database")
|
329
|
+
create_database = "CREATE DATABASE keycloak CHARACTER SET utf8 COLLATE UTF8_UNICODE_CI;"
|
330
|
+
run_command "kubectl exec #{pod_id} -- mysql -e '#{create_database}' >> /dev/null"
|
331
|
+
|
332
|
+
UI.important("Granting privileges to keycloak user")
|
333
|
+
grant_privileges = "GRANT ALL PRIVILEGES ON keycloak.* TO 'keycloak'@'%';"
|
334
|
+
run_command "kubectl exec #{pod_id} -- mysql -e '#{grant_privileges}' >> /dev/null"
|
258
335
|
end
|
259
336
|
|
260
|
-
def run_command command
|
261
|
-
if ! system command
|
337
|
+
def run_command command, options = {}
|
338
|
+
if ! system command, options
|
262
339
|
raise command.red
|
263
340
|
end
|
264
341
|
end
|