summaryrefslogtreecommitdiff
path: root/pkg/bindings/images
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/bindings/images')
-rw-r--r--pkg/bindings/images/build.go80
-rw-r--r--pkg/bindings/images/pull.go10
-rw-r--r--pkg/bindings/images/types.go3
-rw-r--r--pkg/bindings/images/types_pull_options.go16
4 files changed, 82 insertions, 27 deletions
diff --git a/pkg/bindings/images/build.go b/pkg/bindings/images/build.go
index 346d55c47..937d05330 100644
--- a/pkg/bindings/images/build.go
+++ b/pkg/bindings/images/build.go
@@ -282,10 +282,6 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
stdout = options.Out
}
- entries := make([]string, len(containerFiles))
- copy(entries, containerFiles)
- entries = append(entries, options.ContextDirectory)
-
excludes := options.Excludes
if len(excludes) == 0 {
excludes, err = parseDockerignore(options.ContextDirectory)
@@ -294,33 +290,73 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
}
}
- tarfile, err := nTar(excludes, entries...)
+ contextDir, err := filepath.Abs(options.ContextDirectory)
if err != nil {
- logrus.Errorf("cannot tar container entries %v error: %v", entries, err)
+ logrus.Errorf("cannot find absolute path of %v: %v", options.ContextDirectory, err)
return nil, err
}
- defer func() {
- if err := tarfile.Close(); err != nil {
- logrus.Errorf("%v\n", err)
+
+ tarContent := []string{options.ContextDirectory}
+ newContainerFiles := []string{}
+ for _, c := range containerFiles {
+ if c == "/dev/stdin" {
+ content, err := ioutil.ReadAll(os.Stdin)
+ if err != nil {
+ return nil, err
+ }
+ tmpFile, err := ioutil.TempFile("", "build")
+ if err != nil {
+ return nil, err
+ }
+ defer os.Remove(tmpFile.Name()) // clean up
+ defer tmpFile.Close()
+ if _, err := tmpFile.Write(content); err != nil {
+ return nil, err
+ }
+ c = tmpFile.Name()
+ }
+ containerfile, err := filepath.Abs(c)
+ if err != nil {
+ logrus.Errorf("cannot find absolute path of %v: %v", c, err)
+ return nil, err
}
- }()
- containerFile, err := filepath.Abs(entries[0])
- if err != nil {
- logrus.Errorf("cannot find absolute path of %v: %v", entries[0], err)
- return nil, err
+ // Check if Containerfile is in the context directory, if so truncate the contextdirectory off path
+ // Do NOT add to tarfile
+ if strings.HasPrefix(containerfile, contextDir+string(filepath.Separator)) {
+ containerfile = strings.TrimPrefix(containerfile, contextDir+string(filepath.Separator))
+ } else {
+ // If Containerfile does not exists assume it is in context directory, do Not add to tarfile
+ if _, err := os.Lstat(containerfile); err != nil {
+ if !os.IsNotExist(err) {
+ return nil, err
+ }
+ containerfile = c
+ } else {
+ // If Containerfile does exists but is not in context directory add it to the tarfile
+ tarContent = append(tarContent, containerfile)
+ }
+ }
+ newContainerFiles = append(newContainerFiles, containerfile)
}
- contextDir, err := filepath.Abs(entries[1])
- if err != nil {
- logrus.Errorf("cannot find absolute path of %v: %v", entries[1], err)
- return nil, err
+ if len(newContainerFiles) > 0 {
+ cFileJSON, err := json.Marshal(newContainerFiles)
+ if err != nil {
+ return nil, err
+ }
+ params.Set("dockerfile", string(cFileJSON))
}
- if strings.HasPrefix(containerFile, contextDir+string(filepath.Separator)) {
- containerFile = strings.TrimPrefix(containerFile, contextDir+string(filepath.Separator))
+ tarfile, err := nTar(excludes, tarContent...)
+ if err != nil {
+ logrus.Errorf("cannot tar container entries %v error: %v", tarContent, err)
+ return nil, err
}
-
- params.Set("dockerfile", containerFile)
+ defer func() {
+ if err := tarfile.Close(); err != nil {
+ logrus.Errorf("%v\n", err)
+ }
+ }()
conn, err := bindings.GetClient(ctx)
if err != nil {
diff --git a/pkg/bindings/images/pull.go b/pkg/bindings/images/pull.go
index 9780c3bff..7dfe9560c 100644
--- a/pkg/bindings/images/pull.go
+++ b/pkg/bindings/images/pull.go
@@ -13,7 +13,7 @@ import (
"github.com/containers/podman/v3/pkg/auth"
"github.com/containers/podman/v3/pkg/bindings"
"github.com/containers/podman/v3/pkg/domain/entities"
- "github.com/hashicorp/go-multierror"
+ "github.com/containers/podman/v3/pkg/errorhandling"
"github.com/pkg/errors"
)
@@ -65,7 +65,7 @@ func Pull(ctx context.Context, rawImage string, options *PullOptions) ([]string,
dec := json.NewDecoder(response.Body)
var images []string
- var mErr error
+ var pullErrors []error
for {
var report entities.ImagePullReport
if err := dec.Decode(&report); err != nil {
@@ -77,7 +77,7 @@ func Pull(ctx context.Context, rawImage string, options *PullOptions) ([]string,
select {
case <-response.Request.Context().Done():
- return images, mErr
+ break
default:
// non-blocking select
}
@@ -86,7 +86,7 @@ func Pull(ctx context.Context, rawImage string, options *PullOptions) ([]string,
case report.Stream != "":
fmt.Fprint(stderr, report.Stream)
case report.Error != "":
- mErr = multierror.Append(mErr, errors.New(report.Error))
+ pullErrors = append(pullErrors, errors.New(report.Error))
case len(report.Images) > 0:
images = report.Images
case report.ID != "":
@@ -94,5 +94,5 @@ func Pull(ctx context.Context, rawImage string, options *PullOptions) ([]string,
return images, errors.Errorf("failed to parse pull results stream, unexpected input: %v", report)
}
}
- return images, mErr
+ return images, errorhandling.JoinErrors(pullErrors)
}
diff --git a/pkg/bindings/images/types.go b/pkg/bindings/images/types.go
index 1f3e46729..0aa75a81e 100644
--- a/pkg/bindings/images/types.go
+++ b/pkg/bindings/images/types.go
@@ -147,6 +147,9 @@ type PullOptions struct {
// OS will overwrite the local operating system (OS) for image
// pulls.
OS *string
+ // Policy is the pull policy. Supported values are "missing", "never",
+ // "newer", "always". An empty string defaults to "always".
+ Policy *string
// Password for authenticating against the registry.
Password *string
// Quiet can be specified to suppress pull progress when pulling. Ignored
diff --git a/pkg/bindings/images/types_pull_options.go b/pkg/bindings/images/types_pull_options.go
index 0611c4447..8fcf499eb 100644
--- a/pkg/bindings/images/types_pull_options.go
+++ b/pkg/bindings/images/types_pull_options.go
@@ -84,6 +84,22 @@ func (o *PullOptions) GetOS() string {
return *o.OS
}
+// WithPolicy
+func (o *PullOptions) WithPolicy(value string) *PullOptions {
+ v := &value
+ o.Policy = v
+ return o
+}
+
+// GetPolicy
+func (o *PullOptions) GetPolicy() string {
+ var policy string
+ if o.Policy == nil {
+ return policy
+ }
+ return *o.Policy
+}
+
// WithPassword
func (o *PullOptions) WithPassword(value string) *PullOptions {
v := &value