2014-06-06 23:40:48 +00:00
|
|
|
/*
|
|
|
|
Copyright 2014 Google Inc. All rights reserved.
|
|
|
|
|
|
|
|
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 api
|
|
|
|
|
2014-07-01 02:46:10 +00:00
|
|
|
import (
|
2014-07-13 04:46:01 +00:00
|
|
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
2014-07-12 07:15:30 +00:00
|
|
|
"github.com/fsouza/go-dockerclient"
|
2014-07-01 02:46:10 +00:00
|
|
|
)
|
|
|
|
|
2014-06-30 22:20:19 +00:00
|
|
|
// Common string formats
|
|
|
|
// ---------------------
|
|
|
|
// Many fields in this API have formatting requirements. The commonly used
|
|
|
|
// formats are defined here.
|
|
|
|
//
|
|
|
|
// C_IDENTIFIER: This is a string that conforms the definition of an "identifier"
|
|
|
|
// in the C language. This is captured by the following regex:
|
|
|
|
// [A-Za-z_][A-Za-z0-9_]*
|
|
|
|
// This defines the format, but not the length restriction, which should be
|
|
|
|
// specified at the definition of any field of this type.
|
|
|
|
//
|
2014-07-08 20:44:30 +00:00
|
|
|
// DNS_LABEL: This is a string, no more than 63 characters long, that conforms
|
|
|
|
// to the definition of a "label" in RFCs 1035 and 1123. This is captured
|
|
|
|
// by the following regex:
|
2014-06-30 22:20:19 +00:00
|
|
|
// [a-z0-9]([-a-z0-9]*[a-z0-9])?
|
|
|
|
//
|
2014-07-08 20:44:30 +00:00
|
|
|
// DNS_SUBDOMAIN: This is a string, no more than 253 characters long, that conforms
|
|
|
|
// to the definition of a "subdomain" in RFCs 1035 and 1123. This is captured
|
|
|
|
// by the following regex:
|
2014-06-30 22:20:19 +00:00
|
|
|
// [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
|
|
|
|
// or more simply:
|
|
|
|
// DNS_LABEL(\.DNS_LABEL)*
|
|
|
|
|
2014-06-06 23:40:48 +00:00
|
|
|
// ContainerManifest corresponds to the Container Manifest format, documented at:
|
2014-06-12 00:10:10 +00:00
|
|
|
// https://developers.google.com/compute/docs/containers/container_vms#container_manifest
|
2014-06-30 22:20:19 +00:00
|
|
|
// This is used as the representation of Kubernetes workloads.
|
2014-06-06 23:40:48 +00:00
|
|
|
type ContainerManifest struct {
|
2014-06-30 22:20:19 +00:00
|
|
|
// Required: This must be a supported version string, such as "v1beta1".
|
|
|
|
Version string `yaml:"version" json:"version"`
|
2014-07-08 20:44:30 +00:00
|
|
|
// Required: This must be a DNS_SUBDOMAIN.
|
2014-06-30 21:44:46 +00:00
|
|
|
// TODO: ID on Manifest is deprecated and will be removed in the future.
|
2014-06-30 22:20:19 +00:00
|
|
|
ID string `yaml:"id" json:"id"`
|
2014-06-06 23:40:48 +00:00
|
|
|
Volumes []Volume `yaml:"volumes" json:"volumes"`
|
|
|
|
Containers []Container `yaml:"containers" json:"containers"`
|
|
|
|
}
|
|
|
|
|
2014-06-16 05:34:16 +00:00
|
|
|
// Volume represents a named volume in a pod that may be accessed by any containers in the pod.
|
2014-06-06 23:40:48 +00:00
|
|
|
type Volume struct {
|
2014-07-08 20:44:30 +00:00
|
|
|
// Required: This must be a DNS_LABEL. Each volume in a pod must have
|
|
|
|
// a unique name.
|
2014-06-06 23:40:48 +00:00
|
|
|
Name string `yaml:"name" json:"name"`
|
2014-07-16 19:32:59 +00:00
|
|
|
// Source represents the location and type of a volume to mount.
|
|
|
|
// This is optional for now. If not specified, the Volume is implied to be an EmptyDir.
|
|
|
|
// This implied behavior is deprecated and will be removed in a future version.
|
|
|
|
Source *VolumeSource `yaml:"source" json:"source"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type VolumeSource struct {
|
|
|
|
// Only one of the following sources may be specified
|
|
|
|
// HostDirectory represents a pre-existing directory on the host machine that is directly
|
|
|
|
// exposed to the container. This is generally used for system agents or other privileged
|
|
|
|
// things that are allowed to see the host machine. Most containers will NOT need this.
|
|
|
|
// TODO(jonesdl) We need to restrict who can use host directory mounts and
|
|
|
|
// who can/can not mount host directories as read/write.
|
2014-07-15 01:39:30 +00:00
|
|
|
HostDirectory *HostDirectory `yaml:"hostDir" json:"hostDir"`
|
2014-07-16 19:32:59 +00:00
|
|
|
// EmptyDirectory represents a temporary directory that shares a pod's lifetime.
|
|
|
|
EmptyDirectory *EmptyDirectory `yaml:"emptyDir" json:"emptyDir"`
|
2014-07-15 01:39:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Bare host directory volume.
|
|
|
|
type HostDirectory struct {
|
|
|
|
Path string `yaml:"path" json:"path"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-16 19:32:59 +00:00
|
|
|
type EmptyDirectory struct {}
|
|
|
|
|
2014-06-16 05:34:16 +00:00
|
|
|
// Port represents a network port in a single container
|
2014-06-06 23:40:48 +00:00
|
|
|
type Port struct {
|
2014-07-08 20:44:30 +00:00
|
|
|
// Optional: If specified, this must be a DNS_LABEL. Each named port
|
|
|
|
// in a pod must have a unique name.
|
2014-06-30 22:20:19 +00:00
|
|
|
Name string `yaml:"name,omitempty" json:"name,omitempty"`
|
2014-07-08 20:44:30 +00:00
|
|
|
// Optional: Defaults to ContainerPort. If specified, this must be a
|
|
|
|
// valid port number, 0 < x < 65536.
|
2014-06-30 22:20:19 +00:00
|
|
|
HostPort int `yaml:"hostPort,omitempty" json:"hostPort,omitempty"`
|
|
|
|
// Required: This must be a valid port number, 0 < x < 65536.
|
|
|
|
ContainerPort int `yaml:"containerPort" json:"containerPort"`
|
|
|
|
// Optional: Defaults to "TCP".
|
|
|
|
Protocol string `yaml:"protocol,omitempty" json:"protocol,omitempty"`
|
2014-07-09 05:44:15 +00:00
|
|
|
// Optional: What host IP to bind the external port to.
|
|
|
|
HostIP string `yaml:"hostIP,omitempty" json:"hostIP,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-06-16 05:34:16 +00:00
|
|
|
// VolumeMount describes a mounting of a Volume within a container
|
2014-06-06 23:40:48 +00:00
|
|
|
type VolumeMount struct {
|
2014-06-30 22:20:19 +00:00
|
|
|
// Required: This must match the Name of a Volume [above].
|
|
|
|
Name string `yaml:"name" json:"name"`
|
|
|
|
// Optional: Defaults to false (read-write).
|
|
|
|
ReadOnly bool `yaml:"readOnly,omitempty" json:"readOnly,omitempty"`
|
|
|
|
// Required.
|
2014-07-05 02:46:56 +00:00
|
|
|
// Exactly one of the following must be set. If both are set, prefer MountPath.
|
|
|
|
// DEPRECATED: Path will be removed in a future version of the API.
|
2014-06-06 23:40:48 +00:00
|
|
|
MountPath string `yaml:"mountPath,omitempty" json:"mountPath,omitempty"`
|
2014-07-09 05:44:15 +00:00
|
|
|
Path string `yaml:"path,omitempty" json:"path,omitempty"`
|
2014-06-19 23:59:48 +00:00
|
|
|
// One of: "LOCAL" (local volume) or "HOST" (external mount from the host). Default: LOCAL.
|
2014-07-15 01:39:30 +00:00
|
|
|
// DEPRECATED: MountType will be removed in a future version of the API.
|
2014-06-19 23:59:48 +00:00
|
|
|
MountType string `yaml:"mountType,omitempty" json:"mountType,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-06-16 05:34:16 +00:00
|
|
|
// EnvVar represents an environment variable present in a Container
|
2014-06-06 23:40:48 +00:00
|
|
|
type EnvVar struct {
|
2014-06-30 22:20:19 +00:00
|
|
|
// Required: This must be a C_IDENTIFIER.
|
2014-07-01 22:56:30 +00:00
|
|
|
// Exactly one of the following must be set. If both are set, prefer Name.
|
|
|
|
// DEPRECATED: EnvVar.Key will be removed in a future version of the API.
|
2014-06-30 22:20:19 +00:00
|
|
|
Name string `yaml:"name" json:"name"`
|
2014-07-02 17:30:27 +00:00
|
|
|
Key string `yaml:"key,omitempty" json:"key,omitempty"`
|
2014-06-30 22:20:19 +00:00
|
|
|
// Optional: defaults to "".
|
2014-06-06 23:40:48 +00:00
|
|
|
Value string `yaml:"value,omitempty" json:"value,omitempty"`
|
|
|
|
}
|
|
|
|
|
2014-07-10 11:46:35 +00:00
|
|
|
// HTTPGetProbe describes a liveness probe based on HTTP Get requests.
|
2014-07-03 05:35:50 +00:00
|
|
|
type HTTPGetProbe struct {
|
|
|
|
// Path to access on the http server
|
|
|
|
Path string `yaml:"path,omitempty" json:"path,omitempty"`
|
|
|
|
// Name or number of the port to access on the container
|
|
|
|
Port string `yaml:"port,omitempty" json:"port,omitempty"`
|
|
|
|
// Host name to connect to. Optional, default: "localhost"
|
|
|
|
Host string `yaml:"host,omitempty" json:"host,omitempty"`
|
|
|
|
}
|
|
|
|
|
2014-07-10 11:46:35 +00:00
|
|
|
// LivenessProbe describes a liveness probe to be examined to the container.
|
2014-07-03 05:35:50 +00:00
|
|
|
type LivenessProbe struct {
|
|
|
|
// Type of liveness probe. Current legal values "http"
|
|
|
|
Type string `yaml:"type,omitempty" json:"type,omitempty"`
|
|
|
|
// HTTPGetProbe parameters, required if Type == 'http'
|
2014-07-09 23:53:31 +00:00
|
|
|
HTTPGet *HTTPGetProbe `yaml:"httpGet,omitempty" json:"httpGet,omitempty"`
|
2014-07-03 05:35:50 +00:00
|
|
|
// Length of time before health checking is activated. In seconds.
|
|
|
|
InitialDelaySeconds int64 `yaml:"initialDelaySeconds,omitempty" json:"initialDelaySeconds,omitempty"`
|
|
|
|
}
|
|
|
|
|
2014-06-06 23:40:48 +00:00
|
|
|
// Container represents a single container that is expected to be run on the host.
|
|
|
|
type Container struct {
|
2014-07-08 20:44:30 +00:00
|
|
|
// Required: This must be a DNS_LABEL. Each container in a pod must
|
|
|
|
// have a unique name.
|
2014-06-30 22:20:19 +00:00
|
|
|
Name string `yaml:"name" json:"name"`
|
|
|
|
// Required.
|
|
|
|
Image string `yaml:"image" json:"image"`
|
|
|
|
// Optional: Defaults to whatever is defined in the image.
|
|
|
|
Command []string `yaml:"command,omitempty" json:"command,omitempty"`
|
|
|
|
// Optional: Defaults to Docker's default.
|
|
|
|
WorkingDir string `yaml:"workingDir,omitempty" json:"workingDir,omitempty"`
|
|
|
|
Ports []Port `yaml:"ports,omitempty" json:"ports,omitempty"`
|
|
|
|
Env []EnvVar `yaml:"env,omitempty" json:"env,omitempty"`
|
|
|
|
// Optional: Defaults to unlimited.
|
|
|
|
Memory int `yaml:"memory,omitempty" json:"memory,omitempty"`
|
|
|
|
// Optional: Defaults to unlimited.
|
2014-07-09 23:53:31 +00:00
|
|
|
CPU int `yaml:"cpu,omitempty" json:"cpu,omitempty"`
|
|
|
|
VolumeMounts []VolumeMount `yaml:"volumeMounts,omitempty" json:"volumeMounts,omitempty"`
|
|
|
|
LivenessProbe *LivenessProbe `yaml:"livenessProbe,omitempty" json:"livenessProbe,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Event is the representation of an event logged to etcd backends
|
|
|
|
type Event struct {
|
|
|
|
Event string `json:"event,omitempty"`
|
|
|
|
Manifest *ContainerManifest `json:"manifest,omitempty"`
|
|
|
|
Container *Container `json:"container,omitempty"`
|
|
|
|
Timestamp int64 `json:"timestamp"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// The below types are used by kube_client and api_server.
|
|
|
|
|
|
|
|
// JSONBase is shared by all objects sent to, or returned from the client
|
|
|
|
type JSONBase struct {
|
|
|
|
Kind string `json:"kind,omitempty" yaml:"kind,omitempty"`
|
|
|
|
ID string `json:"id,omitempty" yaml:"id,omitempty"`
|
|
|
|
CreationTimestamp string `json:"creationTimestamp,omitempty" yaml:"creationTimestamp,omitempty"`
|
|
|
|
SelfLink string `json:"selfLink,omitempty" yaml:"selfLink,omitempty"`
|
2014-06-30 19:00:14 +00:00
|
|
|
ResourceVersion uint64 `json:"resourceVersion,omitempty" yaml:"resourceVersion,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// PodStatus represents a status of a pod.
|
2014-06-28 00:43:36 +00:00
|
|
|
type PodStatus string
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// These are the valid statuses of pods.
|
2014-06-28 00:43:36 +00:00
|
|
|
const (
|
|
|
|
PodRunning PodStatus = "Running"
|
|
|
|
PodPending PodStatus = "Pending"
|
|
|
|
PodStopped PodStatus = "Stopped"
|
|
|
|
)
|
|
|
|
|
2014-07-01 22:35:56 +00:00
|
|
|
// PodInfo contains one entry for every container with available info.
|
|
|
|
type PodInfo map[string]docker.Container
|
|
|
|
|
2014-06-09 04:39:57 +00:00
|
|
|
// PodState is the state of a pod, used as either input (desired state) or output (current state)
|
|
|
|
type PodState struct {
|
2014-06-06 23:40:48 +00:00
|
|
|
Manifest ContainerManifest `json:"manifest,omitempty" yaml:"manifest,omitempty"`
|
2014-06-28 00:43:36 +00:00
|
|
|
Status PodStatus `json:"status,omitempty" yaml:"status,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
Host string `json:"host,omitempty" yaml:"host,omitempty"`
|
|
|
|
HostIP string `json:"hostIP,omitempty" yaml:"hostIP,omitempty"`
|
2014-07-10 05:13:07 +00:00
|
|
|
PodIP string `json:"podIP,omitempty" yaml:"podIP,omitempty"`
|
2014-07-01 02:46:10 +00:00
|
|
|
|
|
|
|
// The key of this map is the *name* of the container within the manifest; it has one
|
|
|
|
// entry per container in the manifest. The value of this map is currently the output
|
|
|
|
// of `docker inspect`. This output format is *not* final and should not be relied
|
|
|
|
// upon.
|
|
|
|
// TODO: Make real decisions about what our info should look like.
|
2014-07-01 22:35:56 +00:00
|
|
|
Info PodInfo `json:"info,omitempty" yaml:"info,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// PodList is a list of Pods.
|
2014-06-09 04:39:57 +00:00
|
|
|
type PodList struct {
|
2014-06-12 22:10:28 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
Items []Pod `json:"items" yaml:"items,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-06-09 04:39:57 +00:00
|
|
|
// Pod is a collection of containers, used as either input (create, update) or as output (list, get)
|
2014-06-09 04:17:53 +00:00
|
|
|
type Pod struct {
|
2014-06-12 22:10:28 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
2014-06-06 23:40:48 +00:00
|
|
|
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
2014-06-09 04:39:57 +00:00
|
|
|
DesiredState PodState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
|
|
|
CurrentState PodState `json:"currentState,omitempty" yaml:"currentState,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ReplicationControllerState is the state of a replication controller, either input (create, update) or as output (list, get)
|
|
|
|
type ReplicationControllerState struct {
|
2014-06-19 00:20:34 +00:00
|
|
|
Replicas int `json:"replicas" yaml:"replicas"`
|
|
|
|
ReplicaSelector map[string]string `json:"replicaSelector,omitempty" yaml:"replicaSelector,omitempty"`
|
|
|
|
PodTemplate PodTemplate `json:"podTemplate,omitempty" yaml:"podTemplate,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// ReplicationControllerList is a collection of replication controllers.
|
2014-06-06 23:40:48 +00:00
|
|
|
type ReplicationControllerList struct {
|
2014-06-12 22:10:28 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
Items []ReplicationController `json:"items,omitempty" yaml:"items,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ReplicationController represents the configuration of a replication controller
|
|
|
|
type ReplicationController struct {
|
2014-06-12 22:10:28 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
2014-06-06 23:40:48 +00:00
|
|
|
DesiredState ReplicationControllerState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
|
|
|
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
|
|
|
}
|
|
|
|
|
2014-06-09 04:39:57 +00:00
|
|
|
// PodTemplate holds the information used for creating pods
|
|
|
|
type PodTemplate struct {
|
|
|
|
DesiredState PodState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// ServiceList holds a list of services
|
|
|
|
type ServiceList struct {
|
2014-06-12 22:10:28 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
Items []Service `json:"items" yaml:"items"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// Service is a named abstraction of software service (for example, mysql) consisting of local port
|
2014-06-18 23:01:49 +00:00
|
|
|
// (for example 3306) that the proxy listens on, and the selector that determines which pods
|
|
|
|
// will answer requests sent through the proxy.
|
2014-06-06 23:40:48 +00:00
|
|
|
type Service struct {
|
2014-06-18 23:01:49 +00:00
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
Port int `json:"port,omitempty" yaml:"port,omitempty"`
|
|
|
|
|
|
|
|
// This service's labels.
|
|
|
|
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
|
|
|
|
|
|
|
// This service will route traffic to pods having labels matching this selector.
|
|
|
|
Selector map[string]string `json:"selector,omitempty" yaml:"selector,omitempty"`
|
2014-06-17 17:50:42 +00:00
|
|
|
CreateExternalLoadBalancer bool `json:"createExternalLoadBalancer,omitempty" yaml:"createExternalLoadBalancer,omitempty"`
|
2014-07-13 04:46:01 +00:00
|
|
|
|
2014-07-12 07:15:30 +00:00
|
|
|
// ContainerPort is the name of the port on the container to direct traffic to.
|
|
|
|
// Optional, if unspecified use the first port on the container.
|
2014-07-13 04:46:01 +00:00
|
|
|
ContainerPort util.IntOrString `json:"containerPort,omitempty" yaml:"containerPort,omitempty"`
|
2014-06-06 23:40:48 +00:00
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// Endpoints is a collection of endpoints that implement the actual service, for example:
|
2014-06-06 23:40:48 +00:00
|
|
|
// Name: "mysql", Endpoints: ["10.10.1.1:1909", "10.10.2.2:8834"]
|
|
|
|
type Endpoints struct {
|
|
|
|
Name string
|
|
|
|
Endpoints []string
|
|
|
|
}
|
2014-06-20 23:50:56 +00:00
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// Minion is a worker node in Kubernetenes.
|
|
|
|
// The name of the minion according to etcd is in JSONBase.ID.
|
2014-06-20 21:01:16 +00:00
|
|
|
type Minion struct {
|
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
// Queried from cloud provider, if available.
|
|
|
|
HostIP string `json:"hostIP,omitempty" yaml:"hostIP,omitempty"`
|
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// MinionList is a list of minions.
|
2014-06-20 21:01:16 +00:00
|
|
|
type MinionList struct {
|
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
2014-06-24 21:58:45 +00:00
|
|
|
Items []Minion `json:"minions,omitempty" yaml:"minions,omitempty"`
|
2014-06-20 21:01:16 +00:00
|
|
|
}
|
|
|
|
|
2014-06-20 23:50:56 +00:00
|
|
|
// Status is a return value for calls that don't return other objects.
|
|
|
|
// Arguably, this could go in apiserver, but I'm including it here so clients needn't
|
|
|
|
// import both.
|
|
|
|
type Status struct {
|
|
|
|
JSONBase `json:",inline" yaml:",inline"`
|
|
|
|
// One of: "success", "failure", "working" (for operations not yet completed)
|
|
|
|
// TODO: if "working", include an operation identifier so final status can be
|
|
|
|
// checked.
|
2014-07-02 20:51:27 +00:00
|
|
|
Status string `json:"status,omitempty" yaml:"status,omitempty"`
|
|
|
|
// Details about the status. May be an error description or an
|
|
|
|
// operation number for later polling.
|
2014-06-24 05:18:14 +00:00
|
|
|
Details string `json:"details,omitempty" yaml:"details,omitempty"`
|
2014-07-02 20:51:27 +00:00
|
|
|
// Suggested HTTP return code for this status, 0 if not set.
|
|
|
|
Code int `json:"code,omitempty" yaml:"code,omitempty"`
|
2014-06-20 23:50:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Values of Status.Status
|
|
|
|
const (
|
|
|
|
StatusSuccess = "success"
|
|
|
|
StatusFailure = "failure"
|
|
|
|
StatusWorking = "working"
|
|
|
|
)
|
2014-06-26 17:51:29 +00:00
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// ServerOp is an operation delivered to API clients.
|
2014-06-26 17:51:29 +00:00
|
|
|
type ServerOp struct {
|
|
|
|
JSONBase `yaml:",inline" json:",inline"`
|
|
|
|
}
|
|
|
|
|
2014-07-08 07:08:58 +00:00
|
|
|
// ServerOpList is a list of operations, as delivered to API clients.
|
2014-06-26 17:51:29 +00:00
|
|
|
type ServerOpList struct {
|
|
|
|
JSONBase `yaml:",inline" json:",inline"`
|
|
|
|
Items []ServerOp `yaml:"items,omitempty" json:"items,omitempty"`
|
|
|
|
}
|