187 lines
4.5 KiB
Go
187 lines
4.5 KiB
Go
|
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
|
||
|
}
|