Skip to content

Commit 3fa7c1f

Browse files
authored
Merge pull request #36 from kubero-dev/feature/improve-OLM-installation
improve OLM installation
2 parents 10e7be7 + d1b603d commit 3fa7c1f

File tree

3 files changed

+320
-5
lines changed

3 files changed

+320
-5
lines changed

cmd/kuberoCli/install.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,9 @@ func installOLM() {
262262
install_olm = true
263263
}
264264

265-
olmRelease := promptLine("Install OLM from which release?", "[0.20.0,0.21.0,0.22.0,0.23.1]", "0.23.1")
266-
olmURL := "https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v" + olmRelease
265+
olmVersionlist := getGithubVersionList("operator-framework/operator-lifecycle-manager", 10)
266+
olmRelease := selectFromList("Select OLM version", olmVersionlist, "")
267+
olmURL := "https://github.com/operator-framework/operator-lifecycle-manager/releases/download/" + olmRelease
267268

268269
olmSpinner := spinner.New("Install OLM")
269270

@@ -731,7 +732,7 @@ func installCertManagerSlim() {
731732
}
732733

733734
certManagerSpinner.UpdateMessage("Waiting for Cert Manager to be ready")
734-
time.Sleep(5 * time.Second)
735+
time.Sleep(10 * time.Second)
735736
_, certManagerWaitErr := exec.Command("kubectl", "wait", "--for=condition=available", "deployment/cert-manager-webhook", "-n", "cert-manager", "--timeout=180s", "-n", "cert-manager").Output()
736737
if certManagerWaitErr != nil {
737738
certManagerSpinner.Error("Failed to run command. Try runnig it manually: kubectl wait --for=condition=available deployment/cert-manager-webhook -n cert-manager --timeout=180s -n cert-manager")
@@ -796,9 +797,15 @@ func installOLMCertManager() {
796797
}
797798
certManagerSpinner.Success("Cert Manager installed")
798799

799-
time.Sleep(2 * time.Second)
800800
certManagerSpinner = spinner.New("Wait for Cert Manager to be ready")
801-
certManagerSpinner.Start("run command : kubectl wait --for=condition=available deployment/cert-manager-webhook -n cert-manager --timeout=180s -n operators")
801+
certManagerSpinner.Start("installing Cert Manager")
802+
803+
cfmt.Println("\r run command : kubectl wait --for=condition=available deployment/cert-manager-webhook -n cert-manager --timeout=180s -n operators")
804+
cfmt.Println("\r This might take a while. Time enough for a joke:")
805+
for i := 0; i < 4; i++ {
806+
tellAChucknorrisJoke()
807+
time.Sleep(15 * time.Second)
808+
}
802809
_, certManagerWaitErr := exec.Command("kubectl", "wait", "--for=condition=available", "deployment/cert-manager-webhook", "-n", "cert-manager", "--timeout=180s", "-n", "operators").Output()
803810
if certManagerWaitErr != nil {
804811
certManagerSpinner.Error("Failed to run command. Try runnig it manually: kubectl wait --for=condition=available deployment/cert-manager-webhook -n cert-manager --timeout=180s -n operators")
@@ -906,6 +913,28 @@ func getAvailableStorageClasses() []string {
906913
return storageClasses
907914
}
908915

916+
func getGithubVersionList(repository string, limit int) []string {
917+
918+
githubapi := resty.New().
919+
SetHeader("Accept", "application/json").
920+
SetHeader("Content-Type", "application/json").
921+
SetHeader("User-Agent", "kubero-cli/"+kuberoCliVersion).
922+
SetBaseURL("https://api.github.com/repos/")
923+
924+
tags, _ := githubapi.R().Get(repository + "/tags")
925+
var versions []GithubVersion
926+
json.Unmarshal(tags.Body(), &versions)
927+
928+
versionList := []string{}
929+
for _, version := range versions {
930+
if limit == 0 || len(versionList) < limit {
931+
versionList = append(versionList, version.Name)
932+
}
933+
}
934+
935+
return versionList
936+
}
937+
909938
type StorageClassesList struct {
910939
APIVersion string `json:"apiVersion"`
911940
Items []struct {

cmd/kuberoCli/types.go

+11
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,14 @@ type Config struct {
282282
Token string `json:"token" yaml:"token"`
283283
} `json:"api" yaml:"api"`
284284
}
285+
286+
type GithubVersion struct {
287+
Name string `json:"name"`
288+
ZipballURL string `json:"zipball_url"`
289+
TarballURL string `json:"tarball_url"`
290+
Commit struct {
291+
Sha string `json:"sha"`
292+
URL string `json:"url"`
293+
} `json:"commit"`
294+
NodeID string `json:"node_id"`
295+
}

kuberoUI.yaml

+275
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
apiVersion: application.kubero.dev/v1alpha1
2+
kind: Kubero
3+
metadata:
4+
name: kubero
5+
spec:
6+
affinity: {}
7+
fullnameOverride: ""
8+
image:
9+
pullPolicy: Always
10+
repository: ghcr.io/kubero-dev/kubero/kubero
11+
tag: latest
12+
imagePullSecrets: []
13+
ingress:
14+
annotations:
15+
cert-manager.io/cluster-issuer: letsencrypt-prod
16+
kubernetes.io/tls-acme: "true"
17+
className: ""
18+
enabled: true
19+
hosts:
20+
- host: kubero.localhost
21+
paths:
22+
- path: /
23+
pathType: ImplementationSpecific
24+
tls:
25+
- secretName: kubero-tls
26+
hosts:
27+
- kubero.localhost
28+
nameOverride: ""
29+
nodeSelector: {}
30+
podAnnotations: {}
31+
podSecurityContext: {}
32+
registry:
33+
enabled: false
34+
create: false
35+
host: registry.demo.kubero.dev
36+
account:
37+
username: kubero
38+
password: kubero
39+
hash: $2y$05$czQZpvtDYc5OzM/1r1pH0eAplT/okohh/mXoWl/Y65ZP/8/jnSWZq
40+
port: 443
41+
storage: 1Gi
42+
storageClassName: null
43+
replicaCount: 1
44+
resources: {}
45+
securityContext: {}
46+
service:
47+
port: 2000
48+
type: ClusterIP
49+
serviceAccount:
50+
annotations: {}
51+
create: true
52+
name: ""
53+
tolerations: []
54+
kubero:
55+
debug: ""
56+
namespace: kubero
57+
context: inClusterContext
58+
webhook_url: https://kubero.localhost/api/repo/webhooks
59+
sessionKey: randomString
60+
auth:
61+
github:
62+
enabled: false
63+
id: ""
64+
oauth2:
65+
enabled: false
66+
auditLogs:
67+
enabled: false
68+
storageClassName: ""
69+
size: 0.1Gi
70+
accessModes:
71+
- ReadWriteOnce
72+
limit: "1000"
73+
config:
74+
kubero:
75+
readonly: false
76+
console:
77+
enabled: false
78+
banner:
79+
show: false
80+
message: Welcome to Kubero!
81+
bgcolor: '#8560A9'
82+
fontcolor: azure
83+
clusterissuer: letsencrypt-prod
84+
templates:
85+
enabled: true
86+
catalogs:
87+
- name: Kubero
88+
description: Kubero templates
89+
templateBasePath: https://raw.githubusercontent.com/kubero-dev/kubero/main/services/
90+
index:
91+
url: https://raw.githubusercontent.com/kubero-dev/templates/main/index.json
92+
format: json
93+
- name: Kubero Frameworks
94+
description: Kubero templates
95+
templateBasePath: https://raw.githubusercontent.com/kubero-dev/kubero/main/services/
96+
index:
97+
url: https://raw.githubusercontent.com/kubero-dev/templates/main/index-frameworks.json
98+
format: json
99+
buildpacks:
100+
- name: NodeJS
101+
language: JavaScript
102+
fetch:
103+
repository: ghcr.io/kubero-dev/buildpacks/fetch
104+
tag: v1.2
105+
securityContext:
106+
runAsUser: 1000
107+
build:
108+
repository: node
109+
tag: latest
110+
command: npm install
111+
securityContext:
112+
runAsUser: 1000
113+
run:
114+
repository: node
115+
tag: latest
116+
readOnlyAppStorage: false
117+
securityContext:
118+
allowPrivilegeEscalation: false
119+
readOnlyRootFilesystem: false
120+
command: node index.js
121+
- name: PHP
122+
language: PHP
123+
fetch:
124+
repository: ghcr.io/kubero-dev/buildpacks/fetch
125+
tag: v1.2
126+
securityContext:
127+
runAsUser: 1000
128+
build:
129+
repository: composer
130+
tag: latest
131+
command: composer install; chown -R 1000:1000 /app
132+
securityContext:
133+
runAsUser: 0
134+
run:
135+
repository: webdevops/php-apache
136+
tag: "8.1"
137+
readOnlyAppStorage: false
138+
securityContext:
139+
allowPrivilegeEscalation: true
140+
readOnlyRootFilesystem: false
141+
command: apache2-foreground
142+
- name: Python
143+
language: Python
144+
fetch:
145+
repository: ghcr.io/kubero-dev/buildpacks/fetch
146+
tag: v1.2
147+
securityContext:
148+
runAsUser: 1000
149+
build:
150+
repository: python
151+
tag: 3.10-buster
152+
command: python3 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt
153+
securityContext:
154+
runAsUser: 0
155+
run:
156+
repository: python
157+
tag: 3.10-buster
158+
readOnlyAppStorage: false
159+
securityContext:
160+
allowPrivilegeEscalation: false
161+
readOnlyRootFilesystem: false
162+
command: . .venv/bin/activate && python3 main.py
163+
- name: GoLang
164+
language: GoLang
165+
fetch:
166+
repository: ghcr.io/kubero-dev/buildpacks/fetch
167+
tag: v1.2
168+
securityContext:
169+
runAsUser: 1000
170+
build:
171+
repository: golang
172+
tag: alpine
173+
command: go mod download && go mod verify && go build -v -o app
174+
securityContext:
175+
runAsUser: 0
176+
run:
177+
repository: golang
178+
tag: alpine
179+
readOnlyAppStorage: false
180+
securityContext:
181+
allowPrivilegeEscalation: false
182+
readOnlyRootFilesystem: false
183+
command: ./app
184+
- name: Hugo
185+
language: GoLang
186+
fetch:
187+
repository: ghcr.io/kubero-dev/buildpacks/fetch
188+
tag: v1.2
189+
securityContext:
190+
runAsUser: 1000
191+
build:
192+
repository: klakegg/hugo
193+
tag: latest
194+
command: hugo -D
195+
securityContext:
196+
runAsUser: 0
197+
run:
198+
repository: caddy
199+
tag: latest
200+
readOnlyAppStorage: false
201+
securityContext:
202+
allowPrivilegeEscalation: false
203+
readOnlyRootFilesystem: false
204+
command: caddy file-server --listen :8080 --root /app/public
205+
- name: Ruby
206+
language: Ruby
207+
fetch:
208+
repository: ghcr.io/kubero-dev/buildpacks/fetch
209+
tag: v1.2
210+
securityContext:
211+
runAsUser: 1000
212+
build:
213+
repository: ruby
214+
tag: "2.7"
215+
command: export GEM_HOME=/app/bundle; bundle install --jobs=4 --retry=3
216+
securityContext:
217+
runAsUser: 0
218+
run:
219+
repository: ruby
220+
tag: "2.7"
221+
readOnlyAppStorage: false
222+
securityContext:
223+
allowPrivilegeEscalation: false
224+
readOnlyRootFilesystem: false
225+
command: export GEM_HOME=/app/bundle; bundle exec ruby main.rb
226+
- name: Static
227+
language: HTML
228+
fetch:
229+
repository: ghcr.io/kubero-dev/buildpacks/fetch
230+
tag: v1.2
231+
securityContext:
232+
runAsUser: 1000
233+
build:
234+
repository: busybox
235+
tag: latest
236+
command: echo 'Buildpack not required'
237+
securityContext:
238+
runAsUser: 0
239+
run:
240+
repository: caddy
241+
tag: latest
242+
readOnlyAppStorage: false
243+
securityContext:
244+
allowPrivilegeEscalation: false
245+
readOnlyRootFilesystem: false
246+
command: caddy file-server --listen :8080 --root /app
247+
podSizeList:
248+
- name: small
249+
description: 'Small (CPU: 0.25, Memory: 0.5Gi)'
250+
default: true
251+
resources:
252+
requests:
253+
memory: 0.5Gi
254+
cpu: 250m
255+
limits:
256+
memory: 1Gi
257+
cpu: 500m
258+
- name: medium
259+
description: 'Medium (CPU: 1, Memory: 2Gi)'
260+
resources:
261+
requests:
262+
memory: 2Gi
263+
cpu: 1000m
264+
limits:
265+
memory: 4Gi
266+
cpu: 2000m
267+
- name: large
268+
description: 'Large (CPU: 2, Memory: 4Gi)'
269+
resources:
270+
requests:
271+
memory: 4Gi
272+
cpu: 2000m
273+
limits:
274+
memory: 4Gi
275+
cpu: 2000m

0 commit comments

Comments
 (0)