diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml new file mode 100644 index 0000000..6aa5e06 --- /dev/null +++ b/.github/workflows/golangci-lint.yaml @@ -0,0 +1,54 @@ +name: golangci-lint +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + pull-requests: read + +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '1.22.1' + cache: false + - name: golangci-lint + uses: golangci/golangci-lint-action@v4 + with: + # Require: The version of golangci-lint to use. + # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version. + # When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit. + version: latest + + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + # + # Note: By default, the `.golangci.yml` file should be at the root of the repository. + # The location of the configuration file can be changed by using `--config=` + # args: --timeout=30m --config=/my/path/.golangci.yml --issues-exit-code=0 + + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true + + # Optional: if set to true, then all caching functionality will be completely disabled, + # takes precedence over all other caching options. + # skip-cache: true + + # Optional: if set to true, then the action won't cache or restore ~/go/pkg. + # skip-pkg-cache: true + + # Optional: if set to true, then the action won't cache or restore ~/.cache/go-build. + # skip-build-cache: true + + # Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'. + # install-mode: "goinstall" \ No newline at end of file diff --git a/README.md b/README.md index 26c5ce2..11426cb 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,6 @@ Thank you very much, for supporting me 🚀 ## Usage ### Requirements: -I am currently working on a preparing step, so you don't have two worry.\ -But for now, the following needs to be done manually: - #### Get the *frigg* cli: Get the binary using go: ``` @@ -60,14 +57,6 @@ or download the binary at the releasepage:\ Homebrew is on the way. -#### Install the recommended tools: - -Just run:\ -`frigg prepare` - -All Tools we need, will be installed into the tools Directory under\ -`~/.frigg/tools` - #### Start the deployment: While everything gets bootstrapped and provisioned, the Frigg CLI \ diff --git a/cmd/frigg/bootstrap/capd-controller/cluster/cluster.go b/cmd/frigg/bootstrap/capd-controller/cluster/cluster.go index 2ae8737..5544eff 100644 --- a/cmd/frigg/bootstrap/capd-controller/cluster/cluster.go +++ b/cmd/frigg/bootstrap/capd-controller/cluster/cluster.go @@ -2,31 +2,22 @@ package cluster import ( "fmt" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/clusterapi" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/argocdWorkload" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/cni" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/cnibootstrap" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdApps" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdEvents" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdRollouts" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdWorkflows" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgohub" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtVault" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/reporender" + "github.com/PatrickLaabs/frigg/internal/capi_controller" + "github.com/PatrickLaabs/frigg/internal/clusterapi" + "github.com/PatrickLaabs/frigg/internal/directories" + "github.com/PatrickLaabs/frigg/internal/generate" + "github.com/PatrickLaabs/frigg/internal/helmchart" + "github.com/PatrickLaabs/frigg/internal/kubeconfig" + "github.com/PatrickLaabs/frigg/internal/postbootstrap" + "github.com/PatrickLaabs/frigg/internal/prepare" + "github.com/PatrickLaabs/frigg/internal/reporender" "github.com/PatrickLaabs/frigg/internal/runtime" - "github.com/PatrickLaabs/frigg/pkg/capi_controller" - "github.com/PatrickLaabs/frigg/pkg/controllerdir" - "github.com/PatrickLaabs/frigg/pkg/kubeconfig" - "github.com/PatrickLaabs/frigg/pkg/postbootstrap" - "github.com/PatrickLaabs/frigg/pkg/sshkey" - "github.com/PatrickLaabs/frigg/pkg/statuscheck" - "github.com/PatrickLaabs/frigg/pkg/tmpl/helmchartsproxies" - "github.com/PatrickLaabs/frigg/pkg/tmpl/kindconfig" - "github.com/PatrickLaabs/frigg/pkg/tmpl/mgmtmanifestgen" - "github.com/PatrickLaabs/frigg/pkg/toolsdir" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/PatrickLaabs/frigg/pkg/wait" - "github.com/PatrickLaabs/frigg/pkg/workdir" + "github.com/PatrickLaabs/frigg/internal/sshkey" + "github.com/PatrickLaabs/frigg/internal/statuscheck" + + "github.com/PatrickLaabs/frigg/internal/vars" + "github.com/PatrickLaabs/frigg/internal/wait" + "github.com/fatih/color" "io" "os" @@ -135,21 +126,21 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { os.Getenv("GITHUB_MAIL") } - // Create working directory named .frigg inside the users homedirectory. - workdir.CreateDir() + // Creating Working, tools and controllers directories + directories.Create() - // Creates the Frigg Tools dir - toolsdir.FriggWorkingDir() - - // Creates the Frigg controllers dir - controllerdir.FriggControllerDir() + // Preparing the CLIs for Frigg + prepare.Tools() // Generating kind-config - kindconfig.KindConfigGen() + generate.KindConfigGen() // Generating SSH Key pair sshkey.KeypairGen() + // Generating clusterctl config + generate.ClusterctlConfig() + // Generates the Manifests for the ClusterAPI Controllers println(color.GreenString("Generating CAPI Controller Manifests..")) capi_controller.BootstrapProviderGen() @@ -160,17 +151,17 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { // Generating HelmChartProxies println(color.GreenString("Generating Helm Chart Proxy Manifests..")) - helmchartsproxies.Cni() - helmchartsproxies.Vault() - helmchartsproxies.ArgoCDWorkloadClusters() - helmchartsproxies.ArgoWorkflows() - helmchartsproxies.ArgoRollouts() - helmchartsproxies.ArgoEvents() - helmchartsproxies.MgmtArgoCD() - helmchartsproxies.MgmtArgoApps() + generate.Cni() + generate.Vault() + generate.ArgoCDWorkloadClusters() + generate.ArgoWorkflows() + generate.ArgoRollouts() + generate.ArgoEvents() + generate.MgmtArgoCD() + generate.MgmtArgoApps() // Generates a manifest for the management cluster, named frigg-mgmt-cluster - mgmtmanifestgen.Gen() + generate.MgmtManifest() provider := cluster.NewProvider( cluster.ProviderWithLogger(logger), @@ -222,6 +213,7 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { // Installs capi components on the bootstrap cluster. println(color.YellowString("Applying ClusterAPI Controllers")) + wait.Wait(10 * time.Second) clusterapi.ApplyCoreProvider() clusterapi.ApplyBootstrapProv() clusterapi.ApplyControlPlaneProv() @@ -236,7 +228,7 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { // Installs a CNI solution helm chart proxy to the bootstrapcluster // This is needed, to make the worker nodes ready and complete the bootstrap deployment println(color.YellowString("Applying CNI")) - cnibootstrap.Installation() + helmchart.InstallOnBootstrap() // Applies the frigg-mgmt-cluster manifest to the bootstrap cluster // to create the first 'real' management cluster @@ -306,14 +298,7 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { clusterapi.ApplyArgoSecretMgmt() // Installs the HelmChartProxies onto the mgmt-cluster - argocdWorkload.Installation() - cni.Installation() - mgmtArgocdApps.Installation() - mgmtArgocdEvents.Installation() - mgmtArgocdRollouts.Installation() - mgmtArgocdWorkflows.Installation() - mgmtArgohub.Installation() - mgmtVault.Installation() + helmchart.InstallOnMgmt() // Moves the capi components from the bootstrap cluster to the frigg-mgmt-cluster wait.Wait(15 * time.Second) diff --git a/cmd/frigg/bootstrap/capd-controller/workloadcluster/workloadcluster.go b/cmd/frigg/bootstrap/capd-controller/workloadcluster/workloadcluster.go index 77d832c..eb86c9b 100644 --- a/cmd/frigg/bootstrap/capd-controller/workloadcluster/workloadcluster.go +++ b/cmd/frigg/bootstrap/capd-controller/workloadcluster/workloadcluster.go @@ -2,11 +2,11 @@ package workloadcluster import ( "fmt" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/clusterapi" - "github.com/PatrickLaabs/frigg/pkg/kubeconfig" - "github.com/PatrickLaabs/frigg/pkg/statuscheck" - "github.com/PatrickLaabs/frigg/pkg/tmpl/workloadmanifestgen" - "github.com/PatrickLaabs/frigg/pkg/wait" + "github.com/PatrickLaabs/frigg/internal/clusterapi" + "github.com/PatrickLaabs/frigg/internal/generate" + "github.com/PatrickLaabs/frigg/internal/kubeconfig" + "github.com/PatrickLaabs/frigg/internal/statuscheck" + "github.com/PatrickLaabs/frigg/internal/wait" "github.com/fatih/color" "github.com/spf13/cobra" "time" @@ -25,7 +25,7 @@ func NewCommand() *cobra.Command { // Generates a workload-cluster manifest // Modifies the manifest of the workload cluster, to add the helmchart labels to it wait.Wait(5 * time.Second) - workloadmanifestgen.Gen() + generate.WorkloadManifest() // Applies the workload cluster manifest to the frigg-mgmt-cluster wait.Wait(5 * time.Second) diff --git a/cmd/frigg/bootstrap/capd/cluster/cluster.go b/cmd/frigg/bootstrap/capd/cluster/cluster.go index 3fe8683..0a4dc32 100644 --- a/cmd/frigg/bootstrap/capd/cluster/cluster.go +++ b/cmd/frigg/bootstrap/capd/cluster/cluster.go @@ -2,29 +2,19 @@ package cluster import ( "fmt" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/clusterapi" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/argocdWorkload" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/cni" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/cnibootstrap" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdApps" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdEvents" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdRollouts" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdWorkflows" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgohub" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtVault" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/reporender" + "github.com/PatrickLaabs/frigg/internal/clusterapi" + "github.com/PatrickLaabs/frigg/internal/directories" + "github.com/PatrickLaabs/frigg/internal/generate" + "github.com/PatrickLaabs/frigg/internal/helmchart" + "github.com/PatrickLaabs/frigg/internal/kubeconfig" + "github.com/PatrickLaabs/frigg/internal/postbootstrap" + "github.com/PatrickLaabs/frigg/internal/prepare" + "github.com/PatrickLaabs/frigg/internal/reporender" "github.com/PatrickLaabs/frigg/internal/runtime" - "github.com/PatrickLaabs/frigg/pkg/kubeconfig" - "github.com/PatrickLaabs/frigg/pkg/postbootstrap" - "github.com/PatrickLaabs/frigg/pkg/sshkey" - "github.com/PatrickLaabs/frigg/pkg/statuscheck" - "github.com/PatrickLaabs/frigg/pkg/tmpl/clusterctlconfig" - "github.com/PatrickLaabs/frigg/pkg/tmpl/helmchartsproxies" - "github.com/PatrickLaabs/frigg/pkg/tmpl/kindconfig" - "github.com/PatrickLaabs/frigg/pkg/tmpl/mgmtmanifestgen" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/PatrickLaabs/frigg/pkg/wait" - "github.com/PatrickLaabs/frigg/pkg/workdir" + "github.com/PatrickLaabs/frigg/internal/sshkey" + "github.com/PatrickLaabs/frigg/internal/statuscheck" + "github.com/PatrickLaabs/frigg/internal/vars" + "github.com/PatrickLaabs/frigg/internal/wait" "github.com/fatih/color" "io" "os" @@ -133,30 +123,34 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { os.Getenv("GITHUB_MAIL") } - // Create working directory named .frigg inside the users homedirectory. - workdir.CreateDir() + // Creating Working, tools and controllers directories + directories.Create() + + // Preparing the CLIs for Frigg + prepare.Tools() // Generating kind-config - kindconfig.KindConfigGen() + generate.KindConfigGen() // Generating SSH Key pair sshkey.KeypairGen() // Generating clusterctl config - clusterctlconfig.ClusterctlConfigGen() + generate.ClusterctlConfig() // Generating HelmChartProxies - helmchartsproxies.Cni() - helmchartsproxies.Vault() - helmchartsproxies.ArgoCDWorkloadClusters() - helmchartsproxies.ArgoWorkflows() - helmchartsproxies.ArgoRollouts() - helmchartsproxies.ArgoEvents() - helmchartsproxies.MgmtArgoCD() - helmchartsproxies.MgmtArgoApps() + println(color.GreenString("Generating Helm Chart Proxy Manifests..")) + generate.Cni() + generate.Vault() + generate.ArgoCDWorkloadClusters() + generate.ArgoWorkflows() + generate.ArgoRollouts() + generate.ArgoEvents() + generate.MgmtArgoCD() + generate.MgmtArgoApps() // Generates a manifest for the management cluster, named frigg-mgmt-cluster - mgmtmanifestgen.Gen() + generate.MgmtManifest() provider := cluster.NewProvider( cluster.ProviderWithLogger(logger), @@ -196,7 +190,7 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { // Installs a CNI solution helm chart proxy to the bootstrapcluster // This is needed, to make the worker nodes ready and complete the bootstrap deployment - cnibootstrap.Installation() + helmchart.InstallOnBootstrap() // Applies the frigg-mgmt-cluster manifest to the bootstrap cluster // to create the first 'real' management cluster @@ -241,14 +235,7 @@ func runE(logger log.Logger, streams cmd.IOStreams, flags *flagpole) error { clusterapi.ApplyArgoSecretMgmt() // Installs the HelmChartProxies onto the mgmt-cluster - argocdWorkload.Installation() - cni.Installation() - mgmtArgocdApps.Installation() - mgmtArgocdEvents.Installation() - mgmtArgocdRollouts.Installation() - mgmtArgocdWorkflows.Installation() - mgmtArgohub.Installation() - mgmtVault.Installation() + helmchart.InstallOnMgmt() // Moves the capi components from the bootstrap cluster to the frigg-mgmt-cluster wait.Wait(15 * time.Second) diff --git a/cmd/frigg/bootstrap/capd/workloadcluster/workloadcluster.go b/cmd/frigg/bootstrap/capd/workloadcluster/workloadcluster.go index 77d832c..eb86c9b 100644 --- a/cmd/frigg/bootstrap/capd/workloadcluster/workloadcluster.go +++ b/cmd/frigg/bootstrap/capd/workloadcluster/workloadcluster.go @@ -2,11 +2,11 @@ package workloadcluster import ( "fmt" - "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap/commons/clusterapi" - "github.com/PatrickLaabs/frigg/pkg/kubeconfig" - "github.com/PatrickLaabs/frigg/pkg/statuscheck" - "github.com/PatrickLaabs/frigg/pkg/tmpl/workloadmanifestgen" - "github.com/PatrickLaabs/frigg/pkg/wait" + "github.com/PatrickLaabs/frigg/internal/clusterapi" + "github.com/PatrickLaabs/frigg/internal/generate" + "github.com/PatrickLaabs/frigg/internal/kubeconfig" + "github.com/PatrickLaabs/frigg/internal/statuscheck" + "github.com/PatrickLaabs/frigg/internal/wait" "github.com/fatih/color" "github.com/spf13/cobra" "time" @@ -25,7 +25,7 @@ func NewCommand() *cobra.Command { // Generates a workload-cluster manifest // Modifies the manifest of the workload cluster, to add the helmchart labels to it wait.Wait(5 * time.Second) - workloadmanifestgen.Gen() + generate.WorkloadManifest() // Applies the workload cluster manifest to the frigg-mgmt-cluster wait.Wait(5 * time.Second) diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/argocdWorkload/argocdWorkload.go b/cmd/frigg/bootstrap/commons/helmchartproxies/argocdWorkload/argocdWorkload.go deleted file mode 100644 index 9c73b7e..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/argocdWorkload/argocdWorkload.go +++ /dev/null @@ -1,40 +0,0 @@ -package argocdWorkload - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoCDWorkload) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl apply for argocd workload helmchartproxy: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/cni/cni.go b/cmd/frigg/bootstrap/commons/helmchartproxies/cni/cni.go deleted file mode 100644 index bec4ca8..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/cni/cni.go +++ /dev/null @@ -1,40 +0,0 @@ -package cni - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.CniName) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/cnibootstrap/cni.go b/cmd/frigg/bootstrap/commons/helmchartproxies/cnibootstrap/cni.go deleted file mode 100644 index 6c1bd00..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/cnibootstrap/cni.go +++ /dev/null @@ -1,39 +0,0 @@ -package cnibootstrap - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.CniName) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdApps/mgmtArgocdApps.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdApps/mgmtArgocdApps.go deleted file mode 100644 index 5f84775..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdApps/mgmtArgocdApps.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtArgocdApps - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoCDAppsMgmt) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdEvents/mgmtArgocdEvents.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdEvents/mgmtArgocdEvents.go deleted file mode 100644 index 3308d82..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdEvents/mgmtArgocdEvents.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtArgocdEvents - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoEventsMgmt) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdRollouts/mgmtArgocdRollouts.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdRollouts/mgmtArgocdRollouts.go deleted file mode 100644 index e1f6193..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdRollouts/mgmtArgocdRollouts.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtArgocdRollouts - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoRolloutsMgmt) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdWorkflows/mgmtArgocdWorkflows.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdWorkflows/mgmtArgocdWorkflows.go deleted file mode 100644 index 85f9dde..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgocdWorkflows/mgmtArgocdWorkflows.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtArgocdWorkflows - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoWorkflowsMgmt) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgohub/mgmtArgohub.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgohub/mgmtArgohub.go deleted file mode 100644 index e54f9df..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtArgohub/mgmtArgohub.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtArgohub - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.ArgoCDMgmt) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtVault/mgmtVault.go b/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtVault/mgmtVault.go deleted file mode 100644 index 896e240..0000000 --- a/cmd/frigg/bootstrap/commons/helmchartproxies/mgmtVault/mgmtVault.go +++ /dev/null @@ -1,40 +0,0 @@ -package mgmtVault - -import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -var kubectl = "kubectl_" + consts.KubectlVersion - -func Installation() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - helmchartManifests := filepath.Join(friggDir, vars.VaultName) - - cmd := exec.Command(kubectlPath, "--kubeconfig", - kubeconfigFlagPath, "apply", - "-f", helmchartManifests, - ) - - // Capture the output of the command - output, err := cmd.CombinedOutput() - if err != nil { - println(color.RedString("Error running kubectl: %v\n", err)) - println(color.YellowString(string(output))) - return - } -} diff --git a/cmd/frigg/load/docker-image/docker-image.go b/cmd/frigg/load/docker-image/docker-image.go index fb29fb0..ca3bd36 100644 --- a/cmd/frigg/load/docker-image/docker-image.go +++ b/cmd/frigg/load/docker-image/docker-image.go @@ -176,7 +176,7 @@ func runE(logger log.Logger, flags *flagpole, args []string) error { defer func(path string) { err := os.RemoveAll(path) if err != nil { - + return } }(dir) imagesTarPath := filepath.Join(dir, "images.tar") @@ -207,7 +207,7 @@ func loadImage(imageTarName string, node nodes.Node) error { defer func(f *os.File) { err := f.Close() if err != nil { - + return } }(f) return nodeutils.LoadImageArchive(node, f) diff --git a/cmd/frigg/load/image-archive/image-archive.go b/cmd/frigg/load/image-archive/image-archive.go index 68bfa97..5aa1dbf 100644 --- a/cmd/frigg/load/image-archive/image-archive.go +++ b/cmd/frigg/load/image-archive/image-archive.go @@ -134,7 +134,7 @@ func loadImage(imageTarName string, node nodes.Node) error { defer func(f *os.File) { err := f.Close() if err != nil { - + return } }(f) return nodeutils.LoadImageArchive(node, f) diff --git a/cmd/frigg/prepare/download/download_test.go b/cmd/frigg/prepare/download/download_test.go deleted file mode 100644 index fff7138..0000000 --- a/cmd/frigg/prepare/download/download_test.go +++ /dev/null @@ -1 +0,0 @@ -package download diff --git a/cmd/frigg/prepare/prepare.go b/cmd/frigg/prepare/prepare.go deleted file mode 100644 index 59192dc..0000000 --- a/cmd/frigg/prepare/prepare.go +++ /dev/null @@ -1,26 +0,0 @@ -package prepare - -import ( - "github.com/PatrickLaabs/frigg/cmd/frigg/prepare/download" - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -// NewCommand returns a new cobra.Command for cluster creation -func NewCommand() *cobra.Command { - c := &cobra.Command{ - Args: cobra.NoArgs, - Use: "prepare", - Short: "Prepares everything to use Frigg", - Long: "Prepares everything to use Frigg", - RunE: func(cmd *cobra.Command, args []string) error { - println(color.GreenString("Downloading Tools you need to operate with Frigg into your home directory.")) - download.GithubCli() - download.Kubectl() - download.Clusterctl() - download.K9s() - return nil - }, - } - return c -} diff --git a/cmd/frigg/prepare/prepare_test.go b/cmd/frigg/prepare/prepare_test.go deleted file mode 100644 index b259a85..0000000 --- a/cmd/frigg/prepare/prepare_test.go +++ /dev/null @@ -1 +0,0 @@ -package prepare diff --git a/cmd/frigg/root.go b/cmd/frigg/root.go index 856b0f9..d86ab0f 100644 --- a/cmd/frigg/root.go +++ b/cmd/frigg/root.go @@ -19,7 +19,7 @@ package frigg import ( "github.com/PatrickLaabs/frigg/cmd/frigg/bootstrap" - "github.com/PatrickLaabs/frigg/cmd/frigg/prepare" + "github.com/PatrickLaabs/frigg/cmd/frigg/get" "io" "github.com/spf13/cobra" @@ -77,7 +77,7 @@ func NewCommand(logger log.Logger, streams cmd.IOStreams) *cobra.Command { c.AddCommand(delete.NewCommand(logger)) c.AddCommand(version.NewCommand(logger, streams)) c.AddCommand(bootstrap.NewCommand(logger, streams)) - c.AddCommand(prepare.NewCommand()) + c.AddCommand(get.NewCommand(logger, streams)) return c } diff --git a/cmd/frigg/version/version.go b/cmd/frigg/version/version.go index 9efdc23..a0b463b 100644 --- a/cmd/frigg/version/version.go +++ b/cmd/frigg/version/version.go @@ -19,7 +19,7 @@ package version import ( "fmt" - "github.com/PatrickLaabs/frigg/pkg/consts" + "github.com/PatrickLaabs/frigg/internal/consts" "runtime" "github.com/spf13/cobra" diff --git a/pkg/capi_controller/capi_controller.go b/internal/capi_controller/capi_controller.go similarity index 99% rename from pkg/capi_controller/capi_controller.go rename to internal/capi_controller/capi_controller.go index b31fa65..1351e1d 100644 --- a/pkg/capi_controller/capi_controller.go +++ b/internal/capi_controller/capi_controller.go @@ -1,8 +1,8 @@ package capi_controller import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "gopkg.in/yaml.v3" "os" diff --git a/cmd/frigg/bootstrap/commons/clusterapi/apply.go b/internal/clusterapi/apply.go similarity index 59% rename from cmd/frigg/bootstrap/commons/clusterapi/apply.go rename to internal/clusterapi/apply.go index e271225..ee06868 100644 --- a/cmd/frigg/bootstrap/commons/clusterapi/apply.go +++ b/internal/clusterapi/apply.go @@ -1,29 +1,16 @@ package clusterapi import ( - "fmt" - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "os" "os/exec" "path/filepath" ) -var kubectl = "kubectl_" + consts.KubectlVersion - func KubectlApplyMgmt() { println(color.GreenString("Applying Manifest to the cluster")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) mgmtcluster := filepath.Join(friggDir, vars.MgmtManifest) @@ -42,18 +29,8 @@ func KubectlApplyMgmt() { } func KubectlApplyWorkload() { - fmt.Println("Applying Manifest to the cluster") println(color.GreenString("Applying workload cluster manifest to the management cluster")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) workloadcluster := filepath.Join(friggDir, vars.WorkloadManifest) @@ -93,16 +70,6 @@ func ApplyGithubSecretMgmt() { os.Exit(1) } - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - fromLiteralString := "--from-literal=token=" + token kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) @@ -123,16 +90,6 @@ func ApplyGithubSecretMgmt() { func ApplyArgoSecretMgmt() { println(color.GreenString("Applying ArgoCD Login Secret to the mgmt cluster")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -154,16 +111,6 @@ func ApplyArgoSecretMgmt() { func CreateArgoNSMgmt() { println(color.GreenString("Creating Argo Namespace to the mgmt cluster")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - println(kubectlPath) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -182,16 +129,6 @@ func CreateArgoNSMgmt() { func CreateArgoNSWorkload() { println(color.GreenString("Creating Argo Namespace to the mgmt cluster")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.WorkloadKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -208,16 +145,6 @@ func CreateArgoNSWorkload() { } func CreateCapiNs() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -234,16 +161,6 @@ func CreateCapiNs() { } func CreateCapdNs() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -260,16 +177,6 @@ func CreateCapdNs() { } func CreateCaaphNs() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -286,16 +193,6 @@ func CreateCaaphNs() { } func CreateKubeadmBootstrapNs() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -312,16 +209,6 @@ func CreateKubeadmBootstrapNs() { } func CreateKubeAdmControlPlaneNs() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -338,16 +225,6 @@ func CreateKubeAdmControlPlaneNs() { } func ApplyCoreProvider() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) path := filepath.Join(friggControllerDir, vars.CoreProviderName) @@ -366,16 +243,6 @@ func ApplyCoreProvider() { } func ApplyControlPlaneProv() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) path := filepath.Join(friggControllerDir, vars.ControlPlaneProvName) @@ -394,16 +261,6 @@ func ApplyControlPlaneProv() { } func ApplyBootstrapProv() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) path := filepath.Join(friggControllerDir, vars.BootstrapProvName) @@ -422,16 +279,6 @@ func ApplyBootstrapProv() { } func ApplyDockerInfraProv() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) path := filepath.Join(friggControllerDir, vars.DockerInfraProvName) @@ -450,16 +297,6 @@ func ApplyDockerInfraProv() { } func ApplyAddonHelmProv() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) path := filepath.Join(friggControllerDir, vars.HelmAddonProvName) @@ -479,15 +316,6 @@ func ApplyAddonHelmProv() { // ApplyCertManager applies cert-manager installation on the Bootstrap Cluster func ApplyCertManager() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -505,15 +333,6 @@ func ApplyCertManager() { // ApplyCapiOperator applies the ClusterAPI Operator to the bootstrap cluster func ApplyCapiOperator() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -530,16 +349,6 @@ func ApplyCapiOperator() { } func CreateCapiNsMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -556,16 +365,6 @@ func CreateCapiNsMgmt() { } func CreateCapdNsMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -582,16 +381,6 @@ func CreateCapdNsMgmt() { } func CreateCaaphNsMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -608,16 +397,6 @@ func CreateCaaphNsMgmt() { } func CreateKubeadmBootstrapNsMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -634,16 +413,6 @@ func CreateKubeadmBootstrapNsMgmt() { } func CreateKubeAdmControlPlaneNsMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -660,16 +429,6 @@ func CreateKubeAdmControlPlaneNsMgmt() { } func ApplyCoreProviderMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) path := filepath.Join(friggControllerDir, vars.CoreProviderName) @@ -688,16 +447,6 @@ func ApplyCoreProviderMgmt() { } func ApplyControlPlaneProvMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) path := filepath.Join(friggControllerDir, vars.ControlPlaneProvName) @@ -716,16 +465,6 @@ func ApplyControlPlaneProvMgmt() { } func ApplyBootstrapProvMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) path := filepath.Join(friggControllerDir, vars.BootstrapProvName) @@ -744,16 +483,6 @@ func ApplyBootstrapProvMgmt() { } func ApplyDockerInfraProvMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) path := filepath.Join(friggControllerDir, vars.DockerInfraProvName) @@ -772,16 +501,6 @@ func ApplyDockerInfraProvMgmt() { } func ApplyAddonHelmProvMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - friggControllerDir := filepath.Join(friggDir, vars.ControllerDir) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) path := filepath.Join(friggControllerDir, vars.HelmAddonProvName) @@ -801,15 +520,6 @@ func ApplyAddonHelmProvMgmt() { // ApplyCertManagerMgmt applies cert-manager installation on the mgmt Cluster func ApplyCertManagerMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", @@ -827,15 +537,6 @@ func ApplyCertManagerMgmt() { // ApplyCapiOperatorMgmt applies the ClusterAPI Operator on the mgmt cluster func ApplyCapiOperatorMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - kubectlPath := filepath.Join(friggToolsDir, kubectl) kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) cmd := exec.Command(kubectlPath, "--kubeconfig", diff --git a/cmd/frigg/bootstrap/commons/clusterapi/clusterapi.go b/internal/clusterapi/clusterapi.go similarity index 61% rename from cmd/frigg/bootstrap/commons/clusterapi/clusterapi.go rename to internal/clusterapi/clusterapi.go index 883e6d1..bfdf007 100644 --- a/cmd/frigg/bootstrap/commons/clusterapi/clusterapi.go +++ b/internal/clusterapi/clusterapi.go @@ -1,29 +1,15 @@ package clusterapi import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" - "os" "os/exec" "path/filepath" ) -var clusterctl = "clusterctl_" + consts.ClusterctlVersion - func ClusterAPI() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - clusterctlPath := filepath.Join(friggToolsDir, clusterctl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) - clusterconfigPath := filepath.Join(friggDir, vars.ClusterctlConfigName) cmd := exec.Command(clusterctlPath, "init", "--bootstrap", consts.KubeadmVersion, @@ -47,18 +33,7 @@ func ClusterAPI() { } func ClusterAPIMgmt() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - clusterctlPath := filepath.Join(friggToolsDir, clusterctl) - kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) - clusterconfigPath := filepath.Join(friggDir, vars.ClusterctlConfigName) cmd := exec.Command(clusterctlPath, "init", "--bootstrap", consts.KubeadmVersion, diff --git a/cmd/frigg/bootstrap/commons/clusterapi/privot.go b/internal/clusterapi/privot.go similarity index 65% rename from cmd/frigg/bootstrap/commons/clusterapi/privot.go rename to internal/clusterapi/privot.go index a01b753..8b803f9 100644 --- a/cmd/frigg/bootstrap/commons/clusterapi/privot.go +++ b/internal/clusterapi/privot.go @@ -1,9 +1,8 @@ package clusterapi import ( - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" - "os" "os/exec" "path/filepath" ) @@ -11,16 +10,6 @@ import ( func Pivot() { println(color.GreenString("Moving clusterapi components from bootstrap to mgmt cluster..")) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - clusterctlPath := filepath.Join(friggToolsDir, clusterctl) - bootstrapKubeconfig := filepath.Join(friggDir, vars.BootstrapkubeconfigName) mgmtKubeconfig := filepath.Join(friggDir, vars.ManagementKubeconfigName) diff --git a/internal/clusterapi/vars.go b/internal/clusterapi/vars.go new file mode 100644 index 0000000..6459754 --- /dev/null +++ b/internal/clusterapi/vars.go @@ -0,0 +1,20 @@ +package clusterapi + +import ( + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" + "os" + "path/filepath" +) + +var ( + kubectl = "kubectl_" + consts.KubectlVersion + clusterctl = "clusterctl_" + consts.ClusterctlVersion + homedir, _ = os.UserHomeDir() + friggDir = filepath.Join(homedir, vars.FriggDirName) + friggToolsDir = filepath.Join(friggDir, vars.FriggTools) + kubectlPath = filepath.Join(friggToolsDir, kubectl) + friggControllerDir = filepath.Join(friggDir, vars.ControllerDir) + clusterctlPath = filepath.Join(friggToolsDir, clusterctl) + clusterconfigPath = filepath.Join(friggDir, vars.ClusterctlConfigName) +) diff --git a/pkg/consts/consts.go b/internal/consts/consts.go similarity index 100% rename from pkg/consts/consts.go rename to internal/consts/consts.go diff --git a/internal/directories/directories.go b/internal/directories/directories.go new file mode 100644 index 0000000..07b2a73 --- /dev/null +++ b/internal/directories/directories.go @@ -0,0 +1,85 @@ +package directories + +import ( + "github.com/PatrickLaabs/frigg/internal/vars" + "github.com/fatih/color" + "os" + "path/filepath" +) + +var ( + friggdir string +) + +func workDir() { + dir, err := os.UserHomeDir() + if err != nil { + println(color.RedString("Error on accessing the .frigg working directory: %v\n", err)) + return + } + + friggdir := filepath.Join(dir, ".frigg") + + // Check if the directory already exists + if _, err := os.Stat(friggdir); err == nil { + // Directory already exists, skip creation + println(color.YellowString("frigg working directory already exists, skipping creation.")) + return + } + + // Create the directory if it doesn't exist + if err := os.Mkdir(friggdir, 0750); err != nil { + println(color.RedString("Error Creating .frigg Directory: %v\n", err)) + } +} + +func toolsDir() { + homedir, err := os.UserHomeDir() + if err != nil { + println(color.RedString("error on accessing home directory: %v\n", err)) + } + + // Setting Tools directory + friggdir = filepath.Join(homedir, vars.FriggDirName, vars.FriggTools) + + // Check if directory exists and create it if not + if _, err := os.Stat(friggdir); os.IsNotExist(err) { + println(color.YellowString("Tools directory does not exists, Creating %s\n", friggdir)) + if err = os.MkdirAll(friggdir, 0755); err != nil { + println(color.RedString("Error creating directory %s: %v\n", friggdir, err)) + } + } else if err != nil { + // Handle other potential errors during stat + println(color.RedString("Error checking directory %s: %v\n", friggdir, err)) + os.Exit(1) + } +} + +func controllerDir() { + homedir, err := os.UserHomeDir() + if err != nil { + println(color.RedString("error on accessing home directory: %v\n", err)) + } + + // Setting Tools directory + controllerDir := filepath.Join(homedir, vars.FriggDirName, vars.ControllerDir) + + // Check if directory exists and create it if not + if _, err := os.Stat(controllerDir); os.IsNotExist(err) { + println(color.YellowString("Tools directory does not exists, Creating %s\n", controllerDir)) + if err = os.MkdirAll(controllerDir, 0755); err != nil { + println(color.RedString("Error creating directory %s: %v\n", controllerDir, err)) + } + } else if err != nil { + // Handle other potential errors during stat + println(color.RedString("Error checking directory %s: %v\n", controllerDir, err)) + os.Exit(1) + } +} + +// Create creates friggs working directories .frigg and tools at the users home directory. +func Create() { + workDir() + toolsDir() + controllerDir() +} diff --git a/pkg/tmpl/helmchartsproxies/helmchartproxies.go b/internal/generate/generate.go similarity index 89% rename from pkg/tmpl/helmchartsproxies/helmchartproxies.go rename to internal/generate/generate.go index 7225041..0afee0a 100644 --- a/pkg/tmpl/helmchartsproxies/helmchartproxies.go +++ b/internal/generate/generate.go @@ -1,19 +1,43 @@ -package helmchartsproxies +package generate -// The package helmchartproxies generates various helmchartproxy yaml files to the .frigg directory -// which will be installed onto the management cluster. import ( "fmt" - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "gopkg.in/yaml.v3" "os" + "os/exec" "path/filepath" "strings" ) -type CniAutoGenerated struct { +var ( + homedir, _ = os.UserHomeDir() + friggDir = filepath.Join(homedir, vars.FriggDirName) +) + +type clusterctlconfig struct { + CLUSTERTOPOLOGY string `yaml:"CLUSTER_TOPOLOGY"` + EXPMACHINEPOOL string `yaml:"EXP_MACHINE_POOL"` +} + +type kindConfigStruct struct { + Kind string `yaml:"kind"` + APIVersion string `yaml:"apiVersion"` + Networking struct { + IPFamily string `yaml:"ipFamily"` + } `yaml:"networking"` + Nodes []struct { + Role string `yaml:"role"` + ExtraMounts []struct { + HostPath string `yaml:"hostPath"` + ContainerPath string `yaml:"containerPath"` + } `yaml:"extraMounts"` + } `yaml:"nodes"` +} + +type cniAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -33,7 +57,7 @@ type CniAutoGenerated struct { } `yaml:"spec"` } -type VaultAutoGenerated struct { +type vaultAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -62,7 +86,7 @@ type VaultAutoGenerated struct { } `yaml:"spec"` } -type ArgoCDWorkloadClustersAutoGenerated struct { +type argoCDWorkloadClustersAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -91,7 +115,7 @@ type ArgoCDWorkloadClustersAutoGenerated struct { } `yaml:"spec"` } -type ArgoEventsAutoGenerated struct { +type argoEventsAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -119,7 +143,7 @@ type ArgoEventsAutoGenerated struct { } `yaml:"spec"` } -type ArgoRolloutsAutoGenerated struct { +type argoRolloutsAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -148,7 +172,7 @@ type ArgoRolloutsAutoGenerated struct { } `yaml:"spec"` } -type ArgoWorkflowsAutoGenerated struct { +type argoWorkflowsAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -177,7 +201,7 @@ type ArgoWorkflowsAutoGenerated struct { } `yaml:"spec"` } -type ArgoMgmtAppsAutoGenerated struct { +type argoMgmtAppsAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -206,7 +230,7 @@ type ArgoMgmtAppsAutoGenerated struct { } `yaml:"spec"` } -type ArgoMgmtAutoGenerated struct { +type argoMgmtAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -235,7 +259,7 @@ type ArgoMgmtAutoGenerated struct { } `yaml:"spec"` } -type ClusterApiOperatorAutoGenerated struct { +type clusterApiOperatorAutoGenerated struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { @@ -264,9 +288,111 @@ type ClusterApiOperatorAutoGenerated struct { } `yaml:"spec"` } +// ClusterctlConfig generates clusterctl config to frigg dir. +func ClusterctlConfig() { + data := &clusterctlconfig{ + CLUSTERTOPOLOGY: "true", + EXPMACHINEPOOL: "true", + } + + // Marshal to YAML + yamlData, err := yaml.Marshal(data) + if err != nil { + println(color.RedString("error on marshaling data to yaml: %v\n", err)) + } + + newFilePath := filepath.Join(friggDir, vars.ClusterctlConfigName) + + // Write to file + err = os.WriteFile(newFilePath, yamlData, 0644) + if err != nil { + println(color.RedString("error on writing clusterctl config yaml: %v\n", err)) + } +} + +// WorkloadManifest curls the template manifest for a capd workload cluster and stores it to the frigg working dir. +func WorkloadManifest() { + outputPath := filepath.Join(friggDir, vars.WorkloadManifest) + + cmd := exec.Command("curl", "-L", "-o", outputPath, + vars.CurlWorkloadManifest, + ) + + output, err := cmd.CombinedOutput() + if err != nil { + println(color.YellowString(string(output))) + return + } +} + +// MgmtManifest curls the template manifest for a capd mgmt cluster and stores it to the frigg working dir. +func MgmtManifest() { + println(color.YellowString("Getting Management Clusters Manifest from Github")) + + outputPath := filepath.Join(friggDir, vars.MgmtManifest) + + cmd := exec.Command("curl", "-L", "-o", outputPath, + vars.CurlMgmtManifest, + ) + + output, err := cmd.CombinedOutput() + if err != nil { + println(color.YellowString(string(output))) + return + } +} + +// KindConfigGen generates a kind-config.yaml to the .frigg-working dir +func KindConfigGen() { + data := &kindConfigStruct{ + Kind: "Cluster", + APIVersion: "kind.x-k8s.io/v1alpha4", + Networking: struct { + IPFamily string `yaml:"ipFamily"` + }{IPFamily: "dual"}, + Nodes: []struct { + Role string `yaml:"role"` + ExtraMounts []struct { + HostPath string `yaml:"hostPath"` + ContainerPath string `yaml:"containerPath"` + } `yaml:"extraMounts"` + }{ + { + Role: "control-plane", + ExtraMounts: []struct { + HostPath string `yaml:"hostPath"` + ContainerPath string `yaml:"containerPath"` + }([]struct { + HostPath string + ContainerPath string + }{ + { + HostPath: "/var/run/docker.sock", + ContainerPath: "/var/run/docker.sock", + }, + }), + }, + }, + } + + // Marshal to YAML + yamlData, err := yaml.Marshal(data) + if err != nil { + println(color.RedString("error on marshaling data to yaml: %v\n", err)) + } + + newFilePath := filepath.Join(friggDir, vars.KindconfigName) + + // Write to file + err = os.WriteFile(newFilePath, yamlData, 0644) + if err != nil { + println(color.RedString("error on writing kindconfig yaml: %v\n", err)) + } +} + // Cni generates the CNI Helmchartproxy YAML file to the .frigg directory func Cni() { - data := &CniAutoGenerated{ + data := &cniAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -302,12 +428,6 @@ func Cni() { // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.CniName) // Write to file @@ -320,7 +440,7 @@ func Cni() { // Vault generates the Vault Helmchartproxy YAML file to the .frigg directory func Vault() { - data := VaultAutoGenerated{ + data := &vaultAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -410,12 +530,6 @@ ui: // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.VaultName) // Write to file @@ -427,7 +541,7 @@ ui: // ArgoCDWorkloadClusters generates the ArgoCD Helmchartproxy YAML file to the .frigg directory func ArgoCDWorkloadClusters() { - data := ArgoCDWorkloadClustersAutoGenerated{ + data := &argoCDWorkloadClustersAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -515,12 +629,6 @@ func ArgoCDWorkloadClusters() { // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoCDWorkload) // Write to file @@ -533,7 +641,7 @@ func ArgoCDWorkloadClusters() { // ArgoWorkflows generates the ArgoCD Workflows Helmchartproxy YAML file to the .frigg directory func ArgoWorkflows() { - data := ArgoWorkflowsAutoGenerated{ + data := &argoWorkflowsAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -677,12 +785,6 @@ server: // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoWorkflowsMgmt) // Write to file @@ -695,7 +797,7 @@ server: // ArgoRollouts generates the ArgoCD Rollouts Helmchartproxy YAML file to the .frigg directory func ArgoRollouts() { - data := ArgoRolloutsAutoGenerated{ + data := &argoRolloutsAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -780,12 +882,6 @@ func ArgoRollouts() { // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoRolloutsMgmt) // Write to file @@ -798,7 +894,7 @@ func ArgoRollouts() { // ArgoEvents generates the ArgoCD Events Helmchartproxy YAML file to the .frigg directory func ArgoEvents() { - data := ArgoEventsAutoGenerated{ + data := &argoEventsAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -871,12 +967,6 @@ func ArgoEvents() { // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoEventsMgmt) // Write to file @@ -897,7 +987,7 @@ func MgmtArgoApps() { url := "git@github.com:" + username + "/" + vars.FriggMgmtGitOpsName - data := ArgoMgmtAppsAutoGenerated{ + data := &argoMgmtAppsAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -990,12 +1080,6 @@ func MgmtArgoApps() { // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoCDAppsMgmt) // Write to file @@ -1008,12 +1092,6 @@ func MgmtArgoApps() { // MgmtArgoCD generates the ArgoCD Apps Helmchartproxy YAML file to the .frigg directory func MgmtArgoCD() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ArgoCDMgmt) sshprivatekeyPath := filepath.Join(friggDir, vars.PrivatekeyName) @@ -1026,12 +1104,15 @@ func MgmtArgoCD() { url := "git@github.com:" + username + "/" + vars.FriggMgmtGitOpsName sshprivatekey, err := os.ReadFile(sshprivatekeyPath) + if err != nil { + println(color.RedString("error reading ssh private key: %v\n", err)) + } // Remove trailing newline character (if present) trimmedKey := strings.TrimSuffix(string(sshprivatekey), "\n") // Replace newlines with 8 spaces of indentation formattedKey := strings.ReplaceAll(trimmedKey, "\n", "\n ") - data := ArgoMgmtAutoGenerated{ + data := &argoMgmtAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -1136,7 +1217,7 @@ configs: // MgmtClusterApiOperator generates the ClusterAPI Operator Helmchartproxy YAML file to the .frigg directory func MgmtClusterApiOperator() { - data := ClusterApiOperatorAutoGenerated{ + data := &clusterApiOperatorAutoGenerated{ APIVersion: "addons.cluster.x-k8s.io/v1alpha1", Kind: "HelmChartProxy", Metadata: struct { @@ -1240,12 +1321,6 @@ manager.featureGates: // Prepend "---" to the YAML data yamlData = append([]byte("---\n"), yamlData...) - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) newfilePath := filepath.Join(friggDir, vars.ClusterApiHelmChartProxyName) // Write to file diff --git a/internal/helmchart/helmchart.go b/internal/helmchart/helmchart.go new file mode 100644 index 0000000..e5fecf0 --- /dev/null +++ b/internal/helmchart/helmchart.go @@ -0,0 +1,199 @@ +package helmchart + +import ( + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" + "github.com/fatih/color" + "os" + "os/exec" + "path/filepath" +) + +var ( + homedir, _ = os.UserHomeDir() + friggDir = filepath.Join(homedir, vars.FriggDirName) + friggToolsDir = filepath.Join(friggDir, vars.FriggTools) + kubectl = "kubectl_" + consts.KubectlVersion + kubectlPath = filepath.Join(friggToolsDir, kubectl) +) + +// argoCdTargetCluster installs the ArgoCD HelmChartProxy to the mgmt cluster used by the workload clusters +func argoCdTargetCluster(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoCDWorkload) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl apply for argocd workload helmchartproxy: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// cniBootstrap installs the Cni Helmchartproxy to the bootstrap cluster +func cniBootstrap(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.CniName) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// cniMgmt installs the Cni Helmchartproxy to the mgmt cluster +func cniMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.CniName) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// argoAppsMgmt isntalls the ArgoCD Apps Helmchartproxy to the mgmt cluster +func argoAppsMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoCDAppsMgmt) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// argoEventsMgmt installs the ArgoCD Events Helmchartproxy to the mgmt cluster +func argoEventsMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoEventsMgmt) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// argoRolloutsMgmt installs the ArgoCD Rollouts Helmchartproxy to the mgmt cluster +func argoRolloutsMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoRolloutsMgmt) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// argoWorkflowsMgmt installs the ArgoCD Workflows Helmchartproxy to the mgmt cluster +func argoWorkflowsMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoWorkflowsMgmt) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// argoCDMgmt installs the ArgoCD Helmchartproxy to the mgmt cluster +func argoCDMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.ArgoCDMgmt) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// vaultMgmt installs the Vault Helmchartproxy to the mgmt cluster +func vaultMgmt(kubeconfigFlagPath string) { + helmchartManifests := filepath.Join(friggDir, vars.VaultName) + + cmd := exec.Command(kubectlPath, "--kubeconfig", + kubeconfigFlagPath, "apply", + "-f", helmchartManifests, + ) + + // Capture the output of the command + output, err := cmd.CombinedOutput() + if err != nil { + println(color.RedString("Error running kubectl: %v\n", err)) + println(color.YellowString(string(output))) + return + } +} + +// InstallOnBootstrap combined installation on bootstrap cluster +func InstallOnBootstrap() { + kubeconfigFlagPath := filepath.Join(friggDir, vars.BootstrapkubeconfigName) + cniBootstrap(kubeconfigFlagPath) +} + +// InstallOnMgmt combined installation on mgmt cluster +func InstallOnMgmt() { + kubeconfigFlagPath := filepath.Join(friggDir, vars.ManagementKubeconfigName) + argoCdTargetCluster(kubeconfigFlagPath) + cniMgmt(kubeconfigFlagPath) + argoAppsMgmt(kubeconfigFlagPath) + argoEventsMgmt(kubeconfigFlagPath) + argoRolloutsMgmt(kubeconfigFlagPath) + argoWorkflowsMgmt(kubeconfigFlagPath) + argoCDMgmt(kubeconfigFlagPath) + vaultMgmt(kubeconfigFlagPath) +} diff --git a/pkg/kubeconfig/kubeconfig.go b/internal/kubeconfig/kubeconfig.go similarity index 98% rename from pkg/kubeconfig/kubeconfig.go rename to internal/kubeconfig/kubeconfig.go index ab346d4..0c12405 100644 --- a/pkg/kubeconfig/kubeconfig.go +++ b/internal/kubeconfig/kubeconfig.go @@ -2,8 +2,8 @@ package kubeconfig import ( "fmt" - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "os" "os/exec" diff --git a/pkg/postbootstrap/postbootstrap.go b/internal/postbootstrap/postbootstrap.go similarity index 100% rename from pkg/postbootstrap/postbootstrap.go rename to internal/postbootstrap/postbootstrap.go diff --git a/cmd/frigg/prepare/download/download.go b/internal/prepare/prepare.go similarity index 57% rename from cmd/frigg/prepare/download/download.go rename to internal/prepare/prepare.go index 1d42c2f..71c9733 100644 --- a/cmd/frigg/prepare/download/download.go +++ b/internal/prepare/prepare.go @@ -1,8 +1,8 @@ -package download +package prepare import ( - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/toolsdir" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "github.com/hashicorp/go-getter" "os" @@ -10,35 +10,13 @@ import ( "runtime" ) -func init() { - toolsdir.FriggWorkingDir() -} +var ( + homedir, _ = os.UserHomeDir() + friggDir = filepath.Join(homedir, vars.FriggDirName) + friggToolsDir = filepath.Join(friggDir, vars.FriggTools) +) -var friggDir string - -//func FriggWorkingDir() { -// homedir, err := os.UserHomeDir() -// if err != nil { -// println(color.RedString("error on accessing home directory: %v\n", err)) -// } -// -// // Setting Tools directory -// friggDir = filepath.Join(homedir, vars.FriggDirName, vars.FriggTools) -// -// // Check if directory exists and create it if not -// if _, err := os.Stat(friggDir); os.IsNotExist(err) { -// println(color.YellowString("Tools directory does not exists, Creating %s\n", friggDir)) -// if err = os.MkdirAll(friggDir, 0755); err != nil { -// println(color.RedString("Error creating directory %s: %v\n", friggDir, err)) -// } -// } else if err != nil { -// // Handle other potential errors during stat -// println(color.RedString("Error checking directory %s: %v\n", friggDir, err)) -// os.Exit(1) -// } -//} - -func GithubCli() { +func githubCli() { var operatingSystem string if runtime.GOOS == "darwin" { operatingSystem = "macOS" @@ -46,19 +24,19 @@ func GithubCli() { operatingSystem = runtime.GOOS } - if _, err := os.Stat(filepath.Join(toolsdir.FriggDir, "gh_"+consts.GithubCliVersion)); err != nil { + if _, err := os.Stat(filepath.Join(friggToolsDir, "gh_"+consts.GithubCliVersion)); err != nil { if os.IsNotExist(err) { println(color.YellowString("GH CLI does not exist inside tools dir. Downloading now..")) src := "https://github.com/cli/cli/releases/download/v" + consts.GithubCliVersion + "/gh_" + consts.GithubCliVersion + "_" + operatingSystem + "_" + runtime.GOARCH + ".zip" - dst := filepath.Join(toolsdir.FriggDir, "/gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+".zip") + dst := filepath.Join(friggToolsDir, "/gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+".zip") if err = getter.GetAny(dst, src); err != nil { println(color.RedString("error on downloading github cli: %v\n", err)) } - ghSrcPath := filepath.Join(toolsdir.FriggDir, "gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+".zip/"+"gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+"/bin/gh") - ghDstPath := filepath.Join(toolsdir.FriggDir, "gh_"+consts.GithubCliVersion) + ghSrcPath := filepath.Join(friggToolsDir, "gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+".zip/"+"gh_"+consts.GithubCliVersion+"_"+operatingSystem+"_"+runtime.GOARCH+"/bin/gh") + ghDstPath := filepath.Join(friggToolsDir, "gh_"+consts.GithubCliVersion) if err = os.Link(ghSrcPath, ghDstPath); err != nil { println(color.RedString("error on linking gh cli: %v\n", err)) @@ -71,20 +49,20 @@ func GithubCli() { } } -func Kubectl() { - if _, err := os.Stat(filepath.Join(toolsdir.FriggDir, "kubectl_"+consts.KubectlVersion)); err != nil { +func kubectl() { + if _, err := os.Stat(filepath.Join(friggToolsDir, "kubectl_"+consts.KubectlVersion)); err != nil { if os.IsNotExist(err) { println(color.YellowString("Kubectl CLI does not exist inside tools dir. Downloading now..")) src := "https://dl.k8s.io/release/v" + consts.KubectlVersion + "/bin/" + runtime.GOOS + "/" + runtime.GOARCH + "/kubectl" - dst := filepath.Join(toolsdir.FriggDir, consts.KubectlVersion+"/bin/"+runtime.GOOS+"/"+runtime.GOARCH) + dst := filepath.Join(friggToolsDir, consts.KubectlVersion+"/bin/"+runtime.GOOS+"/"+runtime.GOARCH) if err := getter.GetAny(dst, src); err != nil { println(color.RedString("error on downloading kubectl cli: %v\n", err)) } - kubectlSrcPath := filepath.Join(toolsdir.FriggDir, consts.KubectlVersion+"/bin/"+runtime.GOOS+"/"+runtime.GOARCH+"/kubectl") - kubectlDstPath := filepath.Join(toolsdir.FriggDir, "kubectl_"+consts.KubectlVersion) + kubectlSrcPath := filepath.Join(friggToolsDir, consts.KubectlVersion+"/bin/"+runtime.GOOS+"/"+runtime.GOARCH+"/kubectl") + kubectlDstPath := filepath.Join(friggToolsDir, "kubectl_"+consts.KubectlVersion) if err = os.Link(kubectlSrcPath, kubectlDstPath); err != nil { println(color.RedString("error on linking kubectl: %v\n", err)) @@ -101,20 +79,20 @@ func Kubectl() { } } -func Clusterctl() { - if _, err := os.Stat(filepath.Join(toolsdir.FriggDir, "clusterctl_"+consts.ClusterctlVersion)); err != nil { +func clusterctl() { + if _, err := os.Stat(filepath.Join(friggToolsDir, "clusterctl_"+consts.ClusterctlVersion)); err != nil { if os.IsNotExist(err) { println(color.YellowString("Clusterctl CLI does not exist inside tools dir. Downloading now..")) src := "https://github.com/kubernetes-sigs/cluster-api/releases/download/v" + consts.ClusterctlVersion + "/clusterctl-" + runtime.GOOS + "-" + runtime.GOARCH - dst := filepath.Join(toolsdir.FriggDir, "clusterctl-directory") + dst := filepath.Join(friggToolsDir, "clusterctl-directory") if err := getter.GetAny(dst, src); err != nil { println(color.RedString("error on downloading clusterctl cli: %v\n", err)) } - clusterctlSrcPath := filepath.Join(toolsdir.FriggDir, "clusterctl-directory/"+"clusterctl-"+runtime.GOOS+"-"+runtime.GOARCH) - clusterctlDstPath := filepath.Join(toolsdir.FriggDir, "clusterctl_"+consts.ClusterctlVersion) + clusterctlSrcPath := filepath.Join(friggToolsDir, "clusterctl-directory/"+"clusterctl-"+runtime.GOOS+"-"+runtime.GOARCH) + clusterctlDstPath := filepath.Join(friggToolsDir, "clusterctl_"+consts.ClusterctlVersion) if err = os.Link(clusterctlSrcPath, clusterctlDstPath); err != nil { println(color.RedString("error on linking clusterctl: %v\n", err)) @@ -131,20 +109,20 @@ func Clusterctl() { } } -func K9s() { - if _, err := os.Stat(filepath.Join(toolsdir.FriggDir, "k9s")); err != nil { +func k9s() { + if _, err := os.Stat(filepath.Join(friggToolsDir, "k9s")); err != nil { if os.IsNotExist(err) { println(color.YellowString("K9s CLI does not exist inside tools dir. Downloading now..")) src := "https://github.com/derailed/k9s/releases/download/v" + consts.K9sVersion + "/k9s_" + runtime.GOOS + "_" + runtime.GOARCH + ".tar.gz" - dst := filepath.Join(toolsdir.FriggDir, "k9s-"+consts.K9sVersion) + dst := filepath.Join(friggToolsDir, "k9s_"+consts.K9sVersion) if err := getter.GetAny(dst, src); err != nil { println(color.RedString("error on downloading k9s cli: %v\n", err)) } - k9sSrcPath := filepath.Join(toolsdir.FriggDir, "k9s-"+consts.K9sVersion+"/k9s") - k9sDstPath := filepath.Join(toolsdir.FriggDir, "k9s_"+consts.K9sVersion) + k9sSrcPath := filepath.Join(friggToolsDir, "k9s_"+consts.K9sVersion+"/k9s") + k9sDstPath := filepath.Join(friggToolsDir, "k9s_"+consts.K9sVersion) if err := os.Link(k9sSrcPath, k9sDstPath); err != nil { println(color.RedString("error on linking k9s: %v\n", err)) @@ -160,3 +138,11 @@ func K9s() { println(color.YellowString("K9s CLI already exists. Continuing..")) } } + +// Tools downloads the cli tools needed for frigg to operate correctly. +func Tools() { + githubCli() + kubectl() + clusterctl() + k9s() +} diff --git a/cmd/frigg/bootstrap/commons/reporender/reporender.go b/internal/reporender/reporender.go similarity index 80% rename from cmd/frigg/bootstrap/commons/reporender/reporender.go rename to internal/reporender/reporender.go index 50dc1cc..0ba4e7d 100644 --- a/cmd/frigg/bootstrap/commons/reporender/reporender.go +++ b/internal/reporender/reporender.go @@ -2,9 +2,9 @@ package reporender import ( "fmt" - "github.com/PatrickLaabs/frigg/pkg/consts" - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/PatrickLaabs/frigg/pkg/wait" + "github.com/PatrickLaabs/frigg/internal/consts" + "github.com/PatrickLaabs/frigg/internal/vars" + "github.com/PatrickLaabs/frigg/internal/wait" "github.com/fatih/color" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing/object" @@ -15,7 +15,16 @@ import ( "time" ) -var gh = "gh_" + consts.GithubCliVersion +var ( + gh = "gh_" + consts.GithubCliVersion + homedir, _ = os.UserHomeDir() + friggDir = filepath.Join(homedir, vars.FriggDirName) + friggToolsDir = filepath.Join(friggDir, vars.FriggTools) + ghCliPath = filepath.Join(friggToolsDir, gh) + sshpublickeyPath = filepath.Join(friggDir, vars.PublickeyName) + localRepo = filepath.Join(friggDir, vars.RepoName) + localRepoStoragePath = filepath.Join(friggDir, vars.RepoName) +) // FullStage combines everything, that is needed, to fully prepare the gitops repo for the end-user func FullStage() { @@ -31,14 +40,6 @@ func FullStage() { println(color.RedString("Error retrieving mail: %v\n", err)) } - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - friggDir := filepath.Join(homedir, vars.FriggDirName) - - localRepoStoragePath := filepath.Join(friggDir, vars.RepoName) - githubLogin() gitCreateFromTemplate() wait.Wait(5 * time.Second) @@ -53,7 +54,6 @@ func FullStage() { } // retrieveGithubUserEnv retrieves and reads the os.Env variables needed for further preperation -// GITHUB_USER func retrieveGithubUserEnv() (string, error) { // Get GITHUB_USERNAME environment var var username string @@ -69,7 +69,6 @@ func retrieveGithubUserEnv() (string, error) { } // retrieveGithubUserMailEnv retrieves and reads the os.Env variables needed for further preperation -// GITHUB_MAIL func retrieveGithubUserMailEnv() (string, error) { var usermail string @@ -83,15 +82,10 @@ func retrieveGithubUserMailEnv() (string, error) { return usermail, nil } -// githubLogin logs in to github via github cli using the provided github token +// githubLogin logs in to GitHub via GitHub cli using the provided GitHub token func githubLogin() { println(color.GreenString("Loggin in to Github with your provided Github Token")) - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - ghCliPath := filepath.Join(friggToolsDir, gh) - cmd := exec.Command(ghCliPath, "auth", "login") fmt.Println(cmd) } @@ -107,11 +101,6 @@ func gitCreateFromTemplate() { targetRepoName := username + "/" + vars.RepoName - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - ghCliPath := filepath.Join(friggToolsDir, gh) - cmd := exec.Command(ghCliPath, "repo", "create", targetRepoName, "--private", vars.FriggMgmtTemplateName, @@ -125,17 +114,10 @@ func gitCreateFromTemplate() { println(color.GreenString(string(output))) } -// addSshPublickey adds the new generated public to the github repo +// addSshPublickey adds the new generated public to the GitHub repo func addSshPublickey() { println(color.GreenString("Adding generated public key to the new gitops repo")) - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - friggToolsDir := filepath.Join(friggDir, vars.FriggTools) - ghCliPath := filepath.Join(friggToolsDir, gh) - sshpublickeyPath := filepath.Join(friggDir, vars.PublickeyName) - localRepo := filepath.Join(friggDir, vars.RepoName) - // Change working directory using os.Chdir if err := os.Chdir(localRepo); err != nil { println(color.RedString("Error changing directory: ", err)) @@ -155,7 +137,7 @@ func addSshPublickey() { println(color.GreenString(string(output))) } -// gitClone clones the gitops template repo from github, to the local working directory +// gitClone clones the gitops template repo from GitHub, to the local working directory func gitClone() { println(color.GreenString("Cloning the new repository to the local working directory")) @@ -164,12 +146,8 @@ func gitClone() { println(color.RedString("Error retrieving github username: %v\n", err)) } - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - // git@github.com:PatrickLaabs/argo-hub.git repoUrl := "git@github.com:" + username + "/" + vars.RepoName + ".git" - localRepoStoragePath := filepath.Join(friggDir, vars.RepoName) _, err = git.PlainClone(localRepoStoragePath, false, &git.CloneOptions{ URL: repoUrl, @@ -247,9 +225,6 @@ func gitCommit() { println(color.RedString("Error retrieving github user email: %v\n", err)) } - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - localRepoStoragePath := filepath.Join(friggDir, vars.RepoName) // Opens an already existing repository. @@ -299,15 +274,10 @@ func gitCommit() { fmt.Println(obj) } -// gitPush pushes the changes to the users github repository +// gitPush pushes the changes to the users GitHub repository func gitPush() { println(color.GreenString("Pushing local changes to the remote repo")) - homedir, _ := os.UserHomeDir() - friggDir := filepath.Join(homedir, vars.FriggDirName) - - localRepoStoragePath := filepath.Join(friggDir, vars.RepoName) - // Opens an already existing repository. r, err := git.PlainOpen(localRepoStoragePath) if err != nil { diff --git a/pkg/sshkey/sshkey.go b/internal/sshkey/sshkey.go similarity index 98% rename from pkg/sshkey/sshkey.go rename to internal/sshkey/sshkey.go index 9ef97c8..99a4f55 100644 --- a/pkg/sshkey/sshkey.go +++ b/internal/sshkey/sshkey.go @@ -5,7 +5,7 @@ import ( "crypto/rsa" "crypto/x509" "encoding/pem" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" "golang.org/x/crypto/ssh" "os" diff --git a/pkg/statuscheck/statuscheck.go b/internal/statuscheck/statuscheck.go similarity index 99% rename from pkg/statuscheck/statuscheck.go rename to internal/statuscheck/statuscheck.go index 27e1977..b4a20c0 100644 --- a/pkg/statuscheck/statuscheck.go +++ b/internal/statuscheck/statuscheck.go @@ -3,7 +3,7 @@ package statuscheck import ( "context" "fmt" - "github.com/PatrickLaabs/frigg/pkg/vars" + "github.com/PatrickLaabs/frigg/internal/vars" "github.com/fatih/color" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" diff --git a/pkg/vars/vars.go b/internal/vars/vars.go similarity index 100% rename from pkg/vars/vars.go rename to internal/vars/vars.go diff --git a/pkg/wait/wait.go b/internal/wait/wait.go similarity index 100% rename from pkg/wait/wait.go rename to internal/wait/wait.go diff --git a/pkg/wait/wait_test.go b/internal/wait/wait_test.go similarity index 95% rename from pkg/wait/wait_test.go rename to internal/wait/wait_test.go index 140fc8a..49c77dc 100644 --- a/pkg/wait/wait_test.go +++ b/internal/wait/wait_test.go @@ -1,7 +1,7 @@ package wait_test import ( - "github.com/PatrickLaabs/frigg/pkg/wait" + "github.com/PatrickLaabs/frigg/internal/wait" "testing" "time" ) diff --git a/pkg/cluster/internal/providers/docker/provider.go b/pkg/cluster/internal/providers/docker/provider.go index 196380c..dc141ad 100644 --- a/pkg/cluster/internal/providers/docker/provider.go +++ b/pkg/cluster/internal/providers/docker/provider.go @@ -245,7 +245,7 @@ func (p *provider) CollectLogs(dir string, nodes []nodes.Node) error { defer func(f *os.File) { err := f.Close() if err != nil { - + return } }(f) return cmd.SetStdout(f).SetStderr(f).Run() @@ -281,7 +281,7 @@ func (p *provider) CollectLogs(dir string, nodes []nodes.Node) error { defer func(f *os.File) { err := f.Close() if err != nil { - + return } }(f) return node.SerialLogs(f) diff --git a/pkg/controllerdir/controllerdir.go b/pkg/controllerdir/controllerdir.go deleted file mode 100644 index fb1d9e5..0000000 --- a/pkg/controllerdir/controllerdir.go +++ /dev/null @@ -1,32 +0,0 @@ -package controllerdir - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "path/filepath" -) - -var ControllerDir string - -func FriggControllerDir() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - // Setting Tools directory - ControllerDir = filepath.Join(homedir, vars.FriggDirName, vars.ControllerDir) - - // Check if directory exists and create it if not - if _, err := os.Stat(ControllerDir); os.IsNotExist(err) { - println(color.YellowString("Tools directory does not exists, Creating %s\n", ControllerDir)) - if err = os.MkdirAll(ControllerDir, 0755); err != nil { - println(color.RedString("Error creating directory %s: %v\n", ControllerDir, err)) - } - } else if err != nil { - // Handle other potential errors during stat - println(color.RedString("Error checking directory %s: %v\n", ControllerDir, err)) - os.Exit(1) - } -} diff --git a/pkg/tmpl/clusterctlconfig/clusterctlconfig.go b/pkg/tmpl/clusterctlconfig/clusterctlconfig.go deleted file mode 100644 index d9136b0..0000000 --- a/pkg/tmpl/clusterctlconfig/clusterctlconfig.go +++ /dev/null @@ -1,42 +0,0 @@ -package clusterctlconfig - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "gopkg.in/yaml.v3" - "os" - "path/filepath" -) - -type AutoGenerated struct { - CLUSTERTOPOLOGY string `yaml:"CLUSTER_TOPOLOGY"` - EXPMACHINEPOOL string `yaml:"EXP_MACHINE_POOL"` -} - -// ClusterctlConfigGen generates clusterctl config to frigg dir -func ClusterctlConfigGen() { - data := &AutoGenerated{ - CLUSTERTOPOLOGY: "true", - EXPMACHINEPOOL: "true", - } - - // Marshal to YAML - yamlData, err := yaml.Marshal(data) - if err != nil { - println(color.RedString("error on marshaling data to yaml: %v\n", err)) - } - - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - newFilePath := filepath.Join(friggDir, vars.ClusterctlConfigName) - - // Write to file - err = os.WriteFile(newFilePath, yamlData, 0644) - if err != nil { - println(color.RedString("error on writing clusterctl config yaml: %v\n", err)) - } -} diff --git a/pkg/tmpl/kindconfig/kindconfig.go b/pkg/tmpl/kindconfig/kindconfig.go deleted file mode 100644 index 12e14f9..0000000 --- a/pkg/tmpl/kindconfig/kindconfig.go +++ /dev/null @@ -1,80 +0,0 @@ -package kindconfig - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "gopkg.in/yaml.v3" - "os" - "path/filepath" -) - -type AutoGenerated struct { - Kind string `yaml:"kind"` - APIVersion string `yaml:"apiVersion"` - Networking struct { - IPFamily string `yaml:"ipFamily"` - } `yaml:"networking"` - Nodes []struct { - Role string `yaml:"role"` - ExtraMounts []struct { - HostPath string `yaml:"hostPath"` - ContainerPath string `yaml:"containerPath"` - } `yaml:"extraMounts"` - } `yaml:"nodes"` -} - -// KindConfigGen generates a kind-config.yaml to the .frigg-working dir -func KindConfigGen() { - println(color.YellowString("Generating kind-config")) - - data := &AutoGenerated{ - Kind: "Cluster", - APIVersion: "kind.x-k8s.io/v1alpha4", - Networking: struct { - IPFamily string `yaml:"ipFamily"` - }{IPFamily: "dual"}, - Nodes: []struct { - Role string `yaml:"role"` - ExtraMounts []struct { - HostPath string `yaml:"hostPath"` - ContainerPath string `yaml:"containerPath"` - } `yaml:"extraMounts"` - }{ - { - Role: "control-plane", - ExtraMounts: []struct { - HostPath string `yaml:"hostPath"` - ContainerPath string `yaml:"containerPath"` - }([]struct { - HostPath string - ContainerPath string - }{ - { - HostPath: "/var/run/docker.sock", - ContainerPath: "/var/run/docker.sock", - }, - }), - }, - }, - } - - // Marshal to YAML - yamlData, err := yaml.Marshal(data) - if err != nil { - println(color.RedString("error on marshaling data to yaml: %v\n", err)) - } - - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - newFilePath := filepath.Join(friggDir, vars.KindconfigName) - - // Write to file - err = os.WriteFile(newFilePath, yamlData, 0644) - if err != nil { - println(color.RedString("error on writing kindconfig yaml: %v\n", err)) - } -} diff --git a/pkg/tmpl/mgmtmanifestgen/mgmtmanifestgen.go b/pkg/tmpl/mgmtmanifestgen/mgmtmanifestgen.go deleted file mode 100644 index cd100bd..0000000 --- a/pkg/tmpl/mgmtmanifestgen/mgmtmanifestgen.go +++ /dev/null @@ -1,32 +0,0 @@ -package mgmtmanifestgen - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -func Gen() { - println(color.YellowString("Getting Management Clusters Manifest from Github")) - - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - outputPath := filepath.Join(friggDir, vars.MgmtManifest) - - cmd := exec.Command("curl", "-L", "-o", outputPath, - vars.CurlMgmtManifest, - ) - - output, err := cmd.CombinedOutput() - if err != nil { - println(color.YellowString(string(output))) - return - } - println(color.GreenString("Successfully written Mgmt Kubernets Manifest")) -} diff --git a/pkg/tmpl/workloadmanifestgen/workloadmanifestgen.go b/pkg/tmpl/workloadmanifestgen/workloadmanifestgen.go deleted file mode 100644 index cff9944..0000000 --- a/pkg/tmpl/workloadmanifestgen/workloadmanifestgen.go +++ /dev/null @@ -1,30 +0,0 @@ -package workloadmanifestgen - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "os/exec" - "path/filepath" -) - -func Gen() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - friggDir := filepath.Join(homedir, vars.FriggDirName) - outputPath := filepath.Join(friggDir, vars.WorkloadManifest) - - cmd := exec.Command("curl", "-L", "-o", outputPath, - vars.CurlWorkloadManifest, - ) - - output, err := cmd.CombinedOutput() - if err != nil { - println(color.YellowString(string(output))) - return - } - println(color.GreenString("Successfully written Workload Cluster Kubernets Manifest")) -} diff --git a/pkg/toolsdir/toolsdir.go b/pkg/toolsdir/toolsdir.go deleted file mode 100644 index 4bf2449..0000000 --- a/pkg/toolsdir/toolsdir.go +++ /dev/null @@ -1,32 +0,0 @@ -package toolsdir - -import ( - "github.com/PatrickLaabs/frigg/pkg/vars" - "github.com/fatih/color" - "os" - "path/filepath" -) - -var FriggDir string - -func FriggWorkingDir() { - homedir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("error on accessing home directory: %v\n", err)) - } - - // Setting Tools directory - FriggDir = filepath.Join(homedir, vars.FriggDirName, vars.FriggTools) - - // Check if directory exists and create it if not - if _, err := os.Stat(FriggDir); os.IsNotExist(err) { - println(color.YellowString("Tools directory does not exists, Creating %s\n", FriggDir)) - if err = os.MkdirAll(FriggDir, 0755); err != nil { - println(color.RedString("Error creating directory %s: %v\n", FriggDir, err)) - } - } else if err != nil { - // Handle other potential errors during stat - println(color.RedString("Error checking directory %s: %v\n", FriggDir, err)) - os.Exit(1) - } -} diff --git a/pkg/workdir/workdir.go b/pkg/workdir/workdir.go deleted file mode 100644 index 2bf21c3..0000000 --- a/pkg/workdir/workdir.go +++ /dev/null @@ -1,30 +0,0 @@ -package workdir - -import ( - "github.com/fatih/color" - "os" - "path/filepath" -) - -func CreateDir() { - println(color.YellowString("Creating Working directory")) - dir, err := os.UserHomeDir() - if err != nil { - println(color.RedString("Error on accessing the .frigg working directory: %v\n", err)) - return - } - - friggDir := filepath.Join(dir, ".frigg") - - // Check if the directory already exists - if _, err := os.Stat(friggDir); err == nil { - // Directory already exists, skip creation - println(color.YellowString("frigg working directory already exists, skipping creation.")) - return - } - - // Create the directory if it doesn't exist - if err := os.Mkdir(friggDir, 0750); err != nil { - println(color.RedString("Error Creating .frigg Directory: %v\n", err)) - } -}