package main import ( "fmt" "github.com/urfave/cli" "golang.org/x/net/context" pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" ) var podSandboxCommand = cli.Command{ Name: "pod", Subcommands: []cli.Command{ createPodSandboxCommand, stopPodSandboxCommand, removePodSandboxCommand, podSandboxStatusCommand, }, } var createPodSandboxCommand = cli.Command{ Name: "create", Usage: "create a pod", Flags: []cli.Flag{ cli.StringFlag{ Name: "config", Value: "config.json", Usage: "the path of a pod sandbox config file", }, }, Action: func(context *cli.Context) error { // Set up a connection to the server. conn, err := getClientConnection(context) if err != nil { return fmt.Errorf("failed to connect: %v", err) } defer conn.Close() client := pb.NewRuntimeServiceClient(conn) // Test RuntimeServiceClient.CreatePodSandbox err = CreatePodSandbox(client, context.String("config")) if err != nil { return fmt.Errorf("Creating the pod sandbox failed: %v", err) } return nil }, } var stopPodSandboxCommand = cli.Command{ Name: "stop", Usage: "stop a pod sandbox", Flags: []cli.Flag{ cli.StringFlag{ Name: "id", Value: "", Usage: "id of the pod sandbox", }, }, Action: func(context *cli.Context) error { // Set up a connection to the server. conn, err := getClientConnection(context) if err != nil { return fmt.Errorf("failed to connect: %v", err) } defer conn.Close() client := pb.NewRuntimeServiceClient(conn) err = StopPodSandbox(client, context.String("id")) if err != nil { return fmt.Errorf("Stopping the pod sandbox failed: %v", err) } return nil }, } var removePodSandboxCommand = cli.Command{ Name: "remove", Usage: "remove a pod sandbox", Flags: []cli.Flag{ cli.StringFlag{ Name: "id", Value: "", Usage: "id of the pod sandbox", }, }, Action: func(context *cli.Context) error { // Set up a connection to the server. conn, err := getClientConnection(context) if err != nil { return fmt.Errorf("failed to connect: %v", err) } defer conn.Close() client := pb.NewRuntimeServiceClient(conn) err = RemovePodSandbox(client, context.String("id")) if err != nil { return fmt.Errorf("removing the pod sandbox failed: %v", err) } return nil }, } var podSandboxStatusCommand = cli.Command{ Name: "status", Usage: "return the status of a pod", Flags: []cli.Flag{ cli.StringFlag{ Name: "id", Value: "", Usage: "id of the pod", }, }, Action: func(context *cli.Context) error { // Set up a connection to the server. conn, err := getClientConnection(context) if err != nil { return fmt.Errorf("failed to connect: %v", err) } defer conn.Close() client := pb.NewRuntimeServiceClient(conn) err = PodSandboxStatus(client, context.String("id")) if err != nil { return fmt.Errorf("getting the pod sandbox status failed: %v", err) } return nil }, } // CreatePodSandbox sends a CreatePodSandboxRequest to the server, and parses // the returned CreatePodSandboxResponse. func CreatePodSandbox(client pb.RuntimeServiceClient, path string) error { config, err := loadPodSandboxConfig(path) if err != nil { return err } r, err := client.CreatePodSandbox(context.Background(), &pb.CreatePodSandboxRequest{Config: config}) if err != nil { return err } fmt.Println(*r.PodSandboxId) return nil } // StopPodSandbox sends a StopPodSandboxRequest to the server, and parses // the returned StopPodSandboxResponse. func StopPodSandbox(client pb.RuntimeServiceClient, ID string) error { if ID == "" { return fmt.Errorf("ID cannot be empty") } _, err := client.StopPodSandbox(context.Background(), &pb.StopPodSandboxRequest{PodSandboxId: &ID}) if err != nil { return err } fmt.Println(ID) return nil } // RemovePodSandbox sends a RemovePodSandboxRequest to the server, and parses // the returned RemovePodSandboxResponse. func RemovePodSandbox(client pb.RuntimeServiceClient, ID string) error { if ID == "" { return fmt.Errorf("ID cannot be empty") } _, err := client.RemovePodSandbox(context.Background(), &pb.RemovePodSandboxRequest{PodSandboxId: &ID}) if err != nil { return err } fmt.Println(ID) return nil } // PodSandboxStatus sends a PodSandboxStatusRequest to the server, and parses // the returned PodSandboxStatusResponse. func PodSandboxStatus(client pb.RuntimeServiceClient, ID string) error { if ID == "" { return fmt.Errorf("ID cannot be empty") } r, err := client.PodSandboxStatus(context.Background(), &pb.PodSandboxStatusRequest{PodSandboxId: &ID}) if err != nil { return err } fmt.Println(r) return nil }