gke-deploy/cmd/root.go (54 lines of code) (raw):
// Package cmd contains the logic for `gke-deploy` top-level command.
package cmd
import (
"github.com/spf13/cobra"
"github.com/GoogleCloudPlatform/cloud-builders/gke-deploy/cmd/apply"
"github.com/GoogleCloudPlatform/cloud-builders/gke-deploy/cmd/prepare"
"github.com/GoogleCloudPlatform/cloud-builders/gke-deploy/cmd/run"
)
const (
short = "Deploy to GKE"
long = `Deploy to GKE in two phases, which will do the following:
Prepare Phase:
- Expand Kubernetes configuration files:
- Set the digest of images that match the [--image|-i] flag, if provided.
- Add app.kubernetes.io/name=[--app|-a] label, if provided.
- Add app.kubernetes.io/version=[--version|-v] label, if provided.
Apply Phase:
- Apply Kubernetes configuration files to the target cluster with the provided namespace.
- Wait for deployed Kubernetes configuration files to be ready before exiting.
`
example = ` # Expand Kubernetes configuration files and deploy to GKE cluster.
gke-deploy run -f configs -i gcr.io/my-project/my-app:1.0.0 -a my-app -v 1.0.0 -o expanded -n my-namespace -c my-cluster -l us-east1-b
# Deploy to GKE cluster that kubectl is currently targeting.
gke-deploy run -f configs
# Deploy to GKE cluster that kubectl is currently targeting without supplying any Kubernetes configuration files. Have gke-deploy generate suggested Kubernetes configuration files for your application using an image, app name, and service port.
gke-deploy run -i nginx -a nginx -x 80
# Prepare only.
gke-deploy prepare -f configs -i gcr.io/my-project/my-app:1.0.0 -a my-app -v 1.0.0 -o expanded -n my-namespace
# Apply only.
gke-deploy apply -f configs -n my-namespace -c my-cluster -l us-east1-b
# Execute prepare and apply, with an intermediary step in between (e.g., manually check expanded YAMLs)
gke-deploy prepare -f configs -i gcr.io/my-project/my-app:1.0.0 -a my-app -v 1.0.0 -o expanded -n my-namespace
cat expanded/*
gke-deploy apply -f expanded -n my-namespace -c my-cluster -l us-east1-b # Pass expanded directory to -f
# Pipe output from another templating engine to gke-deploy.
kustomize build overlays/staging | gke-deploy run -f - -a my-app -c my-cluster -l us-east1-b
helm template charts/prometheus | gke-deploy apply -f - -c my-cluster -l us-east1-b # No need to run Tiller in cluster`
version = "" // TODO(joonlim): Create plan for versioning.
)
// NewCommand creates the `gke-deploy` top-level command.
func NewCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "gke-deploy",
Short: short,
Long: long,
Example: example,
Version: version,
}
cmd.AddCommand(apply.NewApplyCommand())
cmd.AddCommand(prepare.NewPrepareCommand())
cmd.AddCommand(run.NewRunCommand())
return cmd
}
// Execute executes the `gke-deploy` top-level command.
func Execute() error {
return NewCommand().Execute()
}