Merge pull request #2141 from baude/remotetag

Add darwin support for remote-client
This commit is contained in:
OpenShift Merge Robot
2019-01-13 09:34:33 -08:00
committed by GitHub
14 changed files with 125 additions and 41 deletions

View File

@ -109,6 +109,9 @@ podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
podman-remote: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
$(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS) remoteclient" -o bin/$@ $(PROJECT)/cmd/podman
podman-remote-darwin: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
GOOS=darwin $(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "remoteclient containers_image_openpgp exclude_graphdriver_devicemapper" -o bin/$@ $(PROJECT)/cmd/podman
local-cross: $(CROSS_BUILD_TARGETS)
bin/podman.cross.%: .gopathok

View File

@ -5,6 +5,7 @@ import (
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/libpod/adapter"
"github.com/containers/libpod/libpod/image"
"github.com/pkg/errors"
"github.com/urfave/cli"
@ -66,13 +67,15 @@ func imageExistsCmd(c *cli.Context) error {
if len(args) > 1 || len(args) < 1 {
return errors.New("you may only check for the existence of one image at a time")
}
runtime, err := libpodruntime.GetRuntime(c)
localRuntime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
defer runtime.Shutdown(false)
if _, err := runtime.ImageRuntime().NewFromLocal(args[0]); err != nil {
if errors.Cause(err) == image.ErrNoSuchImage {
defer localRuntime.Runtime.Shutdown(false)
if _, err := localRuntime.NewImageFromLocal(args[0]); err != nil {
//TODO we need to ask about having varlink defined errors exposed
//so we can reuse them
if errors.Cause(err) == image.ErrNoSuchImage || err.Error() == "io.podman.ImageNotFound" {
os.Exit(1)
}
return err

View File

@ -120,7 +120,7 @@ func main() {
os.Exit(1)
}
args := c.Args()
if args.Present() {
if args.Present() && rootless.IsRootless() {
if _, notRequireRootless := cmdsNotRequiringRootless[args.First()]; !notRequireRootless {
became, ret, err := rootless.BecomeRootInUserNS()
if err != nil {
@ -265,11 +265,10 @@ func main() {
Usage: "output logging information to syslog as well as the console",
},
}
if _, err := os.Stat("/etc/containers/registries.conf"); err != nil {
if os.IsNotExist(err) {
logrus.Warn("unable to find /etc/containers/registries.conf. some podman (image shortnames) commands may be limited")
}
}
// Check if /etc/containers/registries.conf exists when running in
// in a local environment.
CheckForRegistries()
if err := app.Run(os.Args); err != nil {
if debug {
logrus.Errorf(err.Error())

View File

@ -0,0 +1,17 @@
// +build linux
package main
import (
"os"
"github.com/sirupsen/logrus"
)
func CheckForRegistries() {
if _, err := os.Stat("/etc/containers/registries.conf"); err != nil {
if os.IsNotExist(err) {
logrus.Warn("unable to find /etc/containers/registries.conf. some podman (image shortnames) commands may be limited")
}
}
}

View File

@ -0,0 +1,6 @@
// +build !linux
package main
func CheckForRegistries() {
}

View File

@ -1,7 +1,7 @@
package main
import (
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod/adapter"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
@ -23,13 +23,13 @@ func tagCmd(c *cli.Context) error {
if len(args) < 2 {
return errors.Errorf("image name and at least one new name must be specified")
}
runtime, err := libpodruntime.GetRuntime(c)
localRuntime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not create runtime")
}
defer runtime.Shutdown(false)
defer localRuntime.Runtime.Shutdown(false)
newImage, err := runtime.ImageRuntime().NewFromLocal(args[0])
newImage, err := localRuntime.NewImageFromLocal(args[0])
if err != nil {
return err
}

View File

@ -66,6 +66,7 @@ type remoteImage struct {
Names []string
Digest digest.Digest
isParent bool
Runtime *LocalRuntime
}
// GetImages returns a slice of containerimages over a varlink connection
@ -80,7 +81,7 @@ func (r *LocalRuntime) GetImages() ([]*ContainerImage, error) {
if len(i.RepoTags) > 1 {
name = i.RepoTags[0]
}
newImage, err := imageInListToContainerImage(i, name)
newImage, err := imageInListToContainerImage(i, name, r)
if err != nil {
return nil, err
}
@ -89,7 +90,7 @@ func (r *LocalRuntime) GetImages() ([]*ContainerImage, error) {
return newImages, nil
}
func imageInListToContainerImage(i iopodman.ImageInList, name string) (*ContainerImage, error) {
func imageInListToContainerImage(i iopodman.ImageInList, name string, runtime *LocalRuntime) (*ContainerImage, error) {
imageParts, err := image.DecomposeString(name)
if err != nil {
return nil, err
@ -111,6 +112,7 @@ func imageInListToContainerImage(i iopodman.ImageInList, name string) (*Containe
Repository: imageParts.Registry,
Names: i.RepoTags,
isParent: i.IsParent,
Runtime: runtime,
}
return &ContainerImage{ri}, nil
}
@ -121,7 +123,7 @@ func (r *LocalRuntime) NewImageFromLocal(name string) (*ContainerImage, error) {
if err != nil {
return nil, err
}
return imageInListToContainerImage(img, name)
return imageInListToContainerImage(img, name, r)
}
@ -173,3 +175,13 @@ func (ci *ContainerImage) Labels(ctx context.Context) (map[string]string, error)
func (ci *ContainerImage) Dangling() bool {
return len(ci.Names()) == 0
}
// TagImage ...
func (ci *ContainerImage) TagImage(tag string) error {
_, err := iopodman.TagImage().Call(ci.Runtime.Conn, ci.ID(), tag)
return err
}
func (r RemoteRuntime) RemoveImage(force bool) error {
return nil
}

View File

@ -3,6 +3,7 @@ package libpod
import (
"context"
"fmt"
"io"
"io/ioutil"
"os"
"strconv"
@ -413,6 +414,25 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user, workDir
return waitErr
}
// AttachStreams contains streams that will be attached to the container
type AttachStreams struct {
// OutputStream will be attached to container's STDOUT
OutputStream io.WriteCloser
// ErrorStream will be attached to container's STDERR
ErrorStream io.WriteCloser
// InputStream will be attached to container's STDIN
InputStream io.Reader
// AttachOutput is whether to attach to STDOUT
// If false, stdout will not be attached
AttachOutput bool
// AttachError is whether to attach to STDERR
// If false, stdout will not be attached
AttachError bool
// AttachInput is whether to attach to STDIN
// If false, stdout will not be attached
AttachInput bool
}
// Attach attaches to a container
func (c *Container) Attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize) error {
if !c.batched {

View File

@ -1,3 +1,5 @@
//+build linux
package libpod
import (
@ -27,25 +29,6 @@ const (
AttachPipeStderr = 3
)
// AttachStreams contains streams that will be attached to the container
type AttachStreams struct {
// OutputStream will be attached to container's STDOUT
OutputStream io.WriteCloser
// ErrorStream will be attached to container's STDERR
ErrorStream io.WriteCloser
// InputStream will be attached to container's STDIN
InputStream io.Reader
// AttachOutput is whether to attach to STDOUT
// If false, stdout will not be attached
AttachOutput bool
// AttachError is whether to attach to STDERR
// If false, stdout will not be attached
AttachError bool
// AttachInput is whether to attach to STDIN
// If false, stdout will not be attached
AttachInput bool
}
// Attach to the given container
// Does not check if state is appropriate
func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool) error {

View File

@ -0,0 +1,11 @@
//+build !linux
package libpod
import (
"k8s.io/client-go/tools/remotecommand"
)
func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool) error {
return ErrNotImplemented
}

View File

@ -9,12 +9,12 @@ import "fmt"
type SHMLockManager struct{}
// NewSHMLockManager is not supported on this platform
func NewSHMLockManager(numLocks uint32) (Manager, error) {
func NewSHMLockManager(path string, numLocks uint32) (Manager, error) {
return nil, fmt.Errorf("not supported")
}
// OpenSHMLockManager is not supported on this platform
func OpenSHMLockManager(numLocks uint32) (Manager, error) {
func OpenSHMLockManager(path string, numLocks uint32) (Manager, error) {
return nil, fmt.Errorf("not supported")
}

View File

@ -0,0 +1,19 @@
// +build !linux
package libpod
import (
"context"
)
func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force, prune bool) error {
return ErrNotImplemented
}
func (r *Runtime) newVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
return nil, ErrNotImplemented
}
func (r *Runtime) NewVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
return nil, ErrNotImplemented
}

View File

@ -14,7 +14,7 @@ func IsRootless() bool {
// BecomeRootInUserNS is a stub function that always returns false and an
// error on unsupported OS's
func BecomeRootInUserNS() (bool, int, error) {
return false, -1, errors.New("this function is not supported on this os")
return false, -1, errors.New("this function is not supported on this os1")
}
// GetRootlessUID returns the UID of the user in the parent userNS
@ -34,11 +34,18 @@ func SkipStorageSetup() bool {
// JoinNS re-exec podman in a new userNS and join the user namespace of the specified
// PID.
func JoinNS(pid uint) (bool, int, error) {
return false, -1, errors.New("this function is not supported on this os")
return false, -1, errors.New("this function is not supported on this os2")
}
// JoinNSPath re-exec podman in a new userNS and join the owner user namespace of the
// specified path.
func JoinNSPath(path string) (bool, int, error) {
return false, -1, errors.New("this function is not supported on this os")
return false, -1, errors.New("this function is not supported on this os3")
}
// JoinDirectUserAndMountNS re-exec podman in a new userNS and join the user and mount
// namespace of the specified PID without looking up its parent. Useful to join directly
// the conmon process.
func JoinDirectUserAndMountNS(pid uint) (bool, int, error) {
return false, -1, errors.New("this function is not supported on this os4")
}

View File

@ -26,3 +26,7 @@ func (c *CreateConfig) createBlockIO() (*spec.LinuxBlockIO, error) {
func makeThrottleArray(throttleInput []string, rateType int) ([]spec.LinuxThrottleDevice, error) {
return nil, errors.New("function not implemented")
}
func devicesFromPath(g *generate.Generator, devicePath string) error {
return errors.New("function not implemented")
}