Skip to content

Commit

Permalink
Add harbor app
Browse files Browse the repository at this point in the history
Signed-off-by: Mariia Kotliarevskaia <[email protected]>
  • Loading branch information
Jasstkn committed Mar 30, 2023
1 parent 7eeacb3 commit 87e2800
Show file tree
Hide file tree
Showing 3 changed files with 211 additions and 46 deletions.
91 changes: 46 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -617,70 +617,71 @@ A CLI or "tool" is a command line tool that you run directly on your own worksta

| TOOL | DESCRIPTION |
|-------------------------|---------------------------------------------------------------------|
| docker-registry-ingress | Install registry ingress with TLS |
| inlets-operator | Install inlets-operator |
| kuma | Install Kuma |
| kube-state-metrics | Install kube-state-metrics |
| cert-manager | Install cert-manager |
| docker-registry | Install a Docker registry |
| gitlab | Install GitLab |
| rabbitmq | Install rabbitmq |
| kanister | Install kanister for application-level data management |
| linkerd | Install linkerd |
| redis | Install redis |
| gitlab | Install GitLab |
| falco | Install Falco |
| inlets-operator | Install inlets-operator |
| loki | Install Loki for monitoring and tracing |
| jenkins | Install jenkins |
| opa-gatekeeper | Install Open Policy Agent (OPA) Gatekeeper |
| cassandra | Install cassandra |
| registry-creds | Install registry-creds |
| qemu-static | Install qemu-user-static |
| metrics-server | Install metrics-server |
| postgresql | Install postgresql |
| chart | Install the specified helm chart |
| kafka-connector | Install kafka-connector for OpenFaaS |
| kubernetes-dashboard | Install kubernetes-dashboard |
| ingress-nginx | Install ingress-nginx |
| jenkins | Install jenkins |
| nginx-inc | Install nginx-inc for OpenFaaS |
| metallb-arp | Install MetalLB in L2 (ARP) mode |
| loki | Install Loki for monitoring and tracing |
| nfs-provisioner | Install nfs subdir external provisioner |
| mqtt-connector | Install mqtt-connector for OpenFaaS |
| kanister | Install kanister for application-level data management |
| cert-manager | Install cert-manager |
| openfaas-ingress | Install openfaas ingress with TLS |
| chart | Install the specified helm chart |
| cron-connector | Install cron-connector for OpenFaaS |
| minio | Install minio |
| vault | Install vault |
| harbor | Install harbor |
| docker-registry-ingress | Install registry ingress with TLS |
| cockroachdb | Install CockroachDB |
| tekton | Install Tekton pipelines and dashboard |
| consul-connect | Install Consul Service Mesh |
| inlets-tcp-client | Install inlets PRO TCP client |
| docker-registry | Install a community maintained Docker registry chart |
| falco | Install Falco |
| prometheus | Install Prometheus for monitoring |
| qemu-static | Install qemu-user-static |
| crossplane | Install Crossplane |
| portainer | Install portainer to visualise and manage containers |
| grafana | Install grafana |
| kyverno | Install Kyverno |
| openfaas | Install openfaas |
| influxdb | Install influxdb |
| metrics-server | Install metrics-server |
| argocd | Install argocd |
| nfs-provisioner | Install nfs subdir external provisioner |
| metallb-arp | Install MetalLB in L2 (ARP) mode |
| kafka | Install Confluent Platform Kafka |
| kubernetes-dashboard | Install kubernetes-dashboard |
| OSM | Install osm |
| inlets-tcp-client | Install inlets PRO TCP client |
| cron-connector | Install cron-connector for OpenFaaS |
| kong-ingress | Install kong-ingress for OpenFaaS |
| sealed-secret | Install sealed-secrets |
| cassandra | Install cassandra |
| nginx-inc | Install nginx-inc for OpenFaaS |
| openfaas-loki | Install Loki-OpenFaaS and Configure Loki logs provider for OpenFaaS |
| redis | Install redis |
| OSM | Install osm |
| waypoint | Install Waypoint |
| opa-gatekeeper | Install Open Policy Agent (OPA) Gatekeeper |
| gitea | Install gitea |
| mongodb | Install mongodb |
| grafana | Install grafana |
| mqtt-connector | Install mqtt-connector for OpenFaaS |
| nats-connector | Install OpenFaaS connector for NATS |
| traefik2 | Install traefik2 |
| kube-image-prefetch | Install kube-image-prefetch |
| consul-connect | Install Consul Service Mesh |
| argocd | Install argocd |
| prometheus | Install Prometheus for monitoring |
| kuma | Install Kuma |
| kube-state-metrics | Install kube-state-metrics |
| istio | Install istio |
| crossplane | Install Crossplane |
| cockroachdb | Install CockroachDB |
| openfaas-loki | Install Loki-OpenFaaS and Configure Loki logs provider for OpenFaaS |
| portainer | Install portainer to visualise and manage containers |
| tekton | Install Tekton pipelines and dashboard |
| traefik2 | Install traefik2 |
| kafka-connector | Install kafka-connector for OpenFaaS |
| gitea | Install gitea |
| influxdb | Install influxdb |
| nats-connector | Install OpenFaaS connector for NATS |
| kyverno | Install Kyverno |
| vault | Install Vault |
| postgresql | Install postgresql |
| minio | Install minio |

There are 56 apps that you can install on your cluster.
There are 57 apps that you can install on your cluster.

> Note to contributors, run `arkade install --print-table` to generate this list
### Catalog of CLIs

| TOOL | DESCRIPTION |
| TOOL | DESCRIPTION |
|------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| [argocd](https://github.com/argoproj/argo-cd) | Declarative, GitOps continuous delivery tool for Kubernetes. |
| [argocd-autopilot](https://github.com/argoproj-labs/argocd-autopilot) | An opinionated way of installing Argo-CD and managing GitOps repositories. |
Expand Down
162 changes: 162 additions & 0 deletions cmd/apps/harbor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
// Copyright (c) arkade author(s) 2022. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

package apps

import (
"fmt"

"github.com/spf13/cobra"

"github.com/alexellis/arkade/pkg"
"github.com/alexellis/arkade/pkg/apps"
"github.com/alexellis/arkade/pkg/config"
"github.com/alexellis/arkade/pkg/types"
)

func MakeInstallHarbor() *cobra.Command {
var harbor = &cobra.Command{
Use: "harbor",
Short: "Install harbor",
Long: `Install harbor`,
Example: ` arkade install harbor
# with ingress and custom domain
arkade install harbor --ingress=true --domain=example.com`,
SilenceUsage: true,
}

harbor.Flags().StringP("namespace", "n", "harbor", "The namespace to install the chart")
harbor.Flags().Bool("update-repo", true, "Update the helm repo")
harbor.Flags().Bool("ingress", false, "Enable ingress")
harbor.Flags().Bool("trivy", false, "Enable trivy")
harbor.Flags().Bool("notary", false, "Enable notary")
harbor.Flags().String("domain", "", "Set ingress domain")
harbor.Flags().Bool("persistence", false, "Enable harbor server persistence")
harbor.Flags().StringArray("set", []string{}, "Use custom flags or override existing flags \n(example --set image.tag=1.11.2)")

harbor.PreRunE = func(cmd *cobra.Command, args []string) error {
_, err := cmd.Flags().GetString("namespace")
if err != nil {
return err
}

_, err = cmd.Flags().GetStringArray("set")
if err != nil {
return err
}

_, err = cmd.Flags().GetBool("update-repo")
if err != nil {
return err
}

ingressEnabled, err := cmd.Flags().GetBool("ingress")
if err != nil {
return err
}

_, err = cmd.Flags().GetBool("trivy")
if err != nil {
return err
}

_, err = cmd.Flags().GetBool("notary")
if err != nil {
return err
}

ingressDomain, err := cmd.Flags().GetString("domain")
if err != nil {
return err
}

if !ingressEnabled && ingressDomain != "" {
return fmt.Errorf("--domain option should be used only with --ingress=true")
}

_, err = cmd.Flags().GetBool("persistence")
if err != nil {
return err
}

return nil
}

harbor.RunE = func(cmd *cobra.Command, args []string) error {
kubeConfigPath, _ := cmd.Flags().GetString("kubeconfig")
if err := config.SetKubeconfig(kubeConfigPath); err != nil {
return err
}

namespace, _ := cmd.Flags().GetString("namespace")
updateRepo, _ := cmd.Flags().GetBool("update-repo")
ingressEnabled, _ := cmd.Flags().GetBool("ingress")
ingressDomain, _ := cmd.Flags().GetString("domain")
persistence, _ := cmd.Flags().GetBool("persistence")
trivyEnabled, _ := cmd.Flags().GetBool("trivy")
notaryEnabled, _ := cmd.Flags().GetBool("notary")
customFlags, _ := cmd.Flags().GetStringArray("set")

overrides := map[string]string{
"expose.type": "clusterIP",
"externalURL": "harbor",
"trivy.enabled": "false",
"notary.enabled": "false",
"persistence.enabled": "false",
"expose.tls.auto.commonName": "harbor",
"chartmuseum.enabled": "false", // disable chartmuseum per https://github.com/goharbor/harbor/discussions/15057
}

if ingressDomain != "" {
overrides["expose.ingress.hosts.core"] = fmt.Sprintf("harbor.%s", ingressDomain)
overrides["externalURL"] = fmt.Sprintf("https://harbor.%s", ingressDomain)
}

if ingressEnabled {
overrides["expose.type"] = "ingress"
}

if persistence {
overrides["persistence.enabled"] = "true"
}

if trivyEnabled {
overrides["trivy.enabled"] = "true"
}

if notaryEnabled {
overrides["notary.enabled"] = "true"
overrides["expose.ingress.hosts.notary"] = fmt.Sprintf("notary.%s", ingressDomain)
}

if err := config.MergeFlags(overrides, customFlags); err != nil {
return err
}

harborOptions := types.DefaultInstallOptions().
WithNamespace(namespace).
WithHelmRepo("harbor/harbor").
WithHelmURL("https://helm.goharbor.io").
WithOverrides(overrides).
WithHelmUpdateRepo(updateRepo).
WithKubeconfigPath(kubeConfigPath)

_, err := apps.MakeInstallChart(harborOptions)
if err != nil {
return err
}

fmt.Println(HarborInstallMsg)

return nil
}

return harbor
}

const HarborInfoMsg = `# Get the Harbor URL and login with the default credentials: admin/Harbor12345`

const HarborInstallMsg = `=======================================================================
= Harbor has been installed. =
=======================================================================` +
"\n\n" + HarborInfoMsg + "\n\n" + pkg.SupportMessageShort
4 changes: 3 additions & 1 deletion cmd/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import (
"fmt"
"os"

"github.com/alexellis/arkade/cmd/apps"
"github.com/olekukonko/tablewriter"
"github.com/spf13/cobra"

"github.com/alexellis/arkade/cmd/apps"
)

type ArkadeApp struct {
Expand Down Expand Up @@ -164,6 +165,7 @@ func GetApps() map[string]ArkadeApp {
arkadeApps["kuma"] = NewArkadeApp(apps.MakeInstallKuma, apps.KumaInfoMsg)
arkadeApps["qemu-static"] = NewArkadeApp(apps.MakeInstallQemuStatic, apps.QemuStaticInfoMsg)
arkadeApps["vault"] = NewArkadeApp(apps.MakeInstallVault, apps.VaultInfoMsg)
arkadeApps["harbor"] = NewArkadeApp(apps.MakeInstallHarbor, apps.HarborInstallMsg)

// Special "chart" app - let a user deploy any helm chart
arkadeApps["chart"] = NewArkadeApp(apps.MakeInstallChart, "")
Expand Down

0 comments on commit 87e2800

Please sign in to comment.