| ... | ... |
@@ -34,14 +34,30 @@ var Codec = v1beta1.Codec |
| 34 | 34 |
// TODO: when versioning changes, make this part of each API definition. |
| 35 | 35 |
var ResourceVersioner = runtime.NewJSONBaseResourceVersioner() |
| 36 | 36 |
|
| 37 |
+// SelfLinker can set or get the SelfLink field of all API types. |
|
| 38 |
+// TODO: when versioning changes, make this part of each API definition. |
|
| 39 |
+// TODO(lavalamp): Combine SelfLinker & ResourceVersioner interfaces, force all uses |
|
| 40 |
+// to go through the InterfacesFor method below. |
|
| 41 |
+var SelfLinker = runtime.NewJSONBaseSelfLinker() |
|
| 42 |
+ |
|
| 43 |
+// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version. |
|
| 44 |
+type VersionInterfaces struct {
|
|
| 45 |
+ runtime.Codec |
|
| 46 |
+ runtime.ResourceVersioner |
|
| 47 |
+ runtime.SelfLinker |
|
| 48 |
+} |
|
| 49 |
+ |
|
| 37 | 50 |
// InterfacesFor returns the default Codec and ResourceVersioner for a given version |
| 38 | 51 |
// string, or an error if the version is not known. |
| 39 |
-func InterfacesFor(version string) (codec runtime.Codec, versioner runtime.ResourceVersioner, err error) {
|
|
| 52 |
+func InterfacesFor(version string) (*VersionInterfaces, error) {
|
|
| 40 | 53 |
switch version {
|
| 41 | 54 |
case "v1beta1": |
| 42 |
- codec, versioner = v1beta1.Codec, ResourceVersioner |
|
| 55 |
+ return &VersionInterfaces{
|
|
| 56 |
+ Codec: v1beta1.Codec, |
|
| 57 |
+ ResourceVersioner: ResourceVersioner, |
|
| 58 |
+ SelfLinker: SelfLinker, |
|
| 59 |
+ }, nil |
|
| 43 | 60 |
default: |
| 44 |
- err = fmt.Errorf("unsupported storage version: %s (valid: %s)", version, strings.Join(Versions, ", "))
|
|
| 61 |
+ return nil, fmt.Errorf("unsupported storage version: %s (valid: %s)", version, strings.Join(Versions, ", "))
|
|
| 45 | 62 |
} |
| 46 |
- return |
|
| 47 | 63 |
} |
| ... | ... |
@@ -110,7 +110,7 @@ func (bc *BuildController) synchronize(build *api.Build) (api.BuildStatus, error |
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
glog.Infof("Attempting to create pod: %#v", podSpec)
|
| 113 |
- _, err = bc.kubeClient.CreatePod(podSpec) |
|
| 113 |
+ _, err = bc.kubeClient.CreatePod(kubeapi.NewContext(), podSpec) |
|
| 114 | 114 |
|
| 115 | 115 |
// TODO: strongly typed error checking |
| 116 | 116 |
if err != nil {
|
| ... | ... |
@@ -127,7 +127,7 @@ func (bc *BuildController) synchronize(build *api.Build) (api.BuildStatus, error |
| 127 | 127 |
return api.BuildFailed, fmt.Errorf("Build timed out")
|
| 128 | 128 |
} |
| 129 | 129 |
|
| 130 |
- pod, err := bc.kubeClient.GetPod(build.PodID) |
|
| 130 |
+ pod, err := bc.kubeClient.GetPod(kubeapi.NewContext(), build.PodID) |
|
| 131 | 131 |
if err != nil {
|
| 132 | 132 |
return build.Status, fmt.Errorf("Error retrieving pod for build ID %v: %#v", build.ID, err)
|
| 133 | 133 |
} |
| ... | ... |
@@ -141,7 +141,7 @@ func (bc *BuildController) synchronize(build *api.Build) (api.BuildStatus, error |
| 141 | 141 |
|
| 142 | 142 |
// check the exit codes of all the containers in the pod |
| 143 | 143 |
for _, info := range pod.CurrentState.Info {
|
| 144 |
- if info.State.ExitCode != 0 {
|
|
| 144 |
+ if info.State.Termination != nil && info.State.Termination.ExitCode != 0 {
|
|
| 145 | 145 |
nextStatus = api.BuildFailed |
| 146 | 146 |
} |
| 147 | 147 |
} |
| ... | ... |
@@ -31,7 +31,7 @@ func (r *REST) New() runtime.Object {
|
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 | 33 |
// List obtains a list of Builds that match selector. |
| 34 |
-func (r *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 34 |
+func (r *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 35 | 35 |
builds, err := r.registry.ListBuilds(selector) |
| 36 | 36 |
if err != nil {
|
| 37 | 37 |
return nil, err |
| ... | ... |
@@ -41,7 +41,7 @@ func (r *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
| 41 | 41 |
} |
| 42 | 42 |
|
| 43 | 43 |
// Get obtains the build specified by its id. |
| 44 |
-func (r *REST) Get(id string) (runtime.Object, error) {
|
|
| 44 |
+func (r *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 45 | 45 |
build, err := r.registry.GetBuild(id) |
| 46 | 46 |
if err != nil {
|
| 47 | 47 |
return nil, err |
| ... | ... |
@@ -50,14 +50,14 @@ func (r *REST) Get(id string) (runtime.Object, error) {
|
| 50 | 50 |
} |
| 51 | 51 |
|
| 52 | 52 |
// Delete asynchronously deletes the Build specified by its id. |
| 53 |
-func (r *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 53 |
+func (r *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 54 | 54 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 55 | 55 |
return &kubeapi.Status{Status: kubeapi.StatusSuccess}, r.registry.DeleteBuild(id)
|
| 56 | 56 |
}), nil |
| 57 | 57 |
} |
| 58 | 58 |
|
| 59 | 59 |
// Create registers a given new Build instance to r.registry. |
| 60 |
-func (r *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 60 |
+func (r *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 61 | 61 |
build, ok := obj.(*api.Build) |
| 62 | 62 |
if !ok {
|
| 63 | 63 |
return nil, fmt.Errorf("not a build: %#v", obj)
|
| ... | ... |
@@ -82,7 +82,7 @@ func (r *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 82 | 82 |
} |
| 83 | 83 |
|
| 84 | 84 |
// Update replaces a given Build instance with an existing instance in r.registry. |
| 85 |
-func (r *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 85 |
+func (r *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 86 | 86 |
build, ok := obj.(*api.Build) |
| 87 | 87 |
if !ok {
|
| 88 | 88 |
return nil, fmt.Errorf("not a build: %#v", obj)
|
| ... | ... |
@@ -31,7 +31,7 @@ func (r *REST) New() runtime.Object {
|
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 | 33 |
// List obtains a list of BuildConfigs that match selector. |
| 34 |
-func (r *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 34 |
+func (r *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 35 | 35 |
builds, err := r.registry.ListBuildConfigs(selector) |
| 36 | 36 |
if err != nil {
|
| 37 | 37 |
return nil, err |
| ... | ... |
@@ -40,7 +40,7 @@ func (r *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
| 40 | 40 |
} |
| 41 | 41 |
|
| 42 | 42 |
// Get obtains the BuildConfig specified by its id. |
| 43 |
-func (r *REST) Get(id string) (runtime.Object, error) {
|
|
| 43 |
+func (r *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 44 | 44 |
buildConfig, err := r.registry.GetBuildConfig(id) |
| 45 | 45 |
if err != nil {
|
| 46 | 46 |
return nil, err |
| ... | ... |
@@ -49,14 +49,14 @@ func (r *REST) Get(id string) (runtime.Object, error) {
|
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 | 51 |
// Delete asynchronously deletes the BuildConfig specified by its id. |
| 52 |
-func (r *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 52 |
+func (r *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 53 | 53 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 54 | 54 |
return &kubeapi.Status{Status: kubeapi.StatusSuccess}, r.registry.DeleteBuildConfig(id)
|
| 55 | 55 |
}), nil |
| 56 | 56 |
} |
| 57 | 57 |
|
| 58 | 58 |
// Create registers a given new BuildConfig instance to r.registry. |
| 59 |
-func (r *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 59 |
+func (r *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 60 | 60 |
buildConfig, ok := obj.(*api.BuildConfig) |
| 61 | 61 |
if !ok {
|
| 62 | 62 |
return nil, fmt.Errorf("not a buildConfig: %#v", obj)
|
| ... | ... |
@@ -78,7 +78,7 @@ func (r *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 78 | 78 |
} |
| 79 | 79 |
|
| 80 | 80 |
// Update replaces a given BuildConfig instance with an existing instance in r.registry. |
| 81 |
-func (r *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 81 |
+func (r *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 82 | 82 |
buildConfig, ok := obj.(*api.BuildConfig) |
| 83 | 83 |
if !ok {
|
| 84 | 84 |
return nil, fmt.Errorf("not a buildConfig: %#v", obj)
|
| ... | ... |
@@ -53,7 +53,7 @@ func (r *Etcd) GetBuild(id string) (*api.Build, error) {
|
| 53 | 53 |
|
| 54 | 54 |
// CreateBuild creates a new Build. |
| 55 | 55 |
func (r *Etcd) CreateBuild(build *api.Build) error {
|
| 56 |
- err := r.CreateObj(makeBuildKey(build.ID), build) |
|
| 56 |
+ err := r.CreateObj(makeBuildKey(build.ID), build, 0) |
|
| 57 | 57 |
return etcderr.InterpretCreateError(err, "build", build.ID) |
| 58 | 58 |
} |
| 59 | 59 |
|
| ... | ... |
@@ -103,7 +103,7 @@ func (r *Etcd) GetBuildConfig(id string) (*api.BuildConfig, error) {
|
| 103 | 103 |
|
| 104 | 104 |
// CreateBuildConfig creates a new BuildConfig. |
| 105 | 105 |
func (r *Etcd) CreateBuildConfig(config *api.BuildConfig) error {
|
| 106 |
- err := r.CreateObj(makeBuildConfigKey(config.ID), config) |
|
| 106 |
+ err := r.CreateObj(makeBuildConfigKey(config.ID), config, 0) |
|
| 107 | 107 |
return etcderr.InterpretCreateError(err, "buildConfig", config.ID) |
| 108 | 108 |
} |
| 109 | 109 |
|
| ... | ... |
@@ -12,7 +12,7 @@ func setupDockerSocket(podSpec *api.Pod) {
|
| 12 | 12 |
dockerSocketVolume := api.Volume{
|
| 13 | 13 |
Name: "docker-socket", |
| 14 | 14 |
Source: &api.VolumeSource{
|
| 15 |
- HostDirectory: &api.HostDirectory{
|
|
| 15 |
+ HostDir: &api.HostDir{
|
|
| 16 | 16 |
Path: "/var/run/docker.sock", |
| 17 | 17 |
}, |
| 18 | 18 |
}, |
| ... | ... |
@@ -39,7 +39,7 @@ func setupDockerConfig(podSpec *api.Pod) {
|
| 39 | 39 |
dockerConfigVolume := api.Volume{
|
| 40 | 40 |
Name: "docker-cfg", |
| 41 | 41 |
Source: &api.VolumeSource{
|
| 42 |
- HostDirectory: &api.HostDirectory{
|
|
| 42 |
+ HostDir: &api.HostDir{
|
|
| 43 | 43 |
Path: dockerConfig, |
| 44 | 44 |
}, |
| 45 | 45 |
}, |
| ... | ... |
@@ -1,9 +1,6 @@ |
| 1 | 1 |
package client |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "fmt" |
|
| 5 |
- "strings" |
|
| 6 |
- |
|
| 7 | 4 |
kubeclient "github.com/GoogleCloudPlatform/kubernetes/pkg/client" |
| 8 | 5 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| 9 | 6 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch" |
| ... | ... |
@@ -98,23 +95,33 @@ type Client struct {
|
| 98 | 98 |
*kubeclient.RESTClient |
| 99 | 99 |
} |
| 100 | 100 |
|
| 101 |
-// New creates and returns a new Client. |
|
| 102 |
-func New(host, version string, auth *kubeclient.AuthInfo) (*Client, error) {
|
|
| 103 |
- if version == "" {
|
|
| 101 |
+// New creates an OpenShift client for the given config. This client works with builds, deployments, |
|
| 102 |
+// templates, routes, and images. It allows operations such as list, get, update and delete on these |
|
| 103 |
+// objects. An error is returned if the provided configuration is not valid. |
|
| 104 |
+func New(c *kubeclient.Config) (*Client, error) {
|
|
| 105 |
+ config := *c |
|
| 106 |
+ if config.Prefix == "" {
|
|
| 107 |
+ config.Prefix = "/osapi" |
|
| 108 |
+ } |
|
| 109 |
+ if config.Version == "" {
|
|
| 104 | 110 |
// Clients default to the preferred code API version |
| 105 |
- // TODO: implement version negotation (highest version supported by server) |
|
| 106 |
- version = latest.Version |
|
| 111 |
+ // TODO: implement version negotiation (highest version supported by server) |
|
| 112 |
+ config.Version = latest.Version |
|
| 107 | 113 |
} |
| 108 |
- serverCodec, _, err := latest.InterfacesFor(version) |
|
| 114 |
+ client, err := kubeclient.RESTClientFor(&config) |
|
| 109 | 115 |
if err != nil {
|
| 110 |
- return nil, fmt.Errorf("API version '%s' is not recognized (valid values: %s)", version, strings.Join(latest.Versions, ", "))
|
|
| 116 |
+ return nil, err |
|
| 111 | 117 |
} |
| 112 |
- prefix := fmt.Sprintf("/osapi/%s/", version)
|
|
| 113 |
- restClient, err := kubeclient.NewRESTClient(host, auth, prefix, serverCodec) |
|
| 118 |
+ return &Client{client}, nil
|
|
| 119 |
+} |
|
| 120 |
+ |
|
| 121 |
+// NewOrDie creates an OpenShift client and panics if the provided API version is not recognized. |
|
| 122 |
+func NewOrDie(c *kubeclient.Config) *Client {
|
|
| 123 |
+ client, err := New(c) |
|
| 114 | 124 |
if err != nil {
|
| 115 |
- return nil, fmt.Errorf("API URL '%s' is not valid: %v", host, err)
|
|
| 125 |
+ panic(err) |
|
| 116 | 126 |
} |
| 117 |
- return &Client{restClient}, nil
|
|
| 127 |
+ return client |
|
| 118 | 128 |
} |
| 119 | 129 |
|
| 120 | 130 |
// CreateBuild creates new build. Returns the server's representation of the build and error if one occurs. |
| ... | ... |
@@ -31,7 +31,7 @@ func NewCommandKubecfg(name string) *cobra.Command {
|
| 31 | 31 |
flag := cmd.Flags() |
| 32 | 32 |
flag.BoolVar(&cfg.ServerVersion, "server_version", false, "Print the server's version number.") |
| 33 | 33 |
flag.BoolVar(&cfg.PreventSkew, "expect_version_match", false, "Fail if server's version doesn't match own version.") |
| 34 |
- flag.StringVarP(&cfg.HttpServer, "host", "h", "", "The host to connect to.") |
|
| 34 |
+ flag.StringVarP(&cfg.ClientConfig.Host, "host", "h", "", "The host to connect to.") |
|
| 35 | 35 |
flag.StringVarP(&cfg.Config, "config", "c", "", "Path or URL to the config file, or '-' to read from STDIN") |
| 36 | 36 |
flag.StringVarP(&cfg.Selector, "label", "l", "", "Selector (label query) to use for listing") |
| 37 | 37 |
flag.DurationVarP(&cfg.UpdatePeriod, "update", "u", 60*time.Second, "Update interval period") |
| ... | ... |
@@ -45,9 +45,10 @@ func NewCommandKubecfg(name string) *cobra.Command {
|
| 45 | 45 |
flag.StringVar(&cfg.WWW, "www", "", "If -proxy is true, use this directory to serve static files") |
| 46 | 46 |
flag.StringVar(&cfg.TemplateFile, "template_file", "", "If present, load this file as a golang template and use it for output printing") |
| 47 | 47 |
flag.StringVar(&cfg.TemplateStr, "template", "", "If present, parse this string as a golang template and use it for output printing") |
| 48 |
- flag.StringVar(&cfg.CAFile, "certificate_authority", "", "Path to a cert. file for the certificate authority") |
|
| 49 |
- flag.StringVar(&cfg.CertFile, "client_certificate", "", "Path to a client certificate for TLS.") |
|
| 50 |
- flag.StringVar(&cfg.KeyFile, "client_key", "", "Path to a client key file for TLS.") |
|
| 48 |
+ flag.StringVar(&cfg.ClientConfig.CAFile, "certificate_authority", "", "Path to a cert. file for the certificate authority") |
|
| 49 |
+ flag.StringVar(&cfg.ClientConfig.CertFile, "client_certificate", "", "Path to a client certificate for TLS.") |
|
| 50 |
+ flag.StringVar(&cfg.ClientConfig.KeyFile, "client_key", "", "Path to a client key file for TLS.") |
|
| 51 |
+ flag.BoolVar(&cfg.ClientConfig.Insecure, "insecure_skip_tls_verify", false, "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.") |
|
| 51 | 52 |
flag.StringVar(&cfg.ImageName, "image", "", "Image used when updating a replicationController. Will apply to the first container in the pod template.") |
| 52 | 53 |
|
| 53 | 54 |
return cmd |
| ... | ... |
@@ -54,9 +54,9 @@ import ( |
| 54 | 54 |
) |
| 55 | 55 |
|
| 56 | 56 |
type KubeConfig struct {
|
| 57 |
+ ClientConfig kubeclient.Config |
|
| 57 | 58 |
ServerVersion bool |
| 58 | 59 |
PreventSkew bool |
| 59 |
- HttpServer string |
|
| 60 | 60 |
Config string |
| 61 | 61 |
TemplateConfig string |
| 62 | 62 |
Selector string |
| ... | ... |
@@ -74,10 +74,6 @@ type KubeConfig struct {
|
| 74 | 74 |
|
| 75 | 75 |
ImageName string |
| 76 | 76 |
|
| 77 |
- CAFile string |
|
| 78 |
- CertFile string |
|
| 79 |
- KeyFile string |
|
| 80 |
- |
|
| 81 | 77 |
APIVersion string |
| 82 | 78 |
OSAPIVersion string |
| 83 | 79 |
|
| ... | ... |
@@ -193,48 +189,47 @@ func (c *KubeConfig) Run() {
|
| 193 | 193 |
util.InitLogs() |
| 194 | 194 |
defer util.FlushLogs() |
| 195 | 195 |
|
| 196 |
- var masterServer string |
|
| 197 |
- if len(c.HttpServer) > 0 {
|
|
| 198 |
- masterServer = c.HttpServer |
|
| 199 |
- } else if len(os.Getenv("KUBERNETES_MASTER")) > 0 {
|
|
| 200 |
- masterServer = os.Getenv("KUBERNETES_MASTER")
|
|
| 201 |
- } else {
|
|
| 202 |
- masterServer = "http://localhost:8080" |
|
| 203 |
- } |
|
| 204 |
- kubeClient, err := kubeclient.New(masterServer, c.APIVersion, nil) |
|
| 205 |
- if err != nil {
|
|
| 206 |
- glog.Fatalf("Unable to parse %s as a URL: %v", masterServer, err)
|
|
| 196 |
+ clientConfig := &c.ClientConfig |
|
| 197 |
+ // Initialize the client |
|
| 198 |
+ if clientConfig.Host == "" {
|
|
| 199 |
+ clientConfig.Host = os.Getenv("KUBERNETES_MASTER")
|
|
| 207 | 200 |
} |
| 208 |
- client, err := osclient.New(masterServer, c.OSAPIVersion, nil) |
|
| 209 |
- if err != nil {
|
|
| 210 |
- glog.Fatalf("Unable to parse %s as a URL: %v", masterServer, err)
|
|
| 201 |
+ if clientConfig.Host == "" {
|
|
| 202 |
+ // TODO: eventually apiserver should start on 443 and be secure by default |
|
| 203 |
+ clientConfig.Host = "http://localhost:8080" |
|
| 211 | 204 |
} |
| 212 | 205 |
|
| 213 |
- // TODO: this won't work if TLS is enabled with client cert auth, but no |
|
| 214 |
- // passwords are required. Refactor when we address client auth abstraction. |
|
| 215 |
- if kubeClient.Secure() {
|
|
| 206 |
+ if kubeclient.IsConfigTransportSecure(clientConfig) {
|
|
| 216 | 207 |
auth, err := kubecfg.LoadAuthInfo(c.AuthConfig, os.Stdin) |
| 217 | 208 |
if err != nil {
|
| 218 | 209 |
glog.Fatalf("Error loading auth: %v", err)
|
| 219 | 210 |
} |
| 220 |
- if c.CAFile != "" {
|
|
| 221 |
- auth.CAFile = c.CAFile |
|
| 222 |
- } |
|
| 223 |
- if c.CertFile != "" {
|
|
| 224 |
- auth.CertFile = c.CertFile |
|
| 211 |
+ clientConfig.Username = auth.User |
|
| 212 |
+ clientConfig.Password = auth.Password |
|
| 213 |
+ if auth.CAFile != "" {
|
|
| 214 |
+ clientConfig.CAFile = auth.CAFile |
|
| 225 | 215 |
} |
| 226 |
- if c.KeyFile != "" {
|
|
| 227 |
- auth.KeyFile = c.KeyFile |
|
| 216 |
+ if auth.CertFile != "" {
|
|
| 217 |
+ clientConfig.CertFile = auth.CertFile |
|
| 228 | 218 |
} |
| 229 |
- kubeClient, err = kubeclient.New(masterServer, c.APIVersion, auth) |
|
| 230 |
- if err != nil {
|
|
| 231 |
- glog.Fatalf("Unable to parse %s as a URL: %v", masterServer, err)
|
|
| 219 |
+ if auth.KeyFile != "" {
|
|
| 220 |
+ clientConfig.KeyFile = auth.KeyFile |
|
| 232 | 221 |
} |
| 233 |
- client, err = osclient.New(masterServer, c.OSAPIVersion, auth) |
|
| 234 |
- if err != nil {
|
|
| 235 |
- glog.Fatalf("Unable to parse %s as a URL: %v", masterServer, err)
|
|
| 222 |
+ if auth.Insecure != nil {
|
|
| 223 |
+ clientConfig.Insecure = *auth.Insecure |
|
| 236 | 224 |
} |
| 237 | 225 |
} |
| 226 |
+ clientConfig.Version = c.APIVersion |
|
| 227 |
+ kubeClient, err := kubeclient.New(clientConfig) |
|
| 228 |
+ if err != nil {
|
|
| 229 |
+ glog.Fatalf("Unable to set up the Kubernetes API client: %v", err)
|
|
| 230 |
+ } |
|
| 231 |
+ |
|
| 232 |
+ clientConfig.Version = c.OSAPIVersion |
|
| 233 |
+ client, err := osclient.New(clientConfig) |
|
| 234 |
+ if err != nil {
|
|
| 235 |
+ glog.Fatalf("Unable to set up the OpenShift API client: %v", err)
|
|
| 236 |
+ } |
|
| 238 | 237 |
|
| 239 | 238 |
// check the kubernetes server version |
| 240 | 239 |
if c.ServerVersion {
|
| ... | ... |
@@ -438,14 +433,15 @@ func (c *KubeConfig) executeControllerRequest(method string, client *kubeclient. |
| 438 | 438 |
return c.Arg(1) |
| 439 | 439 |
} |
| 440 | 440 |
|
| 441 |
+ ctx := api.NewContext() |
|
| 441 | 442 |
var err error |
| 442 | 443 |
switch method {
|
| 443 | 444 |
case "stop": |
| 444 |
- err = kubecfg.StopController(parseController(), client) |
|
| 445 |
+ err = kubecfg.StopController(ctx, parseController(), client) |
|
| 445 | 446 |
case "rm": |
| 446 |
- err = kubecfg.DeleteController(parseController(), client) |
|
| 447 |
+ err = kubecfg.DeleteController(ctx, parseController(), client) |
|
| 447 | 448 |
case "rollingupdate": |
| 448 |
- err = kubecfg.Update(parseController(), client, c.UpdatePeriod, c.ImageName) |
|
| 449 |
+ err = kubecfg.Update(ctx, parseController(), client, c.UpdatePeriod, c.ImageName) |
|
| 449 | 450 |
case "run": |
| 450 | 451 |
if len(c.Args) != 4 {
|
| 451 | 452 |
glog.Fatal("usage: kubecfg [OPTIONS] run <image> <replicas> <controller>")
|
| ... | ... |
@@ -456,7 +452,7 @@ func (c *KubeConfig) executeControllerRequest(method string, client *kubeclient. |
| 456 | 456 |
if err != nil {
|
| 457 | 457 |
glog.Fatalf("Error parsing replicas: %v", err)
|
| 458 | 458 |
} |
| 459 |
- err = kubecfg.RunController(image, name, replicas, client, c.PortSpec, c.ServicePort) |
|
| 459 |
+ err = kubecfg.RunController(ctx, image, name, replicas, client, c.PortSpec, c.ServicePort) |
|
| 460 | 460 |
case "resize": |
| 461 | 461 |
args := c.Args |
| 462 | 462 |
if len(args) < 3 {
|
| ... | ... |
@@ -467,7 +463,7 @@ func (c *KubeConfig) executeControllerRequest(method string, client *kubeclient. |
| 467 | 467 |
if err != nil {
|
| 468 | 468 |
glog.Fatalf("Error parsing replicas: %v", err)
|
| 469 | 469 |
} |
| 470 |
- err = kubecfg.ResizeController(name, replicas, client) |
|
| 470 |
+ err = kubecfg.ResizeController(ctx, name, replicas, client) |
|
| 471 | 471 |
default: |
| 472 | 472 |
return false |
| 473 | 473 |
} |
| ... | ... |
@@ -50,16 +50,16 @@ import ( |
| 50 | 50 |
"github.com/openshift/origin/pkg/image/registry/image" |
| 51 | 51 |
"github.com/openshift/origin/pkg/image/registry/imagerepository" |
| 52 | 52 |
"github.com/openshift/origin/pkg/image/registry/imagerepositorymapping" |
| 53 |
- routeregistry "github.com/openshift/origin/pkg/route/registry/route" |
|
| 54 | 53 |
routeetcd "github.com/openshift/origin/pkg/route/registry/etcd" |
| 54 |
+ routeregistry "github.com/openshift/origin/pkg/route/registry/route" |
|
| 55 | 55 |
"github.com/openshift/origin/pkg/template" |
| 56 | 56 |
"github.com/openshift/origin/pkg/version" |
| 57 | 57 |
|
| 58 | 58 |
// Register versioned api types |
| 59 | 59 |
_ "github.com/openshift/origin/pkg/config/api/v1beta1" |
| 60 | 60 |
_ "github.com/openshift/origin/pkg/image/api/v1beta1" |
| 61 |
- _ "github.com/openshift/origin/pkg/template/api/v1beta1" |
|
| 62 | 61 |
_ "github.com/openshift/origin/pkg/route/api/v1beta1" |
| 62 |
+ _ "github.com/openshift/origin/pkg/template/api/v1beta1" |
|
| 63 | 63 |
) |
| 64 | 64 |
|
| 65 | 65 |
func NewCommandStartAllInOne(name string) *cobra.Command {
|
| ... | ... |
@@ -73,6 +73,7 @@ func NewCommandStartAllInOne(name string) *cobra.Command {
|
| 73 | 73 |
cfg.masterHost = env("OPENSHIFT_MASTER", "127.0.0.1")
|
| 74 | 74 |
cfg.bindAddr = env("OPENSHIFT_BIND_ADDR", "127.0.0.1")
|
| 75 | 75 |
cfg.nodeHosts = []string{"127.0.0.1"}
|
| 76 |
+ cfg.networkContainerImage = env("KUBERNETES_NETWORK_CONTAINER_IMAGE", kubelet.NetworkContainerImage)
|
|
| 76 | 77 |
|
| 77 | 78 |
if len(os.Getenv("OPENSHIFT_MASTER")) > 0 {
|
| 78 | 79 |
if cfg.masterHost == cfg.bindAddr {
|
| ... | ... |
@@ -106,10 +107,13 @@ type config struct {
|
| 106 | 106 |
VolumeDir string |
| 107 | 107 |
EtcdDir string |
| 108 | 108 |
Docker docker.Helper |
| 109 |
+ |
|
| 109 | 110 |
masterHost string |
| 110 | 111 |
nodeHosts []string |
| 111 | 112 |
bindAddr string |
| 112 | 113 |
|
| 114 |
+ networkContainerImage string |
|
| 115 |
+ |
|
| 113 | 116 |
storageVersion string |
| 114 | 117 |
} |
| 115 | 118 |
|
| ... | ... |
@@ -121,15 +125,15 @@ func (c *config) newEtcdHelper() (helper tools.EtcdHelper, err error) {
|
| 121 | 121 |
if version == "" {
|
| 122 | 122 |
version = latest.Version |
| 123 | 123 |
} |
| 124 |
- codec, versioner, err := latest.InterfacesFor(version) |
|
| 124 |
+ interfaces, err := latest.InterfacesFor(version) |
|
| 125 | 125 |
if err != nil {
|
| 126 | 126 |
return helper, err |
| 127 | 127 |
} |
| 128 |
- return tools.EtcdHelper{client, codec, versioner}, nil
|
|
| 128 |
+ return tools.EtcdHelper{client, interfaces.Codec, interfaces.ResourceVersioner}, nil
|
|
| 129 | 129 |
} |
| 130 | 130 |
|
| 131 | 131 |
func (c *config) getKubeClient() *kubeclient.Client {
|
| 132 |
- kubeClient, err := kubeclient.New("http://"+c.ListenAddr, klatest.Version, nil)
|
|
| 132 |
+ kubeClient, err := kubeclient.New(&kubeclient.Config{Host: c.ListenAddr, Version: klatest.Version})
|
|
| 133 | 133 |
if err != nil {
|
| 134 | 134 |
glog.Fatalf("Unable to configure client - bad URL: %v", err)
|
| 135 | 135 |
} |
| ... | ... |
@@ -137,7 +141,7 @@ func (c *config) getKubeClient() *kubeclient.Client {
|
| 137 | 137 |
} |
| 138 | 138 |
|
| 139 | 139 |
func (c *config) getOsClient() *osclient.Client {
|
| 140 |
- osClient, err := osclient.New("http://"+c.ListenAddr, latest.Version, nil)
|
|
| 140 |
+ osClient, err := osclient.New(&kubeclient.Config{Host: c.ListenAddr, Version: latest.Version})
|
|
| 141 | 141 |
if err != nil {
|
| 142 | 142 |
glog.Fatalf("Unable to configure client - bad URL: %v", err)
|
| 143 | 143 |
} |
| ... | ... |
@@ -257,7 +261,7 @@ func (c *config) runApiserver() {
|
| 257 | 257 |
|
| 258 | 258 |
apiserver.NewAPIGroup(m.API_v1beta1()).InstallREST(osMux, kubePrefix) |
| 259 | 259 |
apiserver.NewAPIGroup(m.API_v1beta2()).InstallREST(osMux, kube2Prefix) |
| 260 |
- apiserver.NewAPIGroup(storage, v1beta1.Codec).InstallREST(osMux, osPrefix) |
|
| 260 |
+ apiserver.NewAPIGroup(storage, v1beta1.Codec, osPrefix, latest.SelfLinker).InstallREST(osMux, osPrefix) |
|
| 261 | 261 |
apiserver.InstallSupport(osMux) |
| 262 | 262 |
|
| 263 | 263 |
osApi := &http.Server{
|
| ... | ... |
@@ -342,7 +346,10 @@ func (c *config) runKubelet() {
|
| 342 | 342 |
cadvisorClient, |
| 343 | 343 |
etcdClient, |
| 344 | 344 |
rootDirectory, |
| 345 |
- 30*time.Second) |
|
| 345 |
+ c.networkContainerImage, |
|
| 346 |
+ 30*time.Second, |
|
| 347 |
+ 0.0, |
|
| 348 |
+ 10) |
|
| 346 | 349 |
go util.Forever(func() { k.Run(cfg.Updates()) }, 0)
|
| 347 | 350 |
go util.Forever(func() {
|
| 348 | 351 |
kubelet.ListenAndServeKubeletServer(k, cfg.Channel("http"), minionHost, uint(minionPort))
|
| ... | ... |
@@ -3,7 +3,7 @@ package deploy |
| 3 | 3 |
import ( |
| 4 | 4 |
"time" |
| 5 | 5 |
|
| 6 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 6 |
+ kubeapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 7 | 7 |
kubeclient "github.com/GoogleCloudPlatform/kubernetes/pkg/client" |
| 8 | 8 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| 9 | 9 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" |
| ... | ... |
@@ -31,11 +31,11 @@ type DeploymentStateHandler interface {
|
| 31 | 31 |
type DefaultDeploymentHandler struct {
|
| 32 | 32 |
osClient osclient.Interface |
| 33 | 33 |
kubeClient kubeclient.Interface |
| 34 |
- environment []api.EnvVar |
|
| 34 |
+ environment []kubeapi.EnvVar |
|
| 35 | 35 |
} |
| 36 | 36 |
|
| 37 | 37 |
// NewDeploymentController creates a new DeploymentController. |
| 38 |
-func NewDeploymentController(kubeClient kubeclient.Interface, osClient osclient.Interface, initialEnvironment []api.EnvVar) *DeploymentController {
|
|
| 38 |
+func NewDeploymentController(kubeClient kubeclient.Interface, osClient osclient.Interface, initialEnvironment []kubeapi.EnvVar) *DeploymentController {
|
|
| 39 | 39 |
dc := &DeploymentController{
|
| 40 | 40 |
kubeClient: kubeClient, |
| 41 | 41 |
osClient: osClient, |
| ... | ... |
@@ -101,31 +101,31 @@ func (dh *DefaultDeploymentHandler) saveDeployment(deployment *deployapi.Deploym |
| 101 | 101 |
return err |
| 102 | 102 |
} |
| 103 | 103 |
|
| 104 |
-func (dh *DefaultDeploymentHandler) makeDeploymentPod(deployment *deployapi.Deployment) *api.Pod {
|
|
| 104 |
+func (dh *DefaultDeploymentHandler) makeDeploymentPod(deployment *deployapi.Deployment) *kubeapi.Pod {
|
|
| 105 | 105 |
podID := deploymentPodID(deployment) |
| 106 | 106 |
|
| 107 | 107 |
envVars := deployment.Strategy.CustomPod.Environment |
| 108 |
- envVars = append(envVars, api.EnvVar{Name: "KUBERNETES_DEPLOYMENT_ID", Value: deployment.ID})
|
|
| 108 |
+ envVars = append(envVars, kubeapi.EnvVar{Name: "KUBERNETES_DEPLOYMENT_ID", Value: deployment.ID})
|
|
| 109 | 109 |
for _, env := range dh.environment {
|
| 110 | 110 |
envVars = append(envVars, env) |
| 111 | 111 |
} |
| 112 | 112 |
|
| 113 |
- return &api.Pod{
|
|
| 114 |
- JSONBase: api.JSONBase{
|
|
| 113 |
+ return &kubeapi.Pod{
|
|
| 114 |
+ JSONBase: kubeapi.JSONBase{
|
|
| 115 | 115 |
ID: podID, |
| 116 | 116 |
}, |
| 117 |
- DesiredState: api.PodState{
|
|
| 118 |
- Manifest: api.ContainerManifest{
|
|
| 117 |
+ DesiredState: kubeapi.PodState{
|
|
| 118 |
+ Manifest: kubeapi.ContainerManifest{
|
|
| 119 | 119 |
Version: "v1beta1", |
| 120 |
- Containers: []api.Container{
|
|
| 120 |
+ Containers: []kubeapi.Container{
|
|
| 121 | 121 |
{
|
| 122 | 122 |
Name: "deployment", |
| 123 | 123 |
Image: deployment.Strategy.CustomPod.Image, |
| 124 | 124 |
Env: envVars, |
| 125 | 125 |
}, |
| 126 | 126 |
}, |
| 127 |
- RestartPolicy: api.RestartPolicy{
|
|
| 128 |
- Never: &api.RestartPolicyNever{},
|
|
| 127 |
+ RestartPolicy: kubeapi.RestartPolicy{
|
|
| 128 |
+ Never: &kubeapi.RestartPolicyNever{},
|
|
| 129 | 129 |
}, |
| 130 | 130 |
}, |
| 131 | 131 |
}, |
| ... | ... |
@@ -140,7 +140,7 @@ func deploymentPodID(deployment *deployapi.Deployment) string {
|
| 140 | 140 |
func (dh *DefaultDeploymentHandler) HandleNew(deployment *deployapi.Deployment) error {
|
| 141 | 141 |
deploymentPod := dh.makeDeploymentPod(deployment) |
| 142 | 142 |
glog.Infof("Attempting to create deployment pod: %+v", deploymentPod)
|
| 143 |
- if pod, err := dh.kubeClient.CreatePod(deploymentPod); err != nil {
|
|
| 143 |
+ if pod, err := dh.kubeClient.CreatePod(kubeapi.NewContext(), deploymentPod); err != nil {
|
|
| 144 | 144 |
glog.Warningf("Received error creating pod: %v", err)
|
| 145 | 145 |
deployment.State = deployapi.DeploymentFailed |
| 146 | 146 |
} else {
|
| ... | ... |
@@ -155,7 +155,7 @@ func (dh *DefaultDeploymentHandler) HandleNew(deployment *deployapi.Deployment) |
| 155 | 155 |
func (dh *DefaultDeploymentHandler) HandlePending(deployment *deployapi.Deployment) error {
|
| 156 | 156 |
podID := deploymentPodID(deployment) |
| 157 | 157 |
glog.Infof("Retrieving deployment pod id %s", podID)
|
| 158 |
- pod, err := dh.kubeClient.GetPod(podID) |
|
| 158 |
+ pod, err := dh.kubeClient.GetPod(kubeapi.NewContext(), podID) |
|
| 159 | 159 |
if err != nil {
|
| 160 | 160 |
glog.Errorf("Error retrieving pod for deployment ID %v: %#v", deployment.ID, err)
|
| 161 | 161 |
deployment.State = deployapi.DeploymentFailed |
| ... | ... |
@@ -163,9 +163,9 @@ func (dh *DefaultDeploymentHandler) HandlePending(deployment *deployapi.Deployme |
| 163 | 163 |
glog.Infof("Deployment pod is %+v", pod)
|
| 164 | 164 |
|
| 165 | 165 |
switch pod.CurrentState.Status {
|
| 166 |
- case api.PodRunning: |
|
| 166 |
+ case kubeapi.PodRunning: |
|
| 167 | 167 |
deployment.State = deployapi.DeploymentRunning |
| 168 |
- case api.PodTerminated: |
|
| 168 |
+ case kubeapi.PodTerminated: |
|
| 169 | 169 |
dh.checkForTerminatedDeploymentPod(deployment, pod) |
| 170 | 170 |
} |
| 171 | 171 |
} |
| ... | ... |
@@ -177,7 +177,7 @@ func (dh *DefaultDeploymentHandler) HandlePending(deployment *deployapi.Deployme |
| 177 | 177 |
func (dh *DefaultDeploymentHandler) HandleRunning(deployment *deployapi.Deployment) error {
|
| 178 | 178 |
podID := deploymentPodID(deployment) |
| 179 | 179 |
glog.Infof("Retrieving deployment pod id %s", podID)
|
| 180 |
- pod, err := dh.kubeClient.GetPod(podID) |
|
| 180 |
+ pod, err := dh.kubeClient.GetPod(kubeapi.NewContext(), podID) |
|
| 181 | 181 |
if err != nil {
|
| 182 | 182 |
glog.Errorf("Error retrieving pod for deployment ID %v: %#v", deployment.ID, err)
|
| 183 | 183 |
deployment.State = deployapi.DeploymentFailed |
| ... | ... |
@@ -189,15 +189,15 @@ func (dh *DefaultDeploymentHandler) HandleRunning(deployment *deployapi.Deployme |
| 189 | 189 |
return dh.saveDeployment(deployment) |
| 190 | 190 |
} |
| 191 | 191 |
|
| 192 |
-func (dh *DefaultDeploymentHandler) checkForTerminatedDeploymentPod(deployment *deployapi.Deployment, pod *api.Pod) {
|
|
| 193 |
- if pod.CurrentState.Status != api.PodTerminated {
|
|
| 192 |
+func (dh *DefaultDeploymentHandler) checkForTerminatedDeploymentPod(deployment *deployapi.Deployment, pod *kubeapi.Pod) {
|
|
| 193 |
+ if pod.CurrentState.Status != kubeapi.PodTerminated {
|
|
| 194 | 194 |
glog.Infof("The deployment has not yet finished. Pod status is %s. Continuing", pod.CurrentState.Status)
|
| 195 | 195 |
return |
| 196 | 196 |
} |
| 197 | 197 |
|
| 198 | 198 |
deployment.State = deployapi.DeploymentComplete |
| 199 | 199 |
for _, info := range pod.CurrentState.Info {
|
| 200 |
- if info.State.ExitCode != 0 {
|
|
| 200 |
+ if info.State.Termination != nil && info.State.Termination.ExitCode != 0 {
|
|
| 201 | 201 |
deployment.State = deployapi.DeploymentFailed |
| 202 | 202 |
} |
| 203 | 203 |
} |
| ... | ... |
@@ -205,7 +205,7 @@ func (dh *DefaultDeploymentHandler) checkForTerminatedDeploymentPod(deployment * |
| 205 | 205 |
if deployment.State == deployapi.DeploymentComplete {
|
| 206 | 206 |
podID := deploymentPodID(deployment) |
| 207 | 207 |
glog.Infof("Removing deployment pod for ID %v", podID)
|
| 208 |
- dh.kubeClient.DeletePod(podID) |
|
| 208 |
+ dh.kubeClient.DeletePod(kubeapi.NewContext(), podID) |
|
| 209 | 209 |
} |
| 210 | 210 |
|
| 211 | 211 |
glog.Infof("The deployment pod has finished. Setting deployment state to %s", deployment.State)
|
| ... | ... |
@@ -4,7 +4,7 @@ import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
|
| 6 | 6 |
"code.google.com/p/go-uuid/uuid" |
| 7 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 7 |
+ kubeapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 8 | 8 |
kubeerrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" |
| 9 | 9 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" |
| 10 | 10 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| ... | ... |
@@ -26,8 +26,13 @@ func NewREST(registry Registry) apiserver.RESTStorage {
|
| 26 | 26 |
} |
| 27 | 27 |
} |
| 28 | 28 |
|
| 29 |
+// New creates a new Deployment for use with Create and Update |
|
| 30 |
+func (s *REST) New() runtime.Object {
|
|
| 31 |
+ return &deployapi.Deployment{}
|
|
| 32 |
+} |
|
| 33 |
+ |
|
| 29 | 34 |
// List obtains a list of Deployments that match selector. |
| 30 |
-func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 35 |
+func (s *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 31 | 36 |
deployments, err := s.registry.ListDeployments(selector) |
| 32 | 37 |
if err != nil {
|
| 33 | 38 |
return nil, err |
| ... | ... |
@@ -36,13 +41,8 @@ func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
| 36 | 36 |
return deployments, nil |
| 37 | 37 |
} |
| 38 | 38 |
|
| 39 |
-// New creates a new Deployment for use with Create and Update |
|
| 40 |
-func (s *REST) New() runtime.Object {
|
|
| 41 |
- return &deployapi.Deployment{}
|
|
| 42 |
-} |
|
| 43 |
- |
|
| 44 | 39 |
// Get obtains the Deployment specified by its id. |
| 45 |
-func (s *REST) Get(id string) (runtime.Object, error) {
|
|
| 40 |
+func (s *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 46 | 41 |
deployment, err := s.registry.GetDeployment(id) |
| 47 | 42 |
if err != nil {
|
| 48 | 43 |
return nil, err |
| ... | ... |
@@ -51,14 +51,14 @@ func (s *REST) Get(id string) (runtime.Object, error) {
|
| 51 | 51 |
} |
| 52 | 52 |
|
| 53 | 53 |
// Delete asynchronously deletes the Deployment specified by its id. |
| 54 |
-func (s *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 54 |
+func (s *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 55 | 55 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 56 |
- return &api.Status{Status: api.StatusSuccess}, s.registry.DeleteDeployment(id)
|
|
| 56 |
+ return &kubeapi.Status{Status: kubeapi.StatusSuccess}, s.registry.DeleteDeployment(id)
|
|
| 57 | 57 |
}), nil |
| 58 | 58 |
} |
| 59 | 59 |
|
| 60 | 60 |
// Create registers a given new Deployment instance to s.registry. |
| 61 |
-func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 61 |
+func (s *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 62 | 62 |
deployment, ok := obj.(*deployapi.Deployment) |
| 63 | 63 |
if !ok {
|
| 64 | 64 |
return nil, fmt.Errorf("not a deployment: %#v", obj)
|
| ... | ... |
@@ -85,7 +85,7 @@ func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 85 | 85 |
} |
| 86 | 86 |
|
| 87 | 87 |
// Update replaces a given Deployment instance with an existing instance in s.registry. |
| 88 |
-func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 88 |
+func (s *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 89 | 89 |
deployment, ok := obj.(*deployapi.Deployment) |
| 90 | 90 |
if !ok {
|
| 91 | 91 |
return nil, fmt.Errorf("not a deployment: %#v", obj)
|
| ... | ... |
@@ -4,7 +4,7 @@ import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
|
| 6 | 6 |
"code.google.com/p/go-uuid/uuid" |
| 7 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 7 |
+ kubeapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 8 | 8 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" |
| 9 | 9 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| 10 | 10 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" |
| ... | ... |
@@ -23,8 +23,13 @@ func NewREST(registry Registry) apiserver.RESTStorage {
|
| 23 | 23 |
} |
| 24 | 24 |
} |
| 25 | 25 |
|
| 26 |
+// New creates a new DeploymentConfig for use with Create and Update |
|
| 27 |
+func (s *REST) New() runtime.Object {
|
|
| 28 |
+ return &deployapi.DeploymentConfig{}
|
|
| 29 |
+} |
|
| 30 |
+ |
|
| 26 | 31 |
// List obtains a list of DeploymentConfigs that match selector. |
| 27 |
-func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 32 |
+func (s *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 28 | 33 |
deploymentConfigs, err := s.registry.ListDeploymentConfigs(selector) |
| 29 | 34 |
if err != nil {
|
| 30 | 35 |
return nil, err |
| ... | ... |
@@ -34,7 +39,7 @@ func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
| 34 | 34 |
} |
| 35 | 35 |
|
| 36 | 36 |
// Get obtains the DeploymentConfig specified by its id. |
| 37 |
-func (s *REST) Get(id string) (runtime.Object, error) {
|
|
| 37 |
+func (s *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 38 | 38 |
deploymentConfig, err := s.registry.GetDeploymentConfig(id) |
| 39 | 39 |
if err != nil {
|
| 40 | 40 |
return nil, err |
| ... | ... |
@@ -43,19 +48,14 @@ func (s *REST) Get(id string) (runtime.Object, error) {
|
| 43 | 43 |
} |
| 44 | 44 |
|
| 45 | 45 |
// Delete asynchronously deletes the DeploymentConfig specified by its id. |
| 46 |
-func (s *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 46 |
+func (s *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 47 | 47 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 48 |
- return &api.Status{Status: api.StatusSuccess}, s.registry.DeleteDeploymentConfig(id)
|
|
| 48 |
+ return &kubeapi.Status{Status: kubeapi.StatusSuccess}, s.registry.DeleteDeploymentConfig(id)
|
|
| 49 | 49 |
}), nil |
| 50 | 50 |
} |
| 51 | 51 |
|
| 52 |
-// New creates a new DeploymentConfig for use with Create and Update |
|
| 53 |
-func (s *REST) New() runtime.Object {
|
|
| 54 |
- return &deployapi.DeploymentConfig{}
|
|
| 55 |
-} |
|
| 56 |
- |
|
| 57 | 52 |
// Create registers a given new DeploymentConfig instance to s.registry. |
| 58 |
-func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 53 |
+func (s *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 59 | 54 |
deploymentConfig, ok := obj.(*deployapi.DeploymentConfig) |
| 60 | 55 |
if !ok {
|
| 61 | 56 |
return nil, fmt.Errorf("not a deploymentConfig: %#v", obj)
|
| ... | ... |
@@ -76,7 +76,7 @@ func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 76 | 76 |
} |
| 77 | 77 |
|
| 78 | 78 |
// Update replaces a given DeploymentConfig instance with an existing instance in s.registry. |
| 79 |
-func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 79 |
+func (s *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 80 | 80 |
deploymentConfig, ok := obj.(*deployapi.DeploymentConfig) |
| 81 | 81 |
if !ok {
|
| 82 | 82 |
return nil, fmt.Errorf("not a deploymentConfig: %#v", obj)
|
| ... | ... |
@@ -55,7 +55,7 @@ func (r *Etcd) GetDeployment(id string) (*api.Deployment, error) {
|
| 55 | 55 |
|
| 56 | 56 |
// CreateDeployment creates a new Deployment. |
| 57 | 57 |
func (r *Etcd) CreateDeployment(deployment *api.Deployment) error {
|
| 58 |
- err := r.CreateObj(makeDeploymentKey(deployment.ID), deployment) |
|
| 58 |
+ err := r.CreateObj(makeDeploymentKey(deployment.ID), deployment, 0) |
|
| 59 | 59 |
return etcderr.InterpretCreateError(err, "deployment", deployment.ID) |
| 60 | 60 |
} |
| 61 | 61 |
|
| ... | ... |
@@ -107,7 +107,7 @@ func (r *Etcd) GetDeploymentConfig(id string) (*api.DeploymentConfig, error) {
|
| 107 | 107 |
|
| 108 | 108 |
// CreateDeploymentConfig creates a new DeploymentConfig. |
| 109 | 109 |
func (r *Etcd) CreateDeploymentConfig(deploymentConfig *api.DeploymentConfig) error {
|
| 110 |
- err := r.CreateObj(makeDeploymentConfigKey(deploymentConfig.ID), deploymentConfig) |
|
| 110 |
+ err := r.CreateObj(makeDeploymentConfigKey(deploymentConfig.ID), deploymentConfig, 0) |
|
| 111 | 111 |
return etcderr.InterpretCreateError(err, "deploymentConfig", deploymentConfig.ID) |
| 112 | 112 |
} |
| 113 | 113 |
|
| ... | ... |
@@ -57,7 +57,7 @@ func (r *Etcd) GetImage(id string) (*api.Image, error) {
|
| 57 | 57 |
|
| 58 | 58 |
// CreateImage creates a new image |
| 59 | 59 |
func (r *Etcd) CreateImage(image *api.Image) error {
|
| 60 |
- err := r.CreateObj(makeImageKey(image.ID), image) |
|
| 60 |
+ err := r.CreateObj(makeImageKey(image.ID), image, 0) |
|
| 61 | 61 |
return etcderr.InterpretCreateError(err, "image", image.ID) |
| 62 | 62 |
} |
| 63 | 63 |
|
| ... | ... |
@@ -117,7 +117,7 @@ func (r *Etcd) WatchImageRepositories(resourceVersion uint64, filter func(repo * |
| 117 | 117 |
|
| 118 | 118 |
// CreateImageRepository registers the given ImageRepository. |
| 119 | 119 |
func (r *Etcd) CreateImageRepository(repo *api.ImageRepository) error {
|
| 120 |
- err := r.CreateObj(makeImageRepositoryKey(repo.ID), repo) |
|
| 120 |
+ err := r.CreateObj(makeImageRepositoryKey(repo.ID), repo, 0) |
|
| 121 | 121 |
return etcderr.InterpretCreateError(err, "imageRepository", repo.ID) |
| 122 | 122 |
} |
| 123 | 123 |
|
| ... | ... |
@@ -29,27 +29,27 @@ func (s *REST) New() runtime.Object {
|
| 29 | 29 |
return &api.Image{}
|
| 30 | 30 |
} |
| 31 | 31 |
|
| 32 |
-// Get retrieves an Image by id. |
|
| 33 |
-func (s *REST) Get(id string) (runtime.Object, error) {
|
|
| 34 |
- image, err := s.registry.GetImage(id) |
|
| 32 |
+// List retrieves a list of Images that match selector. |
|
| 33 |
+func (s *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 34 |
+ images, err := s.registry.ListImages(selector) |
|
| 35 | 35 |
if err != nil {
|
| 36 | 36 |
return nil, err |
| 37 | 37 |
} |
| 38 |
- return image, nil |
|
| 38 |
+ |
|
| 39 |
+ return images, nil |
|
| 39 | 40 |
} |
| 40 | 41 |
|
| 41 |
-// List retrieves a list of Images that match selector. |
|
| 42 |
-func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 43 |
- images, err := s.registry.ListImages(selector) |
|
| 42 |
+// Get retrieves an Image by id. |
|
| 43 |
+func (s *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 44 |
+ image, err := s.registry.GetImage(id) |
|
| 44 | 45 |
if err != nil {
|
| 45 | 46 |
return nil, err |
| 46 | 47 |
} |
| 47 |
- |
|
| 48 |
- return images, nil |
|
| 48 |
+ return image, nil |
|
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 | 51 |
// Create registers the given Image. |
| 52 |
-func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 52 |
+func (s *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 53 | 53 |
image, ok := obj.(*api.Image) |
| 54 | 54 |
if !ok {
|
| 55 | 55 |
return nil, fmt.Errorf("not an image: %#v", obj)
|
| ... | ... |
@@ -65,17 +65,17 @@ func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 65 | 65 |
if err := s.registry.CreateImage(image); err != nil {
|
| 66 | 66 |
return nil, err |
| 67 | 67 |
} |
| 68 |
- return s.Get(image.ID) |
|
| 68 |
+ return s.Get(ctx, image.ID) |
|
| 69 | 69 |
}), nil |
| 70 | 70 |
} |
| 71 | 71 |
|
| 72 | 72 |
// Update is not supported for Images, as they are immutable. |
| 73 |
-func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 73 |
+func (s *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 74 | 74 |
return nil, fmt.Errorf("Images may not be changed.")
|
| 75 | 75 |
} |
| 76 | 76 |
|
| 77 | 77 |
// Delete asynchronously deletes an Image specified by its id. |
| 78 |
-func (s *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 78 |
+func (s *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 79 | 79 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 80 | 80 |
return &kubeapi.Status{Status: kubeapi.StatusSuccess}, s.registry.DeleteImage(id)
|
| 81 | 81 |
}), nil |
| ... | ... |
@@ -5,7 +5,7 @@ import ( |
| 5 | 5 |
|
| 6 | 6 |
"code.google.com/p/go-uuid/uuid" |
| 7 | 7 |
|
| 8 |
- baseapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 8 |
+ kubeapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 9 | 9 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" |
| 10 | 10 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| 11 | 11 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" |
| ... | ... |
@@ -30,26 +30,26 @@ func (s *REST) New() runtime.Object {
|
| 30 | 30 |
return &api.ImageRepository{}
|
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 |
-// Get retrieves an ImageRepository by id. |
|
| 34 |
-func (s *REST) Get(id string) (runtime.Object, error) {
|
|
| 35 |
- repo, err := s.registry.GetImageRepository(id) |
|
| 33 |
+// List retrieves a list of ImageRepositories that match selector. |
|
| 34 |
+func (s *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 35 |
+ imageRepositories, err := s.registry.ListImageRepositories(selector) |
|
| 36 | 36 |
if err != nil {
|
| 37 | 37 |
return nil, err |
| 38 | 38 |
} |
| 39 |
- return repo, nil |
|
| 39 |
+ return imageRepositories, err |
|
| 40 | 40 |
} |
| 41 | 41 |
|
| 42 |
-// List retrieves a list of ImageRepositories that match selector. |
|
| 43 |
-func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 44 |
- imageRepositories, err := s.registry.ListImageRepositories(selector) |
|
| 42 |
+// Get retrieves an ImageRepository by id. |
|
| 43 |
+func (s *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 44 |
+ repo, err := s.registry.GetImageRepository(id) |
|
| 45 | 45 |
if err != nil {
|
| 46 | 46 |
return nil, err |
| 47 | 47 |
} |
| 48 |
- return imageRepositories, err |
|
| 48 |
+ return repo, nil |
|
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 | 51 |
// Watch begins watching for new, changed, or deleted ImageRepositories. |
| 52 |
-func (s *REST) Watch(label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) {
|
|
| 52 |
+func (s *REST) Watch(ctx kubeapi.Context, label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) {
|
|
| 53 | 53 |
return s.registry.WatchImageRepositories(resourceVersion, func(repo *api.ImageRepository) bool {
|
| 54 | 54 |
fields := labels.Set{
|
| 55 | 55 |
"ID": repo.ID, |
| ... | ... |
@@ -60,7 +60,7 @@ func (s *REST) Watch(label, field labels.Selector, resourceVersion uint64) (watc |
| 60 | 60 |
} |
| 61 | 61 |
|
| 62 | 62 |
// Create registers the given ImageRepository. |
| 63 |
-func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 63 |
+func (s *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 64 | 64 |
repo, ok := obj.(*api.ImageRepository) |
| 65 | 65 |
if !ok {
|
| 66 | 66 |
return nil, fmt.Errorf("not an image repository: %#v", obj)
|
| ... | ... |
@@ -80,12 +80,12 @@ func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 80 | 80 |
if err := s.registry.CreateImageRepository(repo); err != nil {
|
| 81 | 81 |
return nil, err |
| 82 | 82 |
} |
| 83 |
- return s.Get(repo.ID) |
|
| 83 |
+ return s.Get(ctx, repo.ID) |
|
| 84 | 84 |
}), nil |
| 85 | 85 |
} |
| 86 | 86 |
|
| 87 | 87 |
// Update replaces an existing ImageRepository in the registry with the given ImageRepository. |
| 88 |
-func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 88 |
+func (s *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 89 | 89 |
repo, ok := obj.(*api.ImageRepository) |
| 90 | 90 |
if !ok {
|
| 91 | 91 |
return nil, fmt.Errorf("not an image repository: %#v", obj)
|
| ... | ... |
@@ -99,13 +99,13 @@ func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 99 | 99 |
if err != nil {
|
| 100 | 100 |
return nil, err |
| 101 | 101 |
} |
| 102 |
- return s.Get(repo.ID) |
|
| 102 |
+ return s.Get(ctx, repo.ID) |
|
| 103 | 103 |
}), nil |
| 104 | 104 |
} |
| 105 | 105 |
|
| 106 | 106 |
// Delete asynchronously deletes an ImageRepository specified by its id. |
| 107 |
-func (s *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 107 |
+func (s *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 108 | 108 |
return apiserver.MakeAsync(func() (runtime.Object, error) {
|
| 109 |
- return &baseapi.Status{Status: baseapi.StatusSuccess}, s.registry.DeleteImageRepository(id)
|
|
| 109 |
+ return &kubeapi.Status{Status: kubeapi.StatusSuccess}, s.registry.DeleteImageRepository(id)
|
|
| 110 | 110 |
}), nil |
| 111 | 111 |
} |
| ... | ... |
@@ -33,18 +33,18 @@ func (s *REST) New() runtime.Object {
|
| 33 | 33 |
return &api.ImageRepositoryMapping{}
|
| 34 | 34 |
} |
| 35 | 35 |
|
| 36 |
-// Get is not supported. |
|
| 37 |
-func (s *REST) Get(id string) (runtime.Object, error) {
|
|
| 38 |
- return nil, errors.NewNotFound("imageRepositoryMapping", id)
|
|
| 39 |
-} |
|
| 40 |
- |
|
| 41 | 36 |
// List is not supported. |
| 42 |
-func (s *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 37 |
+func (s *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 43 | 38 |
return nil, errors.NewNotFound("imageRepositoryMapping", "list")
|
| 44 | 39 |
} |
| 45 | 40 |
|
| 41 |
+// Get is not supported. |
|
| 42 |
+func (s *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 43 |
+ return nil, errors.NewNotFound("imageRepositoryMapping", id)
|
|
| 44 |
+} |
|
| 45 |
+ |
|
| 46 | 46 |
// Create registers a new image (if it doesn't exist) and updates the specified ImageRepository's tags. |
| 47 |
-func (s *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 47 |
+func (s *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 48 | 48 |
mapping, ok := obj.(*api.ImageRepositoryMapping) |
| 49 | 49 |
if !ok {
|
| 50 | 50 |
return nil, fmt.Errorf("not an image repository mapping: %#v", obj)
|
| ... | ... |
@@ -110,11 +110,11 @@ func (s *REST) findImageRepository(dockerRepo string) (*api.ImageRepository, err |
| 110 | 110 |
} |
| 111 | 111 |
|
| 112 | 112 |
// Update is not supported. |
| 113 |
-func (s *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 113 |
+func (s *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 114 | 114 |
return nil, fmt.Errorf("ImageRepositoryMappings may not be changed.")
|
| 115 | 115 |
} |
| 116 | 116 |
|
| 117 | 117 |
// Delete is not supported. |
| 118 |
-func (s *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 118 |
+func (s *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 119 | 119 |
return nil, errors.NewNotFound("imageRepositoryMapping", id)
|
| 120 | 120 |
} |
| ... | ... |
@@ -57,7 +57,7 @@ func (registry *Etcd) GetRoute(routeID string) (*api.Route, error) {
|
| 57 | 57 |
|
| 58 | 58 |
// CreateRoute creates a new Route. |
| 59 | 59 |
func (registry *Etcd) CreateRoute(route *api.Route) error {
|
| 60 |
- err := registry.CreateObj(makeRouteKey(route.ID), route) |
|
| 60 |
+ err := registry.CreateObj(makeRouteKey(route.ID), route, 0) |
|
| 61 | 61 |
return etcderr.InterpretCreateError(err, "route", route.ID) |
| 62 | 62 |
} |
| 63 | 63 |
|
| ... | ... |
@@ -80,7 +80,7 @@ func (registry *Etcd) WatchRoutes(label, field labels.Selector, resourceVersion |
| 80 | 80 |
return nil, fmt.Errorf("label selectors are not supported on routes yet")
|
| 81 | 81 |
} |
| 82 | 82 |
if value, found := field.RequiresExactMatch("ID"); found {
|
| 83 |
- return registry.Watch(makeRouteKey(value), resourceVersion) |
|
| 83 |
+ return registry.Watch(makeRouteKey(value), resourceVersion), nil |
|
| 84 | 84 |
} |
| 85 | 85 |
if field.Empty() {
|
| 86 | 86 |
return registry.WatchList("/routes", resourceVersion, tools.Everything)
|
| ... | ... |
@@ -32,7 +32,7 @@ func (rs *REST) New() runtime.Object {
|
| 32 | 32 |
} |
| 33 | 33 |
|
| 34 | 34 |
// List obtains a list of Routes that match selector. |
| 35 |
-func (rs *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 35 |
+func (rs *REST) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 36 | 36 |
list, err := rs.registry.ListRoutes(selector) |
| 37 | 37 |
if err != nil {
|
| 38 | 38 |
return nil, err |
| ... | ... |
@@ -41,7 +41,7 @@ func (rs *REST) List(selector, fields labels.Selector) (runtime.Object, error) {
|
| 41 | 41 |
} |
| 42 | 42 |
|
| 43 | 43 |
// Get obtains the route specified by its id. |
| 44 |
-func (rs *REST) Get(id string) (runtime.Object, error) {
|
|
| 44 |
+func (rs *REST) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 45 | 45 |
route, err := rs.registry.GetRoute(id) |
| 46 | 46 |
if err != nil {
|
| 47 | 47 |
return nil, err |
| ... | ... |
@@ -50,7 +50,7 @@ func (rs *REST) Get(id string) (runtime.Object, error) {
|
| 50 | 50 |
} |
| 51 | 51 |
|
| 52 | 52 |
// Delete asynchronously deletes the Route specified by its id. |
| 53 |
-func (rs *REST) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 53 |
+func (rs *REST) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 54 | 54 |
_, err := rs.registry.GetRoute(id) |
| 55 | 55 |
if err != nil {
|
| 56 | 56 |
return nil, err |
| ... | ... |
@@ -61,12 +61,12 @@ func (rs *REST) Delete(id string) (<-chan runtime.Object, error) {
|
| 61 | 61 |
} |
| 62 | 62 |
|
| 63 | 63 |
// Create registers a given new Route instance to rs.registry. |
| 64 |
-func (rs *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 64 |
+func (rs *REST) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 65 | 65 |
route, ok := obj.(*api.Route) |
| 66 | 66 |
if !ok {
|
| 67 | 67 |
return nil, fmt.Errorf("not a route: %#v", obj)
|
| 68 | 68 |
} |
| 69 |
- |
|
| 69 |
+ |
|
| 70 | 70 |
if errs := validation.ValidateRoute(route); len(errs) > 0 {
|
| 71 | 71 |
return nil, errors.NewInvalid("route", route.ID, errs)
|
| 72 | 72 |
} |
| ... | ... |
@@ -86,7 +86,7 @@ func (rs *REST) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 86 | 86 |
} |
| 87 | 87 |
|
| 88 | 88 |
// Update replaces a given Route instance with an existing instance in rs.registry. |
| 89 |
-func (rs *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 89 |
+func (rs *REST) Update(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 90 | 90 |
route, ok := obj.(*api.Route) |
| 91 | 91 |
if !ok {
|
| 92 | 92 |
return nil, fmt.Errorf("not a route: %#v", obj)
|
| ... | ... |
@@ -109,6 +109,6 @@ func (rs *REST) Update(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 109 | 109 |
|
| 110 | 110 |
// Watch returns Routes events via a watch.Interface. |
| 111 | 111 |
// It implements apiserver.ResourceWatcher. |
| 112 |
-func (rs *REST) Watch(label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) {
|
|
| 112 |
+func (rs *REST) Watch(ctx kubeapi.Context, label, field labels.Selector, resourceVersion uint64) (watch.Interface, error) {
|
|
| 113 | 113 |
return rs.registry.WatchRoutes(label, field, resourceVersion) |
| 114 | 114 |
} |
| ... | ... |
@@ -6,6 +6,7 @@ import ( |
| 6 | 6 |
"math/rand" |
| 7 | 7 |
"time" |
| 8 | 8 |
|
| 9 |
+ kubeapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 9 | 10 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" |
| 10 | 11 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
| 11 | 12 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" |
| ... | ... |
@@ -19,33 +20,23 @@ import ( |
| 19 | 19 |
type Storage struct{}
|
| 20 | 20 |
|
| 21 | 21 |
// NewStorage creates new RESTStorage for the Template objects. |
| 22 |
-func NewStorage() apiserver.RESTStorage {
|
|
| 22 |
+func NewStorage() *Storage {
|
|
| 23 | 23 |
return &Storage{}
|
| 24 | 24 |
} |
| 25 | 25 |
|
| 26 |
-func (s *Storage) List(selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 27 |
- return nil, errors.New("template.Storage.List() is not implemented.")
|
|
| 28 |
-} |
|
| 29 |
- |
|
| 30 |
-func (s *Storage) Get(id string) (runtime.Object, error) {
|
|
| 31 |
- return nil, errors.New("template.Storage.Get() is not implemented.")
|
|
| 32 |
-} |
|
| 33 |
- |
|
| 34 | 26 |
func (s *Storage) New() runtime.Object {
|
| 35 | 27 |
return &api.Template{}
|
| 36 | 28 |
} |
| 37 | 29 |
|
| 38 |
-func (s *Storage) Delete(id string) (<-chan runtime.Object, error) {
|
|
| 39 |
- return apiserver.MakeAsync(func() (runtime.Object, error) {
|
|
| 40 |
- return nil, errors.New("template.Storage.Delete() is not implemented.")
|
|
| 41 |
- }), nil |
|
| 30 |
+func (s *Storage) List(ctx kubeapi.Context, selector, fields labels.Selector) (runtime.Object, error) {
|
|
| 31 |
+ return nil, errors.New("template.Storage.List() is not implemented.")
|
|
| 42 | 32 |
} |
| 43 | 33 |
|
| 44 |
-func (s *Storage) Update(minion runtime.Object) (<-chan runtime.Object, error) {
|
|
| 45 |
- return nil, errors.New("template.Storage.Update() is not implemented.")
|
|
| 34 |
+func (s *Storage) Get(ctx kubeapi.Context, id string) (runtime.Object, error) {
|
|
| 35 |
+ return nil, errors.New("template.Storage.Get() is not implemented.")
|
|
| 46 | 36 |
} |
| 47 | 37 |
|
| 48 |
-func (s *Storage) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 38 |
+func (s *Storage) Create(ctx kubeapi.Context, obj runtime.Object) (<-chan runtime.Object, error) {
|
|
| 49 | 39 |
template, ok := obj.(*api.Template) |
| 50 | 40 |
if !ok {
|
| 51 | 41 |
return nil, errors.New("Not a template config.")
|
| ... | ... |
@@ -62,3 +53,13 @@ func (s *Storage) Create(obj runtime.Object) (<-chan runtime.Object, error) {
|
| 62 | 62 |
return config, err |
| 63 | 63 |
}), nil |
| 64 | 64 |
} |
| 65 |
+ |
|
| 66 |
+func (s *Storage) Update(ctx kubeapi.Context, template runtime.Object) (<-chan runtime.Object, error) {
|
|
| 67 |
+ return nil, errors.New("template.Storage.Update() is not implemented.")
|
|
| 68 |
+} |
|
| 69 |
+ |
|
| 70 |
+func (s *Storage) Delete(ctx kubeapi.Context, id string) (<-chan runtime.Object, error) {
|
|
| 71 |
+ return apiserver.MakeAsync(func() (runtime.Object, error) {
|
|
| 72 |
+ return nil, errors.New("template.Storage.Delete() is not implemented.")
|
|
| 73 |
+ }), nil |
|
| 74 |
+} |