mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
Merge pull request #15658 from yifan-gu/rkt_cli
Auto commit by PR queue bot
This commit is contained in:
commit
6341e1d3e2
4
Godeps/Godeps.json
generated
4
Godeps/Godeps.json
generated
@ -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",
|
||||
|
28
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go
generated
vendored
Normal file
28
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/doc.go
generated
vendored
Normal file
@ -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
|
45
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go
generated
vendored
Normal file
45
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/image.go
generated
vendored
Normal file
@ -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
|
||||
}
|
38
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go
generated
vendored
Normal file
38
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/labels.go
generated
vendored
Normal file
@ -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
|
||||
}
|
57
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go
generated
vendored
Normal file
57
Godeps/_workspace/src/github.com/appc/spec/schema/lastditch/pod.go
generated
vendored
Normal file
@ -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
|
||||
}
|
12
Godeps/_workspace/src/github.com/appc/spec/schema/pod.go
generated
vendored
12
Godeps/_workspace/src/github.com/appc/spec/schema/pod.go
generated
vendored
@ -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
|
||||
}
|
||||
|
19
Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go
generated
vendored
19
Godeps/_workspace/src/github.com/appc/spec/schema/types/app.go
generated
vendored
@ -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
|
||||
|
15
Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go
generated
vendored
15
Godeps/_workspace/src/github.com/appc/spec/schema/types/semver.go
generated
vendored
@ -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()
|
||||
|
2
Godeps/_workspace/src/github.com/appc/spec/schema/version.go
generated
vendored
2
Godeps/_workspace/src/github.com/appc/spec/schema/version.go
generated
vendored
@ -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 (
|
||||
|
@ -52,8 +52,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"
|
||||
@ -155,13 +156,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
|
||||
}
|
||||
|
||||
@ -581,9 +592,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
|
||||
@ -1329,14 +1340,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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user