From 0ef6af25c17e8696fc4f197e4cb054629a40ba68 Mon Sep 17 00:00:00 2001 From: Yifan Gu Date: Thu, 8 Oct 2015 14:48:45 -0700 Subject: [PATCH 1/2] kubelet/rkt: update rkt version. --- pkg/kubelet/rkt/rkt.go | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index 1fe70ad07f5..94bd7f3ddcf 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -51,8 +51,9 @@ import ( ) const ( - acVersion = "0.6.1" - rktMinimumVersion = "0.8.1" + acVersion = "0.7.1" + minimumRktVersion = "0.9.0" + recommendRktVersion = "0.9.0" systemdMinimumVersion = "219" systemdServiceDir = "/run/systemd/system" @@ -154,13 +155,23 @@ func New(config *Config, if err != nil { return nil, err } - result, err = version.Compare(rktMinimumVersion) + result, err = version.Compare(minimumRktVersion) if err != nil { return nil, err } if result < 0 { - return nil, fmt.Errorf("rkt: Version is too old, requires at least %v", rktMinimumVersion) + return nil, fmt.Errorf("rkt: version is too old, requires at least %v", minimumRktVersion) } + + result, err = version.Compare(recommendRktVersion) + if err != nil { + return nil, err + } + if result != 0 { + // TODO(yifan): Record an event to expose the information. + glog.Warningf("rkt: current version %q is not recommended (recommended version %q)", version, recommendRktVersion) + } + return rkt, nil } @@ -580,9 +591,9 @@ func (r *Runtime) preparePod(pod *api.Pod, pullSecrets []api.Secret) (string, *k var runPrepared string if pod.Spec.SecurityContext != nil && pod.Spec.SecurityContext.HostNetwork { - runPrepared = fmt.Sprintf("%s run-prepared --mds-register=false %s", r.rktBinAbsPath, uuid) + runPrepared = fmt.Sprintf("%s run-prepared --mds-register=false --net=host %s", r.rktBinAbsPath, uuid) } else { - runPrepared = fmt.Sprintf("%s run-prepared --mds-register=false --private-net %s", r.rktBinAbsPath, uuid) + runPrepared = fmt.Sprintf("%s run-prepared --mds-register=false %s", r.rktBinAbsPath, uuid) } // TODO handle pod.Spec.HostPID @@ -1322,14 +1333,14 @@ func (r *Runtime) getImageByName(imageName string) (*kubecontainer.Image, error) // ListImages lists all the available appc images on the machine by invoking 'rkt image list'. func (r *Runtime) ListImages() ([]kubecontainer.Image, error) { - // Example output of 'rkt image list --fields=key,name': + // Example output of 'rkt image list --fields=id,name --full': // - // KEY NAME + // ID NAME // sha512-374770396f23dd153937cd66694fe705cf375bcec7da00cf87e1d9f72c192da7 nginx:latest // sha512-bead9e0df8b1b4904d0c57ade2230e6d236e8473f62614a8bc6dcf11fc924123 coreos.com/rkt/stage1:0.8.1 // // With '--no-legend=true' the fist line (KEY NAME) will be omitted. - output, err := r.runCommand("image", "list", "--no-legend=true", "--fields=key,name") + output, err := r.runCommand("image", "list", "--no-legend=true", "--fields=id,name", "--full") if err != nil { return nil, err } From a95b605ff177e5bed87e1ff07d9fecfa5d2a82ef Mon Sep 17 00:00:00 2001 From: Yifan Gu Date: Thu, 15 Oct 2015 15:28:18 -0700 Subject: [PATCH 2/2] Godeps: update appc spec version. --- Godeps/Godeps.json | 4 +- .../appc/spec/schema/lastditch/doc.go | 28 +++++++++ .../appc/spec/schema/lastditch/image.go | 45 +++++++++++++++ .../appc/spec/schema/lastditch/labels.go | 38 +++++++++++++ .../appc/spec/schema/lastditch/pod.go | 57 +++++++++++++++++++ .../src/github.com/appc/spec/schema/pod.go | 12 ++-- .../github.com/appc/spec/schema/types/app.go | 19 ++++--- .../appc/spec/schema/types/semver.go | 15 +++++ .../github.com/appc/spec/schema/version.go | 2 +- 9 files changed, 202 insertions(+), 18 deletions(-) create mode 100644 Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go create mode 100644 Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go create mode 100644 Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go create mode 100644 Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 7c7eb3f125e..03d35d7d62f 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -44,8 +44,8 @@ }, { "ImportPath": "github.com/appc/spec/schema", - "Comment": "v0.6.1-30-gc928a0c", - "Rev": "c928a0c907c96034dfc0a69098b2179db5ae7e37" + "Comment": "v0.7.1", + "Rev": "818ac4d0073424f4e0a46f45abaa147ccc1b5a24" }, { "ImportPath": "github.com/aws/aws-sdk-go/aws", diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go new file mode 100644 index 00000000000..9cc5734607d --- /dev/null +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go @@ -0,0 +1,28 @@ +// Copyright 2015 The appc Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package lastditch provides fallback redefinitions of parts of +// schemas provided by schema package. +// +// Almost no validation of schemas is done (besides checking if data +// really is `JSON`-encoded and kind is either `ImageManifest` or +// `PodManifest`. This is to get as much data as possible from an +// invalid manifest. The main aim of the package is to be used for the +// better error reporting. The another aim might be to force some +// operation (like removing a pod), which would otherwise fail because +// of an invalid manifest. +// +// To avoid validation during deserialization, types provided by this +// package use plain strings. +package lastditch diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go new file mode 100644 index 00000000000..dc5055a0564 --- /dev/null +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go @@ -0,0 +1,45 @@ +// Copyright 2015 The appc Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package lastditch + +import ( + "encoding/json" + + "github.com/appc/spec/schema" + "github.com/appc/spec/schema/types" +) + +type ImageManifest struct { + ACVersion string `json:"acVersion"` + ACKind string `json:"acKind"` + Name string `json:"name"` + Labels Labels `json:"labels,omitempty"` +} + +// a type just to avoid a recursion during unmarshalling +type imageManifest ImageManifest + +func (im *ImageManifest) UnmarshalJSON(data []byte) error { + i := imageManifest(*im) + err := json.Unmarshal(data, &i) + if err != nil { + return err + } + if i.ACKind != string(schema.ImageManifestKind) { + return types.InvalidACKindError(schema.ImageManifestKind) + } + *im = ImageManifest(i) + return nil +} diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go new file mode 100644 index 00000000000..5cf93a087c4 --- /dev/null +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go @@ -0,0 +1,38 @@ +// Copyright 2015 The appc Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package lastditch + +import ( + "encoding/json" +) + +type Labels []Label + +// a type just to avoid a recursion during unmarshalling +type labels Labels + +type Label struct { + Name string `json:"name"` + Value string `json:"value"` +} + +func (l *Labels) UnmarshalJSON(data []byte) error { + var jl labels + if err := json.Unmarshal(data, &jl); err != nil { + return err + } + *l = Labels(jl) + return nil +} diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go new file mode 100644 index 00000000000..2e9d8456bbd --- /dev/null +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go @@ -0,0 +1,57 @@ +// Copyright 2015 The appc Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package lastditch + +import ( + "encoding/json" + + "github.com/appc/spec/schema" + "github.com/appc/spec/schema/types" +) + +type PodManifest struct { + ACVersion string `json:"acVersion"` + ACKind string `json:"acKind"` + Apps AppList `json:"apps"` +} + +type AppList []RuntimeApp + +type RuntimeApp struct { + Name string `json:"name"` + Image RuntimeImage `json:"image"` +} + +type RuntimeImage struct { + Name string `json:"name"` + ID string `json:"id"` + Labels Labels `json:"labels,omitempty"` +} + +// a type just to avoid a recursion during unmarshalling +type podManifest PodManifest + +func (pm *PodManifest) UnmarshalJSON(data []byte) error { + p := podManifest(*pm) + err := json.Unmarshal(data, &p) + if err != nil { + return err + } + if p.ACKind != string(schema.PodManifestKind) { + return types.InvalidACKindError(schema.PodManifestKind) + } + *pm = PodManifest(p) + return nil +} diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/pod.go b/Godeps/_workspace/src/github.com/appc/spec/schema/pod.go index 9c1333b6fba..47e0340cd19 100644 --- a/Godeps/_workspace/src/github.com/appc/spec/schema/pod.go +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/pod.go @@ -126,19 +126,19 @@ func (al AppList) Get(name types.ACName) *RuntimeApp { return nil } -// Mount describes the mapping between a volume and an apps -// MountPoint that will be fulfilled at runtime. +// Mount describes the mapping between a volume and the path it is mounted +// inside of an app's filesystem. type Mount struct { - Volume types.ACName `json:"volume"` - MountPoint types.ACName `json:"mountPoint"` + Volume types.ACName `json:"volume"` + Path string `json:"path"` } func (r Mount) assertValid() error { if r.Volume.Empty() { return errors.New("volume must be set") } - if r.MountPoint.Empty() { - return errors.New("mountPoint must be set") + if r.Path == "" { + return errors.New("path must be set") } return nil } diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go b/Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go index 9f25a33cefe..363b6b5f5fc 100644 --- a/Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go @@ -22,15 +22,16 @@ import ( ) type App struct { - Exec Exec `json:"exec"` - EventHandlers []EventHandler `json:"eventHandlers,omitempty"` - User string `json:"user"` - Group string `json:"group"` - WorkingDirectory string `json:"workingDirectory,omitempty"` - Environment Environment `json:"environment,omitempty"` - MountPoints []MountPoint `json:"mountPoints,omitempty"` - Ports []Port `json:"ports,omitempty"` - Isolators Isolators `json:"isolators,omitempty"` + Exec Exec `json:"exec"` + EventHandlers []EventHandler `json:"eventHandlers,omitempty"` + User string `json:"user"` + Group string `json:"group"` + SupplementaryGIDs []int `json:"supplementaryGIDs,omitempty"` + WorkingDirectory string `json:"workingDirectory,omitempty"` + Environment Environment `json:"environment,omitempty"` + MountPoints []MountPoint `json:"mountPoints,omitempty"` + Ports []Port `json:"ports,omitempty"` + Isolators Isolators `json:"isolators,omitempty"` } // app is a model to facilitate extra validation during the diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go b/Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go index 151da37354b..0008181a5ec 100644 --- a/Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go @@ -44,6 +44,21 @@ func NewSemVer(s string) (*SemVer, error) { return &v, nil } +func (sv SemVer) LessThanMajor(versionB SemVer) bool { + majorA := semver.Version(sv).Major + majorB := semver.Version(versionB).Major + if majorA < majorB { + return true + } + return false +} + +func (sv SemVer) LessThanExact(versionB SemVer) bool { + vA := semver.Version(sv) + vB := semver.Version(versionB) + return vA.LessThan(vB) +} + func (sv SemVer) String() string { s := semver.Version(sv) return s.String() diff --git a/Godeps/_workspace/src/github.com/appc/spec/schema/version.go b/Godeps/_workspace/src/github.com/appc/spec/schema/version.go index 412a63488d1..87ff7862d56 100644 --- a/Godeps/_workspace/src/github.com/appc/spec/schema/version.go +++ b/Godeps/_workspace/src/github.com/appc/spec/schema/version.go @@ -22,7 +22,7 @@ const ( // version represents the canonical version of the appc spec and tooling. // For now, the schema and tooling is coupled with the spec itself, so // this must be kept in sync with the VERSION file in the root of the repo. - version string = "0.6.1+git" + version string = "0.7.1" ) var (