summaryrefslogtreecommitdiff
path: root/pkg/specgen/generate/container_create.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/specgen/generate/container_create.go')
-rw-r--r--pkg/specgen/generate/container_create.go38
1 files changed, 26 insertions, 12 deletions
diff --git a/pkg/specgen/generate/container_create.go b/pkg/specgen/generate/container_create.go
index 6100e7a5b..92c0f22d9 100644
--- a/pkg/specgen/generate/container_create.go
+++ b/pkg/specgen/generate/container_create.go
@@ -2,6 +2,7 @@ package generate
import (
"context"
+ "fmt"
"os"
"path/filepath"
"strings"
@@ -52,6 +53,24 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
if infraConfig != nil && len(infraConfig.Spec.Linux.Devices) > 0 {
s.DevicesFrom = append(s.DevicesFrom, infraConfig.ID)
}
+ if infraConfig != nil && infraConfig.Spec.Linux.Resources != nil && infraConfig.Spec.Linux.Resources.BlockIO != nil && len(infraConfig.Spec.Linux.Resources.BlockIO.ThrottleReadBpsDevice) > 0 {
+ tempDev := make(map[string]spec.LinuxThrottleDevice)
+ for _, val := range infraConfig.Spec.Linux.Resources.BlockIO.ThrottleReadBpsDevice {
+ nodes, err := util.FindDeviceNodes()
+ if err != nil {
+ return nil, nil, nil, err
+ }
+ key := fmt.Sprintf("%d:%d", val.Major, val.Minor)
+ tempDev[nodes[key]] = spec.LinuxThrottleDevice{Rate: uint64(val.Rate)}
+ }
+ for i, dev := range s.ThrottleReadBpsDevice {
+ tempDev[i] = dev
+ }
+ s.ThrottleReadBpsDevice = tempDev
+ }
+ if err := FinishThrottleDevices(s); err != nil {
+ return nil, nil, nil, err
+ }
// Set defaults for unset namespaces
if s.PidNS.IsDefault() {
defaultNS, err := GetDefaultNamespaceMode("pid", rtc, pod)
@@ -102,20 +121,15 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
options = append(options, libpod.WithCreateCommand(s.ContainerCreateCommand))
}
- var newImage *libimage.Image
- var imageData *libimage.ImageData
if s.Rootfs != "" {
options = append(options, libpod.WithRootFS(s.Rootfs, s.RootfsOverlay))
- } else {
- var resolvedImageName string
- newImage, resolvedImageName, err = rt.LibimageRuntime().LookupImage(s.Image, nil)
- if err != nil {
- return nil, nil, nil, err
- }
- imageData, err = newImage.Inspect(ctx, false)
- if err != nil {
- return nil, nil, nil, err
- }
+ }
+
+ newImage, resolvedImageName, imageData, err := getImageFromSpec(ctx, rt, s)
+ if err != nil {
+ return nil, nil, nil, err
+ }
+ if newImage != nil {
// If the input name changed, we could properly resolve the
// image. Otherwise, it must have been an ID where we're
// defaulting to the first name or an empty one if no names are