// New creates the rkt container runtime which implements the container runtime interface. // It will test if the rkt binary is in the $PATH, and whether we can get the // version of it. If so, creates the rkt container runtime, otherwise returns an error. func New(config *Config, generator kubecontainer.RunContainerOptionsGenerator, recorder record.EventRecorder, containerRefManager *kubecontainer.RefManager, livenessManager proberesults.Manager, volumeGetter volumeGetter, imageBackOff *util.Backoff, serializeImagePulls bool, ) (*Runtime, error) { // Create dbus connection. systemd, err := newSystemd() if err != nil { return nil, fmt.Errorf("rkt: cannot create systemd interface: %v", err) } // TODO(yifan): Use secure connection. apisvcConn, err := grpc.Dial(defaultRktAPIServiceAddr, grpc.WithInsecure()) if err != nil { return nil, fmt.Errorf("rkt: cannot connect to rkt api service: %v", err) } rktBinAbsPath := config.Path if rktBinAbsPath == "" { // No default rkt path was set, so try to find one in $PATH. var err error rktBinAbsPath, err = exec.LookPath("rkt") if err != nil { return nil, fmt.Errorf("cannot find rkt binary: %v", err) } } rkt := &Runtime{ systemd: systemd, rktBinAbsPath: rktBinAbsPath, apisvcConn: apisvcConn, apisvc: rktapi.NewPublicAPIClient(apisvcConn), config: config, dockerKeyring: credentialprovider.NewDockerKeyring(), containerRefManager: containerRefManager, generator: generator, recorder: recorder, livenessManager: livenessManager, volumeGetter: volumeGetter, } if serializeImagePulls { rkt.imagePuller = kubecontainer.NewSerializedImagePuller(recorder, rkt, imageBackOff) } else { rkt.imagePuller = kubecontainer.NewImagePuller(recorder, rkt, imageBackOff) } if err := rkt.checkVersion(minimumRktBinVersion, recommendedRktBinVersion, minimumAppcVersion, minimumRktApiVersion, minimumSystemdVersion); err != nil { // TODO(yifan): Latest go-systemd version have the ability to close the // dbus connection. However the 'docker/libcontainer' package is using // the older go-systemd version, so we can't update the go-systemd version. rkt.apisvcConn.Close() return nil, err } return rkt, nil }
func newAPIClientOrFail(t *testing.T, address string) (v1alpha.PublicAPIClient, *grpc.ClientConn) { conn, err := grpc.Dial(address, grpc.WithInsecure()) if err != nil { t.Fatalf("Unexpected error: %v", err) } c := v1alpha.NewPublicAPIClient(conn) return c, conn }
// New creates the rkt container runtime which implements the container runtime interface. // It will test if the rkt binary is in the $PATH, and whether we can get the // version of it. If so, creates the rkt container runtime, otherwise returns an error. func New(config *Config, runtimeHelper kubecontainer.RuntimeHelper, recorder record.EventRecorder, containerRefManager *kubecontainer.RefManager, livenessManager proberesults.Manager, volumeGetter volumeGetter, imageBackOff *util.Backoff, serializeImagePulls bool, ) (*Runtime, error) { // Create dbus connection. systemd, err := newSystemd() if err != nil { return nil, fmt.Errorf("rkt: cannot create systemd interface: %v", err) } // TODO(yifan): Use secure connection. apisvcConn, err := grpc.Dial(defaultRktAPIServiceAddr, grpc.WithInsecure()) if err != nil { return nil, fmt.Errorf("rkt: cannot connect to rkt api service: %v", err) } rktBinAbsPath := config.Path if rktBinAbsPath == "" { // No default rkt path was set, so try to find one in $PATH. var err error rktBinAbsPath, err = exec.LookPath("rkt") if err != nil { return nil, fmt.Errorf("cannot find rkt binary: %v", err) } } rkt := &Runtime{ systemd: systemd, rktBinAbsPath: rktBinAbsPath, apisvcConn: apisvcConn, apisvc: rktapi.NewPublicAPIClient(apisvcConn), config: config, dockerKeyring: credentialprovider.NewDockerKeyring(), containerRefManager: containerRefManager, runtimeHelper: runtimeHelper, recorder: recorder, livenessManager: livenessManager, volumeGetter: volumeGetter, } if serializeImagePulls { rkt.imagePuller = kubecontainer.NewSerializedImagePuller(recorder, rkt, imageBackOff) } else { rkt.imagePuller = kubecontainer.NewImagePuller(recorder, rkt, imageBackOff) } if err := rkt.getVersions(); err != nil { return nil, fmt.Errorf("rkt: error getting version info: %v", err) } return rkt, nil }
func main() { // Create client. fmt.Println("Connecting to api service...") clientConn, err := grpc.Dial("localhost:15441", grpc.WithInsecure()) if err != nil { panic(err) } defer clientConn.Close() client := v1alpha.NewPublicAPIClient(clientConn) fmt.Println("Successfully connected!") // Get version infos. fmt.Println("\nGet info") getInfo, err := client.GetInfo(context.Background(), &v1alpha.GetInfoRequest{}) if err != nil { panic(err) } fmt.Println(getInfo) // Get pod list. fmt.Println("\nGet pod list") podInfos, err := client.ListPods(context.Background(), &v1alpha.ListPodsRequest{&v1alpha.PodFilter{States: []v1alpha.PodState{}}}) if err != nil { panic(err) } for i, p := range podInfos.Pods { fmt.Printf("pod #%d: %v\n", i, p) } // Inspect pod. fmt.Println("\nInspect pod") podInfo, err := client.InspectPod(context.Background(), &v1alpha.InspectPodRequest{Id: podInfos.Pods[0].Id}) if err != nil { panic(err) } fmt.Println(podInfo) // Get image list. fmt.Println("\nGet image list") imgInfos, err := client.ListImages(context.Background(), &v1alpha.ListImagesRequest{}) if err != nil { panic(err) } for i, m := range imgInfos.Images { fmt.Printf("image #%d: %v\n", i, m) } // Inspect image fmt.Println("\nInspect image") imgInfo, err := client.InspectImage(context.Background(), &v1alpha.InspectImageRequest{Id: imgInfos.Images[0].Id}) if err != nil { panic(err) } fmt.Println(imgInfo) }
func main() { followFlag := flag.Bool("follow", false, "enable 'follow' option on GetLogs") flag.Parse() conn, err := grpc.Dial("localhost:15441", grpc.WithInsecure()) if err != nil { fmt.Println(err) os.Exit(1) } c := v1alpha.NewPublicAPIClient(conn) defer conn.Close() // List pods. podResp, err := c.ListPods(context.Background(), &v1alpha.ListPodsRequest{ // Specify the request: Fetch and print only running pods and their details. Detail: true, Filters: []*v1alpha.PodFilter{ { States: []v1alpha.PodState{v1alpha.PodState_POD_STATE_RUNNING}, }, }, }) if err != nil { fmt.Println(err) os.Exit(1) } for _, p := range podResp.Pods { if *followFlag { fmt.Printf("Pod %q is running. Following logs:\n", p.Id) getLogsWithFollow(c, p) } else { fmt.Printf("Pod %q is running.\n", p.Id) getLogsWithoutFollow(c, p) } } // List images. imgResp, err := c.ListImages(context.Background(), &v1alpha.ListImagesRequest{ // In this request, we fetch the details of images whose names are prefixed with "coreos.com". Detail: true, Filters: []*v1alpha.ImageFilter{ { Prefixes: []string{"coreos.com"}, }, }, }) if err != nil { fmt.Println(err) os.Exit(1) } for _, im := range imgResp.Images { fmt.Printf("Found image %q\n", im.Name) } }
func main() { conn, err := grpc.Dial("localhost:15441", grpc.WithInsecure()) if err != nil { fmt.Println(err) os.Exit(1) } c := v1alpha.NewPublicAPIClient(conn) defer conn.Close() // List pods. podResp, err := c.ListPods(context.Background(), &v1alpha.ListPodsRequest{ // Specify the request: Fetch and print only running pods and their details. Detail: true, Filters: []*v1alpha.PodFilter{ { States: []v1alpha.PodState{v1alpha.PodState_POD_STATE_RUNNING}, }, }, }) if err != nil { fmt.Println(err) os.Exit(2) } for _, p := range podResp.Pods { fmt.Printf("Pod %q is running\n", p.Id) } // List images. imgResp, err := c.ListImages(context.Background(), &v1alpha.ListImagesRequest{ // In this request, we fetch the details of images whose names are prefixed with "coreos.com". Detail: true, Filters: []*v1alpha.ImageFilter{ { Prefixes: []string{"coreos.com"}, }, }, }) if err != nil { fmt.Println(err) os.Exit(3) } for _, im := range imgResp.Images { fmt.Printf("Found image %q\n", im.Name) } }
func Client() (rktapi.PublicAPIClient, error) { once.Do(func() { conn, err := net.DialTimeout("tcp", defaultRktAPIServiceAddr, timeout) if err != nil { rktClient = nil rktClientErr = fmt.Errorf("rkt: cannot tcp Dial rkt api service: %v", err) return } conn.Close() apisvcConn, err := grpc.Dial(defaultRktAPIServiceAddr, grpc.WithInsecure(), grpc.WithTimeout(timeout)) if err != nil { rktClient = nil rktClientErr = fmt.Errorf("rkt: cannot grpc Dial rkt api service: %v", err) return } apisvc := rktapi.NewPublicAPIClient(apisvcConn) resp, err := apisvc.GetInfo(context.Background(), &rktapi.GetInfoRequest{}) if err != nil { rktClientErr = fmt.Errorf("rkt: GetInfo() failed: %v", err) return } binVersion, err := semver.Make(resp.Info.RktVersion) if err != nil { rktClientErr = fmt.Errorf("rkt: couldn't parse RtVersion: %v", err) return } if binVersion.LT(semver.MustParse(minimumRktBinVersion)) { rktClientErr = fmt.Errorf("rkt: binary version is too old(%v), requires at least %v", resp.Info.RktVersion, minimumRktBinVersion) return } rktClient = apisvc }) return rktClient, rktClientErr }
func main() { conn, err := grpc.Dial("localhost:15441", grpc.WithInsecure()) if err != nil { fmt.Println(err) os.Exit(1) } c := v1alpha.NewPublicAPIClient(conn) defer conn.Close() for { // List pods. resp, err := c.ListPods(context.Background(), &v1alpha.ListPodsRequest{Detail: true}) if err != nil { fmt.Println(err) os.Exit(1) } time.Sleep(time.Second) fmt.Println("num of pods", len(resp.Pods)) } }
func Client() (rktapi.PublicAPIClient, error) { once.Do(func() { conn, err := net.DialTimeout("tcp", defaultRktAPIServiceAddr, timeout) if err != nil { rktClient = nil rktClientErr = fmt.Errorf("rkt: cannot tcp Dial rkt api service: %v", err) return } conn.Close() apisvcConn, err := grpc.Dial(defaultRktAPIServiceAddr, grpc.WithInsecure(), grpc.WithTimeout(timeout)) if err != nil { rktClient = nil rktClientErr = fmt.Errorf("rkt: cannot grpc Dial rkt api service: %v", err) return } rktClient = rktapi.NewPublicAPIClient(apisvcConn) }) return rktClient, rktClientErr }