Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kubefirst for openSUSE:Factory 
checked in at 2023-12-15 21:47:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kubefirst (Old)
 and      /work/SRC/openSUSE:Factory/.kubefirst.new.25432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kubefirst"

Fri Dec 15 21:47:46 2023 rev:5 rq:1133067 version:2.3.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/kubefirst/kubefirst.changes      2023-11-02 
20:21:36.624145850 +0100
+++ /work/SRC/openSUSE:Factory/.kubefirst.new.25432/kubefirst.changes   
2023-12-15 21:47:57.951655923 +0100
@@ -1,0 +2,42 @@
+Thu Dec 14 10:53:15 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 2.3.7:
+  no changelog available, only a diff
+  https://github.com/kubefirst/kubefirst/compare/v2.3.6...v2.3.7
+
+-------------------------------------------------------------------
+Thu Dec 14 10:47:58 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 2.3.6:
+  * fix: git label and repo (#1957)
+  * chore: bump chart version (#1956)
+  * chore: adopt latest metrics-client (#1955)
+  * chore: bump chart version (#1954)
+  * feat: move digitial ocean out of beta (#1952)
+  * add node type and node count flags to aws, civo, google, and
+    vultr
+  * return telemetry event
+  * remove close func that is no longer there
+  * WIP. add node type/ node count to cli
+  * feat: remove the ability to run cluster zero on atlas (#1944)
+  * chore: put back dummy account information after tests (#1947)
+  * chore: add exit code for aws assume script (#1946)
+  * chore: add a script to assume AWS role more easily (#1945)
+  * chore: add a Terraform plan to create an admin role in AWS to
+    be assumed (#1943)
+  * chore: add a warning about creating 1 GH issue per
+    bug/suggestion. (#1939)
+  * fix: hanging unknown commands (#1930)
+  * chore: bump launch version (#1929)
+  * fix: k3d branding (#1926)
+  * last try to fix the new combobox on bug report (#1923)
+  * chore: fixing the bug template (#1922)
+  * add a question about gitops-template being a fork or not
+    (#1919)
+  * fix: update messaging for launch up success for something
+    clearer (#1912)
+  * fix: hanging commands (#1904)
+  * chore: add a 'none specific option for OS' (#1899)
+  * fix: improve getting KUBECONFIG command for Civo (#1886)
+
+-------------------------------------------------------------------

Old:
----
  kubefirst-2.3.5.obscpio

New:
----
  kubefirst-2.3.7.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kubefirst.spec ++++++
--- /var/tmp/diff_new_pack.PScyhn/_old  2023-12-15 21:47:59.171700517 +0100
+++ /var/tmp/diff_new_pack.PScyhn/_new  2023-12-15 21:47:59.171700517 +0100
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           kubefirst
-Version:        2.3.5
+Version:        2.3.7
 Release:        0
 Summary:        CLI for the KubeFirst GitOps Infrastructure & Application 
Delivery Platform
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.PScyhn/_old  2023-12-15 21:47:59.199701540 +0100
+++ /var/tmp/diff_new_pack.PScyhn/_new  2023-12-15 21:47:59.203701687 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/kubefirst/kubefirst</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v2.3.5</param>
+    <param name="revision">v2.3.7</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.PScyhn/_old  2023-12-15 21:47:59.219702271 +0100
+++ /var/tmp/diff_new_pack.PScyhn/_new  2023-12-15 21:47:59.223702418 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/kubefirst/kubefirst</param>
-              <param 
name="changesrevision">1567ee0b66bd4e6d8d767662e075024fa277da52</param></service></servicedata>
+              <param 
name="changesrevision">c816caa695e1569f83071544d9e98133f42649b5</param></service></servicedata>
 (No newline at EOF)
 

++++++ kubefirst-2.3.5.obscpio -> kubefirst-2.3.7.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/.github/ISSUE_TEMPLATE/bugs.yml 
new/kubefirst-2.3.7/.github/ISSUE_TEMPLATE/bugs.yml
--- old/kubefirst-2.3.5/.github/ISSUE_TEMPLATE/bugs.yml 2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/.github/ISSUE_TEMPLATE/bugs.yml 2023-12-14 
06:14:10.000000000 +0100
@@ -1,5 +1,5 @@
 name: Bug
-description: Report an issue with kubefirst
+description: Report an issue with kubefirst. Please create one GitHub issue 
per bug!
 labels: ["bug"]
 body:
   - type: markdown
@@ -63,11 +63,21 @@
     validations:
       required: true
   - type: dropdown
+    id: gitopstemplate
+    attributes:
+      label: Did you use a fork of `gitops-template`?
+      options:
+        - "No"
+        - "Yes"
+    validations:
+      required: true
+  - type: dropdown
     id: os
     attributes:
       label: Which Operating System?
       description: Please add the architecture in the issue description. If 
you selected "Others", please specify in the textarea.
       options:
+        - None specific
         - macOS
         - Linux
         - Windows
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/.github/ISSUE_TEMPLATE/features.yml 
new/kubefirst-2.3.7/.github/ISSUE_TEMPLATE/features.yml
--- old/kubefirst-2.3.5/.github/ISSUE_TEMPLATE/features.yml     2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/.github/ISSUE_TEMPLATE/features.yml     2023-12-14 
06:14:10.000000000 +0100
@@ -1,5 +1,5 @@
 name: Feature Request
-description: Share which feature you think kubefirst is missing
+description: Share which feature you think kubefirst is missing. Please create 
one GitHub issue per feature idea!
 labels: ["feature"]
 body:
   - type: markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/aws/command.go 
new/kubefirst-2.3.7/cmd/aws/command.go
--- old/kubefirst-2.3.5/cmd/aws/command.go      2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/aws/command.go      2023-12-14 06:14:10.000000000 
+0100
@@ -9,7 +9,9 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst-api/pkg/constants"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -30,6 +32,8 @@
        domainNameFlag           string
        useTelemetryFlag         bool
        ecrFlag                  bool
+       nodeTypeFlag             string
+       nodeCountFlag            string
 
        // RootCredentials
        copyArgoCDPasswordToClipboardFlag bool
@@ -47,6 +51,14 @@
                Use:   "aws",
                Short: "kubefirst aws installation",
                Long:  "kubefirst aws",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about aws in kubefirst, 
run:")
+                       fmt.Println("  kubefirst help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // wire up new commands
@@ -64,6 +76,8 @@
                // PreRun:           common.CheckDocker,
        }
 
+       awsDefaults := constants.GetCloudDefaults().Aws
+
        // todo review defaults and update descriptions
        createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", 
"email address for let's encrypt certificate notifications (required)")
        createCmd.MarkFlagRequired("alerts-email")
@@ -71,6 +85,8 @@
        createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", 
"us-east-1", "the aws region to provision infrastructure in")
        createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", 
"kubefirst", "the name of the cluster to create")
        createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", 
"the type of cluster to create (i.e. mgmt|workload)")
+       createCmd.Flags().StringVar(&nodeCountFlag, "node-count", 
awsDefaults.NodeCount, "the node count for the cluster")
+       createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", 
awsDefaults.InstanceSize, "the instance size of the cluster to create")
        createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", "aws", 
fmt.Sprintf("the dns provider - one of: %s", supportedDNSProviders))
        createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the 
Route53/Cloudflare hosted zone name to use for DNS records (i.e. 
your-domain.com|subdomain.your-domain.com) (required)")
        createCmd.MarkFlagRequired("domain-name")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/beta.go 
new/kubefirst-2.3.7/cmd/beta.go
--- old/kubefirst-2.3.5/cmd/beta.go     2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/cmd/beta.go     2023-12-14 06:14:10.000000000 +0100
@@ -9,9 +9,9 @@
 import (
        "fmt"
 
-       "github.com/kubefirst/kubefirst/cmd/digitalocean"
        "github.com/kubefirst/kubefirst/cmd/google"
        "github.com/kubefirst/kubefirst/cmd/vultr"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -23,13 +23,16 @@
        Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("To learn more about kubefirst, run:")
                fmt.Println("  kubefirst help")
+
+               if progress.Progress != nil {
+                       progress.Progress.Quit()
+               }
        },
 }
 
 func init() {
        cobra.OnInitialize()
        betaCmd.AddCommand(
-               digitalocean.NewCommand(),
                google.NewCommand(),
                vultr.NewCommand(),
        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/civo/command.go 
new/kubefirst-2.3.7/cmd/civo/command.go
--- old/kubefirst-2.3.5/cmd/civo/command.go     2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/civo/command.go     2023-12-14 06:14:10.000000000 
+0100
@@ -9,7 +9,9 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst-api/pkg/constants"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -29,6 +31,8 @@
        gitopsTemplateURLFlag    string
        gitopsTemplateBranchFlag string
        useTelemetryFlag         bool
+       nodeTypeFlag             string
+       nodeCountFlag            string
 
        // RootCredentials
        copyArgoCDPasswordToClipboardFlag bool
@@ -47,6 +51,14 @@
                Use:   "civo",
                Short: "kubefirst civo installation",
                Long:  "kubefirst civo",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about civo in kubefirst, 
run:")
+                       fmt.Println("  kubefirst civo --help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // wire up new commands
@@ -75,6 +87,8 @@
                // PreRun:           common.CheckDocker,
        }
 
+       civoDefaults := constants.GetCloudDefaults().Civo
+
        // todo review defaults and update descriptions
        createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", 
"email address for let's encrypt certificate notifications (required)")
        createCmd.MarkFlagRequired("alerts-email")
@@ -82,6 +96,8 @@
        createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", "NYC1", 
"the civo region to provision infrastructure in")
        createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", 
"kubefirst", "the name of the cluster to create")
        createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", 
"the type of cluster to create (i.e. mgmt|workload)")
+       createCmd.Flags().StringVar(&nodeCountFlag, "node-count", 
civoDefaults.NodeCount, "the node count for the cluster")
+       createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", 
civoDefaults.InstanceSize, "the instance size of the cluster to create")
        createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", "civo", 
fmt.Sprintf("the dns provider - one of: %s", supportedDNSProviders))
        createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the 
Civo DNS Name to use for DNS records (i.e. 
your-domain.com|subdomain.your-domain.com) (required)")
        createCmd.MarkFlagRequired("domain-name")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/digitalocean/command.go 
new/kubefirst-2.3.7/cmd/digitalocean/command.go
--- old/kubefirst-2.3.5/cmd/digitalocean/command.go     2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/cmd/digitalocean/command.go     2023-12-14 
06:14:10.000000000 +0100
@@ -9,7 +9,10 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst-api/pkg/constants"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
+
        "github.com/spf13/cobra"
 )
 
@@ -29,6 +32,8 @@
        gitopsTemplateURLFlag    string
        gitopsTemplateBranchFlag string
        useTelemetryFlag         bool
+       nodeTypeFlag             string
+       nodeCountFlag            string
 
        // RootCredentials
        copyArgoCDPasswordToClipboardFlag bool
@@ -47,6 +52,14 @@
                Use:   "digitalocean",
                Short: "kubefirst DigitalOcean installation",
                Long:  "kubefirst digitalocean",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about digital ocean in 
kubefirst, run:")
+                       fmt.Println("  kubefirst digitalocean --help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // on error, doesnt show helper/usage
@@ -67,6 +80,8 @@
                // PreRun:           common.CheckDocker,
        }
 
+       doDefaults := constants.GetCloudDefaults().DigitalOcean
+
        // todo review defaults and update descriptions
        createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", 
"email address for let's encrypt certificate notifications (required)")
        createCmd.MarkFlagRequired("alerts-email")
@@ -74,6 +89,8 @@
        createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", "nyc3", 
"the DigitalOcean region to provision infrastructure in")
        createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", 
"kubefirst", "the name of the cluster to create")
        createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", 
"the type of cluster to create (i.e. mgmt|workload)")
+       createCmd.Flags().StringVar(&nodeCountFlag, "node-count", 
doDefaults.NodeCount, "the node count for the cluster")
+       createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", 
doDefaults.InstanceSize, "the instance size of the cluster to create")
        createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", 
"digitalocean", fmt.Sprintf("the dns provider - one of: %s", 
supportedDNSProviders))
        createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the 
DigitalOcean DNS Name to use for DNS records (i.e. 
your-domain.com|subdomain.your-domain.com) (required)")
        createCmd.MarkFlagRequired("domain-name")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/google/command.go 
new/kubefirst-2.3.7/cmd/google/command.go
--- old/kubefirst-2.3.5/cmd/google/command.go   2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/google/command.go   2023-12-14 06:14:10.000000000 
+0100
@@ -9,7 +9,9 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst-api/pkg/constants"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -31,6 +33,8 @@
        gitopsTemplateBranchFlag string
        useTelemetryFlag         bool
        forceDestroyFlag         bool
+       nodeTypeFlag             string
+       nodeCountFlag            string
 
        // RootCredentials
        copyArgoCDPasswordToClipboardFlag bool
@@ -50,6 +54,14 @@
                Use:   "google",
                Short: "kubefirst Google installation",
                Long:  "kubefirst google",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about google in kubefirst, 
run:")
+                       fmt.Println("  kubefirst beta google --help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // on error, doesnt show helper/usage
@@ -70,6 +82,8 @@
                // PreRun:           common.CheckDocker,
        }
 
+       googleDefaults := constants.GetCloudDefaults().Google
+
        // todo review defaults and update descriptions
        createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", 
"email address for let's encrypt certificate notifications (required)")
        createCmd.MarkFlagRequired("alerts-email")
@@ -77,6 +91,8 @@
        createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", 
"us-east1", "the GCP region to provision infrastructure in")
        createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", 
"kubefirst", "the name of the cluster to create")
        createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", 
"the type of cluster to create (i.e. mgmt|workload)")
+       createCmd.Flags().StringVar(&nodeCountFlag, "node-count", 
googleDefaults.NodeCount, "the node count for the cluster")
+       createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", 
googleDefaults.InstanceSize, "the instance size of the cluster to create")
        createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", "google", 
fmt.Sprintf("the dns provider - one of: %s", supportedDNSProviders))
        createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the 
GCP DNS Name to use for DNS records (i.e. 
your-domain.com|subdomain.your-domain.com) (required)")
        createCmd.MarkFlagRequired("domain-name")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/k3d/command.go 
new/kubefirst-2.3.7/cmd/k3d/command.go
--- old/kubefirst-2.3.5/cmd/k3d/command.go      2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/k3d/command.go      2023-12-14 06:14:10.000000000 
+0100
@@ -9,6 +9,7 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -46,6 +47,14 @@
                Use:   "k3d",
                Short: "kubefirst k3d installation",
                Long:  "kubefirst k3d",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about k3d in kubefirst, 
run:")
+                       fmt.Println("  kubefirst k3d --help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // wire up new commands
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/k3d/create.go 
new/kubefirst-2.3.7/cmd/k3d/create.go
--- old/kubefirst-2.3.5/cmd/k3d/create.go       2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/k3d/create.go       2023-12-14 06:14:10.000000000 
+0100
@@ -328,8 +328,6 @@
        }
 
        segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-       defer segClient.Client.Close()
-       telemetry.SendEvent(segClient, telemetry.ClusterInstallStarted, "")
 
        // Progress output
        progressPrinter.AddTracker("preflight-checks", "Running preflight 
checks", 5)
@@ -397,8 +395,6 @@
        // Check git credentials
        executionControl := 
viper.GetBool(fmt.Sprintf("kubefirst-checks.%s-credentials", 
config.GitProvider))
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, 
telemetry.GitCredentialsCheckStarted, "")
                if len(cGitToken) == 0 {
                        msg := fmt.Sprintf(
@@ -433,15 +429,11 @@
        var gitopsRepoURL string
        executionControl = viper.GetBool("kubefirst-checks.kbot-setup")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, telemetry.KbotSetupStarted, "")
 
                log.Info().Msg("creating an ssh key pair for your new cloud 
infrastructure")
                sshPrivateKey, sshPublicKey, err = 
internalssh.CreateSshKeyPair()
                if err != nil {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.KbotSetupFailed, err.Error())
                        return err
                }
@@ -590,8 +582,6 @@
                // //* create teams and repositories in github
                executionControl = 
viper.GetBool("kubefirst-checks.terraform-apply-github")
                if !executionControl {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.GitTerraformApplyStarted, "")
 
                        log.Info().Msg("Creating GitHub resources with 
Terraform")
@@ -613,8 +603,6 @@
                        }
                        err := 
terraform.InitApplyAutoApprove(config.TerraformClient, tfEntrypoint, tfEnvs)
                        if err != nil {
-                               segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                               defer segClient.Client.Close()
                                msg := fmt.Sprintf("error creating github 
resources with terraform %s: %s", tfEntrypoint, err)
                                telemetry.SendEvent(segClient, 
telemetry.GitTerraformApplyFailed, msg)
                                return fmt.Errorf(msg)
@@ -633,8 +621,6 @@
                // //* create teams and repositories in gitlab
                executionControl = 
viper.GetBool("kubefirst-checks.terraform-apply-gitlab")
                if !executionControl {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.GitTerraformApplyStarted, "")
 
                        log.Info().Msg("Creating GitLab resources with 
Terraform")
@@ -657,8 +643,6 @@
                        err := 
terraform.InitApplyAutoApprove(config.TerraformClient, tfEntrypoint, tfEnvs)
                        if err != nil {
                                msg := fmt.Sprintf("error creating gitlab 
resources with terraform %s: %s", tfEntrypoint, err)
-                               segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                               defer segClient.Client.Close()
                                telemetry.SendEvent(segClient, 
telemetry.GitTerraformApplyFailed, msg)
                                return fmt.Errorf(msg)
                        }
@@ -683,8 +667,6 @@
 
        executionControl = viper.GetBool("kubefirst-checks.gitops-repo-pushed")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, telemetry.GitopsRepoPushStarted, 
"")
 
                gitopsRepo, err := git.PlainOpen(config.GitopsDir)
@@ -716,8 +698,6 @@
                )
                if err != nil {
                        msg := fmt.Sprintf("error pushing detokenized gitops 
repository to remote %s: %s", config.DestinationGitopsRepoGitURL, err)
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.GitopsRepoPushFailed, msg)
                        if !strings.Contains(msg, "already up-to-date") {
                                log.Panic().Msg(msg)
@@ -733,8 +713,6 @@
                )
                if err != nil {
                        msg := fmt.Sprintf("error pushing detokenized metaphor 
repository to remote %s: %s", config.DestinationMetaphorRepoURL, err)
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.GitopsRepoPushFailed, msg)
                        if !strings.Contains(msg, "already up-to-date") {
                                log.Panic().Msg(msg)
@@ -759,8 +737,6 @@
        progressPrinter.SetupProgress(progressPrinter.TotalOfTrackers(), false)
 
        if !viper.GetBool("kubefirst-checks.create-k3d-cluster") {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, 
telemetry.CloudTerraformApplyStarted, "")
 
                log.Info().Msg("Creating k3d cluster")
@@ -770,8 +746,6 @@
                        msg := fmt.Sprintf("error creating k3d resources with 
k3d client %s: %s", config.K3dClient, err)
                        viper.Set("kubefirst-checks.create-k3d-cluster-failed", 
true)
                        viper.WriteConfig()
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.CloudTerraformApplyFailed, msg)
                        return fmt.Errorf(msg)
                }
@@ -910,8 +884,6 @@
        //* install argocd
        executionControl = viper.GetBool("kubefirst-checks.argocd-install")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, telemetry.ArgoCDInstallStarted, 
"")
 
                log.Info().Msgf("installing argocd")
@@ -927,8 +899,6 @@
                }
                err = kcfg.ApplyObjects("", output)
                if err != nil {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.ArgoCDInstallFailed, err.Error())
                        return err
                }
@@ -1031,8 +1001,6 @@
        //* argocd sync registry and start sync waves
        executionControl = 
viper.GetBool("kubefirst-checks.argocd-create-registry")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, telemetry.CreateRegistryStarted, 
"")
                argocdClient, err := argocdapi.NewForConfig(kcfg.RestConfig)
                if err != nil {
@@ -1082,8 +1050,6 @@
 
        executionControl = viper.GetBool("kubefirst-checks.vault-initialized")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, 
telemetry.VaultInitializationStarted, "")
 
                // Initialize and unseal Vault
@@ -1111,8 +1077,6 @@
                _, err = k8s.WaitForJobComplete(kcfg.Clientset, job, 240)
                if err != nil {
                        msg := fmt.Sprintf("could not run vault unseal job: 
%s", err)
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.VaultInitializationFailed, msg)
                        log.Fatal().Msg(msg)
                }
@@ -1216,8 +1180,6 @@
        //* configure vault with terraform
        executionControl = 
viper.GetBool("kubefirst-checks.terraform-apply-vault")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, 
telemetry.VaultTerraformApplyStarted, "")
 
                tfEnvs := map[string]string{}
@@ -1259,8 +1221,6 @@
                tfEntrypoint := config.GitopsDir + "/terraform/vault"
                err := terraform.InitApplyAutoApprove(config.TerraformClient, 
tfEntrypoint, tfEnvs)
                if err != nil {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.VaultTerraformApplyStarted, err.Error())
                        return err
                }
@@ -1281,8 +1241,6 @@
 
        executionControl = 
viper.GetBool("kubefirst-checks.terraform-apply-users")
        if !executionControl {
-               segClient := segment.InitClient(clusterId, clusterTypeFlag, 
gitProviderFlag)
-               defer segClient.Client.Close()
                telemetry.SendEvent(segClient, 
telemetry.UsersTerraformApplyStarted, "")
 
                log.Info().Msg("applying users terraform")
@@ -1300,8 +1258,6 @@
                tfEntrypoint := config.GitopsDir + "/terraform/users"
                err := terraform.InitApplyAutoApprove(config.TerraformClient, 
tfEntrypoint, tfEnvs)
                if err != nil {
-                       segClient := segment.InitClient(clusterId, 
clusterTypeFlag, gitProviderFlag)
-                       defer segClient.Client.Close()
                        telemetry.SendEvent(segClient, 
telemetry.UsersTerraformApplyStarted, err.Error())
                        return err
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/k3d/mkcert.go 
new/kubefirst-2.3.7/cmd/k3d/mkcert.go
--- old/kubefirst-2.3.5/cmd/k3d/mkcert.go       2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/k3d/mkcert.go       2023-12-14 06:14:10.000000000 
+0100
@@ -9,6 +9,7 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/pkg/helpers"
        "github.com/kubefirst/runtime/pkg/k3d"
        "github.com/kubefirst/runtime/pkg/k8s"
@@ -51,6 +52,7 @@
        }
 
        log.Infof("Certificate generated. You can use it with an app by setting 
`tls.secretName: %s-tls` on a Traefik IngressRoute.", appNameFlag)
+       progress.Progress.Quit()
 
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/k3d/root-credentials.go 
new/kubefirst-2.3.7/cmd/k3d/root-credentials.go
--- old/kubefirst-2.3.5/cmd/k3d/root-credentials.go     2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/cmd/k3d/root-credentials.go     2023-12-14 
06:14:10.000000000 +0100
@@ -10,6 +10,7 @@
        "fmt"
 
        "github.com/kubefirst/kubefirst-api/pkg/credentials"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/pkg/k3d"
        "github.com/kubefirst/runtime/pkg/k8s"
        "github.com/spf13/cobra"
@@ -63,5 +64,7 @@
                return err
        }
 
+       progress.Progress.Quit()
+
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/k3d/vault.go 
new/kubefirst-2.3.7/cmd/k3d/vault.go
--- old/kubefirst-2.3.5/cmd/k3d/vault.go        2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/k3d/vault.go        2023-12-14 06:14:10.000000000 
+0100
@@ -14,6 +14,7 @@
        "time"
 
        vaultapi "github.com/hashicorp/vault/api"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/pkg/helpers"
        "github.com/kubefirst/runtime/pkg/k3d"
        "github.com/kubefirst/runtime/pkg/k8s"
@@ -112,6 +113,8 @@
                return fmt.Errorf("vault is already unsealed")
        }
 
+       progress.Progress.Quit()
+
        return nil
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/letsencrypt.go 
new/kubefirst-2.3.7/cmd/letsencrypt.go
--- old/kubefirst-2.3.5/cmd/letsencrypt.go      2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/letsencrypt.go      2023-12-14 06:14:10.000000000 
+0100
@@ -10,6 +10,7 @@
        "fmt"
 
        "github.com/kubefirst/kubefirst-api/pkg/certificates"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -41,6 +42,7 @@
                        if err != nil {
                                fmt.Println(err)
                        }
+                       progress.Progress.Quit()
                },
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/reset.go 
new/kubefirst-2.3.7/cmd/reset.go
--- old/kubefirst-2.3.5/cmd/reset.go    2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/cmd/reset.go    2023-12-14 06:14:10.000000000 +0100
@@ -12,6 +12,7 @@
        "strconv"
        "time"
 
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/pkg"
        "github.com/kubefirst/runtime/pkg/helpers"
        "github.com/kubefirst/runtime/pkg/progressPrinter"
@@ -131,6 +132,7 @@
 
        progressPrinter.IncrementTracker("removing-platform-content", 1)
        time.Sleep(time.Second * 2)
+       progress.Progress.Quit()
 
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/root.go 
new/kubefirst-2.3.7/cmd/root.go
--- old/kubefirst-2.3.5/cmd/root.go     2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/cmd/root.go     2023-12-14 06:14:10.000000000 +0100
@@ -12,8 +12,10 @@
 
        "github.com/kubefirst/kubefirst/cmd/aws"
        "github.com/kubefirst/kubefirst/cmd/civo"
+       "github.com/kubefirst/kubefirst/cmd/digitalocean"
        "github.com/kubefirst/kubefirst/cmd/k3d"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/configs"
 
        "github.com/kubefirst/runtime/pkg/progressPrinter"
@@ -34,6 +36,7 @@
        Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("To learn more about kubefirst, run:")
                fmt.Println("  kubefirst help")
+               progress.Progress.Quit()
        },
 }
 
@@ -59,6 +62,7 @@
                betaCmd,
                aws.NewCommand(),
                civo.NewCommand(),
+               digitalocean.NewCommand(),
                k3d.NewCommand(),
                k3d.LocalCommandAlias(),
                LaunchCommand(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/cmd/vultr/command.go 
new/kubefirst-2.3.7/cmd/vultr/command.go
--- old/kubefirst-2.3.5/cmd/vultr/command.go    2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/cmd/vultr/command.go    2023-12-14 06:14:10.000000000 
+0100
@@ -9,7 +9,9 @@
 import (
        "fmt"
 
+       "github.com/kubefirst/kubefirst-api/pkg/constants"
        "github.com/kubefirst/kubefirst/internal/common"
+       "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/spf13/cobra"
 )
 
@@ -29,6 +31,8 @@
        gitopsTemplateURLFlag    string
        gitopsTemplateBranchFlag string
        useTelemetryFlag         bool
+       nodeTypeFlag             string
+       nodeCountFlag            string
 
        // RootCredentials
        copyArgoCDPasswordToClipboardFlag bool
@@ -48,6 +52,14 @@
                Use:   "vultr",
                Short: "kubefirst Vultr installation",
                Long:  "kubefirst vultr",
+               Run: func(cmd *cobra.Command, args []string) {
+                       fmt.Println("To learn more about vultr in kubefirst, 
run:")
+                       fmt.Println("  kubefirst beta vultr --help")
+
+                       if progress.Progress != nil {
+                               progress.Progress.Quit()
+                       }
+               },
        }
 
        // on error, doesnt show helper/usage
@@ -68,6 +80,8 @@
                // PreRun:           common.CheckDocker,
        }
 
+       vultrDefaults := constants.GetCloudDefaults().Vultr
+
        // todo review defaults and update descriptions
        createCmd.Flags().StringVar(&alertsEmailFlag, "alerts-email", "", 
"email address for let's encrypt certificate notifications (required)")
        createCmd.MarkFlagRequired("alerts-email")
@@ -75,6 +89,8 @@
        createCmd.Flags().StringVar(&cloudRegionFlag, "cloud-region", "ewr", 
"the Vultr region to provision infrastructure in")
        createCmd.Flags().StringVar(&clusterNameFlag, "cluster-name", 
"kubefirst", "the name of the cluster to create")
        createCmd.Flags().StringVar(&clusterTypeFlag, "cluster-type", "mgmt", 
"the type of cluster to create (i.e. mgmt|workload)")
+       createCmd.Flags().StringVar(&nodeCountFlag, "node-count", 
vultrDefaults.NodeCount, "the node count for the cluster")
+       createCmd.Flags().StringVar(&nodeTypeFlag, "node-type", 
vultrDefaults.InstanceSize, "the instance size of the cluster to create")
        createCmd.Flags().StringVar(&dnsProviderFlag, "dns-provider", "vultr", 
fmt.Sprintf("the dns provider - one of: %s", supportedDNSProviders))
        createCmd.Flags().StringVar(&domainNameFlag, "domain-name", "", "the 
Vultr DNS Name to use for DNS records (i.e. 
your-domain.com|subdomain.your-domain.com) (required)")
        createCmd.MarkFlagRequired("domain-name")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/go.mod new/kubefirst-2.3.7/go.mod
--- old/kubefirst-2.3.5/go.mod  2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/go.mod  2023-12-14 06:14:10.000000000 +0100
@@ -9,22 +9,22 @@
        github.com/charmbracelet/bubbles v0.16.1
        github.com/charmbracelet/bubbletea v0.24.2
        github.com/charmbracelet/lipgloss v0.8.0
-       github.com/chromedp/chromedp v0.8.7
-       github.com/civo/civogo v0.3.28
+       github.com/civo/civogo v0.3.53
        github.com/denisbrodbeck/machineid v1.0.1
        github.com/dustin/go-humanize v1.0.1
        github.com/go-git/go-git/v5 v5.6.1
        github.com/hashicorp/vault/api v1.9.0
-       github.com/kubefirst/kubefirst-api v0.0.4
-       github.com/kubefirst/metrics-client v0.2.1
-       github.com/kubefirst/runtime v0.3.28
+       github.com/kubefirst/kubefirst-api v0.1.8
+       github.com/kubefirst/metrics-client v0.3.0
+       github.com/kubefirst/runtime v0.3.35
        github.com/rs/zerolog v1.29.1
        github.com/segmentio/analytics-go v3.1.0+incompatible
        github.com/sirupsen/logrus v1.9.0
        github.com/spf13/cobra v1.7.0
        github.com/spf13/viper v1.15.0
        go.mongodb.org/mongo-driver v1.10.3
-       k8s.io/api v0.26.2
+       golang.org/x/exp v0.0.0-20230321023759-10a507213a29
+       k8s.io/api v0.27.1
        k8s.io/apimachinery v0.27.1
        k8s.io/client-go v11.0.1-0.20190816222228-6d55c1b1f1ca+incompatible
 )
@@ -80,8 +80,6 @@
        github.com/caarlos0/sshmarshal v0.1.0 // indirect
        github.com/cespare/xxhash/v2 v2.2.0 // indirect
        github.com/chai2010/gettext-go v0.1.0 // indirect
-       github.com/chromedp/cdproto v0.0.0-20230109101555-6b041c6303cc // 
indirect
-       github.com/chromedp/sysutil v1.0.0 // indirect
        github.com/cloudflare/circl v1.1.0 // indirect
        github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // 
indirect
        github.com/digitalocean/godo v1.98.0 // indirect
@@ -106,9 +104,6 @@
        github.com/go-test/deep v1.1.0 // indirect
        github.com/go-yaml/yaml v2.1.0+incompatible // indirect
        github.com/gobwas/glob v0.2.3 // indirect
-       github.com/gobwas/httphead v0.1.0 // indirect
-       github.com/gobwas/pool v0.2.1 // indirect
-       github.com/gobwas/ws v1.1.0 // indirect
        github.com/gofrs/flock v0.7.0 // indirect
        github.com/golang-jwt/jwt/v4 v4.4.3 // indirect
        github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // 
indirect
@@ -179,7 +174,6 @@
        go.opencensus.io v0.24.0 // indirect
        go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
        golang.org/x/crypto v0.12.0 // indirect
-       golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
        golang.org/x/mod v0.12.0 // indirect
        golang.org/x/sync v0.3.0 // indirect
        golang.org/x/tools v0.12.0 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/go.sum new/kubefirst-2.3.7/go.sum
--- old/kubefirst-2.3.5/go.sum  2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/go.sum  2023-12-14 06:14:10.000000000 +0100
@@ -251,19 +251,13 @@
 github.com/charmbracelet/lipgloss v0.8.0 
h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdyCQk84RU=
 github.com/charmbracelet/lipgloss v0.8.0/go.mod 
h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU=
 github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod 
h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
-github.com/chromedp/cdproto v0.0.0-20230109101555-6b041c6303cc 
h1:pgBIUnhrsNh0Xi+8qUdHIP/nljIVz3laeRv23eqr45M=
-github.com/chromedp/cdproto v0.0.0-20230109101555-6b041c6303cc/go.mod 
h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
-github.com/chromedp/chromedp v0.8.7 
h1:dYOYc5ynTBzwSLOi+1IfgHwPr8r2BqV48l/RC+3OuJ0=
-github.com/chromedp/chromedp v0.8.7/go.mod 
h1:iL+ywnwk3eG3EVXV1ackXBMNzdEh3Ye/KHvQkq1KRKU=
-github.com/chromedp/sysutil v1.0.0 
h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
-github.com/chromedp/sysutil v1.0.0/go.mod 
h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
 github.com/chzyer/logex v1.1.10/go.mod 
h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod 
h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod 
h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/cilium/ebpf v0.4.0/go.mod 
h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
 github.com/cilium/ebpf v0.7.0/go.mod 
h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
-github.com/civo/civogo v0.3.28 h1:DDjzAf9X7zvF4SNkGPC2ZAvTqsHAXSCl7ZNGnb9nr4s=
-github.com/civo/civogo v0.3.28/go.mod 
h1:SbS06e0JPgIF27r1sLC97gjU1xWmONQeHgzF1hfLpak=
+github.com/civo/civogo v0.3.53 h1:PYqwTwt9YmeBRKMzfuTXBSPtE0WIsbLzhxD3V36bVlo=
+github.com/civo/civogo v0.3.53/go.mod 
h1:54lv/FOf7gh6wE9ZwVdw4yBehk8V1CvU9aWa4v6dvW0=
 github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod 
h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
 github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloudflare/circl v1.1.0 
h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY=
@@ -462,6 +456,7 @@
 github.com/go-redis/redis/v8 v8.11.5/go.mod 
h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
 github.com/go-sql-driver/mysql v1.4.0/go.mod 
h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 
h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod 
h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
 github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
 github.com/go-test/deep v1.1.0/go.mod 
h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
@@ -469,12 +464,6 @@
 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod 
h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
 github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod 
h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
-github.com/gobwas/httphead v0.1.0 
h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
-github.com/gobwas/httphead v0.1.0/go.mod 
h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
-github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
-github.com/gobwas/pool v0.2.1/go.mod 
h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
-github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=
-github.com/gobwas/ws v1.1.0/go.mod 
h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
 github.com/godbus/dbus/v5 v5.0.3/go.mod 
h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/godbus/dbus/v5 v5.0.4/go.mod 
h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/godbus/dbus/v5 v5.0.6/go.mod 
h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -568,6 +557,7 @@
 github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod 
h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod 
h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod 
h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 
h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod 
h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/renameio v0.1.0/go.mod 
h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
@@ -731,14 +721,15 @@
 github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod 
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/kubefirst/kubefirst-api v0.0.4 
h1:YhPR9L14s7ZlLbKM3ODHaXIq+r5LO7qesBW0e4/2w58=
-github.com/kubefirst/kubefirst-api v0.0.4/go.mod 
h1:RCxLtyupPlpkOYYGFKnbbPCpacEHvlHzEW3Rn77r7XU=
-github.com/kubefirst/metrics-client v0.2.1 
h1:KCzeeKQCq13ksj+l8cTrtHWKtraYTTnwWks2X4+xdFI=
-github.com/kubefirst/metrics-client v0.2.1/go.mod 
h1:GR7wsMcyYhd+EU67PeuMCBYFE6OJ7P/j5OI5BLOoRMc=
-github.com/kubefirst/runtime v0.3.28 
h1:Ac9NzqX+H0fa4tUauOMrjbtpSFnNluLYmSk6v5u++G4=
-github.com/kubefirst/runtime v0.3.28/go.mod 
h1:9egAgF5cF594mIzra5nTB1kfE57Hr/Nvl79tjLsAWCQ=
+github.com/kubefirst/kubefirst-api v0.1.8 
h1:+5AT9pDj4AuH2GCW43Z9U/frEEyemqeZOm3zKGHd6no=
+github.com/kubefirst/kubefirst-api v0.1.8/go.mod 
h1:Euz7+acib+o9DTkJ3MXRVtPL1rI+vGFZditYG2aXQCY=
+github.com/kubefirst/metrics-client v0.2.8 
h1:JfaeiBifZD/DpyYW2QVHcrhH/KWA98OmM+7c7M12qMc=
+github.com/kubefirst/metrics-client v0.2.8/go.mod 
h1:GR7wsMcyYhd+EU67PeuMCBYFE6OJ7P/j5OI5BLOoRMc=
+github.com/kubefirst/metrics-client v0.3.0 
h1:zCug82pEzeWhHhpeYQvdhytRNDxrLxX18dPQ5PSxY3s=
+github.com/kubefirst/metrics-client v0.3.0/go.mod 
h1:GR7wsMcyYhd+EU67PeuMCBYFE6OJ7P/j5OI5BLOoRMc=
+github.com/kubefirst/runtime v0.3.35 
h1:wn430Irf0E1vc3X0WX3lYBpyhQ5TN6xxMcargILA9uI=
+github.com/kubefirst/runtime v0.3.35/go.mod 
h1:0CnYy+8JTG+/0f3QlkTQJqTT654Su6JXk30OufFVY98=
 github.com/kylelemons/godebug v1.1.0 
h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
-github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 
h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo=
 github.com/libopenstorage/openstorage v1.0.0/go.mod 
h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de 
h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod 
h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
@@ -885,15 +876,33 @@
 github.com/onsi/ginkgo v1.16.4/go.mod 
h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo/v2 v2.1.3/go.mod 
h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
-github.com/onsi/ginkgo/v2 v2.1.4 
h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY=
+github.com/onsi/ginkgo/v2 v2.1.4/go.mod 
h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU=
+github.com/onsi/ginkgo/v2 v2.1.6/go.mod 
h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk=
+github.com/onsi/ginkgo/v2 v2.3.0/go.mod 
h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8AyFNU9d0=
+github.com/onsi/ginkgo/v2 v2.4.0/go.mod 
h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo=
+github.com/onsi/ginkgo/v2 v2.5.0/go.mod 
h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw=
+github.com/onsi/ginkgo/v2 v2.7.0/go.mod 
h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo=
+github.com/onsi/ginkgo/v2 v2.8.1/go.mod 
h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc=
+github.com/onsi/ginkgo/v2 v2.9.0/go.mod 
h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk=
+github.com/onsi/ginkgo/v2 v2.9.1 
h1:zie5Ly042PD3bsCvsSOPvRnFwyo3rKe64TJlD6nu0mk=
+github.com/onsi/ginkgo/v2 v2.9.1/go.mod 
h1:FEcmzVcCHl+4o9bQZVab+4dC9+j+91t2FHSzmGAPfuo=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod 
h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.4.3/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod 
h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod 
h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.15.0/go.mod 
h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
 github.com/onsi/gomega v1.17.0/go.mod 
h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
-github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
 github.com/onsi/gomega v1.19.0/go.mod 
h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
+github.com/onsi/gomega v1.20.1/go.mod 
h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo=
+github.com/onsi/gomega v1.21.1/go.mod 
h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc=
+github.com/onsi/gomega v1.22.1/go.mod 
h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM=
+github.com/onsi/gomega v1.24.0/go.mod 
h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg=
+github.com/onsi/gomega v1.24.1/go.mod 
h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
+github.com/onsi/gomega v1.26.0/go.mod 
h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM=
+github.com/onsi/gomega v1.27.1/go.mod 
h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw=
+github.com/onsi/gomega v1.27.3/go.mod 
h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw=
+github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
+github.com/onsi/gomega v1.27.4/go.mod 
h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ=
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod 
h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
@@ -914,7 +923,6 @@
 github.com/openzipkin/zipkin-go v0.1.6/go.mod 
h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.2.1/go.mod 
h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
 github.com/openzipkin/zipkin-go v0.2.2/go.mod 
h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde 
h1:x0TT0RDC7UhAVbbWWBzr41ElhJx5tXPWkIHA2HWPRuw=
 github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE=
 github.com/otiai10/copy v1.7.0/go.mod 
h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U=
 github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod 
h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
@@ -1293,6 +1301,9 @@
 golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod 
h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod 
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
+golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
 golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1351,12 +1362,17 @@
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod 
h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod 
h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod 
h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod 
h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod 
h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
+golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
+golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
 golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1387,6 +1403,7 @@
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1448,7 +1465,6 @@
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1480,6 +1496,8 @@
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1489,7 +1507,9 @@
 golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
@@ -1498,7 +1518,11 @@
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
+golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
+golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
 golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
 golang.org/x/term v0.11.0/go.mod 
h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1512,7 +1536,10 @@
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
 golang.org/x/text v0.12.0/go.mod 
h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1593,8 +1620,12 @@
 golang.org/x/tools v0.1.2/go.mod 
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod 
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod 
h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
+golang.org/x/tools v0.1.10/go.mod 
h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
 golang.org/x/tools v0.1.12/go.mod 
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.2.0/go.mod 
h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
+golang.org/x/tools v0.4.0/go.mod 
h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
+golang.org/x/tools v0.6.0/go.mod 
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.7.0/go.mod 
h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
 golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss=
 golang.org/x/tools v0.12.0/go.mod 
h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/common/common.go 
new/kubefirst-2.3.7/internal/common/common.go
--- old/kubefirst-2.3.5/internal/common/common.go       2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/common/common.go       2023-12-14 
06:14:10.000000000 +0100
@@ -175,7 +175,7 @@
 
        successMessage := `
 ###
-#### :tada: Success` + "`Your K3D kubefirst platform has been destroyed.`" + `
+#### :tada: Success` + "`Your k3d kubefirst platform has been destroyed.`" + `
 
 ### :blue_book: To delete a management cluster please see documentation:
 https://docs.kubefirst.io/` + cloudProvider + `/deprovision
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/launch/cmd.go 
new/kubefirst-2.3.7/internal/launch/cmd.go
--- old/kubefirst-2.3.5/internal/launch/cmd.go  2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/internal/launch/cmd.go  2023-12-14 06:14:10.000000000 
+0100
@@ -17,17 +17,14 @@
 
        "github.com/kubefirst/kubefirst/internal/cluster"
        "github.com/kubefirst/kubefirst/internal/helm"
-       k3dint "github.com/kubefirst/kubefirst/internal/k3d"
        "github.com/kubefirst/kubefirst/internal/progress"
        "github.com/kubefirst/runtime/configs"
        "github.com/kubefirst/runtime/pkg"
-       "github.com/kubefirst/runtime/pkg/db"
        "github.com/kubefirst/runtime/pkg/downloadManager"
        "github.com/kubefirst/runtime/pkg/k3d"
        "github.com/kubefirst/runtime/pkg/k8s"
        "github.com/rs/zerolog/log"
        "github.com/spf13/viper"
-       "golang.org/x/term"
        "gopkg.in/yaml.v2"
        v1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -77,49 +74,9 @@
        progress.AddStep("Initialize database")
 
        if !dbInitialized {
-               dbDestination := k3dint.MongoDestinationChooser(inCluster)
-               switch dbDestination {
-               case "atlas":
-                       fmt.Println("MongoDB Atlas Host String: ")
-                       fmt.Scanln(&dbHost)
-
-                       fmt.Printf("\nMongoDB Atlas Username: ")
-                       fmt.Scanln(&dbUser)
-
-                       fmt.Printf("\nMongoDB Atlas Password: ")
-                       dbPasswordInput, err := term.ReadPassword(0)
-                       if err != nil {
-                               progress.Error(fmt.Sprintf("error parsing 
password: %s", err))
-                       }
-
-                       dbPassword = string(dbPasswordInput)
-                       dbHost = strings.Replace(dbHost, "mongodb+srv://", "", 
-1)
-
-                       // Verify database connectivity
-                       mdbcl := db.Connect(&db.MongoDBClientParameters{
-                               HostType: dbDestination,
-                               Host:     dbHost,
-                               Username: dbUser,
-                               Password: dbPassword,
-                       })
-                       err = mdbcl.TestDatabaseConnection()
-                       if err != nil {
-                               progress.Error(fmt.Sprintf("Error validating 
Mongo credentials: %s", err))
-                       }
-                       mdbcl.Client.Disconnect(mdbcl.Context)
-
-                       log.Info().Msg("MongoDB Atlas credentials verified")
-
-                       viper.Set("launch.database-destination", "atlas")
-                       viper.Set("launch.database-initialized", true)
-                       viper.WriteConfig()
-               case "in-cluster":
-                       viper.Set("launch.database-destination", "in-cluster")
-                       viper.Set("launch.database-initialized", true)
-                       viper.WriteConfig()
-               default:
-                       progress.Error(fmt.Sprintf("%s is not a valid option", 
dbDestination))
-               }
+               viper.Set("launch.database-destination", "in-cluster")
+               viper.Set("launch.database-initialized", true)
+               viper.WriteConfig()
        } else {
                log.Info().Msg("Database has already been initialized, 
skipping")
        }
@@ -541,6 +498,7 @@
                if err != nil {
                        progress.Error(fmt.Sprintf("error creating kubernetes 
secret for cert: %s", err))
                }
+               time.Sleep(5 * time.Second)
                log.Info().Msg("Created Kubernetes Secret for certificate")
        }
 
@@ -570,7 +528,7 @@
        if !inCluster {
                progress.Success(`
 ###
-#### :tada: Success` + "`Kubefirst Cluster is now up and running`")
+#### :tada: Success` + "`Your kubefirst platform provisioner is ready`")
        }
 }
 
@@ -616,7 +574,7 @@
        if !inCluster {
                successMsg := `
 ###
-#### :tada: Success` + "`Your K3D kubefirst platform has been destroyed.`"
+#### :tada: Success` + "`Your k3d kubefirst platform has been destroyed.`"
                progress.Success(successMsg)
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/launch/constants.go 
new/kubefirst-2.3.7/internal/launch/constants.go
--- old/kubefirst-2.3.5/internal/launch/constants.go    2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/launch/constants.go    2023-12-14 
06:14:10.000000000 +0100
@@ -11,7 +11,7 @@
        helmChartName     = "kubefirst"
        helmChartRepoName = "kubefirst"
        helmChartRepoURL  = "https://charts.kubefirst.com";
-       helmChartVersion  = "2.3.5"
+       helmChartVersion  = "2.3.7"
        namespace         = "kubefirst"
        secretName        = "kubefirst-initial-secrets"
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/progress/message.go 
new/kubefirst-2.3.7/internal/progress/message.go
--- old/kubefirst-2.3.5/internal/progress/message.go    2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/progress/message.go    2023-12-14 
06:14:10.000000000 +0100
@@ -53,13 +53,19 @@
 func DisplayLogHints(estimatedTime int) {
        logFile := viper.GetString("k1-paths.log-file")
        cloudProvider := viper.GetString("kubefirst.cloud-provider")
+
+       documentationLink := "https://docs.kubefirst.io/";
+       if cloudProvider != "" {
+               documentationLink = documentationLink + cloudProvider + 
`/quick-start/install/cli`
+       }
+
        header := `
 ##
 # Welcome to Kubefirst
 
 ### :bulb: To view verbose logs run below command in new terminal:
 ` + fmt.Sprintf("##### **tail -f -n +1 %s**", logFile) + `
-### :blue_book: Documentation: https://docs.kubefirst.io/` + cloudProvider + 
`/quick-start/install/cli
+### :blue_book: Documentation: ` + documentationLink + `
 
 ### :alarm_clock: Estimated time:` + fmt.Sprintf("`%s minutes` \n\n", 
strconv.Itoa(estimatedTime))
 
@@ -73,13 +79,19 @@
 func DisplaySuccessMessage(cluster types.Cluster) successMsg {
        cloudCliKubeconfig := ""
 
+       gitProviderLabel := "GitHub"
+
+       if cluster.GitProvider == "gitlab" {
+               gitProviderLabel = "GitLab"
+       }
+
        switch cluster.CloudProvider {
        case "aws":
                cloudCliKubeconfig = fmt.Sprintf("aws eks update-kubeconfig 
--name %s --region %s", cluster.ClusterName, cluster.CloudRegion)
                break
 
        case "civo":
-               cloudCliKubeconfig = fmt.Sprintf("civo kubernetes config %s > 
~/.kube/config", cluster.ClusterName)
+               cloudCliKubeconfig = fmt.Sprintf("civo kubernetes config %s 
--save", cluster.ClusterName)
                break
 
        case "digitalocean":
@@ -105,10 +117,10 @@
 ### :bulb: To retrieve root credentials for your Kubefirst platform run:
 ##### kubefirst ` + cluster.CloudProvider + ` root-credentials
 
-## GitLab
+## ` + fmt.Sprintf("`%s `", gitProviderLabel) + `
 ### Git Owner   ` + fmt.Sprintf("`%s`", cluster.GitAuth.Owner) + `
 ### Repos       ` + fmt.Sprintf("`https://%s.com/%s/gitops` \n\n", 
cluster.GitProvider, cluster.GitAuth.Owner) +
-               fmt.Sprintf("`            https://%s.com/%s/gitops`";, 
cluster.GitProvider, cluster.GitAuth.Owner) + `
+               fmt.Sprintf("`            https://%s.com/%s/metaphor`";, 
cluster.GitProvider, cluster.GitAuth.Owner) + `
 ## Kubefirst Console
 ### URL         ` + fmt.Sprintf("`https://kubefirst.%s`";, cluster.DomainName) 
+ `
 ## Argo CD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/progress/progress.go 
new/kubefirst-2.3.7/internal/progress/progress.go
--- old/kubefirst-2.3.5/internal/progress/progress.go   2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/progress/progress.go   2023-12-14 
06:14:10.000000000 +0100
@@ -59,7 +59,7 @@
                return m, tea.Quit
 
        case successMsg:
-               m.successMessage = msg.message
+               m.successMessage = msg.message + "\n\n"
                return m, tea.Quit
 
        case startProvision:
@@ -108,11 +108,13 @@
                        completedSteps = completedSteps + 
renderMessage(fmt.Sprintf(":white_check_mark: %s", m.completedSteps[i]))
                }
 
-               return m.header + "\n\n" +
-                       completedSteps +
-                       m.nextStep + "\n\n" +
-                       m.error + "\n\n"
+               if m.header != "" {
+                       return m.header + "\n\n" +
+                               completedSteps +
+                               m.nextStep + "\n\n" +
+                               m.error + "\n\n"
+               }
        }
 
-       return m.successMessage + "\n\n"
+       return m.successMessage
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/segment/segment.go 
new/kubefirst-2.3.7/internal/segment/segment.go
--- old/kubefirst-2.3.5/internal/segment/segment.go     2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/segment/segment.go     2023-12-14 
06:14:10.000000000 +0100
@@ -7,38 +7,32 @@
        "github.com/kubefirst/kubefirst/configs"
        "github.com/kubefirst/metrics-client/pkg/telemetry"
        "github.com/kubefirst/runtime/pkg/k3d"
-
-       "github.com/segmentio/analytics-go"
 )
 
 const (
        kubefirstClient string = "api"
 )
 
-func InitClient(clusterId, clusterType, gitProvider string) 
*telemetry.SegmentClient {
+func InitClient(clusterId, clusterType, gitProvider string) 
telemetry.TelemetryEvent {
 
        machineID, _ := machineid.ID()
-       sc := analytics.New(telemetry.SegmentIOWriteKey)
 
-       c := telemetry.SegmentClient{
-               TelemetryEvent: telemetry.TelemetryEvent{
-                       CliVersion:        configs.K1Version,
-                       CloudProvider:     k3d.CloudProvider,
-                       ClusterID:         clusterId,
-                       ClusterType:       clusterType,
-                       DomainName:        k3d.DomainName,
-                       GitProvider:       gitProvider,
-                       InstallMethod:     "kubefirst-launch",
-                       KubefirstClient:   kubefirstClient,
-                       KubefirstTeam:     os.Getenv("KUBEFIRST_TEAM"),
-                       KubefirstTeamInfo: os.Getenv("KUBEFIRST_TEAM_INFO"),
-                       MachineID:         machineID,
-                       ErrorMessage:      "",
-                       UserId:            machineID,
-                       MetricName:        telemetry.ClusterInstallStarted,
-               },
-               Client: sc,
+       c := telemetry.TelemetryEvent{
+               CliVersion:        configs.K1Version,
+               CloudProvider:     k3d.CloudProvider,
+               ClusterID:         clusterId,
+               ClusterType:       clusterType,
+               DomainName:        k3d.DomainName,
+               GitProvider:       gitProvider,
+               InstallMethod:     "kubefirst-launch",
+               KubefirstClient:   kubefirstClient,
+               KubefirstTeam:     os.Getenv("KUBEFIRST_TEAM"),
+               KubefirstTeamInfo: os.Getenv("KUBEFIRST_TEAM_INFO"),
+               MachineID:         machineID,
+               ErrorMessage:      "",
+               MetricName:        telemetry.ClusterInstallCompleted,
+               UserId:            machineID,
        }
 
-       return &c
+       return c
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/types/flags.go 
new/kubefirst-2.3.7/internal/types/flags.go
--- old/kubefirst-2.3.5/internal/types/flags.go 2023-11-01 20:52:58.000000000 
+0100
+++ new/kubefirst-2.3.7/internal/types/flags.go 2023-12-14 06:14:10.000000000 
+0100
@@ -24,4 +24,6 @@
        GoogleProject        string
        UseTelemetry         bool
        Ecr                  bool
+       NodeType             string
+       NodeCount            string
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/utilities/flags.go 
new/kubefirst-2.3.7/internal/utilities/flags.go
--- old/kubefirst-2.3.5/internal/utilities/flags.go     2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/utilities/flags.go     2023-12-14 
06:14:10.000000000 +0100
@@ -92,6 +92,18 @@
                return cliFlags, err
        }
 
+       nodeTypeFlag, err := cmd.Flags().GetString("node-type")
+       if err != nil {
+               progress.Error(err.Error())
+               return cliFlags, err
+       }
+
+       nodeCountFlag, err := cmd.Flags().GetString("node-count")
+       if err != nil {
+               progress.Error(err.Error())
+               return cliFlags, err
+       }
+
        if cloudProvider == "aws" {
                ecrFlag, err := cmd.Flags().GetBool("ecr")
                if err != nil {
@@ -125,6 +137,8 @@
        cliFlags.GitopsTemplateURL = gitopsTemplateURLFlag
        cliFlags.UseTelemetry = useTelemetryFlag
        cliFlags.CloudProvider = cloudProvider
+       cliFlags.NodeType = nodeTypeFlag
+       cliFlags.NodeCount = nodeCountFlag
 
        viper.Set("flags.alerts-email", cliFlags.AlertsEmail)
        viper.Set("flags.cluster-name", cliFlags.ClusterName)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/internal/utilities/utilities.go 
new/kubefirst-2.3.7/internal/utilities/utilities.go
--- old/kubefirst-2.3.5/internal/utilities/utilities.go 2023-11-01 
20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/internal/utilities/utilities.go 2023-12-14 
06:14:10.000000000 +0100
@@ -12,6 +12,7 @@
        "fmt"
        "io/ioutil"
        "os"
+       "strconv"
        "time"
 
        apiTypes "github.com/kubefirst/kubefirst-api/pkg/types"
@@ -133,6 +134,11 @@
                kubefirstTeam = "false"
        }
 
+       stringToIntNodeCount, err := strconv.Atoi(cliFlags.NodeCount)
+       if err != nil {
+               log.Info().Msg("Unable to convert node count to type string")
+       }
+
        cl := apiTypes.ClusterDefinition{
                AdminEmail:           viper.GetString("flags.alerts-email"),
                ClusterName:          viper.GetString("flags.cluster-name"),
@@ -140,6 +146,8 @@
                CloudRegion:          viper.GetString("flags.cloud-region"),
                DomainName:           domainName,
                Type:                 "mgmt",
+               NodeType:             cliFlags.NodeType,
+               NodeCount:            stringToIntNodeCount,
                GitopsTemplateURL:    cliFlags.GitopsTemplateURL,
                GitopsTemplateBranch: cliFlags.GitopsTemplateBranch,
                GitProvider:          gitProvider,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/main.go new/kubefirst-2.3.7/main.go
--- old/kubefirst-2.3.5/main.go 2023-11-01 20:52:58.000000000 +0100
+++ new/kubefirst-2.3.7/main.go 2023-12-14 06:14:10.000000000 +0100
@@ -13,6 +13,7 @@
        "time"
 
        "github.com/rs/zerolog"
+       "golang.org/x/exp/slices"
 
        "github.com/rs/zerolog/log"
 
@@ -24,6 +25,21 @@
 )
 
 func main() {
+       argsWithProg := os.Args
+
+       bubbleTeaBlacklist := []string{"completion", "help", "--help", "-h"}
+       canRunBubbleTea := true
+
+       if argsWithProg != nil {
+               for _, arg := range argsWithProg {
+                       isBlackListed := slices.Contains(bubbleTeaBlacklist, 
arg)
+
+                       if isBlackListed {
+                               canRunBubbleTea = false
+                       }
+               }
+       }
+
        now := time.Now()
        epoch := now.Unix()
 
@@ -85,11 +101,16 @@
                stdLog.Panicf("unable to set log-file-location, error is: %s", 
err)
        }
 
-       progress.InitializeProgressTerminal()
+       if canRunBubbleTea {
+               progress.InitializeProgressTerminal()
+
+               go func() {
+                       cmd.Execute()
+               }()
 
-       go func() {
+               progress.Progress.Run()
+       } else {
                cmd.Execute()
-       }()
+       }
 
-       progress.Progress.Run()
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/tools/aws-assume-role.sh 
new/kubefirst-2.3.7/tools/aws-assume-role.sh
--- old/kubefirst-2.3.5/tools/aws-assume-role.sh        1970-01-01 
01:00:00.000000000 +0100
+++ new/kubefirst-2.3.7/tools/aws-assume-role.sh        2023-12-14 
06:14:10.000000000 +0100
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+#
+# This script helps you assume the AssumedAdmin role you either created 
manually or using the Terraform plan from ws-create-role.tf
+#
+# Requirement: aws-cli installed (see https://github.com/aws/aws-cli)
+#
+# Replace the AWS account ID `111111111111` in the `ROLE` variable with yours. 
If you give the admin a different name than `AssumedAdmin`, please update it 
also.
+#
+# Ensure that the default values fit your needs (i.e., role session name, 
duration of assume role...)
+#
+# Before running the script, ensure you have credentials. configure with the 
AWS CLI. To do so, run
+# aws configure
+#
+# To run this script
+# ./aws-assume-role.sh
+#
+
+#
+# Change the AWS account ID & role name
+#
+ROLE="arn:aws:iam::111111111111:role/AssumedAdmin"
+
+#
+# You can leave the rest of thre script as is
+#
+
+# An identifier for the assumed role session: you can change it if you want.
+ROLE_SESSION_NAME="AssumedAdmin-kubefirst"
+
+# Colors for formatting
+YELLOW="\033[1;93m"
+NOFORMAT="\033[0m"
+BOLD="\033[1m"
+
+# Backup the previous credentials
+if [ -f "~/.aws/credentials" ]
+then
+    mv ~/.aws/credentials ~/.aws/credentials.bak
+fi
+
+# Unset previously set AWS access environment variables
+unset AWS_ACCESS_KEY_ID
+unset AWS_SECRET_ACCESS_KEY
+unset AWS_SESSION_TOKEN
+
+# Retrieving the connected user
+USER=$(aws sts get-caller-identity | jq -r .Arn | cut -d'/' -f 2)
+
+if [ $(echo "$USER" | grep -v "Unable to locate credentials") ]
+then
+    # Assuming the new role for 12 hours. You can change the 
`--duration-seconds` to shorter timeout for security reason.
+    JSON=$(aws sts assume-role --role-arn "${ROLE}" --role-session-name 
"${ROLE_SESSION_NAME}" --duration-seconds 43200)
+    export AWS_ACCESS_KEY_ID=$(echo $JSON | jq -r .Credentials.AccessKeyId)
+    export AWS_SECRET_ACCESS_KEY=$(echo $JSON | jq -r 
.Credentials.SecretAccessKey)
+    export AWS_SESSION_TOKEN=$(echo $JSON | jq -r .Credentials.SessionToken)
+    unset JSON
+
+    # Display useful information for UI installation
+    echo -e "\n${YELLOW}Started session for user 
${NOFORMAT}${BOLD}${USER}${NOFORMAT}${YELLOW} assuming 
${NOFORMAT}${BOLD}${ROLE}${NOFORMAT}\n"
+    echo -e "${BOLD}AWS_ACCESS_KEY_ID:    ${NOFORMAT} ${AWS_ACCESS_KEY_ID}"
+    echo -e "${BOLD}AWS_SECRET_ACCESS_KEY:${NOFORMAT} ${AWS_SECRET_ACCESS_KEY}"
+    echo -e "${BOLD}AWS_SESSION_TOKEN:    ${NOFORMAT} ${AWS_SESSION_TOKEN}"
+else
+    # The script wasn't successful
+    exit 1
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kubefirst-2.3.5/tools/aws-create-role.tf 
new/kubefirst-2.3.7/tools/aws-create-role.tf
--- old/kubefirst-2.3.5/tools/aws-create-role.tf        1970-01-01 
01:00:00.000000000 +0100
+++ new/kubefirst-2.3.7/tools/aws-create-role.tf        2023-12-14 
06:14:10.000000000 +0100
@@ -0,0 +1,67 @@
+#
+# Terraform plan to create the administrator role that will be assumed
+#
+# Please read the comment within the file (not just this one) carefully to 
prevent any security issues within your organization!
+#
+# Replace the AWS account ID `111111111111` with yours.
+#
+# Ensure that the default values fit your needs (i.e., AWS region, role 
permission...)
+#
+# To run this plan:
+# terraform init
+# terraform apply
+#
+
+terraform {
+  required_providers {
+    aws = {
+      source = "hashicorp/aws"
+      version = "4.67.0"
+    }
+  }
+}
+
+provider "aws" {
+  region = "us-east-1"
+}
+
+resource "aws_iam_role" "assumed_admin" {
+
+  # The role name
+  name = "AssumedAdmin"
+
+  # The default session time is 1 hour, this set it to 12 hours for 
convenience. It's less annoying, but less secure, feel free to remove or change!
+  max_session_duration = 43200
+
+  #
+  # Below is a permissive role not intended for long-term use.
+  #
+  # It grants all IAM users of the AWS account the ability to assume the role 
`AssumedAdmin` (or whatever name you gave it), which we created and give the 
`AdministratorAccess` policy.
+  #
+  # The value `:root` grants assume to the whole account but you can replace 
it with your individual IAM ARN, or your role if appropriate.
+  #
+  # As a reminder, the value `111111111111` below should be replaced with your 
AWS account ID.
+  #
+  # Anyone with IAM can assume the role while it's in place like this. You can 
scope it down to your specific user, or across accounts, or whatever you need.
+  #
+  assume_role_policy   = <<EOF
+  {
+      "Version": "2012-10-17",
+      "Statement": [
+          {
+              "Sid": "AllowAssumeRoleToIamUsers",
+              "Effect": "Allow",
+              "Principal": {
+                  "AWS": "arn:aws:iam::111111111111:root"
+              },
+              "Action": "sts:AssumeRole"
+          }
+      ]
+  }
+  EOF
+}
+
+resource "aws_iam_role_policy_attachment" "assumed_admin_admin_policy" {
+  role       = aws_iam_role.assumed_admin.name
+  policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess"
+}

++++++ kubefirst.obsinfo ++++++
--- /var/tmp/diff_new_pack.PScyhn/_old  2023-12-15 21:47:59.431710021 +0100
+++ /var/tmp/diff_new_pack.PScyhn/_new  2023-12-15 21:47:59.435710168 +0100
@@ -1,5 +1,5 @@
 name: kubefirst
-version: 2.3.5
-mtime: 1698868378
-commit: 1567ee0b66bd4e6d8d767662e075024fa277da52
+version: 2.3.7
+mtime: 1702530850
+commit: c816caa695e1569f83071544d9e98133f42649b5
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/kubefirst/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.kubefirst.new.25432/vendor.tar.gz differ: char 5, 
line 1

Reply via email to