From 7af46d373eecddbbc267e6da97a5c7d09456e005 Mon Sep 17 00:00:00 2001 From: Chuck Ha Date: Wed, 17 Jul 2019 16:36:43 -0400 Subject: [PATCH] Fix panics Signed-off-by: Chuck Ha --- cmd/capdctl/main.go | 128 ++++++++++++++++++++++++++++-------------- cmd/kind-test/main.go | 17 ------ 2 files changed, 87 insertions(+), 58 deletions(-) diff --git a/cmd/capdctl/main.go b/cmd/capdctl/main.go index 6a8b282..9d9ebb2 100644 --- a/cmd/capdctl/main.go +++ b/cmd/capdctl/main.go @@ -23,16 +23,14 @@ import ( "fmt" "os" + "github.com/pkg/errors" "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/klog" "sigs.k8s.io/cluster-api-provider-docker/kind/controlplane" "sigs.k8s.io/cluster-api-provider-docker/objects" crclient "sigs.k8s.io/controller-runtime/pkg/client" ) -// TODO: Generate the RBAC stuff from somewhere instead of copy pasta - const ( // Important to keep this consistent. controlPlaneSet = "controlplane" @@ -99,23 +97,67 @@ func main() { switch os.Args[1] { case "setup": - setup.Parse(os.Args[2:]) - makeManagementCluster(*managementClusterName, *version, *capdImage, *capiImage) + if err := setup.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + if err := makeManagementCluster(*managementClusterName, *version, *capdImage, *capiImage); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } case "apply": - kflags.Parse(os.Args[2:]) - applyControlPlane(*managementClusterName, *version, *capiImage, *capdImage) + if err := kflags.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + if err := applyControlPlane(*managementClusterName, *version, *capiImage, *capdImage); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } case "control-plane": - controlPlane.Parse(os.Args[2:]) - fmt.Fprintf(os.Stdout, machineYAML(controlPlaneOpts)) + if err := controlPlane.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + m, err := machineYAML(controlPlaneOpts) + if err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, m) case "worker": - worker.Parse(os.Args[2:]) - fmt.Fprintf(os.Stdout, machineYAML(workerOpts)) + if err := worker.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + m, err := machineYAML(workerOpts) + if err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, m) case "cluster": - cluster.Parse(os.Args[2:]) - fmt.Fprintf(os.Stdout, clusterYAML(*clusterName, *clusterNamespace)) + if err := cluster.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + c, err := clusterYAML(*clusterName, *clusterNamespace) + if err != nil { + fmt.Printf("%+v", err) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, c) case "machine-deployment": - machineDeployment.Parse(os.Args[2:]) - fmt.Fprint(os.Stdout, machineDeploymentYAML(machineDeploymentOpts)) + if err := machineDeployment.Parse(os.Args[2:]); err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + md, err := machineDeploymentYAML(machineDeploymentOpts) + if err != nil { + fmt.Printf("%+v\n", err) + os.Exit(1) + } + fmt.Fprint(os.Stdout, md) case "help": fmt.Println(usage()) default: @@ -154,32 +196,35 @@ subcommands are: ` } -func clusterYAML(clusterName, namespace string) string { +func clusterYAML(clusterName, namespace string) (string, error) { cluster := objects.GetCluster(clusterName, namespace) - return marshal(&cluster) + b, err := json.Marshal(&cluster) + if err != nil { + return "", errors.WithStack(err) + } + return string(b), nil } -func machineYAML(opts *machineOptions) string { +func machineYAML(opts *machineOptions) (string, error) { machine := objects.GetMachine(*opts.name, *opts.namespace, *opts.clusterName, *opts.set, *opts.version) - return marshal(&machine) + b, err := json.Marshal(&machine) + if err != nil { + return "", errors.WithStack(err) + } + return string(b), nil } -func machineDeploymentYAML(opts *machineDeploymentOptions) string { +func machineDeploymentYAML(opts *machineDeploymentOptions) (string, error) { machineDeploy := objects.GetMachineDeployment(*opts.name, *opts.namespace, *opts.clusterName, *opts.kubeletVersion, int32(*opts.replicas)) - return marshal(&machineDeploy) - -} - -func marshal(obj runtime.Object) string { - b, err := json.Marshal(obj) - // TODO don't panic on the error + b, err := json.Marshal(&machineDeploy) if err != nil { - panic(err) + return "", errors.WithStack(err) } - return string(b) + return string(b), nil + } -func makeManagementCluster(clusterName, capiVersion, capdImage, capiImageOverride string) { +func makeManagementCluster(clusterName, capiVersion, capdImage, capiImageOverride string) error { fmt.Println("Creating a brand new cluster") capiImage := fmt.Sprintf("us.gcr.io/k8s-artifacts-prod/cluster-api/cluster-api-controller:%s", capiVersion) if capiImageOverride != "" { @@ -187,40 +232,41 @@ func makeManagementCluster(clusterName, capiVersion, capdImage, capiImageOverrid } if err := controlplane.CreateKindCluster(capiImage, clusterName); err != nil { - panic(err) + return err } - applyControlPlane(clusterName, capiVersion, capiImage, capdImage) + return applyControlPlane(clusterName, capiVersion, capiImage, capdImage) } -func applyControlPlane(clusterName, capiVersion, capiImage, capdImage string) { +func applyControlPlane(clusterName, capiVersion, capiImage, capdImage string) error { fmt.Println("Downloading the latest CRDs for CAPI version", capiVersion) - objects, err := objects.GetManegementCluster(capiVersion, capiImage, capdImage) + objs, err := objects.GetManegementCluster(capiVersion, capiImage, capdImage) if err != nil { - panic(err) + return err } fmt.Println("Applying the control plane") cfg, err := controlplane.GetKubeconfig(clusterName) if err != nil { - panic(err) + return err } client, err := crclient.New(cfg, crclient.Options{}) if err != nil { - panic(err) + return err } - for _, obj := range objects { + for _, obj := range objs { accessor, err := meta.Accessor(obj) if err != nil { - panic(err) + return err } fmt.Printf("creating %q %q\n", obj.GetObjectKind().GroupVersionKind().String(), accessor.GetName()) - if client.Create(context.Background(), obj); err != nil { - panic(err) + if err := client.Create(context.Background(), obj); err != nil { + return err } } + return nil } diff --git a/cmd/kind-test/main.go b/cmd/kind-test/main.go index 9a77fa2..4740153 100644 --- a/cmd/kind-test/main.go +++ b/cmd/kind-test/main.go @@ -23,8 +23,6 @@ import ( "strings" "sigs.k8s.io/cluster-api-provider-docker/kind/actions" - "sigs.k8s.io/kind/pkg/cluster/constants" - "sigs.k8s.io/kind/pkg/cluster/nodes" ) func main() { @@ -87,18 +85,3 @@ func main() { fmt.Println("Done!") } } - -func getName(clusterName, role string) string { - ns, err := nodes.List( - fmt.Sprintf("label=%s=%s", constants.ClusterLabelKey, clusterName), - fmt.Sprintf("label=%s=%s", constants.NodeRoleKey, role)) - if err != nil { - panic(err) - } - count := len(ns) - suffix := fmt.Sprintf("%d", count) - if count == 0 { - suffix = "" - } - return fmt.Sprintf("%s-%s%s", clusterName, role, suffix) -}