summaryrefslogtreecommitdiff
path: root/cmd/crioctl/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/crioctl/main.go')
-rw-r--r--cmd/crioctl/main.go113
1 files changed, 113 insertions, 0 deletions
diff --git a/cmd/crioctl/main.go b/cmd/crioctl/main.go
new file mode 100644
index 000000000..3d77867fe
--- /dev/null
+++ b/cmd/crioctl/main.go
@@ -0,0 +1,113 @@
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "net"
+ "os"
+ "strings"
+ "time"
+
+ "github.com/sirupsen/logrus"
+ "github.com/urfave/cli"
+ "google.golang.org/grpc"
+ pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
+)
+
+// This is populated by the Makefile from the VERSION file
+// in the repository
+var version = ""
+
+// gitCommit is the commit that the binary is being built from.
+// It will be populated by the Makefile.
+var gitCommit = ""
+
+func getClientConnection(context *cli.Context) (*grpc.ClientConn, error) {
+ conn, err := grpc.Dial(context.GlobalString("connect"), grpc.WithInsecure(), grpc.WithTimeout(context.GlobalDuration("timeout")),
+ grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
+ return net.DialTimeout("unix", addr, timeout)
+ }))
+ if err != nil {
+ return nil, fmt.Errorf("failed to connect: %v", err)
+ }
+ return conn, nil
+}
+
+func openFile(path string) (*os.File, error) {
+ f, err := os.Open(path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return nil, fmt.Errorf("config at %s not found", path)
+ }
+ return nil, err
+ }
+ return f, nil
+}
+
+func loadPodSandboxConfig(path string) (*pb.PodSandboxConfig, error) {
+ f, err := openFile(path)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ var config pb.PodSandboxConfig
+ if err := json.NewDecoder(f).Decode(&config); err != nil {
+ return nil, err
+ }
+ return &config, nil
+}
+
+func loadContainerConfig(path string) (*pb.ContainerConfig, error) {
+ f, err := openFile(path)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ var config pb.ContainerConfig
+ if err := json.NewDecoder(f).Decode(&config); err != nil {
+ return nil, err
+ }
+ return &config, nil
+}
+
+func main() {
+ app := cli.NewApp()
+ var v []string
+ if version != "" {
+ v = append(v, version)
+ }
+ if gitCommit != "" {
+ v = append(v, fmt.Sprintf("commit: %s", gitCommit))
+ }
+
+ app.Name = "crioctl"
+ app.Usage = "client for crio"
+ app.Version = strings.Join(v, "\n")
+
+ app.Commands = []cli.Command{
+ podSandboxCommand,
+ containerCommand,
+ runtimeVersionCommand,
+ imageCommand,
+ infoCommand,
+ }
+
+ app.Flags = []cli.Flag{
+ cli.StringFlag{
+ Name: "connect",
+ Value: "/var/run/crio.sock",
+ Usage: "Socket to connect to",
+ },
+ cli.DurationFlag{
+ Name: "timeout",
+ Value: 10 * time.Second,
+ Usage: "Timeout of connecting to server",
+ },
+ }
+
+ if err := app.Run(os.Args); err != nil {
+ logrus.Fatal(err)
+ }
+}