-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprepared-issues-reduced.json
2156 lines (2156 loc) · 269 KB
/
prepared-issues-reduced.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[
{
"title": "Running on private cloud / behind corporate proxy",
"body": "**Describe the bug**\r\nUnable to pull default repo\r\n```\r\ncould not load clusterpackages: could not fetch package repository index: failed to fetch https://packages.dl.glasskube.dev/packages/index.yaml: Get \"https://packages.dl.glasskube.dev/packages/index.yaml\": net/http: TLS handshake timeout\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. basic installation process\r\n - glasskube bootstrap command\r\n\r\n**Expected behavior**\r\nSee packages from default repo\r\n\r\n**Screenshots**\r\n<img width=\"938\" alt=\"image\" src=\"https://github.com/user-attachments/assets/ae5e701e-46fb-47c8-af6c-6bb1cf6b1938\">\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.28.9\r\n - Provider: AKS\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: 0.24.0\r\n - CLI version: 0.24.0\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "`ownedPackages` should be set earlier",
"body": "**Describe the bug**\r\nWhen installing a package with a dependency, the parent package usually goes to status \"Pending\" until the next reconciliation. During that time, the `ownedPackages` does not contain the required package yet, so if one deletes the package during its in Pending status, the required package will not get purged (it has the `installed-as-depdency` annotation though). \r\n\r\nHaven't debugged it yet, but could be similar to #1261?\r\n\r\nFix should probably be to set the `ownedPackages` already at the first reconciliation. ",
"enhancement": false,
"bug": true
},
{
"title": "Introduce upgrade diff",
"body": "**Is your feature request related to a problem? Please describe.**\r\nUpgrading more complex packages often shouldn't feel like a black box operation.\r\n\r\n**Describe the solution you'd like**\r\nHave possibility to determine a resource level diff between a suspended package and the actual state, as well as a package from a different repository / version.\r\n\r\n**Describe alternatives you've considered**\r\n-\r\n\r\n**Additional context**\r\nFor helm charts we should perform a helm diff to get the difference between the actual manifests.\r\nRelated to https://github.com/glasskube/glasskube/issues/1306\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Introduce (cluster)package reconciliation suspension",
"body": "**Is your feature request related to a problem? Please describe.**\r\nHaving bigger and more complex packages installed will require some kind of manual intervention at certain point. At the moment it is required to scale to operator deployment to 0 instances to stop package reconciliation.\r\n\r\n**Describe the solution you'd like**\r\nIntroduce a feature where a package can be get suspended. While a package is suspended it will not get reconciled by the package operator.\r\n\r\n- The suspension should be possible via UI and CLI. \r\n- A suspended package should clearly highlighted a suspended in the UI.\r\n\r\n**Describe alternatives you've considered**\r\n- In ArgoCD the feature is called \"Sync\"\r\n\r\n**Additional context**\r\nMost useful with: https://github.com/glasskube/glasskube/issues/1307\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Package Repo Index Fetch Error: Content Overflow in Toast Component",
"body": "**Describe the bug**\r\nthe error message \"Not able to fetch package repo index\" to extend beyond the designated div. This affects the visibility and usability of the alert.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Add your own repo with wrong url or different url\r\n2. Open the website\r\n\r\n\r\n**Expected behavior**\r\n![msedge_1QPHUjLvAP](https://github.com/user-attachments/assets/aa99fe89-64f0-4bd4-9911-aad6babd6c03)\r\n\r\n**Screenshots**\r\n![msedge_MUUlQfa13c](https://github.com/user-attachments/assets/5eb4ac38-daf8-4bbf-bf01-d75380d5181c)\r\n\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: [e.g. Kubernetes, OpenShift]\r\n - Version: [e.g. 1.29]\r\n - Provider: [e.g. AWS, minikube]\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: [e.g. v0.0.1]\r\n - CLI version: [output of `glasskube --version`]\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Dependencies/Components not cleaned up when parent has status failed",
"body": "**Describe the bug**\r\nWhen uninstalling a failed namespaced package, it seems like some dependencies and/or components are not deleted, only the parent/root package is deleted.\r\n\r\n**To Reproduce**\r\n1. Install tracecat\r\n2. configure it invalidly to have it in status \"Failed\"\r\n3. uninstall it\r\n\r\nThe database and temporal (and therefore its components) are still in the cluster. \r\n\r\n**Expected behavior**\r\nThey should be cleaned up.\r\n\r\n**Screenshots**\r\nIf applicable, add screenshots to help explain your problem.\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: [e.g. Kubernetes, OpenShift]\r\n - Version: [e.g. 1.29]\r\n - Provider: [e.g. AWS, minikube]\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: latest dev\r\n - CLI version: latest dev",
"enhancement": false,
"bug": true
},
{
"title": "Restart deployments when package spec changes",
"body": "**Is your feature request related to a problem? Please describe.**\r\nFor example, when we patch environment variables most likely the containers need to be restarted in order to read the new config values. There might also be other occasions?\r\n\r\n**Describe the solution you'd like**\r\nTBD.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Dependency manager should use repo name if known",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCame up during the implementation of #1253 – we introduced a fallback in the dependency manager a while ago in #1177. This has some issues when a package is available in multiple repos, as the underlying `repoAdapter` returns an error because it can't decide which repo to pick the manifest from.\r\n\r\n**Describe the solution you'd like**\r\nThat error shouldn't happen, because in this case we already have an installed package and therefore know which repository to use. \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Dependency validation error during uninstallation – not available in any repository",
"body": "**Describe the bug**\r\n`failed to validate dependencies of tracecat (v0.10.1+1): is not available in any repository`\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Install tracecat via UI\r\n2. When it has succeeded, uninstall it via UI. \r\n\r\nOne or two error toasts appear with the above message. However, uninstallation proceeds and once the package is deleted, the UI redirects back to the package overview page as expected.\r\n\r\nWhat I found so far from debugging: \r\n* the dependency manager is looking for a package with an empty name, it's just not very visible in the error message\r\n* this happens in `addDependencies`, at the point where we try to `dm.getVersions`, which is called with name \"\"\r\n* that name is the `dep.PackageName`\r\n\r\nI didn't go any further yet to look why this name is empty. \r\n\r\nMaybe such empty names are even fair at the point of uninstallation. If that is the case, these specific kind of errors should be handled / ignored and not be transported back to the user. \r\n\r\n**Expected behavior**\r\n* No error toasts during uninstallation. \r\n* The error messages are suboptimal, maybe it makes sense to always put package names and stuff like that in \"\", and to wrap errors inside the dm once more (e.g. \"failed to get versions\").\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: all\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: latest dev\r\n - CLI version: latest dev\r\n\r\n**Additional context**\r\nFound during #1253 implementation, but most likely unrelated. \r\n",
"enhancement": false,
"bug": true
},
{
"title": "Add ServiceAccount support for Glasskube Packages",
"body": "Hello, \r\n\r\nI am using GlassKube Package with Flux CD for GitOps. \r\nOne of the primary features of Flux CD is its rbac based multitanency. https://github.com/fluxcd/flux2-multi-tenancy\r\n\r\nBascially, when I onboard a \"tenant\" in my multitenant cluster, all resources related to my tenant exist in its own namespace and tied to their own serviceAccount with permissions tied through K8s rbac.\r\n\r\nWhen I sync my glasskube packages, although the flux kustomizations I use to do so, refer to my tenant's service account, the resulting deployed workloads (deployment, statefulsets etc) assume default service account. \r\n\r\nI am using helm charts in glasskube packages. So the \"translated\" HelmRelease flux manifest has a missing serviceAccount field. \r\n\r\nTo support this feature:\r\n\r\n* Glasskube package accepts ServiceAccount name in its manifests for deploying workloads. \r\n* The serviceAccount name is also used for resulting flux HelmRelease instance, when using a helm chart in Glasskube. ",
"enhancement": true,
"bug": false
},
{
"title": "Introduce value definition groups",
"body": "**Is your feature request related to a problem? Please describe.**\nPackages often have some configurations that belong to the same configuration groups. If there are a *lot* of configurations the configuration page *and* the interactive cli questionair becomes confusing.\n\n**Describe the solution you'd like**\nAdd a `valueDefinitionGroups` configuration block inside the package manifest with metadata:\n\n* \"rank\" (to sort value Definition groups) (not needed as we will use a list)\n* label\n* description\n\nAdditionally each `valueDefinition` should have `group` attribute.\n\n**Describe alternatives you've considered**\nOther nested value groups.\n\n**Additional context**\nI'm open for different implementation methods that make it easier to install packages with multiple configuration options.",
"enhancement": true,
"bug": false
},
{
"title": "Adjust blog image aspect ratio to adapt to different screen sizes",
"body": "**Describe the bug**\r\nOn smaller screens the new blog appearance doesn't auto-adjust the image thumbnail aspect ratio, resulting in cut off border as can be seen in the screenshot attached below. \r\n\r\n**To Reproduce**\r\nOpen https://glasskube.dev/blog/ on a laptop screen\r\n\r\n**Expected behavior**\r\nImages adjust automatically to smaller screens and borders are not cut off\r\n\r\n**Screenshots**\r\n<img width=\"1507\" alt=\"Screenshot 2024-09-08 at 11 07 57\" src=\"https://github.com/user-attachments/assets/a75d39cd-143f-4e04-9b39-b77b3a020279\">\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Search bar overlaps an blocks the star counter on mobile devices ",
"body": "**Describe the bug**\r\nOn mobile screen devices the newly added search bar now overlaps and covers the GitHub star counter component right beside it. \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\nOpen https://glasskube.dev on a mobile device (screenshot also added below)\r\n\r\n**Expected behavior**\r\nNo overlap, usable search component as well as a visible star counter. \r\n\r\n**Screenshots**\r\n![WhatsApp Image 2024-09-08 at 11 29 37 AM](https://github.com/user-attachments/assets/73123650-279a-4c90-995e-94f3bc571d94)\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Add a cli argument to install packages with the default values for non-required configurations",
"body": "**Is your feature request related to a problem? Please describe.**\r\nInstalling packages via the the cli that has a loft of (optional) value definitions with default values is quite cumbersome.\r\n\r\n**Describe the solution you'd like**\r\nAdd a cli argument that skips all questionairs for non-required configuration options that have a default value.\r\nThe cli argument could be called `--defaults`\r\n\r\n**Describe alternatives you've considered**\r\nWe can also call the cli argument:\r\n- `--with-defaults`\r\n- `--use-defaults`\r\n- `--configure-only-required`\r\n- ...\r\n\r\n\r\n**Additional context**\r\nThis feature also helps us during CI workflows in the packages repo, as we don't need to explicitly define default values.\r\nTrieve is also one of the packages the will benefit form this newly added configuration.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "generate completions on homebrew install",
"body": "**Is your feature request related to a problem? Please describe.**\r\nGoreleaser.yaml can define the homebrew builtin functions to generate and install the shell completions in the appropriate directories\r\n\r\n**Describe the solution you'd like**\r\nit would be convenient to have shell completion automatically on install with homebrew\r\n\r\n**Describe alternatives you've considered**\r\nCurrently there are instructions on how to generate and source the completions post install. \r\n\r\n**Additional context**\r\nhttps://docs.brew.sh/Formula-Cookbook\r\nhttps://carlosbecker.com/posts/golang-completions-cobra/\r\n\r\n```\r\n install: |\r\n bin.install \"glasskube\"\r\n bash_completion.install \"completions/glasskube.bash\" => \"glasskube\"\r\n zsh_completion.install \"completions/glasskube.zsh\" => \"_glasskube\"\r\n fish_completion.install \"completions/glasskube.fish\"\r\n```",
"enhancement": true,
"bug": false
},
{
"title": "HelloGitHub Badge",
"body": "### Discussed in https://github.com/glasskube/glasskube/discussions/1175\r\n\r\n<div type='discussions-op-text'>\r\n\r\n<sup>Originally posted by **521xueweihan** September 4, 2024</sup>\r\nWe're thrilled to share that [your project](https://hellogithub.com/en/repository/5bcfc97b9ef44c409ae26d7531072f16) has caught the attention of the HelloGitHub community and has been recognized for its merit. Your work is truly inspiring, and we'd like to invite you to participate in our [HelloGitHub Badge Program](https://hellogithub.com/en/repository/5bcfc97b9ef44c409ae26d7531072f16/embed).\r\n\r\nBy joining, you'll enjoy a few benefits that we believe will complement your project's journey:\r\n\r\n1. **Community Acknowledgement**: The badge serves as a mark of distinction, indicating that your project has met the community's criteria for recommendation.\r\n2. **Visibility Boost**: Wearing the badge can help increase the visibility of your project, potentially drawing the attention of new users and contributors.\r\n3. **Easier Engagement**: The badge acts as a quick reference for users to understand your project, facilitating interaction through likes, comments, and bookmarks.\r\n4. **Feedback Opportunities**: It opens the door for valuable feedback from a diverse user base, which can be instrumental in your project's growth and refinement.\r\n5. **Notable Recognition**: Verified participants will receive a special identifier, highlighting their contributions within the community.\r\n\r\n<img width=\"775\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d97539a9-718d-4b76-a90b-b2566c83336e\">\r\n\r\n\r\nWe invite you to consider joining the [HelloGitHub Badge Program](https://hellogithub.com/en/repository/5bcfc97b9ef44c409ae26d7531072f16/embed) as a way to further engage with the community and enhance your project's presence. It's completely up to you, and we respect your decision either way.\r\n\r\nThank you for being part of this journey with us.\r\n\r\nWarm regards,\r\nThe HelloGitHub Team\r\n\r\n---\r\n\r\nHelloGitHub since launch in 2016 as a monthly newsletter, we've evolved into a thriving community that celebrates and enhances the reach of open-source projects. Today, our community is home to over 20,000 enthusiastic members, and our [open-source project](https://github.com/521xueweihan/HelloGitHub) have garnered a stellar 90,000 GitHub stars.</div>",
"enhancement": false,
"bug": false
},
{
"title": "Show package components on UI and CLI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe components introduced in #1126 are not visible yet to the user.\r\n\r\n**Describe the solution you'd like**\r\nThe `describe` command and the package detail page should show the components, in a similar manner as done with the dependencies. On the UI we should also link to them: When the package is not installed, it should link to the \"new\" page for namespaced packages, and when it is installed, it should probably link to the page of the installed namespaced package. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "No matches for PackageRepository error should not appear in gitops bootstrap",
"body": "The PackageRepository custom resource definition can not be found, because it doesn't exist yet. But this error is catchable, because we can assume that when the CRD does not exist, there also simply exists no resource of that type. So we don't have to print that error to the console and might be able to do the bootstrap without the force argument (?).",
"enhancement": false,
"bug": true
},
{
"title": "Improve package detail page",
"body": "As shortly discussed, we want to have all input data in all cases in one form. \r\n* The labels of the package detail header will become part of the form. The package detail header then only shows the status (will have to be tried out how that looks, if there is only one label – TBD).\r\n* When advanced options are enabled or the package is not installed, repo and version are changeable, otherwise they are read-only.\r\n* Warnings about advanced options have to be adjusted and should be next to the two fields that can be changed, if enabled.\r\n* The new \"header\" part of the form (containing repo, version and auto updates) will be in the same form as the configuration below.\r\n* Header and config part of the form should be visibly separated, but it should be clear that the save/install button on the bottom is meant to be for the entire page. \r\n\r\nFor that, the template and the endpoints will have to be refactored a bit, and maybe the advanced option information needs to be stored somewhere other then local storage?\r\n\r\nAlso, be aware that this might (?) affect the live reload of the package detail page (there is some logic whether only header or whole page should be refetched). \r\n\r\nFrom a technical point of view, it would be interesting to explore some options for more client-side interactivity (see input config component madness, namespace check, etc.).\r\n\r\nRef #1091",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube install` should use default name if `--yes` is specified",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen a user specifies the `--yes` flag for a CLI command, they generally want to avoid interactivity. Glasskube, however, always asks the user to enter a name for the package. \r\n\r\n**Describe the solution you'd like**\r\nWhen `--yes` is specified, the default name (same as the package name) should be used without asking.\r\n\r\n**Additional context**\r\nThis will help us greatly for our package CI pipelines, see e.g. https://github.com/glasskube/packages/pull/380\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Retry applying default package repo during bootstrap in existing installations",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAs #1155 has shown, during bootstrap the cert-manager job is recreated and new certificates are issued. This can lead to a short time span in the bootstrap process, where certificate errors occur. \r\n\r\n**Describe the solution you'd like**\r\nThere should be a retry logic when applying the default repository, in case the error is a certificate error like shown in the issue. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n#1155 #1160\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Error during bootstrap: package repo webhook certificate problem",
"body": "**Describe the bug**\r\n\r\nUpdated from v0.13.0 straight to v0.18.0, and this error appeared. However, it seems that most of the stuff has been updated and `glasskube version` shows v0.18.0. \r\n\r\n```\r\n$ glasskube bootstrap\r\nGlasskube will be updated to version v0.18.0 in cluster xxx.\r\nContinue? (Y/n) \r\n\r\n## Installing GLASSKUBE ##\r\n🧊 The next generation Package Manager for Kubernetes 📦\r\n* Fetching Glasskube manifest from https://github.com/glasskube/glasskube/releases/download/v0.18.0/manifest-aio.yaml\r\n* Validating existing installation\r\n* Applying Glasskube manifests\r\nApplying glasskube-validating-webhook-configuration (ValidatingWebhookConfiguration) 90% || (47/52, 5 it/s) [9 Applying glasskube-validating-webhook-configuration (ValidatingWebhookConfiguration) 92% || (48/52, 5 it/s) [9 Applying glasskube (PackageRepository) 92% |████████████████████████████████████ | (48/52, 5 it/s) [9s:0s]* Couldn't apply manifests: Internal error occurred: failed calling webhook \"vpackagerepository.kb.io\": failed to call webhook: Post \"https://glasskube-webhook-service.glasskube-system.svc:443/validate-packages-glasskube-dev-v1alpha1-packagerepository?timeout=10s\": tls: failed to verify certificate: x509: certificate signed by unknown authority\r\n\r\nAn error occurred during bootstrap:\r\nInternal error occurred: failed calling webhook \"vpackagerepository.kb.io\": failed to call webhook: Post \"https://glasskube-webhook-service.glasskube-system.svc:443/validate-packages-glasskube-dev-v1alpha1-packagerepository?timeout=10s\": tls: failed to verify certificate: x509: certificate signed by unknown authority\r\n$ glasskube version\r\n\r\n ____ _ _ ____ ____ _ ___ _ ____ _____\r\n / ___| | / \\ / ___/ ___|| |/ / | | | __ )| ____|\r\n| | _| | / _ \\ \\___ \\___ \\| ' /| | | | _ \\| _|\r\n| |_| | |___ / ___ \\ ___) |__) | . \\| |_| | |_) | |___\r\n \\____|_____/_/ \\_\\____/____/|_|\\_\\\\___/|____/|_____|\r\n\t\r\nglasskube: v0.18.0\r\npackage-operator: v0.18.0\r\n```\r\n\r\nI think the problem is that we also create the default repository custom resource, and this will be validated. At bootstrap time however, the updated controller manager might not be ready yet and run into this error.\r\n\r\nRunning `glasskube bootstrap` again after 2 minutes, a different error occurs:\r\n\r\n```\r\nglasskube bootstrap\r\n⚠️ Glasskube is already installed in this cluster (xxx) in version v0.18.0. You are about to bootstrap this version again.\r\nContinue? (Y/n) \r\n\r\n## Installing GLASSKUBE ##\r\n🧊 The next generation Package Manager for Kubernetes 📦\r\n* Fetching Glasskube manifest from https://github.com/glasskube/glasskube/releases/download/v0.18.0/manifest-aio.yaml\r\n* Validating existing installation\r\n* Applying Glasskube manifests\r\nApplying glasskube-validating-webhook-configuration (ValidatingWebhookConfiguration) 90% || (47/52, 5 it/s) [9 Applying glasskube-validating-webhook-configuration (ValidatingWebhookConfiguration) 92% || (48/52, 5 it/s) [9 Applying glasskube (PackageRepository) 92% |████████████████████████████████████ | (48/52, 5 it/s) [9s:0s]* Couldn't apply manifests: admission webhook \"vpackagerepository.kb.io\" denied the request: validator called with unexpected object type\r\n\r\nAn error occurred during bootstrap:\r\nadmission webhook \"vpackagerepository.kb.io\" denied the request: validator called with unexpected object type\r\n```\r\n\r\nThis is either a bug in the package repo validator (#1094) or the package repository we create is actually incorrect. Either way this only happens in v0.18.0 (not verified).\r\n\r\nNevertheless, both things should be fixed:\r\n1. Directly at bootstrap time, the validator isn't ready yet\r\n2. The default repository must be createable. \r\n\r\nAlso, luckily the package repo is the last thing that is applied during bootstrap, so all the other things are successfully set up. The error does not appear at all when installing glasskube, only when updating.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n`glasskube bootstrap`\r\n\r\n**Expected behavior**\r\nNo errors. \r\n\r\n**Screenshots**\r\nIf applicable, add screenshots to help explain your problem.\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: [e.g. 1.29]\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.18.0\r\n - CLI version: v0.18.0\r\n\r\n**Additional context**\r\n",
"enhancement": false,
"bug": true
},
{
"title": "UI: Create namespace if necessary before installing a namespaced package",
"body": "See #1084 and #1101, but this time for the UI, i.e. when a user wants to install a new `Package`, they have to enter the namespace which it is going to be installed into, and this should be created if not existent yet. \r\n\r\nOn the package detail page, in the section where the installed packages are listed, there should also be an information that the namespace will be created (which will only be shown if it does not exist yet). \r\n\r\nWhen the user installs this package and this namespace does not exist yet, it should be created automatically. \r\n\r\n**Additional context**\r\nWait for #1101 to be finalized and reuse the functionality – maybe it makes sense to move the namespace check + creation into the installer too. \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add `--host` parameter for open command.",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is only possible to specify the `--host` parameter for the serve command.\r\n\r\n**Describe the solution you'd like**\r\nIt should work similar to the serve command.\r\n\r\n**Describe alternatives you've considered**\r\n-\r\n\r\n**Additional context**\r\nIssue came up during a call Glasskube GitOps template onboarding call with @asaiacai\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add support for package subcomponents",
"body": "**Is your feature request related to a problem? Please describe.**\r\nSome packages contain components that are identical or very similar to other packages. There should be a way to reuse these component definitions for multiple packages. A prime example for this would be databases, but other components should be possible as well. \r\n\r\n**Describe the solution you'd like**\r\nA package manifest file can include a list of components that should be installed alongside the package. A component declaration can be very similar to a dependency declaration but there are some differences in how they are handled during installation:\r\n1. In contrast to dependencies, components are not shared between different package installations. \r\n2. Components are always prefixed with the name of the package they are installed as part of.\r\n3. While dependencies are required to be cluster-scoped, components are required to be namespace-scoped. (This requirement follows from the points above and the fact that cluster-scoped packages may include components)\r\n\r\n**Describe alternatives you've considered**\r\nWE also considered adding support for packages that include more than one helm release and then creating helm charts for the components, but this has several disadvantages: \r\n1. Only helm charts are supported (we'd prefer to avoid to depend on helm more than necessary)\r\n2. The version of a component can not be changed independently of the parent package\r\n\r\n**Additional context**\r\nThis is sort of a follow-up of #112 but it became more pressing in the light of current package integration efforts.",
"enhancement": true,
"bug": false
},
{
"title": "Add support for ParadeDB",
"body": "**Is your feature request related to a problem? Please describe.**\r\nHi guys! I'm one of the maintainers of https://github.com/paradedb/paradedb. We'd love for ParadeDB to be supported on Glasskube. You can find our Helm chart here, for reference: https://github.com/paradedb/helm-charts.\r\n\r\nWe're built on CloudNativePG with a few extra extensions that we build, so it should be nearly identical.\r\n\r\n**Describe the solution you'd like**\r\n^\r\n\r\n**Describe alternatives you've considered**\r\nN/A\r\n\r\n**Additional context**\r\nHappy to help whenever possible.",
"enhancement": false,
"bug": false
},
{
"title": "Glasskube should handle errors gracefully while a package is being installed.",
"body": "**Describe the bug**\r\nUI/CLI should not allow being able to \"Open\" an application before it is fully installed. And handle errors gracefully.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Click \"Install ArgoCD\" through the UI\r\n2. Click Open while the installation is not yet complete (this is often the case for impatient DevOps engineers.)\r\n3. You will see an error in the UI and the CLI that says `failed to open argo-cd: could not open entrypoint [anonymous]: no pod found for service argocd-server has status ready`\r\n\r\n**Expected behavior**\r\nA clear and concise description of what you expected to happen.\r\n\r\n**Screenshots**\r\n<img width=\"400\" alt=\"Screenshot 2024-08-19 at 5 22 29 PM\" src=\"https://github.com/user-attachments/assets/cc6f77c1-e505-4212-88bd-6d6d5d8f737b\">\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30\r\n - Provider: Docker Desktop\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: 0.17.0\r\n - CLI version: 0.17.0\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Add Policy Management Cluster Package",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAdd cluster package that help in enables security, automation, compliance, and governance using policy-as-code\r\n\r\n**Describe the solution you'd like**\r\nAdd cluster package like [Kyverno](https://kyverno.io/) \r\n\r\n**Additional context**\r\nSecurity is one of the most crucial pillars in today's digital landscape. Integrating a Policy-as-Code tool within a Kubernetes cluster is essential for strengthening its security posture. Having a tool like Kyverno or OPA will helpin automate the enforcement of security policies, ensuring that all deployed resources adhere to organizational standards and best practices.\r\n\r\n",
"enhancement": false,
"bug": false
},
{
"title": "CLI update check shows wrong version for PackageOperator",
"body": "**Describe the bug**\r\nWhen running the update check with the CLI, the new version for the package operator is shown as the version of the locally used CLI.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Run `glasskube version --skip-update-check=false` \r\n2. Newest version for the PackageOperator is shown as `dev` instead of `0.17.0`\r\n```\r\n📣 A newer version of Glasskube is available: dev → 0.17.0\r\n📘 Release notes: https://github.com/glasskube/glasskube/releases/tag/v0.17.0\r\n\r\n❗ Glasskube PackageOperator needs to be updated: 0.16.0 -> dev\r\n💡 Please run `glasskube bootstrap` again to update Glasskube PackageOperator\r\n```\r\n\r\n**Expected behavior**\r\nThe newest version for glasskube should be shown. Same as for the CLI.\r\n`❗ Glasskube PackageOperator needs to be updated: 0.16.0 -> 0.17.0`\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: v1.29.2\r\n - Provider: kind\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.16.0\r\n - CLI version: dev (https://github.com/glasskube/glasskube/commit/31cfe95d2088d3c0166e04b000af4f5a315db03d)",
"enhancement": false,
"bug": false
},
{
"title": "Uninstalling cluster packages deletes namespace scoped packages installed in the namespace",
"body": "**Describe the bug**\r\n\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behaviour:\r\n1. Install `argocd` into the cluster\r\n2. Install `quickwit` into the cluster and provide `argocd` as the namespace to install\r\n3. Uninstall `argocd`\r\n4. See `quickwit` being deleted together with the namespace\r\n\r\n**Expected behaviour**\r\nSince both cluster packages and packages are being installed in the same namespace. Deleting the cluster package also deletes the namespace and hence the namespace scoped packages with it. Ideally, we should either not allow the user to create packages in namespaces like `argocd` or return an error if we are trying to delete such a namespace with the package in it.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Add `--delete-namespace` flag to uninstall command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIt can be frustrating to have lots of dangling namespaces in a cluster that are no longer in use. Glasskube should offer an option to delete the namespace when uninstalling a package.\r\n\r\n**Describe the solution you'd like**\r\nThe `uninstall` command can be invoked with a `--delete-namespace` flag. If this is the case, it should check if there are any Packages installed in that namespace, other than the one that should be uninstalled. If there are, it should print an error message and abort the operation, otherwise it should proceed to delete the `Package` and subsequently the namespace resource.\r\n\r\n**Additional context**\r\nFor context, see #1084.\r\nRelated to: #1101\r\n",
"enhancement": true,
"bug": false
},
{
"title": "CLI: Create namespace if necessary when installing a namespace-scoped Package",
"body": "**Is your feature request related to a problem? Please describe.**\r\nInstalling a namespace-scoped package can be more complicated than necessary if the target namespace does not exist yet. In that case, a user has to resort to `kubectl` or other means to create the namespace before being able to install the package. This should not be necessary.\r\n\r\n**Describe the solution you'd like**\r\nWhen installing a namespace-scoped package, the CLI should check if the target namespace exists and, if it does not, create it after the user has confirmed the install operation (if no `--yes` flag is present) and before the `Package` is created. The installation summary should inform the user that the namespace is going to be created. Example output:\r\n\r\n```\r\n$ glasskube install quickwit -n test\r\nSummary:\r\n * The following packages will be installed in your cluster (minikube):\r\n 1. quickwit of type quickwit in namespace test (version v0.8.1+5)\r\n * Namespace test does not exist and will be created\r\n * Automatic updates will be not enabled\r\n```\r\n\r\n**Additional context**\r\nFor context, see #1084",
"enhancement": true,
"bug": false
},
{
"title": "Allow enable / disable auto updating for installed (cluster-)packages ",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is not possible to change the status of package \r\n\r\n**Describe the solution you'd like**\r\nEnable and disable auto updates via the UI.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\nWe will do this together with #1167\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Install `glasskube-autoupdater` if a package with auto update enabled gets installed",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe released the `glasskube-autoupdater` package. But it does not get automatically installed if a package with automatic updates is installed or automatic updates get enabled later on.\r\n\r\n**Describe the solution you'd like**\r\nWe should place a warning / hint around the checkbox that in order for auto updates to work, the `glasskube-autoupdater` package needs to be installed. `glasskube-autoupdater` should be a link to the actual package.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Support Helm charts stored in container registries ( OCI images )",
"body": "**Is your feature request related to a problem? Please describe.**\r\nHelm charts can also be stored in container registries. (e.g. https://github.com/glasskube/packages/pull/277 ). Glasskube doesn't support this yet.\r\n\r\n**Describe the solution you'd like**\r\n\r\n```yaml\r\nhelm:\r\n repositoryUrl: \"oci://ghcr.io/spinkube/charts/spin-operator\"\r\n chartName: \"spin-operator\"\r\n chartVersion: \"0.2.0\"\r\n```\r\n\r\n**Describe alternatives you've considered**\r\nWe can also introduce a new key e.g. `ociRepositoryUrl`.\r\n\r\n**Additional context**\r\nFor Helm OCI we need to reference an `OCIRepository` instead of a `HelmRepository`. See: https://fluxcd.io/flux/cheatsheets/oci-artifacts/#helm-oci\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Support manifests with a relative url in `package.yaml`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAdditional manifests cannot be tested in our CI / CD pipeline and the lack of the features make private repositories harder.\r\n\r\n**Describe the solution you'd like**\r\nThere should be an option for relative referenced manifests:\r\n\r\ne.g.\r\n\r\n```yaml\r\nmanifests:\r\n - url: ./keptn-cert.yaml\r\n - url: ./keptn-issuer.yaml\r\n```\r\n\r\ninstead of\r\n\r\n\r\n```yaml\r\nmanifests:\r\n - url: https://glasskube.github.io/packages/packages/keptn/v2.1.0+1/keptn-cert.yaml\r\n - url: https://glasskube.github.io/packages/packages/keptn/v2.1.0+1/keptn-issuer.yaml\r\n\r\n```\r\n\r\n**Describe alternatives you've considered**\r\nFixing it in our packages ci / cd pipeline.\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Glasskube should manage namespaces if used for installation",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently namespaces need to be created manually if used for a package installation. The same applies when uninstalling a package. The namespace needs to be deleted manually. This makes managing of especially namespace scoped packages quite cumbersome.\r\n\r\n**Describe the solution you'd like**\r\n* When installing a package with `glasskube install quickwit --namespace quickwit`, if the namespace doesn't exist, it should be created.\r\n* When uninstalling a package installed with glasskube and the namespace was created by glasskube, the namespace should be deleted.\r\n * There are additional considerations before deleting a namespace, like if the namespace is used by other resources not managed by glasskube.\r\n* A different option would be to give the user the possibility to create or delete the namespace with the install or uninstall command. Similar to helm with a flag `--create-namespace` or `delete-namespace` .\r\n\r\n#### Subtasks\r\n- [x] https://github.com/glasskube/glasskube/issues/1101\r\n- [ ] https://github.com/glasskube/glasskube/issues/1102\r\n- [x] #1149",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube install` should respect `--namespace` flag",
"body": "**Is your feature request related to a problem? Please describe.**\r\nNamespaced packages can be installed via `glasskube install [package-name]`, and then the namespace will be asked for. If one wants to install it without interactivity, `glasskube install [package-name] [namespace]` can be used. There is also a `--namespace` flag available at the install command, but it doesn't do anything. \r\n\r\n**Describe the solution you'd like**\r\nIt should also be possible to install a namespaced package by using `glasskube install [package-name] --namespace [namespace]`. If both options are used (argument and `--namespace` flag), there should be an error. \r\n\r\n**Describe alternatives you've considered**\r\nRemoving the `--namespace` flag, but I think it would be nice to make a command more clear. \r\n\r\n**Additional context**\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Removing and re-adding a glasskube repository with the same name doesn't update the URL",
"body": "**Describe the bug**\r\nRemoving and re-adding a glasskube repository with the same name doesn't update the URL\r\n\r\n**To Reproduce**\r\n```\r\n# Add repository with invalid URL\r\nglasskube repo add test3 https://raw.githubusercontent.com/yeahservice/packages\r\nglasskube repo list\r\n\r\nNAME URL DEFAULT AUTHENTICATION STATUS MESSAGE\r\nglasskube https://packages.dl.glasskube.dev/packages Yes None Ready repo has 20 packages \r\ntest3 https://raw.githubusercontent.com/yeahservice/packages No None Not ready failed to fetch https://raw.githubusercontent.com/yeahservice/packages/index.yaml: wrong status code: 400 Bad Request \r\n\r\n# Delete repository and re-add with valid URL\r\nglasskube repo delete test3\r\nglasskube repo add test3 https://raw.githubusercontent.com/yeahservice/packages/feature/nginx-ingress-namespace-scoped/packages\r\nglasskube repo add test2 https://raw.githubusercontent.com/yeahservice/packages/feature/nginx-ingress-namespace-scoped/packages\r\n\r\n# test3 repository still checks old URL, while test2 works as expected\r\nglasskube repo list\r\n\r\nNAME URL DEFAULT AUTHENTICATION STATUS MESSAGE\r\nglasskube https://packages.dl.glasskube.dev/packages Yes None Ready repo has 20 packages \r\ntest2 https://raw.githubusercontent.com/yeahservice/packages/feature/nginx-ingress-namespace-scoped/packages No None Ready repo has 20 packages \r\ntest3 https://raw.githubusercontent.com/yeahservice/packages/feature/nginx-ingress-namespace-scoped/packages No None Not ready failed to fetch https://raw.githubusercontent.com/yeahservice/packages/index.yaml: wrong status code: 400 Bad Request \r\n\r\n```\r\n\r\n**Expected behavior**\r\nAfter deleting and adding a repository with the same name but different URL, the URL should also be updated\r\n\r\n**Screenshots**\r\n-\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: v1.29.2\r\n - Provider: Kind\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.13.0\r\n - CLI version: glasskube version dev (commit 6c3e38ea7964b17efc7f5e09766067bec09cab34)\r\n\r\n**Additional context**\r\n-\r\n",
"enhancement": false,
"bug": true
},
{
"title": "UI version warning text should consider gitops mode",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe Glasskube UI shows a warning on top of the page, if client version and cluster version are not equal. It also shows a hint how to update the cluster version:\r\n\r\n![Screenshot from 2024-08-05 11-09-27](https://github.com/user-attachments/assets/9dfd17b4-78c3-4267-b1bc-33c29ba6d048)\r\n\r\nIn GitOps mode however, running only `glasskube bootstrap` directly applies the newer manifests into the cluster, which will in the next reconciliation by argocd be replaced again by whatever is defined in the git repository. \r\n\r\n**Describe the solution you'd like**\r\nThe message in the UI should be different, if gitops mode is enabled in the cluster. It should be: \"... Please update the cluster components to ... by using `glasskube bootstrap --dry-run -o yaml` and pushing the generated manifests into your gitops repository.\"\r\n\r\n**Describe alternatives you've considered**\r\nCompletely remove the \"Please upate...\" sentence, but I think it's a nice hint.\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Ingress-nginx package should support namespace scoped installation",
"body": "**Is your feature request related to a problem? Please describe.**\r\nSome cluster architectures require multiple ingress controllers for better isolation and configuration of workloads. Nginx ingress also supports this use case and the glasskube package just needs to allow configuration of the underlying helm chart (https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/)\r\n\r\n**Describe the solution you'd like**\r\n\r\n* Change the scope of ingress-nginx package to namespace\r\n* Introduce additional configuration values such as `ingressClass`. These are needed to manage multiple ingress controllers within the same cluster.\r\n\r\n**Describe alternatives you've considered**\r\n-\r\n\r\n**Additional context**\r\n-",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube uninstall` should support `--dry-run`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nJust as many other commands, `uninstall` should have a `--dry-run` option to simulate package uninstallation. \r\n\r\n**Additional context**\r\n#629",
"enhancement": true,
"bug": false
},
{
"title": "Glasskube should honor the KUBECONFIG environment variable",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAlmost every application in the \"CLI for k8s\" space allows using the `KUBECONFIG` environment variable to set the path to the kubeconfig file to use. Glasskube should follow suite and do the same.\r\n\r\n**Describe the solution you'd like**\r\nIf the `KUBECONFIG` environment variable is set to a non-empty string, that value should be used for getting the kubeconfig. It should still be possible to overwrite this with the `--kubeconfig` flag though",
"enhancement": true,
"bug": false
},
{
"title": "Redirect UI open button to serve alternative IP if --host flag is used",
"body": "**Is your feature request related to a problem? Please describe.**\r\nA recently shipped [feature](https://github.com/glasskube/glasskube/pull/1027) allows for the use of the `--host` flag to be appended to `glasskube serve` which serves the Glasskube UI on a host different to the default `localhost`. \r\n\r\nThe `Open` button in the package UI is still associated with localhost (even when the `--host` flag is in use) and therefore is rendered unusable if running glasskube on a remote browserless VM. \r\n\r\n**Describe the solution you'd like**\r\nFor the `Open` button to be associated to whichever IP that is specified by the `--host` flag. To allow for normal entrypoint access even on remote VMs",
"enhancement": true,
"bug": false
},
{
"title": "Option to load in custom ca or ignore tls on operator/installer",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently in our infrastructure, we have SSL inspection on the Firewall level. \r\n\r\nHence all systems internally need to either have the CA trusted of our network team. Or ignore TLS errors in the worst case. \r\n\r\n**Describe the solution you'd like**\r\nPreferably I would be able to load my own ca certs into the operator and have it trust them. (the underlying nodes of k8s all trust them already ofc) or worst case to have it ignore TLS issues. But would strongly prefer the first option to not have to worry in terms of security.\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Markdown support for value description in CLI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nMarkdown is already supported in the description of package configuration values, see #734 \r\n\r\n**Describe the solution you'd like**\r\nThe `glasskube configure` command should also consider markdown when printing the package config descriptions. \r\n",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube install --gitops` should exclude most `metadata`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen trying to use glasskube in a gitops approach by using `glasskube install [pkg] --dry-run -o yaml`, the output contains a `uid`, which probably should not be there. Same for `generation`, `managedFields` and others. \r\n\r\n**Describe the solution you'd like**\r\nProbably all metadata fields except the `name` and `namespace` should be excluded from the output. \r\n\r\n**Describe alternatives you've considered**\r\nNone\r\n\r\n**Additional context**\r\nWhen trying to install a package this way via argocd, argo cannot sync because the uid field is immutable, but it would be changed.\r\nWhen trying to directly apply the generated yaml with `kubectl`, it works, but the uid is changed.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Uninstall message does not show removal of required package",
"body": "**Describe the bug**\r\nWhen uninstalling, the message should contain the removed package, but also all packages that have been required by it (only if they have not been installed manually before that). However, the uninstall message on the UI only shows the primary removed package, although the required package is removed as well.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. install `keptn` without having `cert-manager` installed\r\n2. uninstall `keptn`\r\n\r\n`cert-manager` is correctly uninstalled as well, but the user does not get the information about that.\r\n\r\n**Expected behavior**\r\nThe uninstall message should show required uninstalled packages again.\r\n\r\nIt should also be checked whether this is correct on the CLI.",
"enhancement": false,
"bug": false
},
{
"title": "Listen on other NIC instead of local host for `glasskube serve`",
"body": "I run glasskube on a remote server without UI. the default serve command listen on 127.0.0.1 only. I check the help message and could find how to change it to 0.0.0.0.\r\n\r\n```\r\n./glasskube serve --help\r\nStart server and open the UI.\r\n\r\nUsage:\r\n glasskube serve [flags]\r\n\r\nAliases:\r\n serve, start, ui\r\n\r\nFlags:\r\n -h, --help help for serve\r\n -l, --log-level int Level for additional logging, where 0 is the least verbose\r\n -p, --port int Port for the webserver (default 8580)\r\n -s, --skip-open Skip opening the browser\r\n\r\nGlobal Flags:\r\n --kubeconfig string Path to the kubeconfig file, whose current-context will be used (defaults to xxx.kube/config)\r\n --no-progress Prevent progress logging to the cli\r\n --non-interactive Run in non-interactive mode. If interactivity would be required, the command will terminate with a non-zero exit code.\r\n --skip-update-check Do not check for Glasskube updates\r\n\r\n```\r\n\r\n**Describe the solution you'd like**\r\n\r\nIt should be able to listen on other address besdies localhost.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Allow unsetting configuration values on UI/CLI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe differentiate between a value that is empty, and one that is not set, e.g. someone might set an empty string `\"\"` on purpose, but it's not well defined if it means that this value is considered to be \"unset\" or actually empty. The package operator already correctly differentiates between these two cases, but UI and partially CLI do not allow to unset a value yet. It is only possible via GitOps, or on the CLI by using the `--value` arguments. \r\n\r\n**Describe the solution you'd like**\r\nUI+CLI should support unsetting a value.\r\n\r\nDesign proposal for the UI config form:\r\n* Initially we only render the required values.\r\n* Additional values can be added dynamically by the user with an \"Add Value\" button, which triggers some component with a selection of the possible config values, that are not set yet. \r\n* Any values that are not shown on the config form, are considered to be unset.\r\n* Therefore, if someone wants to explicitly set an empty value, they can add this value to the form, and then leave the input field empty.\r\n* Any non-required values can also be deleted from the form. \r\n\r\nOpen for discussion + also needs a proposal for the CLI config input loop.\r\n\r\n**Additional context**\r\nThis came up during testing the quickwit integration of the newly added domain value, which is not required, but the defined regex pattern validation did not allow an empty value. The shortcut was to change the pattern to allow an empty string: https://github.com/glasskube/packages/pull/219\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Client settings on glasskube repo client does not update cache",
"body": "**Describe the bug**\r\nWhen adding/updating repo URL using the repo client `glasskube repo add <repoName> <repoURL>` The client settings cache does not update automatically (perhaps only on reconciliation) leading to the `glasskube repo list` command to show a repo URL that is not actually being fetched.\r\n\r\n@kosmoz has identified where the logic has to be added to reset repo client cache upon adding new package repositories. \r\n \r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to '...'\r\n2. Click on '....'\r\n3. Scroll down to '....'\r\n4. See error\r\n\r\n**Expected behavior**\r\nA clear and concise description of what you expected to happen.\r\nTo be able to add, delete and add a new repo URL under the same repo name and to always fetch the latest configured URL. \r\n\r\n**Screenshots**\r\nIf applicable, add screenshots to help explain your problem.\r\n![image (1)](https://github.com/glasskube/glasskube/assets/38757612/5c628827-cb39-441f-bf68-c77a742fd09e)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: [e.g. Kubernetes, OpenShift]\r\n - Version: [e.g. 1.29]\r\n - Provider: [e.g. AWS, minikube]\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: [e.g. v0.0.1]\r\n - CLI version: [output of `glasskube --version`]\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "UI Footer version messages might be misleading",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe UI footer shows \"Up to date\", even though there is a newer glasskube version available. The meaning of \"Up to date\" is that the CLI and cluster version is equal. If they are not equal, the message \"New version available\" is shown – additionally there is the big update banner at the top of the page. \r\n\r\n**Describe the solution you'd like**\r\nI suggest to remove the extra text like \"Up to date\" and \"New version available\" completely, because \"Up to date\" might be wrong/misleading (it does not mean the user has the latest glasskube version installed right now), and \"New version available\" is redundant (but more inexact) than the update banner that is on the top of the page anyway. \r\n\r\nWe could additionally show a line with \"Latest version available: ...\" with a link to the release page, and a yellow warning sign that a new version is available (but that shouldn't be too pushy, we already show this when starting the server and in all cli commands too). \r\n\r\nOpen for discussion. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n\r\nCLI == cluster:\r\n![Screenshot from 2024-07-09 16-01-49](https://github.com/glasskube/glasskube/assets/7556574/2d0d8ab5-e2e2-44f8-8d8f-a4a19d026379)\r\n\r\nCLI > cluster: \r\n![image](https://github.com/glasskube/glasskube/assets/7556574/8301dcc9-2305-4413-8353-59e60af7c00d)\r\n\r\n![Screenshot from 2024-07-09 16-09-35](https://github.com/glasskube/glasskube/assets/7556574/f4045bf2-9939-480f-814a-a07bff58610f)\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Can not open package details if there is a package repository that does not work",
"body": "**Describe the bug**\r\nIf there is at least one `PackageRepository` in the cluster that does not work (e.g. server unavailable), it is not possible to show the details page for any package that has not been installed (both cluster-scoped and namespace-scoped).\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Add a broken repo: `glasskube repo add broken https://not-a-glasskube-repo.org/`\r\n2. Start UI (there should be an error at the top saying that not all repos could be fetched, this is ok)\r\n3. Try to open any package that is not installed\r\n4. See error\r\n\r\n**Expected behavior**\r\nPossible to show package details and install from the working repository.\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/16959694/bf01e51d-d2c1-4645-ab21-01ec6bb4f1fa)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: any\r\n - Version: any\r\n - Provider: any\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: dev (latest main)\r\n - CLI version: dev (latest main)\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Creation of `Package`/`ClusterPackage` resource should be prevented if the manifest has the wrong `scope`",
"body": "**Describe the bug**\r\nWe only support the following combinations of resource type - manifest scope:\r\n- `ClusterPackage` - `Cluster`\r\n- `Package` - `Namespaced`\r\n\r\nEverything else might lead to undesired behavior.\r\n\r\n**To Reproduce**\r\nCreate a file `package.yaml` with the following contents:\r\n```yaml\r\n# This is WRONG! cert-manager is cluster scoped!\r\napiVersion: packages.glasskube.dev/v1alpha1\r\nkind: Package\r\nmetadata:\r\n name: cert-manager\r\nspec:\r\n packageInfo:\r\n name: cert-manager\r\n version: v1.15.1+1\r\n```\r\n\r\nRun `kubectl apply -f package.yaml`\r\n\r\n**Expected behavior**\r\nThe creation should be prevented.\r\n\r\n**Screenshots**\r\nCreation is accepted.\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: -\r\n - Provider: -\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: 0.12.1\r\n - CLI version:0.12.1\r\n\r\n**Additional context**\r\nThis validation should be done by the validating admission webhook: \r\n\r\nhttps://github.com/glasskube/glasskube/blob/f9a1dfe58b3cffa2df6f2f50b4280dc29e6e8ff0/internal/webhook/package_validator.go\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Do not consider empty documents when parsing YAMLs",
"body": "**Is your feature request related to a problem? Please describe.**\r\nSome external manifest files might have empty documents, see e.g. https://github.com/glasskube/packages/pull/155. The repo client tries to parse them to unstructured objects, but fails because mandatory fields are missing.\r\n\r\n**Describe the solution you'd like**\r\nIgnore empty documents. \r\n\r\n**Additional context**\r\nThis blocks https://github.com/glasskube/packages/pull/155. \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Search packages feature in the UI",
"body": "**Is your feature request related to a problem? Please describe.**\nAdd a search functionality in the UI to search the packages easily.\n\n**Describe the solution you'd like**\nUser can search the package in search bar with its name and it shows the installed packages as well as options to install new packages.\nAs well as there should label/filters that can be used to filter packages.\n\nSuggested Filters/Labels could be\n```Installed```\n```Not Installed ```\n\nBased on the scope: \n```Cluster```\n```Namespace```\n In the namespace part, index the available namespaces to choose from.\n\n\n**Describe alternatives you've considered**\n\n**Additional context**\n\n",
"enhancement": true,
"bug": false
},
{
"title": "Improve website blog layout",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently our blog layout is basically the default one and not really appealing.\r\n\r\n**Describe the solution you'd like**\r\nAfter the introduction of https://github.com/glasskube/glasskube/pull/874 and the image attribute for blog posts, we can also revamp our `/blog` page. Headlamp (also built with Docusaurus) has a very very nice Design we should get a lot of inspiration from: https://headlamp.dev/blog\r\n\r\n**Additional context**\r\n@jakepage91 might be needed to add the image attribute to all past blog posts.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Bootstrap Stuck on 96% (Applying glasskube (PackageRepository))",
"body": "**Describe the bug**\r\nCant get to bootstrap glasskube, I'm using an EKS cluster with Fargate nodes, tried purging and reinstalling.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Create an EKS cluster\r\n2. glasskube bootstrap\r\n\r\n**Expected behavior**\r\nShould complete bootstrap\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/863005/49551a12-9c93-4652-8b7b-ae0ba422f64a)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: v1.28.9-eks-036c24b\r\n - Provider: AWS\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.12.1\r\n - CLI version: v0.12.1\r\n\r\n**Additional context**\r\nkubectl get nodes -o wide\r\n![image](https://github.com/glasskube/glasskube/assets/863005/745edb8a-54b6-446d-a03e-5953d02739d7)\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Consistent uppercase description for command flags",
"body": "Right now glasskube command has no consistent way of showing flags descriptions. A mix of uppercase and lowercase descriptions are shown. \r\n\r\n![image](https://github.com/glasskube/glasskube/assets/30386061/05b0001d-39ad-483d-9e3f-9ba3b1aae9ae)\r\n\r\n![image](https://github.com/glasskube/glasskube/assets/30386061/a524d7b2-52a0-4d49-9300-7770c5b98677)\r\n\r\nI think we should offer an uppercase description for any command flag.\r\n\r\nI'd like to have the opportunity to fix this issue but I understand that you may offer it as a good-first-issue",
"enhancement": false,
"bug": false
},
{
"title": "Namespace Select for Package Overview Page",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe current package overview page simply shows all packages of all namespaces.\r\n\r\n**Describe the solution you'd like**\r\nThere should be a dropdown element on the top of the page, where the user can choose between all the namespaces of the cluster + one option \"All namespaces\" (default). The overview page should look the same, but show only the packages that are in the selected namespace. \r\n\r\n**Additional context**\r\nIt's a bit tricky, and it might need some refactoring, so we will solve this internally. ",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube ls --kind package` should also support `-o` flag",
"body": "**Is your feature request related to a problem? Please describe.**\r\n`-o` (output) flag is not yet implemented for listing packages, only for clusterpackages.\r\n\r\n**Describe the solution you'd like**\r\nSimilar to `glasskube ls --kind clusterpackage` the command should also support `yaml` and `json` output for packages.",
"enhancement": true,
"bug": false
},
{
"title": "Display status message in `glasskube describe` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nLike #899, but for the describe command of a package.\r\n\r\n**Describe the solution you'd like**\r\nMessage should be shown below the status, but non-installed packages should not show it at all.\r\n\r\n**Additional context**\r\n#899 \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Make server output of user operations consistent",
"body": "**Is your feature request related to a problem? Please describe.**\r\nFair input from here: https://github.com/glasskube/glasskube/issues/836#issuecomment-2200397313\r\nOn the UI we use the non-blocking methods for creating, updating and deleting resources, and we use the `stderr` statuswriter – this is the same as doing these operations on the CLI with `--no-wait`. This is in order to not have long-running requests to the backend (which could potentially look on the UI like it's loading forever). However, we therefore lose track of when the operation has finished and cannot show the correct log message in the server log.\r\n\r\n**Describe the solution you'd like**\r\n\r\nSolution A:\r\nRewrite to use non-blocking blocking operations. For example, we would call `InstallBlocking` on the server, but wrap it in a goroutine such that it doesn't block the client. Unfortunately this makes error handling a bit less obvious, because if there is an error, it cannot be sent via the regular http response anymore, but has to be sent via an SSE message – which would be broadcast to all clients! So if the UI is opened in multiple tabs or browsers, either all of them would get the error message, or we implement another solution there to track which client exactly did the original request, and therefore only send it to this one client.\r\n\r\nSolution B:\r\nDo not log the start of the operation either (probably use `noop` statuswriter), which would also make it consistent at least.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "UI Error Alerts should not disappear under the sticky header",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen there is some error happening on the UI (e.g. package uninstallation fails), the error alert is shown at the top of the page. Sometimes (when scrolled to any other position than the top) this is not visible to the user. It seems this is more likely to happen with the sticky header. \r\n\r\n**Describe the solution you'd like**\r\nError messages must be visible on the screen where they happen, and the user should not have to scroll to them.\r\n\r\nPossible solutions are:\r\n* Scroll to the error alert (maybe htmx offers something for that)\r\n* Change from error alert to toasters that will always be on screen. \r\n\r\n**Additional context**\r\nSome htmx knowledge is required for this.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Expose OpenTelemetry Events for Glasskube packages",
"body": "**Is your feature request related to a problem? Please describe.**\r\nGlasskube doesn't provide any metrics in a standardized way about installed packages, updates and configuration changes\r\n\r\n**Describe the solution you'd like**\r\nExport specific Events as OTel events so the they can get consumed by an OTel infrastructure.\r\n\r\n**Describe alternatives you've considered**\r\nA prometheus metrics endpoint make also make sense.\r\n\r\n**Additional context**\r\n- @henrikrexed will give additional inputs on this issue.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "State the required flux version in the bootstrap documentation",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIf users have an older version of flux installed in their cluster, neither the \"all-in-one\" nor the \"slim\" installation will work.\r\n\r\n**Describe the solution you'd like**\r\nDocument which minimum version of Flux is required if installing Glasskube in the slim version.\r\n\r\n**Describe alternatives you've considered**\r\nDynamically check if flux is already installed during the bootstrap command and print an error and recommend installation method. \r\n\r\n**Additional context**\r\nThe dynamic bootstrap can be a follow-up issue.",
"enhancement": true,
"bug": false
},
{
"title": "Auto-Update is not shown on discussion page",
"body": "**Describe the bug**\r\nThe package detail page and package discussion page share the same header template, which includes logo, name, and the badges showing installation information (version, repo, auto-update). However, on the discussion page, the auto-update value is empty, while on the package detail page it say \"Disabled\" or \"Enabled\". \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to the package detail page of an installed package\r\n2. Click on the discussion badge to get to the discussion page\r\n\r\n**Expected behavior**\r\nAuto update value should be the same as on package detail page. \r\n\r\n**Screenshots**\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.10.1\r\n - CLI version: dev (not released yet)\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "The `--no-progress` flag is ignored by the `glasskube bootstrap` command",
"body": "**Describe the bug**\r\n\r\nDoing:\r\n\r\n```\r\ngk bootstrap --no-progress --non-interactive --yes -o yaml > foobar.yaml\r\n⚠️ Glasskube is already installed in this cluster (default) in version v0.11.0. You are about to bootstrap this version again.\r\n\r\n## Installing GLASSKUBE ##\r\n🧊 The next generation Package Manager for Kubernetes 📦\r\n* Fetching Glasskube manifest from https://github.com/glasskube/glasskube/releases/download/v0.11.0/manifest-aio.yaml\r\n* Validating existing installation\r\n* Applying Glasskube manifests\r\n```\r\n\r\n**To Reproduce**\r\nDo the above command\r\n\r\n**Expected behavior**\r\n\r\nI expect no other input, just the YAML. Yet I get:\r\n```\r\n⚠️ Glasskube is already installed in this cluster (default) in version v0.11.0. You are about to bootstrap this version again.\r\n\r\n## Installing GLASSKUBE ##\r\n🧊 The next generation Package Manager for Kubernetes 📦\r\n* Fetching Glasskube manifest from https://github.com/glasskube/glasskube/releases/download/v0.11.0/manifest-aio.yaml\r\n* Validating existing installation\r\n* Applying Glasskube manifests\r\n```\r\n\r\n**Screenshots**\r\n\r\nN/A\r\n\r\n**Cluster Info (please complete the following information):**\r\n\r\nN/A\r\n\r\n**Glasskube Info (please complete the following information):**\r\n```\r\n▶ gk version\r\nError checking PackageOperator version:\r\n\r\ndeployments.apps \"glasskube-controller-manager\" not found\r\n\r\n ____ _ _ ____ ____ _ ___ _ ____ _____\r\n / ___| | / \\ / ___/ ___|| |/ / | | | __ )| ____|\r\n| | _| | / _ \\ \\___ \\___ \\| ' /| | | | _ \\| _|\r\n| |_| | |___ / ___ \\ ___) |__) | . \\| |_| | |_) | |___\r\n \\____|_____/_/ \\_\\____/____/|_|\\_\\\\___/|____/|_____|\r\n\r\nglasskube: v0.11.0\r\npackage-operator: not installed\r\nGlasskube is not yet bootstrapped. Use 'glasskube bootstrap' to get started.\r\n```\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "CLI: Display status message in table when running `glasskube list`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIf a package is in the state \"installation failed\" a user has no further information why the installation failed or if he should do something. Most users won't be able to look up the package status conditions.\r\n\r\n**Describe the solution you'd like**\r\nAdd an additional column that shows that package status description\r\n\r\n\r\n\r\n**Additional context**\r\nUI issue: https://github.com/glasskube/glasskube/issues/898",
"enhancement": true,
"bug": false
},
{
"title": "UI: Display status condition message on package details page",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIf a package is in the state \"installation failed\" a user has no further information why the installation failed or if he should do something. Most users won't be able to look up the package status conditions.\r\n\r\n**Describe the solution you'd like**\r\nOn the package detail page there should a message with the latest status description\r\n\r\n**Describe alternatives you've considered**\r\nLinking to the Kubernetes Dashboard for example (but this makes not that much sense)\r\n\r\n**Additional context**\r\nRelated cli issue: https://github.com/glasskube/glasskube/issues/899\r\n",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube telemetry disable` does nothing to the cluster?",
"body": "**Describe the bug**\r\n\r\nAfter using `glasskube telemetry disable` I expect something to be done to the operator / cluster to disable telemetry?\r\n\r\nAlthough it looks like there is no confirmation / changes / other confirmations that it's actually been done?\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\nDo `glasskube telemetry disable`\r\n\r\n**Expected behavior**\r\n\r\nExpect it to do something to the cluster?\r\n\r\n**Screenshots**\r\n\r\nN/A\r\n\r\n**Cluster Info (please complete the following information):**\r\n\r\nN/A\r\n\r\n**Glasskube Info (please complete the following information):**\r\n\r\n```\r\nglasskube version\r\n\r\n ____ _ _ ____ ____ _ ___ _ ____ _____\r\n / ___| | / \\ / ___/ ___|| |/ / | | | __ )| ____|\r\n| | _| | / _ \\ \\___ \\___ \\| ' /| | | | _ \\| _|\r\n| |_| | |___ / ___ \\ ___) |__) | . \\| |_| | |_) | |___\r\n \\____|_____/_/ \\_\\____/____/|_|\\_\\\\___/|____/|_____|\r\n\r\nglasskube: v0.11.0\r\npackage-operator: v0.11.0\r\n```\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Documentation is confusing regarding cluster telemetry uninstallation.",
"body": "**Is your feature request related to a problem? Please describe.**\r\n\r\nIn the docs it says: https://github.com/glasskube/glasskube/blob/c7e139ffc89cb93a76066c475b92dce0c86fcf22/website/docs/04_design/telemetry.md?plain=1#L49C1-L49C105\r\n\r\nThe information about whether telemetry is enabled or not, is stored **once per cluster installation**. \r\n\r\nBasically I did:\r\n1. Install with `glasskube bootstrap`\r\n2. Realized \"oh no there is telemetry\"\r\n3. Did:\r\n```\r\nglasskube telemetry disable\r\n\r\nGlasskube telemetry is now disabled for cluster default.\r\n```\r\n4. Realized in the docs it's only stored once per cluster installation\r\n5. Think it's actually disabled\r\n6. Go to uninstall bootstrap so I can re-install with telemetry disabled\r\n7. Unable to uninstall bootstrap (see #893 )\r\n\r\n\r\n**Describe the solution you'd like**\r\n\r\nMore clear documentation?\r\n\r\n**Describe alternatives you've considered**\r\n\r\nN/A\r\n\r\n**Additional context**\r\n\r\nN/A",
"enhancement": false,
"bug": false
},
{
"title": "No warnings that telemetry is installing.",
"body": "**Is your feature request related to a problem? Please describe.**\r\n\r\nWhen doing `glasskube bootstrap` there is ZERO warnings that telemetry will be populated.\r\n\r\nIt also installs this with the telemetry config enabled within the cluster config.\r\n\r\nThis isn't cool as it's a big privacy concern with company kubernetes clusters.\r\n\r\n**Describe the solution you'd like**\r\n\r\nTelemetry warning / \"we are installing telemetry on your cluster\" when using bootstrap\r\n\r\n**Describe alternatives you've considered**\r\n\r\nN/A\r\n\r\n**Additional context**\r\n\r\nN/A\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Make telemetry opt-in",
"body": "**Is your feature request related to a problem? Please describe.**\r\n\r\nTelemetry is a **huge** privacy risk with regards to dealing with large clusters and I was disappointed to see that it's defaulted to opt-in without warning.\r\n\r\n**Describe the solution you'd like**\r\n\r\nOpt-in :( Sorry for opening up a can of worms.\r\n\r\n**Describe alternatives you've considered**\r\n\r\nN/A\r\n\r\n**Additional context**\r\n\r\nN/A\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Uninstalling bootstrap?",
"body": "**Is your feature request related to a problem? Please describe.**\r\n\r\nI cannot find a clear way to uninstall the bootstrap / operator.\r\n\r\n**Describe the solution you'd like**\r\n\r\nAbility to uninstall bootstrap\r\n\r\n**Describe alternatives you've considered**\r\n\r\nGoing through --help / documentation.\r\n\r\n**Additional context**\r\n\r\nN/A",
"enhancement": false,
"bug": false
},
{
"title": "Apps grayed out with no information / link to documentation",
"body": "**Describe the bug**\r\n\r\nDocs issue?\r\n\r\n![Screenshot 2024-06-27 at 9 11 29 AM](https://github.com/glasskube/glasskube/assets/6422176/cf7e4cd3-1d86-4319-a9f3-06b9437e98d4)\r\n\r\nI haven't had enough coffee and I bet there are others which feel the same, but with Apps grayed out I would expect there to be a link to documentation explaining why / is it a roadmap thing / how would I be able to enable it / try it out?\r\n\r\n\r\n**To Reproduce**\r\n\r\n\r\nDo `glasskube serve` and try it out.\r\n\r\n\r\n\r\n**Expected behavior**\r\n\r\nApps not grayed\r\n\r\n**Screenshots**\r\n\r\n\r\nSee above / N/A.\r\n\r\n**Cluster Info (please complete the following information):**\r\n\r\n▶ gk version\r\n\r\n ____ _ _ ____ ____ _ ___ _ ____ _____\r\n / ___| | / \\ / ___/ ___|| |/ / | | | __ )| ____|\r\n| | _| | / _ \\ \\___ \\___ \\| ' /| | | | _ \\| _|\r\n| |_| | |___ / ___ \\ ___) |__) | . \\| |_| | |_) | |___\r\n \\____|_____/_/ \\_\\____/____/|_|\\_\\\\___/|____/|_____|\r\n\r\nglasskube: v0.11.0\r\npackage-operator: v0.11.0\r\n\r\n**Glasskube Info (please complete the following information):**\r\n\r\nN/A see above?\r\n\r\n**Additional context**\r\n\r\nN/A",
"enhancement": false,
"bug": true
},
{
"title": "Feature: Preview the exact YAML to be used for install?",
"body": "**Is your feature request related to a problem? Please describe.**\r\n\r\nUnsure if this is a bug or a feature request.\r\n\r\nFor some reason this did not work:\r\n```sh\r\nglasskube install sealed-secrets --skip-update-check --enable-auto-updates=false --dry-run --non-interactive -o yaml\r\n```\r\n\r\nI'm honestly unsure if this is intentional or not?\r\n\r\nTLDR; I would like to be able to see **exactly** what YAML will be applied to my cluster.\r\n\r\nSame for interactive mode too.\r\n\r\nMy use-case is that sometimes I was the raw .yaml for backup purposes, or if I wanted to debug what happened between two version updates (-o yaml on one, -o yaml on the other) and be able to compare the two. \r\n\r\n**Describe the solution you'd like**\r\n\r\nBe able to see what YAML is going to be applied.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\nTried debugging.\r\n\r\n**Additional context**\r\n\r\nN/A",
"enhancement": true,
"bug": false
},
{
"title": "The website shows the Community Ingress controller using NGINX Ingress Controllers logo.",
"body": "**Describe the bug**\r\nThese are two different projects. The logo for this project `nginxinc/kubernetes-ingress` is being used as a logo for `kubernetes/ingress-nginx`\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to https://glasskube.dev/packages/\r\n2. Scroll down till you see ingress-NGINX\r\n3. See NGINX Ingress Controller's logo.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Migrate all embedded youtube videos to the youtube-nocookie domain",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe currently have a mix of youtube embeds with [youtube](https://github.com/search?q=repo%3Aglasskube%2Fglasskube%20www.youtube.com&type=code) and the [youtube-nocookie](https://github.com/search?q=repo%3Aglasskube%2Fglasskube+www.youtube-nocookie.com&type=code) domain.\r\n\r\n**Describe the solution you'd like**\r\nOnly use the youtube-nocookie domain.\r\n\r\n\r\n**Additional context**\r\nThis is also relevant for new embeds \r\n",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube open quickwit` does not work",
"body": "**Describe the bug**\r\n`glasskube open quickwit` does not work\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Install quickwit\r\n2. open quickwit\r\n3. See error\r\n\r\n**Expected behavior**\r\nOpen the UI\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30.0\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\nglasskube: v0.10.1\r\npackage-operator: v0.10.1\r\n\r\n**Additional context**\r\nrelated to \r\n- https://github.com/glasskube/glasskube/issues/844\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Fix Broken Links in Website",
"body": "When building the website by running `npm run build` in the `website` directory, some broken links are found:\r\n```\r\nExhaustive list of all broken links found:\r\n- Broken link on source page path = /guides/cert-manager/:\r\n -> linking to ./ingress-nginx/ (resolved as: /guides/cert-manager/ingress-nginx/)\r\n- Broken link on source page path = /guides/ingress-nginx/:\r\n -> linking to ./cert-manager/ (resolved as: /guides/ingress-nginx/cert-manager/)\r\n```",
"enhancement": false,
"bug": true
},
{
"title": "Fix CSS Minimizer Warnings in Website Build",
"body": "When building the website by running `npm run build` in the `website` directory, the following warnings are shown:\r\n```\r\n[WARNING] {\"file\":\"assets/css/styles.cb46e6fd.css\",\"message\":\"assets/css/styles.cb46e6fd.css from Css Minimizer plugin\\nUnexpected '}' at assets/css/styles.cb46e6fd.css:25:42359.\",\"compilerPath\":\"client\"}\r\n[WARNING] {\"file\":\"assets/css/styles.cb46e6fd.css\",\"message\":\"assets/css/styles.cb46e6fd.css from Css Minimizer plugin\\nInvalid property name 'h2{text-shadow' at assets/css/styles.cb46e6fd.css:25:42314. Ignoring.\",\"compilerPath\":\"client\"}\r\n```\r\n\r\nThis is probably related to the `text-shadow` applied to `h2` elements.",
"enhancement": false,
"bug": true
},
{
"title": "Exchange AsciinemaPlayer demo on website with actual demo video from youtube",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe AsciinemaPlayer got outdated and glasskube already introduced an UI.\r\n\r\n**Describe the solution you'd like**\r\nExchange the `AsciinemaPlayer` component with an YouTube embed of: https://www.youtube.com/watch?v=aIeTHGWsG2c\r\nThe youtube video should be embedded similar to we embed videos on our blog: https://glasskube.dev/blog/release-v0.1.0/\r\nAlso the Asciinema Player and dependency should removed after the change.\r\n\r\n**Additional context**\r\nThe video is already linked in the README.md\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Webhook Validator for `PackageRepository` deletion",
"body": "**Is your feature request related to a problem? Please describe.**\r\n`PackageRepository` resources can be deleted, even if there are packages installed from that repository.\r\n\r\n**Describe the solution you'd like**\r\nThere should be a webhook validator in the operator, that, when a `PackageRepository` is about to be deleted, should check whether there are no packages installed from that repository. There should be a validation error, if packages from the repo are still installed. \r\n\r\n**Additional context**\r\nThere are already some webhook validations in place, e.g. for `ClusterPackage` resources. ",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube version` ascii art",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe `glasskube version` command shows the versions of the CLI and package operator.\r\n\r\n**Describe the solution you'd like**\r\nIt would be nice if the version command also shows a nice ascii art of the text `Glasskube` at the top of the output. \r\n\r\n**Additional context**\r\nhttps://www.asciiart.eu/",
"enhancement": true,
"bug": false
},
{
"title": "Remove `(Beta Version)` label from README.md",
"body": "**Describe the solution you'd like**\r\nAs Glasskube becomes more mature we can less prominent indicate that we are not yet API stable. (as we are still in the v0.x release phase).\r\n\r\n**Describe alternatives you've considered**\r\nThe scope of this ticket is to remove ` (Beta Version)` from the h3.\r\n\r\n**Additional context**\r\nAdd any other context or screenshots about the feature request here.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube configure` should show special message when there are no values to configure",
"body": "When a package has no configuration values, the `glasskube configure` command should show \"This package has no configuration values\" and quit. \r\n\r\nExample: `glasskube configure cert-manager`.",
"enhancement": true,
"bug": false
},
{
"title": "Improve Navbar on small screens",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen the UI is opened in a small browser window, the navbar/header looks like this:\r\n\r\n![Screenshot from 2024-06-25 16-46-42](https://github.com/glasskube/glasskube/assets/7556574/b2948d33-c66e-4854-a9b8-182d597d2cf8)\r\n\r\n**Describe the solution you'd like**\r\nAll items should stay in the same row.\r\n\r\n**Describe alternatives you've considered**\r\nOn very small screens, it could even transform to a classical hamburger menu, but that would be an extra task.",
"enhancement": true,
"bug": false
},
{
"title": "CLI: Add support for listing all packages for a package name",
"body": "### Is your feature request related to a problem? Please describe.\r\n`glasskube list` shows the list of all ClusterPackages or Packages or both. It should also be possible to list all packages with a particular `.Spec.PackageInfo.Name`.\r\n\r\n### Describe the solution you'd like\r\nWhen `glasskube list` is called with an argument, only the `Package`s with that `.Spec.PackageInfo.Name` should be listed. \r\n\r\n#### Examples\r\n\r\n```sh\r\n# shows a list of all Package resources with .Spec.PackageInfo.Name == \"quickwit\"\r\nglasskube list quickwit\r\n```\r\n```sh\r\n# shows a list of all Package resources in namespace \"foo\" with .Spec.PackageInfo.Name == \"quickwit\"\r\nglasskube list quickwit --namespace foo\r\n```\r\n```sh\r\n# shows an error message and call ExitWithError\r\nglasskube list quickwit --kind clusterpackage\r\n```\r\n\r\n#### More details\r\n- This operational mode is defined by `len(args) > 0`\r\n- This mode implies that only namespace-scoped `Package`s should be shown, no `ClusterPackage`s (like `--kind package`). \r\n- In this mode, using the `--kind` flag is an error\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "CLI: Add support for changing configuration during update",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIf the value definitions of a package are different between versions, it is sometimes not possible to update safely. Particularly, if a new required value is added, it is not possible to update at all.\r\n\r\n**Describe the solution you'd like**\r\nWhen running `glasskube update` to update a package with configuration values, the user should be asked if they want to change the configuration. If they answer yes, the configuration wizard should be started.\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "UI should have a sticky header",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe UI currently has a header, but when the page is too long and the user scrolls down, the header is not visible anymore.\r\n\r\n**Describe the solution you'd like**\r\nThe UI should show the header at all times (sticky header), even if the user scrolled down. \r\n\r\n**Additional context**\r\nThe bootstrap position helpers probably help: https://getbootstrap.com/docs/5.3/helpers/position",
"enhancement": true,
"bug": false
},
{
"title": "Repository configuration via UI backend",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is only possible to add and update repository via the `cli`.\r\n\r\n**Describe the solution you'd like**\r\nWhen clicking on a repository a detail page should be shown (similar to `ClusterPackages`) where a user can configure the name, url and checkbox if the repo is the default repo.\r\n\r\nAdditionally there should be button to add a new repository in the top right corner.\r\n\r\nThe scope of this ticket is to create the golang backend to receive the form request from the frontend and process it similar to how the cli processes it.\r\n\r\n**Additional context**\r\nRelated frontend issue: https://github.com/glasskube/glasskube/issues/860\r\nDesign specification: https://glasskube.dev/docs/design/repositories/\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Repository configuration via UI frontend",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is only possible to add and update repository via the `cli`.\r\n\r\n**Describe the solution you'd like**\r\nWhen clicking on a repository a detail page should be shown (similar to `ClusterPackages`) where a user can configure the name, url and checkbox if the repo is the default repo.\r\n\r\nAdditionally there should be button to add a new repository in the top right corner.\r\n\r\nThe scope of this ticket is to create the html forms in order to send the form request to the backend.\r\n\r\n**Additional context**\r\nRelated backend issue: https://github.com/glasskube/glasskube/issues/861\r\nDesign specification: https://glasskube.dev/docs/design/repositories/\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add asterisks to input label for required configuration values",
"body": "**Is your feature request related to a problem? Please describe.**\r\nIt is not easily possible to determine if an configuration value is mandatory.\r\n\r\n**Describe the solution you'd like**\r\nIf a configuration value as marked as mandatory an asteriks should be added to the label\r\n\r\n**Describe alternatives you've considered**\r\nNone, open for suggestions\r\n\r\n**Additional context**\r\n - Bootstrap 5 related documentation: https://getbootstrap.com/docs/5.3/forms/validation/\r\n - Example solution of an asterisk: https://stackoverflow.com/questions/23141854/adding-asterisk-to-required-fields-in-bootstrap-3\r\n - related to https://github.com/glasskube/glasskube/issues/849\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Native html validation seems to be broken",
"body": "**Describe the bug**\r\nHtml form validation is broken\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. open the ui `glasskube open`\r\n2. configure a package with a mandatory configuration values (e.g. `k8sgpt-operator`)\r\n3. save a package without entering a mandatory value\r\n4. See error\r\n\r\n**Expected behavior**\r\nHtml validation should work\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/0e592624-c600-4ad9-a644-7bd3493bc992)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30.0\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n```\r\nat 14:29:49 ➜ glasskube version\r\nglasskube: v0.10.0\r\npackage-operator: v0.10.0\r\n```\r\n\r\n**Additional context**\r\n- This is a regression.\r\n- The required attribute should be added if a configuration value is marked as required",
"enhancement": false,
"bug": true
},
{
"title": "Add Chocolatey Support for Windows Installation and Upgrade of Glasskube",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe current Glasskube documentation provides installation and upgrade instructions for MacOS using Homebrew, but Windows users do not have a package manager to facilitate the installation and upgrading of Glasskube. This makes the process cumbersome, as it requires manually downloading and reinstalling the binaries.\r\n\r\n**Describe the solution you'd like**\r\nIntegrate [Chocolatey](https://chocolatey.org/) as the package manager for Windows. This will allow users to install and upgrade Glasskube packages easily using the Chocolatey framework.\r\n\r\n**Describe alternatives you've considered**\r\nCurrently, the only alternative for Windows users is to manually download the latest Glasskube binary and perform a full reinstallation. This method is less efficient and user-friendly compared to using a package manager like Chocolatey.\r\n\r\n**Additional context**\r\nImplementing Chocolatey support will enhance the user experience for Windows users, making Glasskube more accessible and easier to maintain.",
"enhancement": true,
"bug": false
},
{
"title": "Add upgrade instruction section to the upgrading doc (for macOS, Linux and Windows)",
"body": "**Is your feature request related to a problem? Please describe.**\r\nGlasskube installation and upgrading are detailed in the documentation. However, the current MacOS installation method does not include instructions for upgrading Glasskube using Homebrew.\r\n\r\nTo upgrade Glasskube, use the following command:\r\n```\r\nbrew upgrade glasskube\r\n```\r\nAlso add the upgrading steps for Linux and Windows, which requires downloading the latest binary and reinstalling Glasskube.\r\n\r\nWe should add a section to the [Upgrading page](https://glasskube.dev/docs/getting-started/upgrading/) ) to include this Homebrew upgrade method.\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Could not open `package` via UI and cli",
"body": "**Describe the bug**\r\nDue to refactoring of in [v0.10.0](https://github.com/glasskube/glasskube/releases/tag/v0.10.0) the open command does not work any longer.\r\n\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Install kubernetes-dashboard\r\n2. open kubernetes-dashboard\r\n3. See error\r\n\r\n**Expected behavior**\r\nOpen the UI\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/d6bd30d9-8c27-4b9d-91be-e8cbe70519a7)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30.0\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n```\r\nat 14:29:49 ➜ glasskube version\r\nglasskube: v0.10.0\r\npackage-operator: v0.10.0\r\n```\r\n\r\n\r\n**Additional context**\r\nservice got the name `kubernetes-dashboard-kubernetes-dashboard` instead of `kubernetes-dashboard`. So either port-forwarding or service name should be adjusted.",
"enhancement": false,
"bug": true
},
{
"title": "Server out of sync with Kubernetes API server",
"body": "**Describe the bug**\r\nAt random times, the watches of the UI server to the API server are \"stuck\", i.e. no events are received anymore, but there is no error or anything indicating so. As a consequence the UI does not react anymore to any cluster updates. \r\n\r\n**To Reproduce**\r\nNo actual reproduction scenario found yet. Sometimes happens after 1 minute, sometimes after 4 hours. \r\n\r\n**Expected behavior**\r\nWhen watches are lost, they have to be reconnected, and if that fails or is not possible, the user needs to be notified somehow about the error. \r\n\r\n**Screenshots**\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.28, 1.29, 1.30\r\n - Provider: minikube, OVH\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: all recent versions\r\n - CLI version: all recent versions\r\n\r\n**Additional context**\r\nRelated: https://github.com/glasskube/glasskube/issues/768, https://github.com/glasskube/glasskube/issues/756\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Extend logging that happens during `serve` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently the `glasskube serve` command only logs if a user installs a package. So only following the logs it seems that the installation will not be finished.\r\n\r\n**Describe the solution you'd like**\r\nAll (or most) status changes should be logged to `Stderr`. This can be noisy as this also might help us to reproduce and fix bugs if users can copy past us the ui logs. \r\n\r\n**Additional context**\r\nThis also might help investigating the \"out-of-sync\" task (#838).\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Links in package description should open in new tab",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe `longDescription` of a package manifest can contain links in markdown format. A markdown link is correctly rendered as an html anchor element, but it opens in the same tab the user is currently in.\r\n\r\n**Describe the solution you'd like**\r\nLinks in the `longDescription` should be rendered to have the `target=\"_blank\"` attribute too, to make it open in a new tab.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\nThis description is converted from markdown to HTML on the `package.html` template, using the `| Markdown` pipe. The corresponding function `Markdown` is registered in the `templates.go` file. There, the rendering happens – probably here something has to be done. \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Quickwit package: separation of metastoreUri and defaultIndexUri",
"body": "Hi.\r\n\r\n**Is your feature request related to a problem? Please describe.**\r\n\r\nOn some installations of quickwit, the metastoreUri isn't the same value as the default index uri (which is an object storage bucket). So we should have two separate fields even if it's the same value sometimes.\r\n\r\nIt'll help the quickwit users to understand the mapping with the helmchart better and also be able to add an external postgreSQL in their cluster to tune the quickwit performances later.\r\n\r\n**Describe the solution you'd like**\r\n\r\nTwo separate fields `metastoreUri` and `s3Uri`\r\n\r\nThanks in advance\r\n",
"enhancement": false,
"bug": false
},
{
"title": "When trying to run the package operator on mac air m2 by the `make run` command getting error saying can't find `tls.crt` - no such file or directory.",
"body": "**Describe the bug**\r\nI was working on #764 . When running the package operator on mac air m2 its returning with an error saying `problem running manager\t{\"error\": \"open /var/folders/gs/6x7sqthj2wscyhddhzzdtwdw0000gn/T/k8s-webhook-server/serving-certs/tls.crt: no such file or directory\"}`. However, when I did the same thing in my ubuntu it worked. After going through the logs I found out that when running the `make setup` command its saving the certificates in the `/tmp/k8s-webhook-server/serving-certs` . but when using the `make run` command its checking for the certs in ` /var/folders/gs/6x7sqthj2wscyhddhzzdtwdw0000gn/T/k8s-webhook-server/serving-certs/tls.crt` and there is no directory called `k8s-webhook-server` in the `T` folder.\r\n\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. You should have a mac(m2)\r\n2. Follow [this](https://github.com/glasskube/glasskube/blob/main/CONTRIBUTING.md#custom-package-repository) instruction .\r\n\r\n\r\n**Expected behavior**\r\nThe operator should run successfully.\r\n\r\n**Screenshots**\r\n<img width=\"1710\" alt=\"Screenshot 2024-06-15 at 9 55 25 AM\" src=\"https://github.com/glasskube/glasskube/assets/123734227/5acc02aa-50c4-4c8d-a60c-3fee8b1d8fb2\">\r\n<img width=\"1710\" alt=\"Screenshot 2024-06-15 at 9 57 55 AM\" src=\"https://github.com/glasskube/glasskube/assets/123734227/61039ab4-37a6-4ef5-80c8-f7d6f3768795\">\r\n<img width=\"1710\" alt=\"Screenshot 2024-06-15 at 9 59 39 AM\" src=\"https://github.com/glasskube/glasskube/assets/123734227/13deff04-0858-4c1c-ad42-ca45ba09b8a2\">\r\n\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30\r\n - Provider: minikube\r\n\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "`repo add` command with --default flag should return an error if there's a repository with that annotation already",
"body": "**Describe the bug**\r\n[Documentation](https://glasskube.dev/docs/design/repositories/#repository-management) states that if you use --default with the `repo add` command it should return an error if there's a repository with that annotation already.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Try to add a new repository with `glasskube repo add test https://example.com --default`\r\n2. List repositories with `glasskube repo list`\r\n3. Check that there are two default repositories\r\n\r\n**Expected behavior**\r\nEither we should get an error, or instead the current default repo will get the default annotation removed and the new repository being added will be the new default repo\r\n\r\n**Screenshots**\r\n\r\n![image](https://github.com/glasskube/glasskube/assets/30386061/c44c7386-bdba-4293-9042-94f2e7a9ab8a)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30.0\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.0.1\r\n - CLI version: dev\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Support hidden default value definitions in manifest",
"body": "**Is your feature request related to a problem? Please describe.**\r\nDuring quickwit integration, we noticed there might be a general need for dynamic default value configurations, i.e. configurations that are dependent on the package, but the user should not be able to change them. \r\n\r\nFor example: https://github.com/glasskube/packages/pull/139/files#diff-dfb7a579fd55c8c027910c1cd40500fad2952f96e57b58c0a634cce8d0fcc1d4R37 – here the name of the secret should include the package name, such that when multiple quickwits are installed in a namespace, each has its unique secret name. \r\n\r\n**Describe the solution you'd like**\r\nThere should be a new type of value configurations (name suggestions: `HIDDEN`, `STATIC`, `DEFAULT`), which are not shown on the CLI or the UI. Instead only the operator takes care of these. \r\n\r\nThe problem described above could then be solved with the following addition to the manifest:\r\n\r\n```\r\nvalueDefinitions:\r\n tlsSecretName:\r\n type: HIDDEN / STATIC / DEFAULT\r\n targets:\r\n - chartName: quickwit\r\n patch:\r\n op: add\r\n path: /ingress/tls\r\n valueTemplate: quickwit-tls-secret-{{ GetPackageName }}\r\n```\r\n\r\nwhere `GetPackageName` would be a newly added function that returns the package name of the evaluated package. \r\n\r\n**Describe alternatives you've considered**\r\n* Provide a mechanism to template parts of the `helm.values` part of the package manifest – more likely to add confusion for package maintainers\r\n* specifically for this case: add another `patch` to the `quickwitDomain` value – still need the `GetPackageName` function, and it would not be solved in general but only for this package.\r\n\r\n**Additional context**\r\n#803 \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Namespace-scoped packages",
"body": "In the current state, Glasskube packages can only be installed once per cluster. In some situations, this is an unnecessary restriction and limits some use-cases. \r\n\r\nIt should be possible for the author of a package to specify a \"scope\", which can either be \"Cluster\" or \"Namespaced\" (default \"Cluster\"). Depending on a packages scope, the Glasskube system should create either a cluster or namespace scoped custom resource. The name of the cluster-scoped CRD is `ClusterPackage`, the name for the namespace-scoped CRD is `Package`. This is a breaking change, because we currently use the `Package` CRD name for the cluster-scoped resources, but we settled on this to stay consistent with common Kubernetes nomenclature (e.g. `Role`/`ClusterRole`). Existing installations can not be migrated automatically.\r\n\r\n### Tasklist\r\n- [x] Refactor the codebase to support `ClusterPackage` and `Package`\r\n- [x] Refactor to use finalizers instead of owner references\r\n- [x] Update the dependency manager to allow `Package` validation\r\n- [x] Update `install` command to allow creating `Package` (#851)\r\n- [x] Update `update` command to allow updating `Package`\r\n- [x] Update `configure` command to allow updating `Package`\r\n- [x] Update `describe` command to show status of all `Package` instances\r\n- [x] Update `list` command to show all `Package` instances (#817)\r\n- [x] Update `open` command to support `Package`\r\n- [x] Update `uninstall` command to allow deleting `Package` (#857)\r\n- [x] Update `autoupdate` commands to handle `Package` (#834, #855)\r\n- [x] Add Apps list page (#817)\r\n- [x] Add Apps detail page (#817)\r\n\r\n### Limitations\r\n* For now, dependencies must always be Cluster scoped, even for namespace scoped packages",
"enhancement": false,
"bug": false
},
{
"title": "Add recent blog posts section to website front page",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe just redesigned our front page of [glasskube.dev](https://glasskube.dev/) and publish [blog posts](https://glasskube.dev/blog/) regularly, but the latest posts are not visible on the website.\r\n\r\n**Describe the solution you'd like**\r\nAdd a recent blog post section to the front-page, similar to the [cyclops](https://cyclops-ui.com/) website:\r\n\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/5dc2ad51-e0d3-4a76-8e31-5ea9815e668e)\r\n\r\n\r\n**Additional context**\r\nThe blog posts should be fetched dynamically.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add Discord link to Glasskube UI footer",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThere is currently no link in the Glasskube UI to our Discord server.\r\n\r\n**Describe the solution you'd like**\r\nA good place for the Discord link would be in the footer below \"Glasskube Cloud\"\r\n\r\nIt should be called \"Glasskube Discord\" with following link: `https://discord.gg/SxH6KUCGH7`\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "UI breaks when several tabs are opened",
"body": "**Describe the bug**\r\nOpen the UI in 10 tabs, the UI becomes completely unresponsive. \r\n\r\n**To Reproduce**\r\n\r\n**Expected behavior**\r\nUI works. \r\n\r\n**Screenshots**\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: dev\r\n - CLI version: dev\r\n \r\n**Additional context**\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Switching version before install throws javascript error if only one repository is present",
"body": "**Describe the bug**\r\nA javascript error is logged:\r\n\r\n> The selector \"#pkg-install-repository\" on hx-include returned no matches!\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Only configure one repository\r\n2. Open UI\r\n3. Go to package detail page\r\n4. Switch version you want to install\r\n5. See error in console\r\n\r\n**Expected behavior**\r\nNo error should be thrown\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.30\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\nglasskube: v0.8.0\r\npackage-operator: v0.8.0\r\n\r\n\r\n**Additional context**\r\nAlso no pages can be loaded afterwards and the ui is stuck\r\n",
"enhancement": false,
"bug": true
},
{
"title": "pull request template URL returns 404Not Found",
"body": "**Describe the bug**\r\n[pull request template](https://github.com/glasskube/glasskube/blob/main/.github/pull_request_template.md) URL in [the contribution guid](https://github.com/glasskube/glasskube/blob/main/CONTRIBUTING.md) is returning a 404 Not Found error and needs to be updated.\r\n\r\n**To Reproduce**\r\nURL [pull request template](https://github.com/glasskube/glasskube/blob/main/.github/pull_request_template.md) is `404 Not Found error`.\r\n\r\n**Expected behavior**\r\nFix URL https://github.com/glasskube/glasskube/blob/main/.github/PULL_REQUEST_TEMPLATE.md\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Add a CLI Command to Run Automatic Updates for Packges Where Enabled",
"body": "**Is your feature request related to a problem? Please describe.**\nGlasskube used to support automatic updates on the operator side, but this feature has since been removed and we don't currently have an alternative, even though the CLI and UI can set the relevant annotation.\n\n**Describe the solution you'd like**\nThere should be a new CLI command that runs the auto updates. This command should be as simple as possible and never require user interaction, because it should be designed to be integrated into automated workflows.\n\nIt should also be easier to enable/disable automatic updates. This should be provided via separate CLI commands.\n\n**Describe alternatives you've considered**\nAlternatively, we could build a separate tool for this use-case but since we already have a lot of the logic in the Glasskube CLI I think it's a better fit.\n\n**Additional context**\n\nExamples:\n\n```sh\n# run the auto updater\nglasskube auto-update\n# enable auto updates for specific packages\nglasskube auto-update enable foo bar\n# enable auto updates for all packages\nglasskube auto-update enable --all\n# disable auto updates for all packages\nglasskube auto-update disble --all\n```",
"enhancement": true,
"bug": false
},
{
"title": "Wait for server caches to be populated",
"body": "**Is your feature request related to a problem? Please describe.**\r\nTurning off some logging shows that we open the browser and show the \"ready message\" (\"UI is available ...\") a bit too early: \r\n\r\n```\r\nI0606 15:14:07.129073 279189 cert_rotation.go:137] Starting client certificate rotation controller\r\nI0606 15:14:07.135934 279189 reflector.go:296] Starting reflector *v1alpha1.Package (0s) from pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:232\r\nI0606 15:14:07.135937 279189 reflector.go:296] Starting reflector *v1alpha1.PackageInfo (0s) from pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:232\r\n...\r\nglasskube UI is available at http://localhost:8580\r\nI0606 15:14:07.137386 279189 reflector.go:359] Caches populated for *v1.Namespace from pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:232\r\nI0606 15:14:07.137814 279189 reflector.go:359] Caches populated for *v1alpha1.PackageInfo from pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:232\r\nI0606 15:14:07.137825 279189 reflector.go:359] Caches populated for *v1alpha1.Package from pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:232\r\n...\r\n```\r\n\r\nWhen the connection to the cluster is slow, this could lead to an \"empty\" (i.e. nothing installed, even though packages are installed) package overview page on the initial load – happened to me once in my OVH cluster. It was corrected after page reload, so I suspect this timing issue was the cause of that. \r\n\r\n**Describe the solution you'd like**\r\nIt should be investigated whether we can actually hook into the store/controller of `client-go` (or maybe we can somehow use our `initPackageStoreAndController` functions?), or not at all – if not, I guess the issue can be neglected.\r\nIf it's possible, we could \r\n* send an update event to the client once caches are populated, then it will rerender anyway,\r\n* show a warning on the UI: \"server is initializing\" or something like that,\r\n* or not open the browser until caches are populated (but of course one can still always open the page in the browser by themselves), \r\n* or both. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add Creation of Docker Images for Glasskube CLI During Release",
"body": "Some use-cases require running tasks using the Glasskube CLI from within the cluster. To enable those workflows, we need to publish docker images for the Glasskube CLI.",
"enhancement": false,
"bug": false
},
{
"title": "`autoUpdate` output in `glasskube describe --output=[yaml|json]` should be a boolean",
"body": "**Is your feature request related to a problem? Please describe.**\r\nJSON/YAML output to `glasskube describe` has been added in #717. The field `autoUpdate` is a string \"Enabled\" or \"Disabled\", but it should actually be a boolean true/false instead.\r\n\r\n**Describe the solution you'd like**\r\n`autoUpdate` should be a boolean.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\nhttps://github.com/glasskube/glasskube/pull/717#discussion_r1629411787\r\n",
"enhancement": false,
"bug": false
},
{
"title": "Gateway API",
"body": "**Package Information**\r\n - Name: gateway-api\r\n - Source Code: [if available]\r\n - Website: [https://gateway-api.sigs.k8s.io/](https://gateway-api.sigs.k8s.io/)\r\n\r\n**Why we should add this package to our registry**\r\n\r\n\r\n**If you are an author of this project, let us know**\r\n - [ ] I am an author of this project\r\n\r\n**Additional information**\r\n\r\n[https://gateway-api.sigs.k8s.io/guides/#install-standard-channel](https://gateway-api.sigs.k8s.io/guides/#install-standard-channel)",
"enhancement": false,
"bug": false
},
{
"title": "Cache `PackageRepository` custom resources",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen turning on logging, I noticed that we already have some client-side throttling again because of requests to the `PackageRepository` resources:\r\n\r\n```\r\nInstalling kubernetes-dashboard...\r\nI0606 13:42:59.093760 206148 request.go:629] Waited for 180.502406ms due to client-side throttling, not priority and fairness, request: GET:https://192.168.58.2:8443/apis/packages.glasskube.dev/v1alpha1/packagerepositories/glasskube\r\nI0606 13:42:59.293507 206148 request.go:629] Waited for 359.303205ms due to client-side throttling, not priority and fairness, request: GET:https://192.168.58.2:8443/apis/packages.glasskube.dev/v1alpha1/packagerepositories\r\nI0606 13:42:59.493378 206148 request.go:629] Waited for 392.101617ms due to client-side throttling, not priority and fairness, request: GET:https://192.168.58.2:8443/apis/packages.glasskube.dev/v1alpha1/packagerepositories\r\nI0606 13:42:59.693269 206148 request.go:629] Waited for 397.435373ms due to client-side throttling, not priority and fairness, request: GET:https://192.168.58.2:8443/apis/packages.glasskube.dev/v1alpha1/packagerepositories/glasskube\r\nI0606 13:42:59.893667 206148 request.go:629] Waited for 397.891212ms due to client-side throttling, not priority and fairness, request: GET:https://192.168.58.2:8443/apis/packages.glasskube.dev/v1alpha1/packagerepositories/glasskube\r\n```\r\n\r\n**Describe the solution you'd like**\r\n* Investigate whether it is reasonable that so so many requests are being made (probably yes)\r\n* Implement the same kind of cache as we have for `Package` and `PackageInfo` resources\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Change flag name of `--force` to `--yes` for `glasskube uninstall`",
"body": "The `uninstall` command was the first one to have such a feature, but we settled on the name `--yes` for all other commands. For better consistency, the `uninstall` command should also use `--yes` for this flag. ",
"enhancement": true,
"bug": false
},
{
"title": "Possibility to set cache time or to clear caches manually",
"body": "The default cache time of the repo cache is 5 minutes and is hardcoded. We should discuss strategies for local development and testing where one might want to disable the cache, or reduce the time, or clear it manually with a button click / command. ",
"enhancement": true,
"bug": false
},
{
"title": "Suppress 404 error for packages without a giscus discussion",
"body": "**Is your feature request related to a problem? Please describe.**\r\nOn the UI, when opening the package detail page of a package, which does not have a corresponding discussion (https://github.com/glasskube/glasskube/discussions/categories/packages) yet, an error will be logged to the console: \"failed to get discussion counts from giscus: wrong status code: 404 Not Found\". \r\n\r\nHowever, this is a legit case and should not be logged, as this could confuse the user. \r\n\r\n**Describe the solution you'd like**\r\nThe giscus API is called here: `internal/web/discussions.go:discussionBadge` – this is the endpoint to load the number of reactions on the package detail page. When calling `giscus.Client().GetCountsFor(pkgName)`, the returned error should be checked whether it is a NOT_FOUND error (404) or not. If it is, then the error should not be logged.\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "PR Workflow Update: Migrate from Rebase-Merge to Squash-Merge",
"body": "Squash merging provides several benefits over rebasing:\r\n- always a single changelog entry for a PR\r\n- no need for contributors to continuously rebase their branch and fiddle with commit message format\r\n- more control over commit message in `main` branch (and thus changelog entries) for the core team\r\n\r\nIn order to adopt this workflow, the following changes must be made:\r\n- [ ] Disable all merge options other than \"Squash & Merge\" in the repository settings (must be performed by a repository admin)\r\n- [ ] Add a PR check that verifies that the title conforms to the spec. There are two options for this, an app and a workflow action:\r\n - https://github.com/Ezard/semantic-prs (used by renovate)\r\n - https://github.com/amannn/action-semantic-pull-request\r\n- [ ] Remove the commitlint workflow\r\n",
"enhancement": false,
"bug": false
},
{
"title": "`--skip-open` flag for `glasskube serve` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe `glasskube serve` command always opens a new browser tab. In cases where the command is often stopped and restarted (like development), this can be annoying. \r\n\r\n**Describe the solution you'd like**\r\nThe command should have a flag `--skip-open` (shorthand: `-s`). When it is set, the page should not be opened in the browser. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Show repository status on settings page",
"body": "**Is your feature request related to a problem? Please describe.**\r\nOn the UI, the settings page shows a green or red circle next to each repository, indicating whether it has status \"Ready\" or not. \r\n\r\n**Describe the solution you'd like**\r\nThere should be an additional text when hovering with the mouse over this circle. The html `title` attribute should be used. The two possible texts are \"Ready\" and \"Not Ready\".\r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "`--repository` flag for `glasskube list` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\n`glasskube ls` always shows the packages of all configured repositories, but there should be a way to look at packages of one specific repository.\r\n\r\n**Describe the solution you'd like**\r\n`glasskube ls` should have a flag `--repository`, which can be used this way: `glasskube ls --repository [repoName]`. Only the packages defined in the given repo will then be listed. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "`glasskube bootstrap` should show different prompt when updating",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently the `glasskube bootstrap` command shows a prompt like \"Glasskube will be installed in context xyz. Continue?\" (see #719). While this is correct for non-bootstrapped clusters, it makes no sense when the user wants to update the current glasskube installation and might be confusing. \r\n\r\n**Describe the solution you'd like**\r\nWhen glasskube is bootstrapped in the current cluster, the prompt should be: \"Glasskube will be updated to version [version] in cluster [cluster]. Continue?\" \r\n\r\nAs in #719, if the `--yes` flag is set, the prompt should not appear. \r\n\r\nThere is already a check in place, whether the installation would be downgraded. This check should be done first. If the installation would not be downgraded, then the prompt for installing/updating should appear, because only at this point we know if glasskube is already installed and in which version. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add markdown support in package value description",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe description of a package value can be a longer text so having support for some formatting, like emphasis, links and so on would be beneficial for package authors.\r\n\r\n**Describe the solution you'd like**\r\nWe already support markdown in the package long description, so it would be consistent to use the same markup language.\r\n\r\n**Additional context**\r\n\r\nRelevant template file: `internal/web/templates/components/pkg-config-input.html`\r\n\r\nThe description should be passed through the `Markdown` function.\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Indicate default repository via UI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is not possible to determine via the ui, if a repository is configured as default repository:\r\n\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/151388de-c4b4-4b42-ba7d-8aa22061780c)\r\n\r\n\r\n**Describe the solution you'd like**\r\nAdd an indication to the UI that a repository is configured as default repository.\r\n\r\n**Describe alternatives you've considered**\r\nCurrently it is necessary to describe the custom resource.\r\n\r\n\r\n**Additional context**\r\nWhether a given `PackageRepository` is marked as the default repository can be determined by checking [`IsDefaultRepository()`](https://pkg.go.dev/github.com/glasskube/glasskube/api/v1alpha1#PackageRepository.IsDefaultRepository).\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add `default` column to `glasskube repo list` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently it is not possible to determine via the cli, if a repository is configured as default repository:\r\n\r\n```\r\n➜ glasskube repo list\r\nNAME URL AUTHENTICATION STATUS MESSAGE\r\nglasskube https://packages.dl.glasskube.dev/packages None Ready repo has 12 packages \r\nlocal http://host.minikube.internal:8088 None Ready repo has 12 packages\r\n``` \r\n\r\n**Describe the solution you'd like**\r\nAdd a default column so it is possible to see if a repo is configured as default repo.\r\n\r\n**Describe alternatives you've considered**\r\nCurrently it is necessary to describe the custom resource.\r\n\r\n**Additional context**\r\nWhether a given `PackageRepository` is marked as the default repository can be determined by checking [`IsDefaultRepository()`](https://pkg.go.dev/github.com/glasskube/glasskube/api/v1alpha1#PackageRepository.IsDefaultRepository).",
"enhancement": true,
"bug": false
},
{
"title": "Package Config Form should not be reset when only package status updates",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe rerender the whole package detail page at any package update. If a user is working in the package configuration and changes a few values without having saved yet, and package update is coming in, the page is being rerendered and the changes are lost. \r\n\r\n**Describe the solution you'd like**\r\nThe config form should not be reset when only the status changes. It is probably fine to still reset it in these cases:\r\n* package has been installed or uninstalled\r\n* package configuration has changed elsewhere\r\n* package version/repository has changed\r\n\r\nOld and new package are both known at the time of the update, so the config should be comparable. Since the package detail page is quite bloated already anyway, it might make sense to somehow split it into separate components/endpoints, which would have the benefit that separate components can be reloaded instead of the whole page. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": false,
"bug": false
},
{
"title": "Add `--dry-run` support for `glasskube bootstrap`",
"body": "",
"enhancement": true,
"bug": false
},
{
"title": "Add `--output` support for `glasskube bootstrap`",
"body": "",
"enhancement": true,
"bug": false
},
{
"title": "Add confirmation to `bootstrap` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThe bootstrap command starts it's work right away, which can be dangerous if a user has the wrong kubeconfig context selected.\r\n\r\n**Describe the solution you'd like**\r\nBefore doing anything, `bootstrap` should ask the user for confirmation, the prompt should include the current context name. For example:\r\n\r\n Glasskube will be installed in context [name-of-current-context].\r\n Continue? (Y/n)\r\n\r\nThere should also be a `--yes` flag, that skips this step.\r\n\r\nIf the bootstrap process is triggered via the UI, the confirmation prompt MUST NOT be shown!\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Enable/disable auto-updates for installed packages in UI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAuto-updates can only be enabled/disabled at the time of installation, but not afterwards. \r\n\r\n**Describe the solution you'd like**\r\nOn the package detail page, there should be a switch to turn on/off auto-updates. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\nFollow-Up of #716\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Implement specific (multi repository) package upgrades / downgrades",
"body": "**Is your feature request related to a problem? Please describe.**\nAs user I want to change the version of an installed package (and even install the package from a different repository)\n\n**Describe the solution you'd like**\nIntroduce a new repository dropdown for not yet installed and already installed packages and add a version select to already installed packages, which changes the package version.\nI also want to be able to change the auto upgrade checkbox for already installed packages.\n\n**Describe alternatives you've considered**\nIt is already possible to install / configure specific versions from the cli (`glasskube install keptn --version=v2.0.0-rc.1+1`)\n\n**Additional context**\nI already created a mockup of the app detail page:\n\n![Glasskube package version and repo switch](https://uploads.linear.app/df577539-a424-4cdd-a9e7-429a979eefe9/909db2df-a19b-47a7-929f-5b9b31d7fd74/5ebc4cc9-514b-4793-bb9b-6ff0bcd5e914?signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXRoIjoiL2RmNTc3NTM5LWE0MjQtNGNkZC1hOWU3LTQyOWE5NzllZWZlOS85MDlkYjJkZi1hMTliLTQ3YTctOTI5Zi01YjliMzFkN2ZkNzQvNWViYzRjYzktNTE0Yi00NzkzLWJiOWItNmZmMGJjZDVlOTE0IiwiaWF0IjoxNzE3MTQ4MjgxLCJleHAiOjMzMjg3NzA4MjgxfQ.AbfeL2tRVRgRJUPATJ4T_nmHrf9Lcf8uvmZy8SqpHGg)",
"enhancement": true,
"bug": false
},
{
"title": "Add `purge` command to remove Glasskube from a cluster",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAt the moment there is no guide/instruction/way to remove glasskube from a cluster\r\n\r\n**Describe the solution you'd like**\r\nglasskube bootstrap uninstall or similar\r\n\r\n**Describe alternatives you've considered**\r\nWorst case a list of manifests etc to uninstall in a readme etc\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add `--no-progress` cli flag",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAs we introduced autoated tests in our ci enviornment (e.g. https://github.com/glasskube/packages/actions/runs/9266452356/job/25492645517) our progress spinners are quite noise (printing 10 lines every second)\r\n\r\n**Describe the solution you'd like**\r\nGlobally introduce a `--no-progress` cli flag that prevents progress logging to the cli.\r\n\r\n**Additional context**\r\nThis will also be used in our automated testing infrastrucutre.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Discussion page is broken in multi repo environment",
"body": "**Describe the bug**\r\nDiscussion page is broken for packages that do not appear in the public glasskube repo.\r\n\r\n**Expected behavior**\r\nThe discussion page should be disabled and not linked to for such packages. ",
"enhancement": false,
"bug": true
},
{
"title": "An error occurred fetching package index of [package] in repository",
"body": "**Describe the bug**\r\nWhen using multiple repositories the ui is not able to determin the correct repository to fetch the `versions.yaml` file from.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Add a second repository\r\n2. Add a package in the second repository that does not exist in the first one\r\n3. start the ui\r\n4. try to go to the detail page\r\n\r\n**Expected behavior**\r\nSee the package details of the package from the correct package repository\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/a5c9942b-b219-4b1a-92d7-9fef5fe0047d)\r\n\r\n![image](https://github.com/glasskube/glasskube/assets/3041752/d990ddab-5c26-441d-b3ee-1df52808e67b)\r\n\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: minikube v1.32.0\r\n - Version: 1.28.3\r\n\r\n**Glasskube Info (please complete the following information):**\r\n> glasskube version\r\nglasskube: v0.5.1\r\npackage-operator: v0.5.1\r\n\r\n\r\n**Additional context**\r\n - Installing the package via the cli works\r\n - If only one repository exists the problem does not occur\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Validate cycles in configuration references",
"body": "**Is your feature request related to a problem? Please describe.**\r\nOne can configure cycles in a package configuration, leading to endless loops and crashes of both the client and the operator.\r\n\r\nExample A:\r\nPackage `P` has a value configuration for value `x`, that is simply a reference to package `P`'s value `x` (i.e. a reference to itself). Referring from a package to itself could be a real use case, when someone wants to re-use a value (for example a domain) and only define it once. Actually referring to the exact same value is not useful, but could still happen by accident, and the crash would lead to the user having to manually resolve it in the CRD.\r\n\r\nExample B:\r\nPackage `P` has a value configuration for value `x`, that is a reference to the value configuration `y` of another package `Q`. Somebody could (accidentally or not) set `Q`'s value `y` to be a reference to `P`'s `x`. This would also result in a cycle and an endless loop.\r\n\r\n**Describe the solution you'd like**\r\nThere should be some sort of validation, which makes it impossible to store such faulty configuration in the first place. The self-references could be catched easier (simply check if the reference package is \"itself\", and if so, check whether it's actually the same name). However, this doesn't prevent cycles. For cycles, during resolving we need to store the path we are walking along, and then check if we come to a point we have been before. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Support repo updates with `glasskube repo update [repoName]`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently, there is no way to update a `PackageRepository` custom resource via our CLI.\r\n\r\n**Describe the solution you'd like**\r\nThere should be a `repo`-subcommand `delete`, which can be used like this:\r\n\r\n`glasskube repo update [repositoryName]`\r\n\r\nIt should support the same flags as the `repo add` command, and additionally the `--url` flag to make changing the url possible. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\nRef #195 \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Support repo deletion with `glasskube repo delete [repoName]`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCurrently, there is no way to delete a `PackageRepository` custom resource via our CLI, one would have to delete the resource manually instead.\r\n\r\n**Describe the solution you'd like**\r\nThere should be a `repo`-subcommand `delete`, which can be used like this:\r\n\r\n`glasskube repo delete [repositoryName]`\r\n\r\nThe command should verify whether no packages are currently installed from this repository. If there are packages installed from the repo, the deletion should be aborted with this error message: \"Repository [repoName] cannot be deleted, because the following packages are installed from this repository: [list of package names]\". \r\n\r\nBefore deleting, the user should be asked to confirm deleting the repository, by using the existing Yes/No prompt, where `No` should be the default. The prompt should be: \"[repoName] will be removed from your current cluster ([current-context]). Continue? (y/N)\"\r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\nRef #195 \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add `--dry-run` support for `glasskube configure`",
"body": "See #629 for details.\r\n\r\nThe `--dry-run` flag can be used by users, who want to simulate configuring a package, but don't actually want to configure it.",
"enhancement": true,
"bug": false
},
{
"title": "Add `--dry-run` support for `glasskube update`",
"body": "See #629 for details.\r\n\r\nThe `--dry-run` flag can be used by users, who want to simulate updating a package, but don't actually want to update it.",
"enhancement": true,
"bug": false
},
{
"title": "Add `--dry-run` support for `glasskube install`",
"body": "See #629 for details.\r\n\r\nThe `--dry-run` flag can be used by users, who want to simulate installing a package, but don't actually want to install it. ",
"enhancement": true,
"bug": false
},
{
"title": "Add `--output` support for `glasskube configure`",
"body": "See #629 for details.\r\n\r\nSince `configure` modifies a resource, the output of the command should be the configured package.",
"enhancement": true,
"bug": false
},
{
"title": "Add `--output` support for `glasskube update`",
"body": "See #629 for details.\r\n\r\nSince `update` modifies a resource, the output of the command should be the updated package.\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Add `--output` support for `glasskube install`",
"body": "See #629 for details.\r\n\r\nSince `install` modifies a resource, the output of the command should be the created package. ",
"enhancement": true,
"bug": false
},
{
"title": "Add `--output` support for `glasskube describe`",
"body": "See #629 for details. ",
"enhancement": true,
"bug": false
},
{
"title": "Show uninstalling state in `list` and `describe` command",
"body": "**Is your feature request related to a problem? Please describe.**\r\nAs a follow up of #456 we should also show \"uninstalling\" in the CLI, i.e. `list` and `describe` commands, in order to keep CLI and UI consistent. \r\n\r\n**Describe the solution you'd like**\r\nAs defined in #456, when a package is in the progress of being uninstalled, its status should be \"Uninstalling\" instead of \"Pending\". \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n#456\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Auto-Update label should be an annotation",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWe use the `packages.glasskube.dev/auto-update` label to decide whether a package should be updated automatically or not. However, labels are used to attach identifying information to a custom resource, see https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/. Non-identifying information should be attached by using annotations: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ \r\n\r\n**Describe the solution you'd like**\r\nWherever the auto-update label is being used in the code base, it should be changed to use an annotation instead. \r\n\r\n**Additional context**\r\nThis came up here: https://github.com/glasskube/glasskube/pull/618#discussion_r1598377945\r\n",
"enhancement": false,
"bug": false
},
{
"title": "JSON/YAML output for CLI commands",
"body": "All CLI commands should support specifying an output format if applicable. This can be done using the `--output` flag (short: `-o`). This flag is optional (default: empty) and can be set to \"json\" or \"yaml\". Output should be written to STDOUT.\r\n\r\nIf a command modifies some resources, the output should be of the resource after modification. \r\nThose commands should also provide a `--dry-run` option. \r\n\r\n### Examples\r\n```\r\n# list packages as yaml\r\nglasskube ls -o yaml\r\n# simulate install and write json output to a file\r\nglasskube install foo-pkg --dry-run --output=json > foo.json\r\n```\r\n\r\n### Subtasks\r\n- [x] https://github.com/glasskube/glasskube/issues/465\r\n- [x] #655 \r\n- [x] #656\r\n- [x] #659\r\n- [x] #657\r\n- [x] #660\r\n- [x] #658\r\n- [x] #661\r\n- [x] #724\r\n- [x] #725\r\n",
"enhancement": false,
"bug": false
},
{
"title": "Quickwit package integration",
"body": "**Package Information**\r\n - Name: Quickwit\r\n - Source Code: https://github.com/quickwit-oss\r\n - Helm Chart: https://github.com/quickwit-oss/helm-charts\r\n - Website: https://quickwit.io/\r\n\r\n**If you are an author of this project, let us know**\r\nI am not the author of the package, but we already had a call with @fmassot about the package integration and will support him with an initial version.\r\n\r\n\r\n**Additional information:**\r\nQuickwit requires an s3 bucket and a postgres database for storage.\r\n\r\nFor the postgres can create a dependency on the cnpg-operator and but a manifest in the Glasskube package and than reference the access credentials from the cnpg secret.\r\n\r\nFor the S3 bucket we need to find a solution.\r\n\r\n**More information:**\r\n - https://quickwit.io/docs/deployment/kubernetes/helm",
"enhancement": false,
"bug": false
},
{
"title": "Error updating using `bootstrap`",
"body": "**Describe the bug**\r\nWhen using `glasskube bootstrap` to upgrade the cluster components from version 0.2 to 0.3 there is an error because the webhook cert job cannot be updated.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Setup a fresh cluster\r\n2. Bootstrap an older version\r\n3. Bootstrap a newer version\r\n\r\n**Expected behavior**\r\nIf a job with the same name already exists, do one of the following:\r\n- It is not updated\r\n- It is deleted and re-created using the updated manifest\r\n\r\nThis should not be limited to the webhook cert job, it should work for any potential job we might add.\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Boolean parsing error on UI details page for value definitions without a default value",
"body": "**Describe the bug**\r\nWhen opening the details page of a package, which has a boolean value definition without a default value, the following error appears in the server log: `strconv.ParseBool: parsing \"\": invalid syntax`.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior: Open kube-prometheus-stack detail page. The error will be shown twice (once for each such value). \r\n\r\n**Expected behavior**\r\nThe error should not appear. \r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.28\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.2.1\r\n - CLI version: v0.2.1\r\n\r\n**Additional context**\r\nQuite low priority since no functionality is affected at all, it's just confusing. ",
"enhancement": false,
"bug": true
},
{
"title": "Kube API server connection indicator on UI",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhile using the UI, the connection to the API server (especially in the watch loops) could be lost. I had this issue recently when using glasskube in my OVH cluster, and then running a security patch of the kubernetes cluster, where the watch loop seems to have been disturbed at least:\r\n\r\n```\r\nW0423 13:21:29.949641 75118 reflector.go:462] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:229: watch of *v1alpha1.Package ended with: Internal error occurred: rpc error: code = Unknown desc = context canceled\r\nW0423 13:30:29.677213 75118 reflector.go:462] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:229: watch of *v1alpha1.Package ended with: an error on the server (\"unable to decode an event from the watch stream: http2: client connection lost\") has prevented the request from succeeding\r\nW0423 13:30:29.677265 75118 reflector.go:462] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:229: watch of *v1alpha1.PackageInfo ended with: an error on the server (\"unable to decode an event from the watch stream: http2: client connection lost\") has prevented the request from succeeding\r\n```\r\n\r\nInterestingly, it seems that afterwards the connection has come back up automatically. Either way, we should investigate this (maybe there are also other cases where the watch loop is cancelled / terminated) and find a way to show this information and how to resolve it to the user on the UI, e.g. \"It seems that your Kubernets API server is not reachable – please check again and restart with glasskube server\". \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "User confirmation when existing resources are going to be modified",
"body": "**Is your feature request related to a problem? Please describe.**\r\nWhen testing in a cluster with existing components, it could happen that `glasskube install` overrides/changes existing components.\r\n\r\n**Describe the solution you'd like**\r\nThe user should be warned and/or asked for confirmation whether to proceed. \r\n\r\nTo be discussed how exactly this should look like and work. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": true,
"bug": false
},
{
"title": "Uninstalling via UI does not show pending in OVH cluster",
"body": "**Describe the bug**\r\nWhile a package is being uninstalled, it is expected that the disabled Pending button is shown (although this should change with #456 – the problem would most likely still be the same). This works fine in minikube clusters, but seems to be different in a proper cluster (like in this case, OVH). Here the Pending button is shown for a very short time, and then it switches back to the Open/Uninstall button again. When uninstallation is finished, these buttons are removed correctly. \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Uninstall a package via UI\r\n\r\n**Expected behavior**\r\nPending button is shown during uninstallation. \r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.27.4-0\r\n - Provider: OVH\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.2.1\r\n - CLI version: v0.2.1\r\n\r\n**Additional context**\r\n\r\n* The events/updates arrive in the correct order at the client via the websocket, so it must be some client-side issue. \r\n* The issue does not arise when using the dev build or a locally built binary, only when using the released build. ",
"enhancement": false,
"bug": true
},
{
"title": "Open via UI fails when pod changes",
"body": "**Describe the bug**\r\nWhen during the same UI process a package has been opened, uninstalled, then installed again and opened again, the open fails. The tab is being opened, but it stays empty. There is also no error message on the UI, but one in the server console:\r\n\r\n```\r\nE0423 13:10:02.367041 75118 portforward.go:409] an error occurred forwarding 3000 -> 80: error forwarding port 80 to pod 1157c257cc625a8eaac376e63d2bb482f9da8fe66b9c891319d5e72e2896b8b0, uid : failed to find sandbox \"1157c257cc625a8eaac376e63d2bb482f9da8fe66b9c891319d5e72e2896b8b0\" in store: not found\r\n```\r\n\r\nThere might also be other triggers which cause the forwarded-to pod to be deleted (e.g. config changes?). \r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Open a package via UI\r\n2. Uninstall the package\r\n3. Install the package again\r\n4. Open the package via UI\r\n\r\n**Expected behavior**\r\nOpen works. \r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.28\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: v0.2.1\r\n - CLI version: v0.2.1\r\n",
"enhancement": false,
"bug": true
},
{
"title": "GitHub Pages does not always render multi-document YAML files correctly",
"body": "**Describe the bug**\r\nIf a YAML file contains multiple documents separated with a `---` document separator, it can optionally start with a document separator as well. If this is done, though, GitHub pages skips the first (or more?) documents.\r\n\r\n**To Reproduce**\r\nMust be reproduced on GitHub pages\r\n\r\n**Expected behavior**\r\nFull YAML is returned.\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: 0.2.1\r\n - CLI version: 0.2.1\r\n\r\n**Additional context**\r\nDiscovered by @pmig.\r\n\r\nThis bug is possibly caused by the Jekyll pre-processor that GitHub pages uses when the default workflow is used. This can probably be prevented by simply running the action in a custom workflow without any preprocessing (since we don't need any).",
"enhancement": false,
"bug": true
},
{
"title": "UI: Details page incomplete after uninstall completed",
"body": "**Describe the bug**\r\nWhen uninstalling a package, when the package has been deleted from the cluster the buttons on the top of the page disappear but the \"install\" part is still missing. After refreshing the page, it is there.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Run the UI with `glasskube serve`\r\n2. Go to an installed package\r\n3. Press the uninstall button\r\n4. Wait for completion\r\n\r\n**Expected behavior**\r\nthe install form appears at the bottom of the page.\r\n\r\n**Screenshots**\r\n![image](https://github.com/glasskube/glasskube/assets/16959694/c36863e0-ba3e-454f-84c3-d854c696e9da)\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: v1.28.3\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: 0.2.0\r\n - CLI version: 0.2.0\r\n\r\n**Additional context**\r\nAdd any other context about the problem here.\r\n",
"enhancement": false,
"bug": true
},
{
"title": "dpkg install not possible: \"trying to overwrite '/usr/share/doc/nfpm/copyright'\"",
"body": "**Describe the bug**\r\nIt seems that glasskube and certain other tools using goreleaser use the same location for their copyright file: `/usr/share/doc/nfpm/copyright`. \r\n\r\nOutput of trying to install glasskube v0.2.0 via `dpkg -i`:\r\n\r\n```\r\nPreparing to unpack glasskube_v0.2.0_amd64.deb ...\r\nUnpacking glasskube (0.2.0) ...\r\ndpkg: error processing archive glasskube_v0.2.0_amd64.deb (--install):\r\n trying to overwrite '/usr/share/doc/nfpm/copyright', which is also in package k9s 0.32.4\r\nErrors were encountered while processing:\r\n glasskube_v0.2.0_amd64.deb\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Install k9s binary\r\n2. Try to install glasskube\r\n\r\n**Expected behavior**\r\nInstallation should work – the copyright file should probably put into a glasskube subdirectory instead. \r\n\r\n**Screenshots**\r\nIf applicable, add screenshots to help explain your problem.\r\n\r\n**Cluster Info (please complete the following information):**\r\n - Type: Kubernetes\r\n - Version: 1.28.3\r\n - Provider: minikube\r\n\r\n**Glasskube Info (please complete the following information):**\r\n - Package Operator version: -\r\n - CLI version: v0.2.0\r\n\r\n**Additional context**\r\n* https://nfpm.goreleaser.com/tips/#the-copyright-file\r\n* https://github.com/opentofu/opentofu/issues/805\r\n* https://github.com/k8sgpt-ai/k8sgpt/issues/878\r\n",
"enhancement": false,
"bug": true
},
{
"title": "`glasskube version` should not show an error when not bootstrapped",
"body": "**Is your feature request related to a problem? Please describe.**\r\n`glasskube version` shows an error when not bootstrapped yet, but it's a valid case to not have it bootstrapped yet and check the client version.\r\n\r\n**Describe the solution you'd like**\r\nInstead of the error it should show an information that it's not bootstrapped yet, and a hint that it can be done with the `bootstrap` command. \r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "HTTP errors not handled correctly when calling `glasskube bootstrap`",
"body": "**Describe the bug**\r\nBy default the bootstrap command downloads the Glasskube manifest from a GitHub release. If there is a HTTP error response (e.g. 404), the app should show the error code and exit without trying to parse the response as YAML.\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Run `glasskube bootstrap --url ...` with a URL that leads to a 404 error\r\n\r\n**Expected behavior**\r\nA helpful error message.\r\n\r\n",
"enhancement": false,
"bug": true
},
{
"title": "Changing the local port for `glasskube open`",
"body": "**Is your feature request related to a problem? Please describe.**\r\nThere might be issues if the local port is already in use when using the `open` command. It should be possible to change the default if desired.\r\n\r\n**Describe the solution you'd like**\r\nOn the CLI, a different port can be specified with `--port`. If the flag is used and there are multiple entrypoints for the package and no single entrypoint is specified via CLI argument, the command should exit with an error. If the flag is not specified, the default from the manifest should be used.\r\n\r\n**Describe alternatives you've considered**\r\nAdding logic to pick a different random port (similar to what we already to for the `serve` command), but I think this would be more complicated an error prone in this situation, since the listener can not be reused. We might have to extract the port from the listener, then close it and reuse the same port for another listener… OTOH there is no reason why both features shouldn't exist.\r\n\r\n**Additional context**\r\nNo idea how to do this on the UI :thinking: \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Patch the package manifests prior to adding them in the package ecosystem?",
"body": "**Is your feature request related to a problem? Please describe.**\r\nI have a similar issue as described in https://github.com/glasskube/glasskube/issues/306#issuecomment-1976360853: \r\n\r\nI am trying to open cyclops via `glasskube open` which is not working because `cyclops v0.3.1` (and prior versions) sets its [service type to LoadBalancer](https://github.com/cyclops-ui/cyclops/blob/v0.3.1/install/cyclops-install.yaml#L405-L407) so that cyclops already runs on port 3000 on localhost.\r\n\r\nSee:\r\n```sh\r\n$ glasskube serve\r\nglasskube UI is available at http://localhost:8580\r\ncould not open cyclops: could not open entrypoint ui: tcp port 3000 is not free\r\n\r\n$ kubectl get -n cyclops svc\r\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\r\ncyclops-ctrl LoadBalancer 10.99.206.129 localhost 8080:30599/TCP 3h\r\ncyclops-ui LoadBalancer 10.111.35.252 localhost 3000:31474/TCP 3h\r\n\r\n$ glasskube open cyclops\r\n❌ Could not open package cyclops: could not open entrypoint ui: tcp port 3000 is not free\r\n```\r\n\r\n**Describe the solution you'd like**\r\nHow about patching the package manifests with some sane defaults before adding them to the glasskube packages?\r\n\r\n_TBH I believe the package should not be exposed to some port per default as I want to put it on another port or serve it under some domain maybe._\r\n\r\n**Describe alternatives you've considered**\r\nI just tried a poc editing the cyclops manifests, but the changes were obviously reset after a short time 😄\r\n\r\nTest run: \r\n```sh\r\n$ kubectl -n cyclops edit services cyclops-ui\r\n\r\n$ glasskube open cyclops\r\nui\t |I| Forwarding from 127.0.0.1:3000 -> 80\r\nui\t |I| Forwarding from [::1]:3000 -> 80\r\n✅ cyclops is now reachable at http://localhost:3000\r\nui\t |I| Handling connection for 3000\r\n^C👋 Received interrupt signal\r\n🛑 Terminating forwarders...\r\n\r\n$ glasskube open cyclops\r\n❌ Could not open package cyclops: could not open entrypoint ui: tcp port 3000 is not free\r\n```\r\n\r\n**Additional context**\r\nSee error in UI:\r\n![grafik](https://github.com/glasskube/glasskube/assets/22871352/ef4e0b78-6489-4d77-bd9d-2f6e35fb85b4)\r\n\r\nVersions:\r\n```\r\n$ glasskube version\r\nglasskube: v0.1.0\r\npackage-operator: v0.1.0\r\n```\r\n\r\nPS: This probably does not happen to cyclops only but other packages too. Could be considered a install.yaml design issue??\r\n",
"enhancement": true,
"bug": false
},
{
"title": "ArgoCD Guide",
"body": "**Is your feature request related to a problem? Please describe.**\r\nCreate an ArgoCD guide \r\n\r\n\r\n**Additional context**\r\nRef #307 \r\n",
"enhancement": true,
"bug": false
},
{
"title": "Dealing with broken configuration references",
"body": "**Is your feature request related to a problem? Please describe.**\r\nA user can enter different kinds of references to choose config values for a package (e.g. ConfigMap, Secret, Package Config), both on the UI and CLI. They don't yet see whether the entered reference (e.g. namespace + name + key in the case of a ConfigMap) can be resolved and is valid (at least on the UI). \r\n\r\n**Describe the solution you'd like**\r\nFor a reference input, the user should see some hint of whether the entered reference is:\r\n* existing and passes validation\r\n* existing but does not pass validation\r\n* not existing\r\n\r\n**To be discussed**: This kind of hint should probably not be a strict validation? As also described in #495, when a referenced object gets changed or deleted, the configuration could become invalid. We need a way to deal with this. \r\n\r\nThere are lots of ways in which a reference could become invalid:\r\n* a referred value changes, and the new value is not valid according to the glasskube package anymore\r\n* a referred value is deleted (e.g. because the ConfigMap, Secret or Package has been removed)\r\n\r\n**Describe alternatives you've considered**\r\n\r\n\r\n**Additional context**\r\nFollow-Up of #121 \r\nRelated to #495 \r\n",