Merge pull request #342 from intelsdi-x/bump_vendors

Applying k8s kubelet v3 api to cri-o server
This commit is contained in:
Mrunal Patel 2017-02-06 15:18:00 -08:00 committed by GitHub
commit 65fc398da1
3782 changed files with 113260 additions and 92964 deletions

View file

@ -319,7 +319,7 @@ func CreateContainer(client pb.RuntimeServiceClient, opts createOptions) error {
// Override the name by the one specified through CLI // Override the name by the one specified through CLI
if opts.name != "" { if opts.name != "" {
config.Metadata.Name = &opts.name config.Metadata.Name = opts.name
} }
for k, v := range opts.labels { for k, v := range opts.labels {
@ -327,7 +327,7 @@ func CreateContainer(client pb.RuntimeServiceClient, opts createOptions) error {
} }
r, err := client.CreateContainer(context.Background(), &pb.CreateContainerRequest{ r, err := client.CreateContainer(context.Background(), &pb.CreateContainerRequest{
PodSandboxId: &opts.podID, PodSandboxId: opts.podID,
Config: config, Config: config,
// TODO(runcom): this is missing PodSandboxConfig!!! // TODO(runcom): this is missing PodSandboxConfig!!!
// we should/could find a way to retrieve it from the fs and set it here // we should/could find a way to retrieve it from the fs and set it here
@ -335,7 +335,7 @@ func CreateContainer(client pb.RuntimeServiceClient, opts createOptions) error {
if err != nil { if err != nil {
return err return err
} }
fmt.Println(*r.ContainerId) fmt.Println(r.ContainerId)
return nil return nil
} }
@ -346,7 +346,7 @@ func StartContainer(client pb.RuntimeServiceClient, ID string) error {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
_, err := client.StartContainer(context.Background(), &pb.StartContainerRequest{ _, err := client.StartContainer(context.Background(), &pb.StartContainerRequest{
ContainerId: &ID, ContainerId: ID,
}) })
if err != nil { if err != nil {
return err return err
@ -362,7 +362,7 @@ func StopContainer(client pb.RuntimeServiceClient, ID string) error {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
_, err := client.StopContainer(context.Background(), &pb.StopContainerRequest{ _, err := client.StopContainer(context.Background(), &pb.StopContainerRequest{
ContainerId: &ID, ContainerId: ID,
}) })
if err != nil { if err != nil {
return err return err
@ -378,7 +378,7 @@ func RemoveContainer(client pb.RuntimeServiceClient, ID string) error {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
_, err := client.RemoveContainer(context.Background(), &pb.RemoveContainerRequest{ _, err := client.RemoveContainer(context.Background(), &pb.RemoveContainerRequest{
ContainerId: &ID, ContainerId: ID,
}) })
if err != nil { if err != nil {
return err return err
@ -394,37 +394,26 @@ func ContainerStatus(client pb.RuntimeServiceClient, ID string) error {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
r, err := client.ContainerStatus(context.Background(), &pb.ContainerStatusRequest{ r, err := client.ContainerStatus(context.Background(), &pb.ContainerStatusRequest{
ContainerId: &ID}) ContainerId: ID})
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("ID: %s\n", *r.Status.Id) fmt.Printf("ID: %s\n", r.Status.Id)
if r.Status.Metadata != nil { if r.Status.Metadata != nil {
if r.Status.Metadata.Name != nil { if r.Status.Metadata.Name != "" {
fmt.Printf("Name: %s\n", *r.Status.Metadata.Name) fmt.Printf("Name: %s\n", r.Status.Metadata.Name)
} }
if r.Status.Metadata.Attempt != nil { fmt.Printf("Attempt: %v\n", r.Status.Metadata.Attempt)
fmt.Printf("Attempt: %v\n", *r.Status.Metadata.Attempt)
} }
} // TODO(mzylowski): print it prettier
if r.Status.State != nil {
fmt.Printf("Status: %s\n", r.Status.State) fmt.Printf("Status: %s\n", r.Status.State)
} ctm := time.Unix(0, r.Status.CreatedAt)
if r.Status.CreatedAt != nil {
ctm := time.Unix(0, *r.Status.CreatedAt)
fmt.Printf("Created: %v\n", ctm) fmt.Printf("Created: %v\n", ctm)
} stm := time.Unix(0, r.Status.StartedAt)
if r.Status.StartedAt != nil {
stm := time.Unix(0, *r.Status.StartedAt)
fmt.Printf("Started: %v\n", stm) fmt.Printf("Started: %v\n", stm)
} ftm := time.Unix(0, r.Status.FinishedAt)
if r.Status.FinishedAt != nil {
ftm := time.Unix(0, *r.Status.FinishedAt)
fmt.Printf("Finished: %v\n", ftm) fmt.Printf("Finished: %v\n", ftm)
} fmt.Printf("Exit Code: %v\n", r.Status.ExitCode)
if r.Status.ExitCode != nil {
fmt.Printf("Exit Code: %v\n", *r.Status.ExitCode)
}
return nil return nil
} }
@ -436,9 +425,9 @@ func ExecSync(client pb.RuntimeServiceClient, ID string, cmd []string, timeout i
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
r, err := client.ExecSync(context.Background(), &pb.ExecSyncRequest{ r, err := client.ExecSync(context.Background(), &pb.ExecSyncRequest{
ContainerId: &ID, ContainerId: ID,
Cmd: cmd, Cmd: cmd,
Timeout: &timeout, Timeout: timeout,
}) })
if err != nil { if err != nil {
return err return err
@ -447,7 +436,7 @@ func ExecSync(client pb.RuntimeServiceClient, ID string, cmd []string, timeout i
fmt.Println(string(r.Stdout)) fmt.Println(string(r.Stdout))
fmt.Println("Stderr:") fmt.Println("Stderr:")
fmt.Println(string(r.Stderr)) fmt.Println(string(r.Stderr))
fmt.Printf("Exit code: %v\n", *r.ExitCode) fmt.Printf("Exit code: %v\n", r.ExitCode)
return nil return nil
} }
@ -457,23 +446,24 @@ func ExecSync(client pb.RuntimeServiceClient, ID string, cmd []string, timeout i
func ListContainers(client pb.RuntimeServiceClient, opts listOptions) error { func ListContainers(client pb.RuntimeServiceClient, opts listOptions) error {
filter := &pb.ContainerFilter{} filter := &pb.ContainerFilter{}
if opts.id != "" { if opts.id != "" {
filter.Id = &opts.id filter.Id = opts.id
} }
if opts.podID != "" { if opts.podID != "" {
filter.PodSandboxId = &opts.podID filter.PodSandboxId = opts.podID
} }
if opts.state != "" { if opts.state != "" {
st := pb.ContainerState_CONTAINER_UNKNOWN st := &pb.ContainerStateValue{}
st.State = pb.ContainerState_CONTAINER_UNKNOWN
switch opts.state { switch opts.state {
case "created": case "created":
st = pb.ContainerState_CONTAINER_CREATED st.State = pb.ContainerState_CONTAINER_CREATED
filter.State = &st filter.State = st
case "running": case "running":
st = pb.ContainerState_CONTAINER_RUNNING st.State = pb.ContainerState_CONTAINER_RUNNING
filter.State = &st filter.State = st
case "stopped": case "stopped":
st = pb.ContainerState_CONTAINER_EXITED st.State = pb.ContainerState_CONTAINER_EXITED
filter.State = &st filter.State = st
default: default:
log.Fatalf("--state should be one of created, running or stopped") log.Fatalf("--state should be one of created, running or stopped")
} }
@ -489,29 +479,23 @@ func ListContainers(client pb.RuntimeServiceClient, opts listOptions) error {
} }
for _, c := range r.GetContainers() { for _, c := range r.GetContainers() {
if opts.quiet { if opts.quiet {
fmt.Println(*c.Id) fmt.Println(c.Id)
continue continue
} }
fmt.Printf("ID: %s\n", *c.Id) fmt.Printf("ID: %s\n", c.Id)
fmt.Printf("Pod: %s\n", *c.PodSandboxId) fmt.Printf("Pod: %s\n", c.PodSandboxId)
if c.Metadata != nil { if c.Metadata != nil {
if c.Metadata.Name != nil { if c.Metadata.Name != "" {
fmt.Printf("Name: %s\n", *c.Metadata.Name) fmt.Printf("Name: %s\n", c.Metadata.Name)
} }
if c.Metadata.Attempt != nil { fmt.Printf("Attempt: %v\n", c.Metadata.Attempt)
fmt.Printf("Attempt: %v\n", *c.Metadata.Attempt)
}
}
if c.State != nil {
fmt.Printf("Status: %s\n", *c.State)
} }
fmt.Printf("Status: %s\n", c.State)
if c.Image != nil { if c.Image != nil {
fmt.Printf("Image: %s\n", c.Image.GetImage()) fmt.Printf("Image: %s\n", c.Image.Image)
} }
if c.CreatedAt != nil { ctm := time.Unix(0, c.CreatedAt)
ctm := time.Unix(0, *c.CreatedAt)
fmt.Printf("Created: %v\n", ctm) fmt.Printf("Created: %v\n", ctm)
}
if c.Labels != nil { if c.Labels != nil {
fmt.Println("Labels:") fmt.Println("Labels:")
for _, k := range getSortedKeys(c.Labels) { for _, k := range getSortedKeys(c.Labels) {

View file

@ -63,18 +63,18 @@ var listImageCommand = cli.Command{
quiet := context.Bool("quiet") quiet := context.Bool("quiet")
for _, image := range r.Images { for _, image := range r.Images {
if quiet { if quiet {
fmt.Printf("%s\n", *image.Id) fmt.Printf("%s\n", image.Id)
continue continue
} }
fmt.Printf("ID: %s\n", *image.Id) fmt.Printf("ID: %s\n", image.Id)
for _, tag := range image.RepoTags { for _, tag := range image.RepoTags {
fmt.Printf("Tag: %s\n", tag) fmt.Printf("Tag: %s\n", tag)
} }
for _, digest := range image.RepoDigests { for _, digest := range image.RepoDigests {
fmt.Printf("Digest: %s\n", digest) fmt.Printf("Digest: %s\n", digest)
} }
if image.Size_ != nil { if image.Size_ != 0 {
fmt.Printf("Size: %d\n", *image.Size_) fmt.Printf("Size: %d\n", image.Size_)
} }
} }
return nil return nil
@ -107,16 +107,14 @@ var imageStatusCommand = cli.Command{
if image == nil { if image == nil {
return fmt.Errorf("no such image present") return fmt.Errorf("no such image present")
} }
fmt.Printf("ID: %s\n", *image.Id) fmt.Printf("ID: %s\n", image.Id)
for _, tag := range image.RepoTags { for _, tag := range image.RepoTags {
fmt.Printf("Tag: %s\n", tag) fmt.Printf("Tag: %s\n", tag)
} }
for _, digest := range image.RepoDigests { for _, digest := range image.RepoDigests {
fmt.Printf("Digest: %s\n", digest) fmt.Printf("Digest: %s\n", digest)
} }
if image.Size_ != nil { fmt.Printf("Size: %d\n", image.Size_)
fmt.Printf("Size: %d\n", *image.Size_)
}
return nil return nil
}, },
} }
@ -150,19 +148,19 @@ var removeImageCommand = cli.Command{
// PullImage sends a PullImageRequest to the server, and parses // PullImage sends a PullImageRequest to the server, and parses
// the returned PullImageResponse. // the returned PullImageResponse.
func PullImage(client pb.ImageServiceClient, image string) (*pb.PullImageResponse, error) { func PullImage(client pb.ImageServiceClient, image string) (*pb.PullImageResponse, error) {
return client.PullImage(context.Background(), &pb.PullImageRequest{Image: &pb.ImageSpec{Image: &image}}) return client.PullImage(context.Background(), &pb.PullImageRequest{Image: &pb.ImageSpec{Image: image}})
} }
// ListImages sends a ListImagesRequest to the server, and parses // ListImages sends a ListImagesRequest to the server, and parses
// the returned ListImagesResponse. // the returned ListImagesResponse.
func ListImages(client pb.ImageServiceClient, image string) (*pb.ListImagesResponse, error) { func ListImages(client pb.ImageServiceClient, image string) (*pb.ListImagesResponse, error) {
return client.ListImages(context.Background(), &pb.ListImagesRequest{Filter: &pb.ImageFilter{Image: &pb.ImageSpec{Image: &image}}}) return client.ListImages(context.Background(), &pb.ListImagesRequest{Filter: &pb.ImageFilter{Image: &pb.ImageSpec{Image: image}}})
} }
// ImageStatus sends an ImageStatusRequest to the server, and parses // ImageStatus sends an ImageStatusRequest to the server, and parses
// the returned ImageStatusResponse. // the returned ImageStatusResponse.
func ImageStatus(client pb.ImageServiceClient, image string) (*pb.ImageStatusResponse, error) { func ImageStatus(client pb.ImageServiceClient, image string) (*pb.ImageStatusResponse, error) {
return client.ImageStatus(context.Background(), &pb.ImageStatusRequest{Image: &pb.ImageSpec{Image: &image}}) return client.ImageStatus(context.Background(), &pb.ImageStatusRequest{Image: &pb.ImageSpec{Image: image}})
} }
// RemoveImage sends a RemoveImageRequest to the server, and parses // RemoveImage sends a RemoveImageRequest to the server, and parses
@ -171,5 +169,5 @@ func RemoveImage(client pb.ImageServiceClient, image string) (*pb.RemoveImageRes
if image == "" { if image == "" {
return nil, fmt.Errorf("ID cannot be empty") return nil, fmt.Errorf("ID cannot be empty")
} }
return client.RemoveImage(context.Background(), &pb.RemoveImageRequest{Image: &pb.ImageSpec{Image: &image}}) return client.RemoveImage(context.Background(), &pb.RemoveImageRequest{Image: &pb.ImageSpec{Image: image}})
} }

View file

@ -220,7 +220,7 @@ func RunPodSandbox(client pb.RuntimeServiceClient, opts createOptions) error {
// Override the name by the one specified through CLI // Override the name by the one specified through CLI
if opts.name != "" { if opts.name != "" {
config.Metadata.Name = &opts.name config.Metadata.Name = opts.name
} }
for k, v := range opts.labels { for k, v := range opts.labels {
@ -231,7 +231,7 @@ func RunPodSandbox(client pb.RuntimeServiceClient, opts createOptions) error {
if err != nil { if err != nil {
return err return err
} }
fmt.Println(*r.PodSandboxId) fmt.Println(r.PodSandboxId)
return nil return nil
} }
@ -241,7 +241,7 @@ func StopPodSandbox(client pb.RuntimeServiceClient, ID string) error {
if ID == "" { if ID == "" {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
_, err := client.StopPodSandbox(context.Background(), &pb.StopPodSandboxRequest{PodSandboxId: &ID}) _, err := client.StopPodSandbox(context.Background(), &pb.StopPodSandboxRequest{PodSandboxId: ID})
if err != nil { if err != nil {
return err return err
} }
@ -255,7 +255,7 @@ func RemovePodSandbox(client pb.RuntimeServiceClient, ID string) error {
if ID == "" { if ID == "" {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
_, err := client.RemovePodSandbox(context.Background(), &pb.RemovePodSandboxRequest{PodSandboxId: &ID}) _, err := client.RemovePodSandbox(context.Background(), &pb.RemovePodSandboxRequest{PodSandboxId: ID})
if err != nil { if err != nil {
return err return err
} }
@ -269,37 +269,29 @@ func PodSandboxStatus(client pb.RuntimeServiceClient, ID string) error {
if ID == "" { if ID == "" {
return fmt.Errorf("ID cannot be empty") return fmt.Errorf("ID cannot be empty")
} }
r, err := client.PodSandboxStatus(context.Background(), &pb.PodSandboxStatusRequest{PodSandboxId: &ID}) r, err := client.PodSandboxStatus(context.Background(), &pb.PodSandboxStatusRequest{PodSandboxId: ID})
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("ID: %s\n", *r.Status.Id) fmt.Printf("ID: %s\n", r.Status.Id)
if r.Status.Metadata != nil { if r.Status.Metadata != nil {
if r.Status.Metadata.Name != nil { if r.Status.Metadata.Name != "" {
fmt.Printf("Name: %s\n", *r.Status.Metadata.Name) fmt.Printf("Name: %s\n", r.Status.Metadata.Name)
} }
if r.Status.Metadata.Uid != nil { if r.Status.Metadata.Uid != "" {
fmt.Printf("UID: %s\n", *r.Status.Metadata.Uid) fmt.Printf("UID: %s\n", r.Status.Metadata.Uid)
} }
if r.Status.Metadata.Namespace != nil { if r.Status.Metadata.Namespace != "" {
fmt.Printf("Namespace: %s\n", *r.Status.Metadata.Namespace) fmt.Printf("Namespace: %s\n", r.Status.Metadata.Namespace)
} }
if r.Status.Metadata.Attempt != nil { fmt.Printf("Attempt: %v\n", r.Status.Metadata.Attempt)
fmt.Printf("Attempt: %v\n", *r.Status.Metadata.Attempt)
} }
}
if r.Status.State != nil {
fmt.Printf("Status: %s\n", r.Status.State) fmt.Printf("Status: %s\n", r.Status.State)
} ctm := time.Unix(0, r.Status.CreatedAt)
if r.Status.CreatedAt != nil {
ctm := time.Unix(0, *r.Status.CreatedAt)
fmt.Printf("Created: %v\n", ctm) fmt.Printf("Created: %v\n", ctm)
} fmt.Printf("Network namespace: %s\n", r.Status.Linux.Namespaces.Network)
if r.Status.Linux != nil {
fmt.Printf("Network namespace: %s\n", *r.Status.Linux.Namespaces.Network)
}
if r.Status.Network != nil { if r.Status.Network != nil {
fmt.Printf("IP Address: %v\n", *r.Status.Network.Ip) fmt.Printf("IP Address: %v\n", r.Status.Network.Ip)
} }
if r.Status.Labels != nil { if r.Status.Labels != nil {
fmt.Println("Labels:") fmt.Println("Labels:")
@ -321,17 +313,18 @@ func PodSandboxStatus(client pb.RuntimeServiceClient, ID string) error {
func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error { func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
filter := &pb.PodSandboxFilter{} filter := &pb.PodSandboxFilter{}
if opts.id != "" { if opts.id != "" {
filter.Id = &opts.id filter.Id = opts.id
} }
if opts.state != "" { if opts.state != "" {
st := pb.PodSandboxState_SANDBOX_NOTREADY st := &pb.PodSandboxStateValue{}
st.State = pb.PodSandboxState_SANDBOX_NOTREADY
switch opts.state { switch opts.state {
case "ready": case "ready":
st = pb.PodSandboxState_SANDBOX_READY st.State = pb.PodSandboxState_SANDBOX_READY
filter.State = &st filter.State = st
case "notready": case "notready":
st = pb.PodSandboxState_SANDBOX_NOTREADY st.State = pb.PodSandboxState_SANDBOX_NOTREADY
filter.State = &st filter.State = st
default: default:
log.Fatalf("--state should be ready or notready") log.Fatalf("--state should be ready or notready")
} }
@ -347,26 +340,24 @@ func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
} }
for _, pod := range r.Items { for _, pod := range r.Items {
if opts.quiet { if opts.quiet {
fmt.Println(*pod.Id) fmt.Println(pod.Id)
continue continue
} }
fmt.Printf("ID: %s\n", *pod.Id) fmt.Printf("ID: %s\n", pod.Id)
if pod.Metadata != nil { if pod.Metadata != nil {
if pod.Metadata.Name != nil { if pod.Metadata.Name != "" {
fmt.Printf("Name: %s\n", *pod.Metadata.Name) fmt.Printf("Name: %s\n", pod.Metadata.Name)
} }
if pod.Metadata.Uid != nil { if pod.Metadata.Uid != "" {
fmt.Printf("UID: %s\n", *pod.Metadata.Uid) fmt.Printf("UID: %s\n", pod.Metadata.Uid)
} }
if pod.Metadata.Namespace != nil { if pod.Metadata.Namespace != "" {
fmt.Printf("Namespace: %s\n", *pod.Metadata.Namespace) fmt.Printf("Namespace: %s\n", pod.Metadata.Namespace)
}
if pod.Metadata.Attempt != nil {
fmt.Printf("Attempt: %v\n", *pod.Metadata.Attempt)
} }
fmt.Printf("Attempt: %v\n", pod.Metadata.Attempt)
} }
fmt.Printf("Status: %s\n", pod.State) fmt.Printf("Status: %s\n", pod.State)
ctm := time.Unix(0, *pod.CreatedAt) ctm := time.Unix(0, pod.CreatedAt)
fmt.Printf("Created: %v\n", ctm) fmt.Printf("Created: %v\n", ctm)
if pod.Labels != nil { if pod.Labels != nil {
fmt.Println("Labels:") fmt.Println("Labels:")

View file

@ -32,10 +32,10 @@ var runtimeVersionCommand = cli.Command{
// Version sends a VersionRequest to the server, and parses the returned VersionResponse. // Version sends a VersionRequest to the server, and parses the returned VersionResponse.
func Version(client pb.RuntimeServiceClient, version string) error { func Version(client pb.RuntimeServiceClient, version string) error {
r, err := client.Version(context.Background(), &pb.VersionRequest{Version: &version}) r, err := client.Version(context.Background(), &pb.VersionRequest{Version: version})
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("VersionResponse: Version: %s, RuntimeName: %s, RuntimeVersion: %s, RuntimeApiVersion: %s\n", *r.Version, *r.RuntimeName, *r.RuntimeVersion, *r.RuntimeApiVersion) fmt.Printf("VersionResponse: Version: %s, RuntimeName: %s, RuntimeVersion: %s, RuntimeApiVersion: %s\n", r.Version, r.RuntimeName, r.RuntimeVersion, r.RuntimeApiVersion)
return nil return nil
} }

View file

@ -140,7 +140,9 @@
"version": "v0.3", "version": "v0.3",
"revision": "909568be09de550ed094403c2bf8a261b5bb730a", "revision": "909568be09de550ed094403c2bf8a261b5bb730a",
"packages": [ "packages": [
"proto" "gogoproto",
"proto",
"sortkeys"
] ]
}, },
{ {
@ -255,7 +257,7 @@
{ {
"name": "github.com/opencontainers/runtime-tools", "name": "github.com/opencontainers/runtime-tools",
"branch": "master", "branch": "master",
"revision": "06e17eef1ab6e13f4f37308a16727510ab81414f", "revision": "2d92f6557e64d4f9a0e799a75fdf153cec13dffa",
"packages": [ "packages": [
"generate" "generate"
] ]
@ -368,8 +370,7 @@
"branch": "master", "branch": "master",
"revision": "21807b270ec15d19215659a5caa08b17f66d6f44", "revision": "21807b270ec15d19215659a5caa08b17f66d6f44",
"packages": [ "packages": [
"pkg/fields", "pkg/fields"
"pkg/selection"
] ]
}, },
{ {
@ -383,7 +384,7 @@
{ {
"name": "k8s.io/kubernetes", "name": "k8s.io/kubernetes",
"branch": "master", "branch": "master",
"revision": "550f8be73aac92c7c23b1783d3db17f8660019f6", "revision": "760d8e98e8f6ad27aaf50b1a030cb9e7b6859aab",
"packages": [ "packages": [
"pkg/fields", "pkg/fields",
"pkg/kubelet/api/v1alpha1/runtime" "pkg/kubelet/api/v1alpha1/runtime"

View file

@ -13,19 +13,14 @@ const (
containerTypeContainer = "container" containerTypeContainer = "container"
) )
type containerRequest interface { func (s *Server) getContainerFromRequest(containerID string) (*oci.Container, error) {
GetContainerId() string if containerID == "" {
}
func (s *Server) getContainerFromRequest(req containerRequest) (*oci.Container, error) {
ctrID := req.GetContainerId()
if ctrID == "" {
return nil, fmt.Errorf("container ID should not be empty") return nil, fmt.Errorf("container ID should not be empty")
} }
containerID, err := s.ctrIDIndex.Get(ctrID) containerID, err := s.ctrIDIndex.Get(containerID)
if err != nil { if err != nil {
return nil, fmt.Errorf("container with ID starting with %s not found: %v", ctrID, err) return nil, fmt.Errorf("container with ID starting with %s not found: %v", containerID, err)
} }
c := s.state.containers.Get(containerID) c := s.state.containers.Get(containerID)

View file

@ -29,7 +29,7 @@ const (
func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerRequest) (res *pb.CreateContainerResponse, err error) { func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerRequest) (res *pb.CreateContainerResponse, err error) {
logrus.Debugf("CreateContainerRequest %+v", req) logrus.Debugf("CreateContainerRequest %+v", req)
s.Update() s.Update()
sbID := req.GetPodSandboxId() sbID := req.PodSandboxId
if sbID == "" { if sbID == "" {
return nil, fmt.Errorf("PodSandboxId should not be empty") return nil, fmt.Errorf("PodSandboxId should not be empty")
} }
@ -50,12 +50,12 @@ func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerReq
return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig is nil") return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig is nil")
} }
name := containerConfig.GetMetadata().GetName() name := containerConfig.GetMetadata().Name
if name == "" { if name == "" {
return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Name is empty") return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Name is empty")
} }
attempt := containerConfig.GetMetadata().GetAttempt() attempt := containerConfig.GetMetadata().Attempt
containerID, containerName, err := s.generateContainerIDandName(sb.name, name, attempt) containerID, containerName, err := s.generateContainerIDandName(sb.name, name, attempt)
if err != nil { if err != nil {
return nil, err return nil, err
@ -96,7 +96,7 @@ func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerReq
} }
resp := &pb.CreateContainerResponse{ resp := &pb.CreateContainerResponse{
ContainerId: &containerID, ContainerId: containerID,
} }
logrus.Debugf("CreateContainerResponse: %+v", resp) logrus.Debugf("CreateContainerResponse: %+v", resp)
@ -108,14 +108,15 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
return nil, errors.New("createSandboxContainer needs a sandbox") return nil, errors.New("createSandboxContainer needs a sandbox")
} }
// TODO: simplify this function (cyclomatic complexity here is high)
// TODO: factor generating/updating the spec into something other projects can vendor // TODO: factor generating/updating the spec into something other projects can vendor
// creates a spec Generator with the default spec. // creates a spec Generator with the default spec.
specgen := generate.New() specgen := generate.New()
processArgs := []string{} processArgs := []string{}
commands := containerConfig.GetCommand() commands := containerConfig.Command
args := containerConfig.GetArgs() args := containerConfig.Args
if commands == nil && args == nil { if commands == nil && args == nil {
processArgs = nil processArgs = nil
} }
@ -126,7 +127,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
processArgs = append(processArgs, args...) processArgs = append(processArgs, args...)
} }
cwd := containerConfig.GetWorkingDir() cwd := containerConfig.WorkingDir
if cwd == "" { if cwd == "" {
cwd = "/" cwd = "/"
} }
@ -135,8 +136,8 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
envs := containerConfig.GetEnvs() envs := containerConfig.GetEnvs()
if envs != nil { if envs != nil {
for _, item := range envs { for _, item := range envs {
key := item.GetKey() key := item.Key
value := item.GetValue() value := item.Value
if key == "" { if key == "" {
continue continue
} }
@ -146,22 +147,22 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
mounts := containerConfig.GetMounts() mounts := containerConfig.GetMounts()
for _, mount := range mounts { for _, mount := range mounts {
dest := mount.GetContainerPath() dest := mount.ContainerPath
if dest == "" { if dest == "" {
return nil, fmt.Errorf("Mount.ContainerPath is empty") return nil, fmt.Errorf("Mount.ContainerPath is empty")
} }
src := mount.GetHostPath() src := mount.HostPath
if src == "" { if src == "" {
return nil, fmt.Errorf("Mount.HostPath is empty") return nil, fmt.Errorf("Mount.HostPath is empty")
} }
options := []string{"rw"} options := []string{"rw"}
if mount.GetReadonly() { if mount.Readonly {
options = []string{"ro"} options = []string{"ro"}
} }
if mount.GetSelinuxRelabel() { if mount.SelinuxRelabel {
// Need a way in kubernetes to determine if the volume is shared or private // Need a way in kubernetes to determine if the volume is shared or private
if err := label.Relabel(src, sb.mountLabel, true); err != nil && err != syscall.ENOTSUP { if err := label.Relabel(src, sb.mountLabel, true); err != nil && err != syscall.ENOTSUP {
return nil, fmt.Errorf("relabel failed %s: %v", src, err) return nil, fmt.Errorf("relabel failed %s: %v", src, err)
@ -184,7 +185,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
// set this container's apparmor profile if it is set by sandbox // set this container's apparmor profile if it is set by sandbox
if s.appArmorEnabled { if s.appArmorEnabled {
appArmorProfileName := s.getAppArmorProfileName(sb.annotations, metadata.GetName()) appArmorProfileName := s.getAppArmorProfileName(sb.annotations, metadata.Name)
if appArmorProfileName != "" { if appArmorProfileName != "" {
// reload default apparmor profile if it is unloaded. // reload default apparmor profile if it is unloaded.
if s.appArmorProfile == apparmor.DefaultApparmorProfile { if s.appArmorProfile == apparmor.DefaultApparmorProfile {
@ -196,46 +197,44 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
specgen.SetProcessApparmorProfile(appArmorProfileName) specgen.SetProcessApparmorProfile(appArmorProfileName)
} }
} }
if containerConfig.GetLinux().GetSecurityContext() != nil {
if containerConfig.GetLinux().GetSecurityContext().GetPrivileged() { if containerConfig.GetLinux().GetSecurityContext().Privileged {
specgen.SetupPrivileged(true) specgen.SetupPrivileged(true)
} }
if containerConfig.GetLinux().GetSecurityContext().GetReadonlyRootfs() { if containerConfig.GetLinux().GetSecurityContext().ReadonlyRootfs {
specgen.SetRootReadonly(true) specgen.SetRootReadonly(true)
} }
logPath := containerConfig.GetLogPath()
if containerConfig.GetTty() {
specgen.SetProcessTerminal(true)
} }
logPath := containerConfig.LogPath
specgen.SetProcessTerminal(containerConfig.Tty)
linux := containerConfig.GetLinux() linux := containerConfig.GetLinux()
if linux != nil { if linux != nil {
resources := linux.GetResources() resources := linux.GetResources()
if resources != nil { if resources != nil {
cpuPeriod := resources.GetCpuPeriod() cpuPeriod := resources.CpuPeriod
if cpuPeriod != 0 { if cpuPeriod != 0 {
specgen.SetLinuxResourcesCPUPeriod(uint64(cpuPeriod)) specgen.SetLinuxResourcesCPUPeriod(uint64(cpuPeriod))
} }
cpuQuota := resources.GetCpuQuota() cpuQuota := resources.CpuQuota
if cpuQuota != 0 { if cpuQuota != 0 {
specgen.SetLinuxResourcesCPUQuota(uint64(cpuQuota)) specgen.SetLinuxResourcesCPUQuota(uint64(cpuQuota))
} }
cpuShares := resources.GetCpuShares() cpuShares := resources.CpuShares
if cpuShares != 0 { if cpuShares != 0 {
specgen.SetLinuxResourcesCPUShares(uint64(cpuShares)) specgen.SetLinuxResourcesCPUShares(uint64(cpuShares))
} }
memoryLimit := resources.GetMemoryLimitInBytes() memoryLimit := resources.MemoryLimitInBytes
if memoryLimit != 0 { if memoryLimit != 0 {
specgen.SetLinuxResourcesMemoryLimit(uint64(memoryLimit)) specgen.SetLinuxResourcesMemoryLimit(uint64(memoryLimit))
} }
oomScoreAdj := resources.GetOomScoreAdj() oomScoreAdj := resources.OomScoreAdj
specgen.SetLinuxResourcesOOMScoreAdj(int(oomScoreAdj)) specgen.SetLinuxResourcesOOMScoreAdj(int(oomScoreAdj))
} }
@ -250,7 +249,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
capabilities := linux.GetSecurityContext().GetCapabilities() capabilities := linux.GetSecurityContext().GetCapabilities()
if capabilities != nil { if capabilities != nil {
addCaps := capabilities.GetAddCapabilities() addCaps := capabilities.AddCapabilities
if addCaps != nil { if addCaps != nil {
for _, cap := range addCaps { for _, cap := range addCaps {
if err := specgen.AddProcessCapability(cap); err != nil { if err := specgen.AddProcessCapability(cap); err != nil {
@ -259,7 +258,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
} }
} }
dropCaps := capabilities.GetDropCapabilities() dropCaps := capabilities.DropCapabilities
if dropCaps != nil { if dropCaps != nil {
for _, cap := range dropCaps { for _, cap := range dropCaps {
if err := specgen.DropProcessCapability(cap); err != nil { if err := specgen.DropProcessCapability(cap); err != nil {
@ -272,16 +271,16 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
specgen.SetProcessSelinuxLabel(sb.processLabel) specgen.SetProcessSelinuxLabel(sb.processLabel)
specgen.SetLinuxMountLabel(sb.mountLabel) specgen.SetLinuxMountLabel(sb.mountLabel)
if linux.GetSecurityContext() != nil {
user := linux.GetSecurityContext().GetRunAsUser() user := linux.GetSecurityContext().GetRunAsUser()
specgen.SetProcessUID(uint32(user)) specgen.SetProcessUID(uint32(user.Value))
specgen.SetProcessGID(uint32(user.Value))
specgen.SetProcessGID(uint32(user)) groups := linux.GetSecurityContext().SupplementalGroups
groups := linux.GetSecurityContext().GetSupplementalGroups()
for _, group := range groups { for _, group := range groups {
specgen.AddProcessAdditionalGid(uint32(group)) specgen.AddProcessAdditionalGid(uint32(group))
} }
} }
}
// Join the namespace paths for the pod sandbox container. // Join the namespace paths for the pod sandbox container.
podInfraState := s.runtime.ContainerStatus(sb.infraContainer) podInfraState := s.runtime.ContainerStatus(sb.infraContainer)
@ -308,7 +307,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Image is nil") return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Image is nil")
} }
image := imageSpec.GetImage() image := imageSpec.Image
if image == "" { if image == "" {
return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Image.Image is empty") return nil, fmt.Errorf("CreateContainerRequest.ContainerConfig.Image.Image is empty")
} }
@ -321,7 +320,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
specgen.AddAnnotation("ocid/sandbox_name", sb.infraContainer.Name()) specgen.AddAnnotation("ocid/sandbox_name", sb.infraContainer.Name())
specgen.AddAnnotation("ocid/container_type", containerTypeContainer) specgen.AddAnnotation("ocid/container_type", containerTypeContainer)
specgen.AddAnnotation("ocid/log_path", logPath) specgen.AddAnnotation("ocid/log_path", logPath)
specgen.AddAnnotation("ocid/tty", fmt.Sprintf("%v", containerConfig.GetTty())) specgen.AddAnnotation("ocid/tty", fmt.Sprintf("%v", containerConfig.Tty))
specgen.AddAnnotation("ocid/image", image) specgen.AddAnnotation("ocid/image", image)
metadataJSON, err := json.Marshal(metadata) metadataJSON, err := json.Marshal(metadata)
@ -346,8 +345,8 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
return nil, err return nil, err
} }
metaname := metadata.GetName() metaname := metadata.Name
attempt := metadata.GetAttempt() attempt := metadata.Attempt
containerInfo, err := s.storage.CreateContainer(s.imageContext, containerInfo, err := s.storage.CreateContainer(s.imageContext,
sb.name, sb.id, sb.name, sb.id,
image, image, image, image,
@ -385,7 +384,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
return nil, err return nil, err
} }
container, err := oci.NewContainer(containerID, containerName, containerInfo.RunDir, logPath, sb.netNs(), labels, annotations, imageSpec, metadata, sb.id, containerConfig.GetTty()) container, err := oci.NewContainer(containerID, containerName, containerInfo.RunDir, logPath, sb.netNs(), labels, annotations, imageSpec, metadata, sb.id, containerConfig.Tty)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -12,7 +12,7 @@ import (
// ExecSync runs a command in a container synchronously. // ExecSync runs a command in a container synchronously.
func (s *Server) ExecSync(ctx context.Context, req *pb.ExecSyncRequest) (*pb.ExecSyncResponse, error) { func (s *Server) ExecSync(ctx context.Context, req *pb.ExecSyncRequest) (*pb.ExecSyncResponse, error) {
logrus.Debugf("ExecSyncRequest %+v", req) logrus.Debugf("ExecSyncRequest %+v", req)
c, err := s.getContainerFromRequest(req) c, err := s.getContainerFromRequest(req.ContainerId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -26,19 +26,19 @@ func (s *Server) ExecSync(ctx context.Context, req *pb.ExecSyncRequest) (*pb.Exe
return nil, fmt.Errorf("container is not created or running") return nil, fmt.Errorf("container is not created or running")
} }
cmd := req.GetCmd() cmd := req.Cmd
if cmd == nil { if cmd == nil {
return nil, fmt.Errorf("exec command cannot be empty") return nil, fmt.Errorf("exec command cannot be empty")
} }
execResp, err := s.runtime.ExecSync(c, cmd, req.GetTimeout()) execResp, err := s.runtime.ExecSync(c, cmd, req.Timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resp := &pb.ExecSyncResponse{ resp := &pb.ExecSyncResponse{
Stdout: execResp.Stdout, Stdout: execResp.Stdout,
Stderr: execResp.Stderr, Stderr: execResp.Stderr,
ExitCode: &execResp.ExitCode, ExitCode: execResp.ExitCode,
} }
logrus.Debugf("ExecSyncResponse: %+v", resp) logrus.Debugf("ExecSyncResponse: %+v", resp)

View file

@ -4,15 +4,15 @@ import (
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/kubernetes-incubator/cri-o/oci" "github.com/kubernetes-incubator/cri-o/oci"
"golang.org/x/net/context" "golang.org/x/net/context"
"k8s.io/kubernetes/pkg/fields"
pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
"k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/fields"
) )
// filterContainer returns whether passed container matches filtering criteria // filterContainer returns whether passed container matches filtering criteria
func filterContainer(c *pb.Container, filter *pb.ContainerFilter) bool { func filterContainer(c *pb.Container, filter *pb.ContainerFilter) bool {
if filter != nil { if filter != nil {
if filter.State != nil { if filter.State != nil {
if *c.State != *filter.State { if c.State != filter.State.State {
return false return false
} }
} }
@ -36,15 +36,15 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque
// Filter using container id and pod id first. // Filter using container id and pod id first.
if filter != nil { if filter != nil {
if filter.Id != nil { if filter.Id != "" {
id, err := s.ctrIDIndex.Get(*filter.Id) id, err := s.ctrIDIndex.Get(filter.Id)
if err != nil { if err != nil {
return nil, err return nil, err
} }
c := s.state.containers.Get(id) c := s.state.containers.Get(id)
if c != nil { if c != nil {
if filter.PodSandboxId != nil { if filter.PodSandboxId != "" {
if c.Sandbox() == *filter.PodSandboxId { if c.Sandbox() == filter.PodSandboxId {
ctrList = []*oci.Container{c} ctrList = []*oci.Container{c}
} else { } else {
ctrList = []*oci.Container{} ctrList = []*oci.Container{}
@ -55,8 +55,8 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque
} }
} }
} else { } else {
if filter.PodSandboxId != nil { if filter.PodSandboxId != "" {
pod := s.state.sandboxes[*filter.PodSandboxId] pod := s.state.sandboxes[filter.PodSandboxId]
if pod == nil { if pod == nil {
ctrList = []*oci.Container{} ctrList = []*oci.Container{}
} else { } else {
@ -78,9 +78,9 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque
cID := ctr.ID() cID := ctr.ID()
c := &pb.Container{ c := &pb.Container{
Id: &cID, Id: cID,
PodSandboxId: &podSandboxID, PodSandboxId: podSandboxID,
CreatedAt: int64Ptr(created), CreatedAt: int64(created),
Labels: ctr.Labels(), Labels: ctr.Labels(),
Metadata: ctr.Metadata(), Metadata: ctr.Metadata(),
Annotations: ctr.Annotations(), Annotations: ctr.Annotations(),
@ -95,7 +95,7 @@ func (s *Server) ListContainers(ctx context.Context, req *pb.ListContainersReque
case oci.ContainerStateStopped: case oci.ContainerStateStopped:
rState = pb.ContainerState_CONTAINER_EXITED rState = pb.ContainerState_CONTAINER_EXITED
} }
c.State = &rState c.State = rState
// Filter by other criteria such as state and labels. // Filter by other criteria such as state and labels.
if filterContainer(c, req.Filter) { if filterContainer(c, req.Filter) {

View file

@ -14,7 +14,7 @@ import (
func (s *Server) RemoveContainer(ctx context.Context, req *pb.RemoveContainerRequest) (*pb.RemoveContainerResponse, error) { func (s *Server) RemoveContainer(ctx context.Context, req *pb.RemoveContainerRequest) (*pb.RemoveContainerResponse, error) {
logrus.Debugf("RemoveContainerRequest %+v", req) logrus.Debugf("RemoveContainerRequest %+v", req)
s.Update() s.Update()
c, err := s.getContainerFromRequest(req) c, err := s.getContainerFromRequest(req.ContainerId)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -12,7 +12,7 @@ import (
func (s *Server) StartContainer(ctx context.Context, req *pb.StartContainerRequest) (*pb.StartContainerResponse, error) { func (s *Server) StartContainer(ctx context.Context, req *pb.StartContainerRequest) (*pb.StartContainerResponse, error) {
logrus.Debugf("StartContainerRequest %+v", req) logrus.Debugf("StartContainerRequest %+v", req)
s.Update() s.Update()
c, err := s.getContainerFromRequest(req) c, err := s.getContainerFromRequest(req.ContainerId)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -11,7 +11,7 @@ import (
func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusRequest) (*pb.ContainerStatusResponse, error) { func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusRequest) (*pb.ContainerStatusResponse, error) {
logrus.Debugf("ContainerStatusRequest %+v", req) logrus.Debugf("ContainerStatusRequest %+v", req)
s.Update() s.Update()
c, err := s.getContainerFromRequest(req) c, err := s.getContainerFromRequest(req.ContainerId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -23,7 +23,7 @@ func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusReq
containerID := c.ID() containerID := c.ID()
resp := &pb.ContainerStatusResponse{ resp := &pb.ContainerStatusResponse{
Status: &pb.ContainerStatus{ Status: &pb.ContainerStatus{
Id: &containerID, Id: containerID,
Metadata: c.Metadata(), Metadata: c.Metadata(),
}, },
} }
@ -35,25 +35,25 @@ func (s *Server) ContainerStatus(ctx context.Context, req *pb.ContainerStatusReq
case oci.ContainerStateCreated: case oci.ContainerStateCreated:
rStatus = pb.ContainerState_CONTAINER_CREATED rStatus = pb.ContainerState_CONTAINER_CREATED
created := cState.Created.UnixNano() created := cState.Created.UnixNano()
resp.Status.CreatedAt = int64Ptr(created) resp.Status.CreatedAt = int64(created)
case oci.ContainerStateRunning: case oci.ContainerStateRunning:
rStatus = pb.ContainerState_CONTAINER_RUNNING rStatus = pb.ContainerState_CONTAINER_RUNNING
created := cState.Created.UnixNano() created := cState.Created.UnixNano()
resp.Status.CreatedAt = int64Ptr(created) resp.Status.CreatedAt = int64(created)
started := cState.Started.UnixNano() started := cState.Started.UnixNano()
resp.Status.StartedAt = int64Ptr(started) resp.Status.StartedAt = int64(started)
case oci.ContainerStateStopped: case oci.ContainerStateStopped:
rStatus = pb.ContainerState_CONTAINER_EXITED rStatus = pb.ContainerState_CONTAINER_EXITED
created := cState.Created.UnixNano() created := cState.Created.UnixNano()
resp.Status.CreatedAt = int64Ptr(created) resp.Status.CreatedAt = int64(created)
started := cState.Started.UnixNano() started := cState.Started.UnixNano()
resp.Status.StartedAt = int64Ptr(started) resp.Status.StartedAt = int64(started)
finished := cState.Finished.UnixNano() finished := cState.Finished.UnixNano()
resp.Status.FinishedAt = int64Ptr(finished) resp.Status.FinishedAt = int64(finished)
resp.Status.ExitCode = int32Ptr(cState.ExitCode) resp.Status.ExitCode = int32(cState.ExitCode)
} }
resp.Status.State = &rStatus resp.Status.State = rStatus
logrus.Debugf("ContainerStatusResponse: %+v", resp) logrus.Debugf("ContainerStatusResponse: %+v", resp)
return resp, nil return resp, nil

View file

@ -13,7 +13,7 @@ import (
func (s *Server) StopContainer(ctx context.Context, req *pb.StopContainerRequest) (*pb.StopContainerResponse, error) { func (s *Server) StopContainer(ctx context.Context, req *pb.StopContainerRequest) (*pb.StopContainerResponse, error) {
logrus.Debugf("StopContainerRequest %+v", req) logrus.Debugf("StopContainerRequest %+v", req)
s.Update() s.Update()
c, err := s.getContainerFromRequest(req) c, err := s.getContainerFromRequest(req.ContainerId)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -14,7 +14,7 @@ func (s *Server) ListImages(ctx context.Context, req *pb.ListImagesRequest) (*pb
if reqFilter != nil { if reqFilter != nil {
filterImage := reqFilter.GetImage() filterImage := reqFilter.GetImage()
if filterImage != nil { if filterImage != nil {
filter = filterImage.GetImage() filter = filterImage.Image
} }
} }
results, err := s.images.ListImages(filter) results, err := s.images.ListImages(filter)
@ -23,11 +23,18 @@ func (s *Server) ListImages(ctx context.Context, req *pb.ListImagesRequest) (*pb
} }
response := pb.ListImagesResponse{} response := pb.ListImagesResponse{}
for _, result := range results { for _, result := range results {
if result.Size != nil {
response.Images = append(response.Images, &pb.Image{ response.Images = append(response.Images, &pb.Image{
Id: sPtr(result.ID), Id: result.ID,
RepoTags: result.Names, RepoTags: result.Names,
Size_: result.Size, Size_: *result.Size,
}) })
} else {
response.Images = append(response.Images, &pb.Image{
Id: result.ID,
RepoTags: result.Names,
})
}
} }
logrus.Debugf("ListImagesResponse: %+v", response) logrus.Debugf("ListImagesResponse: %+v", response)
return &response, nil return &response, nil

View file

@ -15,7 +15,7 @@ func (s *Server) PullImage(ctx context.Context, req *pb.PullImageRequest) (*pb.P
image := "" image := ""
img := req.GetImage() img := req.GetImage()
if img != nil { if img != nil {
image = img.GetImage() image = img.Image
} }
options := &copy.Options{} options := &copy.Options{}
_, err := s.images.PullImage(s.imageContext, image, options) _, err := s.images.PullImage(s.imageContext, image, options)
@ -23,7 +23,7 @@ func (s *Server) PullImage(ctx context.Context, req *pb.PullImageRequest) (*pb.P
return nil, err return nil, err
} }
resp := &pb.PullImageResponse{ resp := &pb.PullImageResponse{
ImageRef: &image, ImageRef: image,
} }
logrus.Debugf("PullImageResponse: %+v", resp) logrus.Debugf("PullImageResponse: %+v", resp)
return resp, nil return resp, nil

View file

@ -14,7 +14,7 @@ func (s *Server) RemoveImage(ctx context.Context, req *pb.RemoveImageRequest) (*
image := "" image := ""
img := req.GetImage() img := req.GetImage()
if img != nil { if img != nil {
image = img.GetImage() image = img.Image
} }
if image == "" { if image == "" {
return nil, fmt.Errorf("no image specified") return nil, fmt.Errorf("no image specified")

View file

@ -15,7 +15,7 @@ func (s *Server) ImageStatus(ctx context.Context, req *pb.ImageStatusRequest) (*
image := "" image := ""
img := req.GetImage() img := req.GetImage()
if img != nil { if img != nil {
image = img.GetImage() image = img.Image
} }
if image == "" { if image == "" {
return nil, fmt.Errorf("no image specified") return nil, fmt.Errorf("no image specified")
@ -29,9 +29,9 @@ func (s *Server) ImageStatus(ctx context.Context, req *pb.ImageStatusRequest) (*
} }
resp := &pb.ImageStatusResponse{ resp := &pb.ImageStatusResponse{
Image: &pb.Image{ Image: &pb.Image{
Id: &status.ID, Id: status.ID,
RepoTags: status.Names, RepoTags: status.Names,
Size_: status.Size, Size_: *status.Size,
}, },
} }
logrus.Debugf("ImageStatusResponse: %+v", resp) logrus.Debugf("ImageStatusResponse: %+v", resp)

View file

@ -26,12 +26,12 @@ func (s *Server) Status(ctx context.Context, req *pb.StatusRequest) (*pb.StatusR
Status: &pb.RuntimeStatus{ Status: &pb.RuntimeStatus{
Conditions: []*pb.RuntimeCondition{ Conditions: []*pb.RuntimeCondition{
{ {
Type: &runtimeReadyConditionString, Type: runtimeReadyConditionString,
Status: &runtimeReady, Status: runtimeReady,
}, },
{ {
Type: &networkReadyConditionString, Type: networkReadyConditionString,
Status: &networkReady, Status: networkReady,
}, },
}, },
}, },

View file

@ -261,19 +261,14 @@ func (s *Server) generatePodIDandName(name string, namespace string, attempt uin
return id, name, err return id, name, err
} }
type podSandboxRequest interface { func (s *Server) getPodSandboxFromRequest(podSandboxID string) (*sandbox, error) {
GetPodSandboxId() string if podSandboxID == "" {
}
func (s *Server) getPodSandboxFromRequest(req podSandboxRequest) (*sandbox, error) {
sbID := req.GetPodSandboxId()
if sbID == "" {
return nil, errSandboxIDEmpty return nil, errSandboxIDEmpty
} }
sandboxID, err := s.podIDIndex.Get(sbID) sandboxID, err := s.podIDIndex.Get(podSandboxID)
if err != nil { if err != nil {
return nil, fmt.Errorf("PodSandbox with ID starting with %s not found: %v", sbID, err) return nil, fmt.Errorf("PodSandbox with ID starting with %s not found: %v", podSandboxID, err)
} }
sb := s.getSandbox(sandboxID) sb := s.getSandbox(sandboxID)

View file

@ -4,15 +4,15 @@ import (
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/kubernetes-incubator/cri-o/oci" "github.com/kubernetes-incubator/cri-o/oci"
"golang.org/x/net/context" "golang.org/x/net/context"
"k8s.io/kubernetes/pkg/fields"
pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
"k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/fields"
) )
// filterSandbox returns whether passed container matches filtering criteria // filterSandbox returns whether passed container matches filtering criteria
func filterSandbox(p *pb.PodSandbox, filter *pb.PodSandboxFilter) bool { func filterSandbox(p *pb.PodSandbox, filter *pb.PodSandboxFilter) bool {
if filter != nil { if filter != nil {
if filter.State != nil { if filter.State != nil {
if *p.State != *filter.State { if p.State != filter.State.State {
return false return false
} }
} }
@ -39,8 +39,8 @@ func (s *Server) ListPodSandbox(ctx context.Context, req *pb.ListPodSandboxReque
filter := req.Filter filter := req.Filter
// Filter by pod id first. // Filter by pod id first.
if filter != nil { if filter != nil {
if filter.Id != nil { if filter.Id != "" {
id, err := s.podIDIndex.Get(*filter.Id) id, err := s.podIDIndex.Get(filter.Id)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -71,9 +71,9 @@ func (s *Server) ListPodSandbox(ctx context.Context, req *pb.ListPodSandboxReque
} }
pod := &pb.PodSandbox{ pod := &pb.PodSandbox{
Id: &sb.id, Id: sb.id,
CreatedAt: int64Ptr(created), CreatedAt: int64(created),
State: &rStatus, State: rStatus,
Labels: sb.labels, Labels: sb.labels,
Annotations: sb.annotations, Annotations: sb.annotations,
Metadata: sb.metadata, Metadata: sb.metadata,

View file

@ -16,14 +16,14 @@ import (
func (s *Server) RemovePodSandbox(ctx context.Context, req *pb.RemovePodSandboxRequest) (*pb.RemovePodSandboxResponse, error) { func (s *Server) RemovePodSandbox(ctx context.Context, req *pb.RemovePodSandboxRequest) (*pb.RemovePodSandboxResponse, error) {
logrus.Debugf("RemovePodSandboxRequest %+v", req) logrus.Debugf("RemovePodSandboxRequest %+v", req)
s.Update() s.Update()
sb, err := s.getPodSandboxFromRequest(req) sb, err := s.getPodSandboxFromRequest(req.PodSandboxId)
if err != nil { if err != nil {
if err == errSandboxIDEmpty { if err == errSandboxIDEmpty {
return nil, err return nil, err
} }
resp := &pb.RemovePodSandboxResponse{} resp := &pb.RemovePodSandboxResponse{}
logrus.Warnf("could not get sandbox %s, it's probably been removed already: %v", req.GetPodSandboxId(), err) logrus.Warnf("could not get sandbox %s, it's probably been removed already: %v", req.PodSandboxId, err)
return resp, nil return resp, nil
} }

View file

@ -42,13 +42,13 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
logrus.Debugf("RunPodSandboxRequest %+v", req) logrus.Debugf("RunPodSandboxRequest %+v", req)
var processLabel, mountLabel, netNsPath string var processLabel, mountLabel, netNsPath string
// process req.Name // process req.Name
name := req.GetConfig().GetMetadata().GetName() name := req.GetConfig().GetMetadata().Name
if name == "" { if name == "" {
return nil, fmt.Errorf("PodSandboxConfig.Name should not be empty") return nil, fmt.Errorf("PodSandboxConfig.Name should not be empty")
} }
namespace := req.GetConfig().GetMetadata().GetNamespace() namespace := req.GetConfig().GetMetadata().Namespace
attempt := req.GetConfig().GetMetadata().GetAttempt() attempt := req.GetConfig().GetMetadata().Attempt
id, name, err := s.generatePodIDandName(name, namespace, attempt) id, name, err := s.generatePodIDandName(name, namespace, attempt)
if err != nil { if err != nil {
@ -81,8 +81,8 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
name, id, name, id,
s.config.PauseImage, "", s.config.PauseImage, "",
containerName, containerName,
req.GetConfig().GetMetadata().GetName(), req.GetConfig().GetMetadata().Name,
req.GetConfig().GetMetadata().GetUid(), req.GetConfig().GetMetadata().Uid,
namespace, namespace,
attempt, attempt,
nil) nil)
@ -118,21 +118,22 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
} }
// set hostname // set hostname
hostname := req.GetConfig().GetHostname() hostname := req.GetConfig().Hostname
if hostname != "" { if hostname != "" {
g.SetHostname(hostname) g.SetHostname(hostname)
} }
// set log directory // set log directory
logDir := req.GetConfig().GetLogDirectory() logDir := req.GetConfig().LogDirectory
if logDir == "" { if logDir == "" {
logDir = filepath.Join(s.config.LogDir, id) logDir = filepath.Join(s.config.LogDir, id)
} }
// set DNS options // set DNS options
dnsServers := req.GetConfig().GetDnsConfig().GetServers() if req.GetConfig().GetDnsConfig() != nil {
dnsSearches := req.GetConfig().GetDnsConfig().GetSearches() dnsServers := req.GetConfig().GetDnsConfig().Servers
dnsOptions := req.GetConfig().GetDnsConfig().GetOptions() dnsSearches := req.GetConfig().GetDnsConfig().Searches
dnsOptions := req.GetConfig().GetDnsConfig().Options
resolvPath := fmt.Sprintf("%s/resolv.conf", podContainer.RunDir) resolvPath := fmt.Sprintf("%s/resolv.conf", podContainer.RunDir)
err = parseDNSOptions(dnsServers, dnsSearches, dnsOptions, resolvPath) err = parseDNSOptions(dnsServers, dnsSearches, dnsOptions, resolvPath)
if err != nil { if err != nil {
@ -143,8 +144,8 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
} }
return nil, err return nil, err
} }
g.AddBindMount(resolvPath, "/etc/resolv.conf", []string{"ro"}) g.AddBindMount(resolvPath, "/etc/resolv.conf", []string{"ro"})
}
// add metadata // add metadata
metadata := req.GetConfig().GetMetadata() metadata := req.GetConfig().GetMetadata()
@ -168,7 +169,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
} }
// Don't use SELinux separation with Host Pid or IPC Namespace, // Don't use SELinux separation with Host Pid or IPC Namespace,
if !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostPid() && !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostIpc() { if !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostPid && !req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc {
processLabel, mountLabel, err = getSELinuxLabels(nil) processLabel, mountLabel, err = getSELinuxLabels(nil)
if err != nil { if err != nil {
return nil, err return nil, err
@ -178,7 +179,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
// create shm mount for the pod containers. // create shm mount for the pod containers.
var shmPath string var shmPath string
if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostIpc() { if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc {
shmPath = "/dev/shm" shmPath = "/dev/shm"
} else { } else {
shmPath, err = setupShm(podContainer.RunDir, mountLabel) shmPath, err = setupShm(podContainer.RunDir, mountLabel)
@ -260,7 +261,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
} }
// setup cgroup settings // setup cgroup settings
cgroupParent := req.GetConfig().GetLinux().GetCgroupParent() cgroupParent := req.GetConfig().GetLinux().CgroupParent
if cgroupParent != "" { if cgroupParent != "" {
if s.config.CgroupManager == "systemd" { if s.config.CgroupManager == "systemd" {
cgPath := sb.cgroupParent + ":" + "ocid" + ":" + id cgPath := sb.cgroupParent + ":" + "ocid" + ":" + id
@ -273,7 +274,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
sb.cgroupParent = cgroupParent sb.cgroupParent = cgroupParent
} }
hostNetwork := req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostNetwork() hostNetwork := req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostNetwork
// set up namespaces // set up namespaces
if hostNetwork { if hostNetwork {
@ -311,14 +312,14 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
netNsPath = sb.netNsPath() netNsPath = sb.netNsPath()
} }
if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostPid() { if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostPid {
err = g.RemoveLinuxNamespace("pid") err = g.RemoveLinuxNamespace("pid")
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().GetHostIpc() { if req.GetConfig().GetLinux().GetSecurityContext().GetNamespaceOptions().HostIpc {
err = g.RemoveLinuxNamespace("ipc") err = g.RemoveLinuxNamespace("ipc")
if err != nil { if err != nil {
return nil, err return nil, err
@ -358,7 +359,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
return nil, err return nil, err
} }
resp = &pb.RunPodSandboxResponse{PodSandboxId: &id} resp = &pb.RunPodSandboxResponse{PodSandboxId: id}
logrus.Debugf("RunPodSandboxResponse: %+v", resp) logrus.Debugf("RunPodSandboxResponse: %+v", resp)
return resp, nil return resp, nil
} }
@ -379,22 +380,22 @@ func (s *Server) setPodSandboxMountLabel(id, mountLabel string) error {
func getSELinuxLabels(selinuxOptions *pb.SELinuxOption) (processLabel string, mountLabel string, err error) { func getSELinuxLabels(selinuxOptions *pb.SELinuxOption) (processLabel string, mountLabel string, err error) {
processLabel = "" processLabel = ""
if selinuxOptions != nil { if selinuxOptions != nil {
user := selinuxOptions.GetUser() user := selinuxOptions.User
if user == "" { if user == "" {
return "", "", fmt.Errorf("SELinuxOption.User is empty") return "", "", fmt.Errorf("SELinuxOption.User is empty")
} }
role := selinuxOptions.GetRole() role := selinuxOptions.Role
if role == "" { if role == "" {
return "", "", fmt.Errorf("SELinuxOption.Role is empty") return "", "", fmt.Errorf("SELinuxOption.Role is empty")
} }
t := selinuxOptions.GetType() t := selinuxOptions.Type
if t == "" { if t == "" {
return "", "", fmt.Errorf("SELinuxOption.Type is empty") return "", "", fmt.Errorf("SELinuxOption.Type is empty")
} }
level := selinuxOptions.GetLevel() level := selinuxOptions.Level
if level == "" { if level == "" {
return "", "", fmt.Errorf("SELinuxOption.Level is empty") return "", "", fmt.Errorf("SELinuxOption.Level is empty")
} }

View file

@ -11,7 +11,7 @@ import (
func (s *Server) PodSandboxStatus(ctx context.Context, req *pb.PodSandboxStatusRequest) (*pb.PodSandboxStatusResponse, error) { func (s *Server) PodSandboxStatus(ctx context.Context, req *pb.PodSandboxStatusRequest) (*pb.PodSandboxStatusResponse, error) {
logrus.Debugf("PodSandboxStatusRequest %+v", req) logrus.Debugf("PodSandboxStatusRequest %+v", req)
s.Update() s.Update()
sb, err := s.getPodSandboxFromRequest(req) sb, err := s.getPodSandboxFromRequest(req.PodSandboxId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -43,15 +43,15 @@ func (s *Server) PodSandboxStatus(ctx context.Context, req *pb.PodSandboxStatusR
sandboxID := sb.id sandboxID := sb.id
resp := &pb.PodSandboxStatusResponse{ resp := &pb.PodSandboxStatusResponse{
Status: &pb.PodSandboxStatus{ Status: &pb.PodSandboxStatus{
Id: &sandboxID, Id: sandboxID,
CreatedAt: int64Ptr(created), CreatedAt: int64(created),
Linux: &pb.LinuxPodSandboxStatus{ Linux: &pb.LinuxPodSandboxStatus{
Namespaces: &pb.Namespace{ Namespaces: &pb.Namespace{
Network: sPtr(netNsPath), Network: netNsPath,
}, },
}, },
Network: &pb.PodSandboxNetworkStatus{Ip: &ip}, Network: &pb.PodSandboxNetworkStatus{Ip: ip},
State: &rStatus, State: rStatus,
Labels: sb.labels, Labels: sb.labels,
Annotations: sb.annotations, Annotations: sb.annotations,
Metadata: sb.metadata, Metadata: sb.metadata,

View file

@ -15,7 +15,7 @@ import (
func (s *Server) StopPodSandbox(ctx context.Context, req *pb.StopPodSandboxRequest) (*pb.StopPodSandboxResponse, error) { func (s *Server) StopPodSandbox(ctx context.Context, req *pb.StopPodSandboxRequest) (*pb.StopPodSandboxResponse, error) {
logrus.Debugf("StopPodSandboxRequest %+v", req) logrus.Debugf("StopPodSandboxRequest %+v", req)
s.Update() s.Update()
sb, err := s.getPodSandboxFromRequest(req) sb, err := s.getPodSandboxFromRequest(req.PodSandboxId)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -97,7 +97,7 @@ func (s *Server) loadContainer(id string) error {
image, ok := m.Annotations["ocid/image"] image, ok := m.Annotations["ocid/image"]
if ok { if ok {
img = &pb.ImageSpec{ img = &pb.ImageSpec{
Image: &image, Image: image,
} }
} }

View file

@ -13,18 +13,6 @@ const (
maxDNSSearches = 6 maxDNSSearches = 6
) )
func int64Ptr(i int64) *int64 {
return &i
}
func int32Ptr(i int32) *int32 {
return &i
}
func sPtr(s string) *string {
return &s
}
func copyFile(src, dest string) error { func copyFile(src, dest string) error {
in, err := os.Open(src) in, err := os.Open(src)
if err != nil { if err != nil {

View file

@ -21,9 +21,9 @@ func (s *Server) Version(ctx context.Context, req *pb.VersionRequest) (*pb.Versi
runtimeName := s.runtime.Name() runtimeName := s.runtime.Name()
return &pb.VersionResponse{ return &pb.VersionResponse{
Version: &version, Version: version,
RuntimeName: &runtimeName, RuntimeName: runtimeName,
RuntimeVersion: &runtimeVersion, RuntimeVersion: runtimeVersion,
RuntimeApiVersion: &rav, RuntimeApiVersion: rav,
}, nil }, nil
} }

View file

@ -0,0 +1 @@
../v2s1-invalid-signatures.manifest.json

View file

@ -0,0 +1 @@
../dir-img-valid/signature-1

View file

@ -0,0 +1 @@
../dir-img-valid/manifest.json

View file

@ -0,0 +1 @@
../invalid-blob.signature

View file

@ -0,0 +1 @@
../dir-img-valid/signature-1

View file

@ -0,0 +1 @@
../dir-img-valid/signature-1

View file

@ -0,0 +1 @@
../dir-img-valid/signature-1

View file

@ -0,0 +1 @@
../dir-img-valid/manifest.json

View file

@ -0,0 +1 @@
../dir-img-valid/manifest.json

View file

@ -0,0 +1 @@
../dir-img-valid/signature-1

View file

@ -0,0 +1 @@
../image.manifest.json

View file

@ -0,0 +1 @@
../../../contrib/init/sysvinit-debian/docker.default

View file

@ -0,0 +1 @@
../../../contrib/init/sysvinit-debian/docker

View file

@ -0,0 +1 @@
../../../contrib/init/upstart/docker.conf

View file

@ -0,0 +1 @@
../../../contrib/udev/80-docker.rules

View file

@ -0,0 +1 @@
../../../contrib/init/sysvinit-debian/docker.default

View file

@ -0,0 +1 @@
../../../contrib/init/sysvinit-debian/docker

View file

@ -0,0 +1 @@
../../../contrib/init/upstart/docker.conf

View file

@ -0,0 +1 @@
../../../contrib/udev/80-docker.rules

1
vendor/github.com/docker/docker/project/CONTRIBUTORS.md generated vendored Symbolic link
View file

@ -0,0 +1 @@
../CONTRIBUTING.md

View file

@ -24,7 +24,6 @@ var generateFlags = []cli.Flag{
cli.StringSliceFlag{Name: "bind", Usage: "bind mount directories src:dest[:options...]"}, cli.StringSliceFlag{Name: "bind", Usage: "bind mount directories src:dest[:options...]"},
cli.StringSliceFlag{Name: "cap-add", Usage: "add Linux capabilities"}, cli.StringSliceFlag{Name: "cap-add", Usage: "add Linux capabilities"},
cli.StringSliceFlag{Name: "cap-drop", Usage: "drop Linux capabilities"}, cli.StringSliceFlag{Name: "cap-drop", Usage: "drop Linux capabilities"},
cli.StringFlag{Name: "cgroup", Usage: "cgroup namespace"},
cli.StringFlag{Name: "cgroups-path", Usage: "specify the path to the cgroups"}, cli.StringFlag{Name: "cgroups-path", Usage: "specify the path to the cgroups"},
cli.StringFlag{Name: "cwd", Value: "/", Usage: "current working directory for the process"}, cli.StringFlag{Name: "cwd", Value: "/", Usage: "current working directory for the process"},
cli.BoolFlag{Name: "disable-oom-kill", Usage: "disable OOM Killer"}, cli.BoolFlag{Name: "disable-oom-kill", Usage: "disable OOM Killer"},
@ -34,7 +33,6 @@ var generateFlags = []cli.Flag{
cli.StringSliceFlag{Name: "gidmappings", Usage: "add GIDMappings e.g HostID:ContainerID:Size"}, cli.StringSliceFlag{Name: "gidmappings", Usage: "add GIDMappings e.g HostID:ContainerID:Size"},
cli.StringSliceFlag{Name: "groups", Usage: "supplementary groups for the process"}, cli.StringSliceFlag{Name: "groups", Usage: "supplementary groups for the process"},
cli.StringFlag{Name: "hostname", Usage: "hostname value for the container"}, cli.StringFlag{Name: "hostname", Usage: "hostname value for the container"},
cli.StringFlag{Name: "ipc", Usage: "ipc namespace"},
cli.StringSliceFlag{Name: "label", Usage: "add annotations to the configuration e.g. key=value"}, cli.StringSliceFlag{Name: "label", Usage: "add annotations to the configuration e.g. key=value"},
cli.Uint64Flag{Name: "linux-cpu-shares", Usage: "the relative share of CPU time available to the tasks in a cgroup"}, cli.Uint64Flag{Name: "linux-cpu-shares", Usage: "the relative share of CPU time available to the tasks in a cgroup"},
cli.Uint64Flag{Name: "linux-cpu-period", Usage: "the CPU period to be used for hardcapping (in usecs)"}, cli.Uint64Flag{Name: "linux-cpu-period", Usage: "the CPU period to be used for hardcapping (in usecs)"},
@ -47,21 +45,21 @@ var generateFlags = []cli.Flag{
cli.Uint64Flag{Name: "linux-mem-swap", Usage: "total memory limit (memory + swap) (in bytes)"}, cli.Uint64Flag{Name: "linux-mem-swap", Usage: "total memory limit (memory + swap) (in bytes)"},
cli.Uint64Flag{Name: "linux-mem-swappiness", Usage: "how aggressive the kernel will swap memory pages (Range from 0 to 100)"}, cli.Uint64Flag{Name: "linux-mem-swappiness", Usage: "how aggressive the kernel will swap memory pages (Range from 0 to 100)"},
cli.StringFlag{Name: "linux-mems", Usage: "list of memory nodes in the cpuset (default is to use any available memory node)"}, cli.StringFlag{Name: "linux-mems", Usage: "list of memory nodes in the cpuset (default is to use any available memory node)"},
cli.StringSliceFlag{Name: "linux-namespace-add", Usage: "adds a namespace to the set of namespaces to create or join of the form 'ns[:path]'"},
cli.StringSliceFlag{Name: "linux-namespace-remove", Usage: "removes a namespace from the set of namespaces to create or join of the form 'ns'"},
cli.BoolFlag{Name: "linux-namespace-remove-all", Usage: "removes all namespaces from the set of namespaces created or joined"},
cli.IntFlag{Name: "linux-network-classid", Usage: "specifies class identifier tagged by container's network packets"}, cli.IntFlag{Name: "linux-network-classid", Usage: "specifies class identifier tagged by container's network packets"},
cli.StringSliceFlag{Name: "linux-network-priorities", Usage: "specifies priorities of network traffic"}, cli.StringSliceFlag{Name: "linux-network-priorities", Usage: "specifies priorities of network traffic"},
cli.Int64Flag{Name: "linux-pids-limit", Usage: "maximum number of PIDs"}, cli.Int64Flag{Name: "linux-pids-limit", Usage: "maximum number of PIDs"},
cli.Uint64Flag{Name: "linux-realtime-period", Usage: "CPU period to be used for realtime scheduling (in usecs)"}, cli.Uint64Flag{Name: "linux-realtime-period", Usage: "CPU period to be used for realtime scheduling (in usecs)"},
cli.Uint64Flag{Name: "linux-realtime-runtime", Usage: "the time realtime scheduling may use (in usecs)"}, cli.Uint64Flag{Name: "linux-realtime-runtime", Usage: "the time realtime scheduling may use (in usecs)"},
cli.StringSliceFlag{Name: "masked-paths", Usage: "specifies paths can not be read inside container"}, cli.StringSliceFlag{Name: "masked-paths", Usage: "specifies paths can not be read inside container"},
cli.StringFlag{Name: "mount", Usage: "mount namespace"},
cli.StringFlag{Name: "mount-cgroups", Value: "no", Usage: "mount cgroups (rw,ro,no)"}, cli.StringFlag{Name: "mount-cgroups", Value: "no", Usage: "mount cgroups (rw,ro,no)"},
cli.StringFlag{Name: "mount-label", Usage: "selinux mount context label"}, cli.StringFlag{Name: "mount-label", Usage: "selinux mount context label"},
cli.StringFlag{Name: "network", Usage: "network namespace"},
cli.BoolFlag{Name: "no-new-privileges", Usage: "set no new privileges bit for the container process"}, cli.BoolFlag{Name: "no-new-privileges", Usage: "set no new privileges bit for the container process"},
cli.IntFlag{Name: "oom-score-adj", Usage: "oom_score_adj for the container"}, cli.IntFlag{Name: "oom-score-adj", Usage: "oom_score_adj for the container"},
cli.StringFlag{Name: "os", Value: runtime.GOOS, Usage: "operating system the container is created for"}, cli.StringFlag{Name: "os", Value: runtime.GOOS, Usage: "operating system the container is created for"},
cli.StringFlag{Name: "output", Usage: "output file (defaults to stdout)"}, cli.StringFlag{Name: "output", Usage: "output file (defaults to stdout)"},
cli.StringFlag{Name: "pid", Usage: "pid namespace"},
cli.StringSliceFlag{Name: "poststart", Usage: "set command to run in poststart hooks"}, cli.StringSliceFlag{Name: "poststart", Usage: "set command to run in poststart hooks"},
cli.StringSliceFlag{Name: "poststop", Usage: "set command to run in poststop hooks"}, cli.StringSliceFlag{Name: "poststop", Usage: "set command to run in poststop hooks"},
cli.StringSliceFlag{Name: "prestart", Usage: "set command to run in prestart hooks"}, cli.StringSliceFlag{Name: "prestart", Usage: "set command to run in prestart hooks"},
@ -91,8 +89,6 @@ var generateFlags = []cli.Flag{
cli.BoolFlag{Name: "tty", Usage: "allocate a new tty for the container process"}, cli.BoolFlag{Name: "tty", Usage: "allocate a new tty for the container process"},
cli.IntFlag{Name: "uid", Usage: "uid for the process"}, cli.IntFlag{Name: "uid", Usage: "uid for the process"},
cli.StringSliceFlag{Name: "uidmappings", Usage: "add UIDMappings e.g HostID:ContainerID:Size"}, cli.StringSliceFlag{Name: "uidmappings", Usage: "add UIDMappings e.g HostID:ContainerID:Size"},
cli.StringFlag{Name: "user", Usage: "user namespace"},
cli.StringFlag{Name: "uts", Usage: "uts namespace"},
} }
var generateCommand = cli.Command{ var generateCommand = cli.Command{
@ -280,8 +276,6 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
} }
} }
needsNewUser := false
var uidMaps, gidMaps []string var uidMaps, gidMaps []string
if context.IsSet("uidmappings") { if context.IsSet("uidmappings") {
@ -292,12 +286,11 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
gidMaps = context.StringSlice("gidmappings") gidMaps = context.StringSlice("gidmappings")
} }
// Add default user namespace.
if len(uidMaps) > 0 || len(gidMaps) > 0 { if len(uidMaps) > 0 || len(gidMaps) > 0 {
needsNewUser = true g.AddOrReplaceLinuxNamespace("user", "")
} }
setupLinuxNamespaces(context, g, needsNewUser)
if context.IsSet("tmpfs") { if context.IsSet("tmpfs") {
tmpfsSlice := context.StringSlice("tmpfs") tmpfsSlice := context.StringSlice("tmpfs")
for _, s := range tmpfsSlice { for _, s := range tmpfsSlice {
@ -457,6 +450,32 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
} }
} }
if context.IsSet("linux-namespace-add") {
namespaces := context.StringSlice("linux-namespace-add")
for _, ns := range namespaces {
name, path, err := parseNamespace(ns)
if err != nil {
return err
}
if err := g.AddOrReplaceLinuxNamespace(name, path); err != nil {
return err
}
}
}
if context.IsSet("linux-namespace-remove") {
namespaces := context.StringSlice("linux-namespace-remove")
for _, name := range namespaces {
if err := g.RemoveLinuxNamespace(name); err != nil {
return err
}
}
}
if context.Bool("linux-namespace-remove-all") {
g.ClearLinuxNamespaces()
}
if context.IsSet("rlimits-add") { if context.IsSet("rlimits-add") {
rlimits := context.StringSlice("rlimits-add") rlimits := context.StringSlice("rlimits-add")
for _, rlimit := range rlimits { for _, rlimit := range rlimits {
@ -486,20 +505,6 @@ func setupSpec(g *generate.Generator, context *cli.Context) error {
return err return err
} }
func setupLinuxNamespaces(context *cli.Context, g *generate.Generator, needsNewUser bool) {
for _, nsName := range generate.Namespaces {
if !context.IsSet(nsName) && !(needsNewUser && nsName == "user") {
continue
}
nsPath := context.String(nsName)
if nsPath == "host" {
g.RemoveLinuxNamespace(nsName)
continue
}
g.AddOrReplaceLinuxNamespace(nsName, nsPath)
}
}
func parseIDMapping(idms string) (uint32, uint32, uint32, error) { func parseIDMapping(idms string) (uint32, uint32, uint32, error) {
idm := strings.Split(idms, ":") idm := strings.Split(idms, ":")
if len(idm) != 3 { if len(idm) != 3 {
@ -604,6 +609,22 @@ func parseRlimit(rlimit string) (string, uint64, uint64, error) {
return parts[0], uint64(hard), uint64(soft), nil return parts[0], uint64(hard), uint64(soft), nil
} }
func parseNamespace(ns string) (string, string, error) {
parts := strings.SplitN(ns, ":", 2)
if len(parts) == 0 || parts[0] == "" {
return "", "", fmt.Errorf("invalid namespace value: %s", ns)
}
nsType := parts[0]
nsPath := ""
if len(parts) == 2 {
nsPath = parts[1]
}
return nsType, nsPath, nil
}
func addSeccomp(context *cli.Context, g *generate.Generator) error { func addSeccomp(context *cli.Context, g *generate.Generator) error {
// Set the DefaultAction of seccomp // Set the DefaultAction of seccomp

View file

@ -297,36 +297,45 @@ _oci-runtime-tool_help() {
_oci-runtime-tool_generate() { _oci-runtime-tool_generate() {
local options_with_args=" local options_with_args="
--arch
--apparmor --apparmor
--arch
--args --args
--bind --bind
--cap-add --cap-add
--cap-drop --cap-drop
--cgroup --cgroups-path
--cgroup-path
--cwd --cwd
--disable-oom-kill
--env --env
--env-file --env-file
--gid --gid
--gidmappings --gidmappings
--groups --groups
--hostname --hostname
--help
--ipc
--label --label
--linux-cpu-shares
--linux-cpu-period
--linux-cpu-quota
--linux-cpus
--linux-mem-kernel-limit
--linux-mem-kernel-tcp
--linux-mem-limit
--linux-mem-reservation
--linux-mem-swap
--linux-mem-swappiness
--linux-mems
--linux-namespace-add
--linux-namespace-remove
--linux-network-classid --linux-network-classid
--linux-network-priorities --linux-network-priorities
--linux-pids-limit --linux-pids-limit
--linux-realtime-period
--linux-realtime-runtime
--masked-paths --masked-paths
--mount
--mount-cgroups --mount-cgroups
--mount-label --mount-label
--network --oom-score-adj
--os --os
--output --output
--pid
--poststart --poststart
--poststop --poststop
--prestart --prestart
@ -335,33 +344,32 @@ _oci-runtime-tool_generate() {
--rootfs-propagation --rootfs-propagation
--rlimits-add --rlimits-add
--rlimits-remove --rlimits-remove
--rlimits-remove-all
--seccomp-allow --seccomp-allow
--seccomp-arch --seccomp-arch
--seccomp-default --seccomp-default
--seccomp-default-force --seccomp-default-force
--seccomp-errno --seccomp-errno
--seccomp-kill --seccomp-kill
--seccomp-only
--seccomp-remove --seccomp-remove
--seccomp-remove-all
--seccomp-trace --seccomp-trace
--seccomp-trap --seccomp-trap
--seccomp-syscalls
--selinux-label --selinux-label
--sysctl --sysctl
--tmplate --template
--tmpfs --tmpfs
--uid --uid
--uidmappings --uidmappings
--user
--uts
" "
local boolean_options=" local boolean_options="
--disable-oom-kill
--linux-namespace-remove-all
--no-new-privileges --no-new-privileges
--privileged --privileged
--rlimits-remove-all
--rootfs-readonly --rootfs-readonly
--seccomp-only
--seccomp-remove-all
--tty --tty
" "

View file

@ -45,12 +45,6 @@ read the configuration from `config.json`.
**--cap-drop**=[] **--cap-drop**=[]
Drop Linux capabilities Drop Linux capabilities
**--cgroup**=*PATH*
Use a Cgroup namespace where *PATH* is an existing Cgroup namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing Cgroup namespace from
the configuration.
**--cgroups-path**="" **--cgroups-path**=""
Specifies the path to the cgroups relative to the cgroups mount point. Specifies the path to the cgroups relative to the cgroups mount point.
@ -88,12 +82,6 @@ read the configuration from `config.json`.
**--hostname**="" **--hostname**=""
Set the container host name that is available inside the container. Set the container host name that is available inside the container.
**--ipc**=*PATH*
Use an IPC namespace where *PATH* is an existing IPC namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing IPC namespace from the
configuration.
**--label**=[] **--label**=[]
Add annotations to the configuration e.g. key=value. Add annotations to the configuration e.g. key=value.
Currently, key containing equals sign is not supported. Currently, key containing equals sign is not supported.
@ -131,6 +119,20 @@ read the configuration from `config.json`.
**--linux-mems**=MEMS **--linux-mems**=MEMS
Sets the list of memory nodes in the cpuset (default is to use any available memory node). Sets the list of memory nodes in the cpuset (default is to use any available memory node).
**--linux-namespace-add**=NSNAME[:PATH]
Adds or replaces the given linux namespace NSNAME with a namespace entry that
has a path of PATH. Omitting PATH means that a new namespace will be created
by the container.
**--linux-namespace-remove**=NSNAME
Removes a namespace from the set of namespaces configured in the container,
so that the host's namespace will be used by the container instead of
creating or joining another namespace.
**--linux-namespace-remove-all**
Removes all namespaces from the set of namespaces configured for a container,
such that the container will effectively run on the host.
**--linux-network-classid**=CLASSID **--linux-network-classid**=CLASSID
Specifies network class identifier which will be tagged by container's network packets. Specifies network class identifier which will be tagged by container's network packets.
@ -153,12 +155,6 @@ read the configuration from `config.json`.
Specifies paths can not be read inside container. e.g. --masked-paths=/proc/kcore Specifies paths can not be read inside container. e.g. --masked-paths=/proc/kcore
This option can be specified multiple times. This option can be specified multiple times.
**--mount**=*PATH*
Use a mount namespace where *PATH* is an existing mount namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing mount namespace from the
configuration.
**--mount-cgroups**=[rw|ro|no] **--mount-cgroups**=[rw|ro|no]
Mount cgroups. The default is *no*. Mount cgroups. The default is *no*.
@ -174,12 +170,6 @@ read the configuration from `config.json`.
"system_u:object_r:usr_t:s0" might be a good label for a readonly container, "system_u:object_r:usr_t:s0" might be a good label for a readonly container,
"system_u:system_r:svirt_sandbox_file_t:s0:c1,c2" for a read/write container. "system_u:system_r:svirt_sandbox_file_t:s0:c1,c2" for a read/write container.
**--network**=*PATH*
Use a network namespace where *PATH* is an existing network namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing network namespace from the
configuration.
**--no-new-privileges**=true|false **--no-new-privileges**=true|false
Set no new privileges bit for the container process. Setting this flag Set no new privileges bit for the container process. Setting this flag
will block the container processes from gaining any additional privileges will block the container processes from gaining any additional privileges
@ -197,12 +187,6 @@ read the configuration from `config.json`.
file at *PATH* (overwriting the existing content if a file already file at *PATH* (overwriting the existing content if a file already
exists at *PATH*). exists at *PATH*).
**--pid**=*PATH*
Use a PID namespace where *PATH* is an existing PID namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing PID namespace from
the configuration.
**--poststart**=CMD[:ARGS...] **--poststart**=CMD[:ARGS...]
Set command to run in poststart hooks. Can be specified multiple times. Set command to run in poststart hooks. Can be specified multiple times.
The multiple commands will be run in order before the container process The multiple commands will be run in order before the container process
@ -330,18 +314,6 @@ read the configuration from `config.json`.
**--uidmappings** **--uidmappings**
Add UIDMappings e.g HostUID:ContainerID:Size. Implies **--user=**. Add UIDMappings e.g HostUID:ContainerID:Size. Implies **--user=**.
**--user**=*PATH*
Use a user namespace where *PATH* is an existing user namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing user namespace from
the configuration.
**--uts**=*PATH*
Use a UTS namespace where *PATH* is an existing UTS namespace file
to join. The special *PATH* empty-string creates a new namespace.
The special *PATH* `host` removes any existing UTS namespace from
the configuration.
# EXAMPLES # EXAMPLES
## Generating container in read-only mode ## Generating container in read-only mode

6
vendor/k8s.io/kubernetes/.bazelrc generated vendored Normal file
View file

@ -0,0 +1,6 @@
# Show us information about failures.
build --verbose_failures
test --test_output=errors
# Retry tests up to 3 times if they fail.
test --flaky_test_attempts=3

View file

@ -58,6 +58,7 @@ docs/man/man1/kubectl-create.1
docs/man/man1/kubectl-delete.1 docs/man/man1/kubectl-delete.1
docs/man/man1/kubectl-describe.1 docs/man/man1/kubectl-describe.1
docs/man/man1/kubectl-drain.1 docs/man/man1/kubectl-drain.1
docs/man/man1/kubectl-edit-configmap.1
docs/man/man1/kubectl-edit.1 docs/man/man1/kubectl-edit.1
docs/man/man1/kubectl-exec.1 docs/man/man1/kubectl-exec.1
docs/man/man1/kubectl-explain.1 docs/man/man1/kubectl-explain.1
@ -142,6 +143,7 @@ docs/user-guide/kubectl/kubectl_delete.md
docs/user-guide/kubectl/kubectl_describe.md docs/user-guide/kubectl/kubectl_describe.md
docs/user-guide/kubectl/kubectl_drain.md docs/user-guide/kubectl/kubectl_drain.md
docs/user-guide/kubectl/kubectl_edit.md docs/user-guide/kubectl/kubectl_edit.md
docs/user-guide/kubectl/kubectl_edit_configmap.md
docs/user-guide/kubectl/kubectl_exec.md docs/user-guide/kubectl/kubectl_exec.md
docs/user-guide/kubectl/kubectl_explain.md docs/user-guide/kubectl/kubectl_explain.md
docs/user-guide/kubectl/kubectl_expose.md docs/user-guide/kubectl/kubectl_expose.md

11
vendor/k8s.io/kubernetes/BUILD.bazel generated vendored
View file

@ -12,6 +12,7 @@ gcs_upload(
name = "ci-artifacts", name = "ci-artifacts",
data = [ data = [
"//build/debs", "//build/debs",
"//build/release-tars",
], ],
) )
@ -51,13 +52,3 @@ filegroup(
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )
pkg_tar(
name = "kubernetes-src",
extension = "tar.gz",
files = [
":all-srcs",
],
package_dir = "kubernetes",
strip_prefix = "//",
)

View file

@ -128,6 +128,10 @@
"Comment": "v0.8.1-6-gab50d12", "Comment": "v0.8.1-6-gab50d12",
"Rev": "ab50d12e88f57788bf84b83fef2be236eb1fcc0b" "Rev": "ab50d12e88f57788bf84b83fef2be236eb1fcc0b"
}, },
{
"ImportPath": "github.com/armon/circbuf",
"Rev": "bbbad097214e2918d8543d5201d12bfd7bca254d"
},
{ {
"ImportPath": "github.com/asaskevich/govalidator", "ImportPath": "github.com/asaskevich/govalidator",
"Comment": "v4-12-g593d645", "Comment": "v4-12-g593d645",
@ -135,143 +139,163 @@
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws", "ImportPath": "github.com/aws/aws-sdk-go/aws",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/awserr", "ImportPath": "github.com/aws/aws-sdk-go/aws/awserr",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/awsutil", "ImportPath": "github.com/aws/aws-sdk-go/aws/awsutil",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/client", "ImportPath": "github.com/aws/aws-sdk-go/aws/client",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/client/metadata", "ImportPath": "github.com/aws/aws-sdk-go/aws/client/metadata",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/corehandlers", "ImportPath": "github.com/aws/aws-sdk-go/aws/corehandlers",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/credentials", "ImportPath": "github.com/aws/aws-sdk-go/aws/credentials",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds", "ImportPath": "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds",
"Comment": "v1.6.10",
"Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/aws/credentials/stscreds",
"Comment": "v1.6.10",
"Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/defaults", "ImportPath": "github.com/aws/aws-sdk-go/aws/defaults",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/ec2metadata", "ImportPath": "github.com/aws/aws-sdk-go/aws/ec2metadata",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/aws/endpoints",
"Comment": "v1.6.10",
"Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/request", "ImportPath": "github.com/aws/aws-sdk-go/aws/request",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/aws/session", "ImportPath": "github.com/aws/aws-sdk-go/aws/session",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/endpoints", "ImportPath": "github.com/aws/aws-sdk-go/aws/signer/v4",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol",
"Comment": "v1.6.10",
"Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/ec2query", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/ec2query",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/jsonrpc", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/jsonrpc",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/query", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/query",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/query/queryutil",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/rest", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/rest",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/restxml", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/restxml",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil", "ImportPath": "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/private/signer/v4",
"Comment": "v1.0.8",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/private/waiter", "ImportPath": "github.com/aws/aws-sdk-go/private/waiter",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/service/autoscaling", "ImportPath": "github.com/aws/aws-sdk-go/service/autoscaling",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/service/ec2", "ImportPath": "github.com/aws/aws-sdk-go/service/ec2",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/service/ecr", "ImportPath": "github.com/aws/aws-sdk-go/service/ecr",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/service/elb", "ImportPath": "github.com/aws/aws-sdk-go/service/elb",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/aws/aws-sdk-go/service/route53", "ImportPath": "github.com/aws/aws-sdk-go/service/route53",
"Comment": "v1.0.8", "Comment": "v1.6.10",
"Rev": "c924893c38ecc04b18d7aab8a7aa561cb8b4c4cc" "Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
},
{
"ImportPath": "github.com/aws/aws-sdk-go/service/sts",
"Comment": "v1.6.10",
"Rev": "63ce630574a5ec05ecd8e8de5cea16332a5a684d"
}, },
{ {
"ImportPath": "github.com/beorn7/perks/quantile", "ImportPath": "github.com/beorn7/perks/quantile",
@ -728,7 +752,7 @@
}, },
{ {
"ImportPath": "github.com/coreos/rkt/api/v1alpha", "ImportPath": "github.com/coreos/rkt/api/v1alpha",
"Comment": "v1.11.0-59-ga83419b", "Comment": "v1.11.0-59-ga83419be",
"Rev": "a83419be28ac626876f94a28b4df2dbc9eac7448" "Rev": "a83419be28ac626876f94a28b4df2dbc9eac7448"
}, },
{ {
@ -751,12 +775,12 @@
}, },
{ {
"ImportPath": "github.com/docker/distribution/digest", "ImportPath": "github.com/docker/distribution/digest",
"Comment": "v2.4.0-rc.1-38-gcd27f17", "Comment": "v2.4.0-rc.1-38-gcd27f179",
"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" "Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51"
}, },
{ {
"ImportPath": "github.com/docker/distribution/reference", "ImportPath": "github.com/docker/distribution/reference",
"Comment": "v2.4.0-rc.1-38-gcd27f17", "Comment": "v2.4.0-rc.1-38-gcd27f179",
"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" "Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51"
}, },
{ {
@ -1000,127 +1024,127 @@
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/gogoproto", "ImportPath": "github.com/gogo/protobuf/gogoproto",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/compare", "ImportPath": "github.com/gogo/protobuf/plugin/compare",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/defaultcheck", "ImportPath": "github.com/gogo/protobuf/plugin/defaultcheck",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/description", "ImportPath": "github.com/gogo/protobuf/plugin/description",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/embedcheck", "ImportPath": "github.com/gogo/protobuf/plugin/embedcheck",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/enumstringer", "ImportPath": "github.com/gogo/protobuf/plugin/enumstringer",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/equal", "ImportPath": "github.com/gogo/protobuf/plugin/equal",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/face", "ImportPath": "github.com/gogo/protobuf/plugin/face",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/gostring", "ImportPath": "github.com/gogo/protobuf/plugin/gostring",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/marshalto", "ImportPath": "github.com/gogo/protobuf/plugin/marshalto",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/oneofcheck", "ImportPath": "github.com/gogo/protobuf/plugin/oneofcheck",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/populate", "ImportPath": "github.com/gogo/protobuf/plugin/populate",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/size", "ImportPath": "github.com/gogo/protobuf/plugin/size",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/stringer", "ImportPath": "github.com/gogo/protobuf/plugin/stringer",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/testgen", "ImportPath": "github.com/gogo/protobuf/plugin/testgen",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/union", "ImportPath": "github.com/gogo/protobuf/plugin/union",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/plugin/unmarshal", "ImportPath": "github.com/gogo/protobuf/plugin/unmarshal",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/proto", "ImportPath": "github.com/gogo/protobuf/proto",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor", "ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/generator", "ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/generator",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/grpc", "ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/grpc",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/plugin", "ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/plugin",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/sortkeys", "ImportPath": "github.com/gogo/protobuf/sortkeys",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/vanity", "ImportPath": "github.com/gogo/protobuf/vanity",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
"ImportPath": "github.com/gogo/protobuf/vanity/command", "ImportPath": "github.com/gogo/protobuf/vanity/command",
"Comment": "v0.2-33-ge18d7aa", "Comment": "v0.2-33-ge18d7aa8",
"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173"
}, },
{ {
@ -1149,203 +1173,203 @@
}, },
{ {
"ImportPath": "github.com/google/cadvisor/api", "ImportPath": "github.com/google/cadvisor/api",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/cache/memory", "ImportPath": "github.com/google/cadvisor/cache/memory",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/client/v2", "ImportPath": "github.com/google/cadvisor/client/v2",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/collector", "ImportPath": "github.com/google/cadvisor/collector",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container", "ImportPath": "github.com/google/cadvisor/container",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/common", "ImportPath": "github.com/google/cadvisor/container/common",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/docker", "ImportPath": "github.com/google/cadvisor/container/docker",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/libcontainer", "ImportPath": "github.com/google/cadvisor/container/libcontainer",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/raw", "ImportPath": "github.com/google/cadvisor/container/raw",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/rkt", "ImportPath": "github.com/google/cadvisor/container/rkt",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/container/systemd", "ImportPath": "github.com/google/cadvisor/container/systemd",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/devicemapper", "ImportPath": "github.com/google/cadvisor/devicemapper",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/events", "ImportPath": "github.com/google/cadvisor/events",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/fs", "ImportPath": "github.com/google/cadvisor/fs",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/healthz", "ImportPath": "github.com/google/cadvisor/healthz",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/http", "ImportPath": "github.com/google/cadvisor/http",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/http/mux", "ImportPath": "github.com/google/cadvisor/http/mux",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/info/v1", "ImportPath": "github.com/google/cadvisor/info/v1",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/info/v2", "ImportPath": "github.com/google/cadvisor/info/v2",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/machine", "ImportPath": "github.com/google/cadvisor/machine",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/manager", "ImportPath": "github.com/google/cadvisor/manager",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/manager/watcher", "ImportPath": "github.com/google/cadvisor/manager/watcher",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/manager/watcher/raw", "ImportPath": "github.com/google/cadvisor/manager/watcher/raw",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/manager/watcher/rkt", "ImportPath": "github.com/google/cadvisor/manager/watcher/rkt",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/metrics", "ImportPath": "github.com/google/cadvisor/metrics",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/pages", "ImportPath": "github.com/google/cadvisor/pages",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/pages/static", "ImportPath": "github.com/google/cadvisor/pages/static",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/storage", "ImportPath": "github.com/google/cadvisor/storage",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/summary", "ImportPath": "github.com/google/cadvisor/summary",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils", "ImportPath": "github.com/google/cadvisor/utils",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/cloudinfo", "ImportPath": "github.com/google/cadvisor/utils/cloudinfo",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/cpuload", "ImportPath": "github.com/google/cadvisor/utils/cpuload",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/cpuload/netlink", "ImportPath": "github.com/google/cadvisor/utils/cpuload/netlink",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/docker", "ImportPath": "github.com/google/cadvisor/utils/docker",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/oomparser", "ImportPath": "github.com/google/cadvisor/utils/oomparser",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/sysfs", "ImportPath": "github.com/google/cadvisor/utils/sysfs",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/sysinfo", "ImportPath": "github.com/google/cadvisor/utils/sysinfo",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/utils/tail", "ImportPath": "github.com/google/cadvisor/utils/tail",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/validate", "ImportPath": "github.com/google/cadvisor/validate",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/cadvisor/version", "ImportPath": "github.com/google/cadvisor/version",
"Comment": "v0.24.0-alpha1-56-ga726d13", "Comment": "v0.24.0-alpha1-82-gc30a9e7",
"Rev": "a726d13de8cb32860e73d72a78dc8e0124267709" "Rev": "c30a9e7d3642fffb422f08be34a7bbc15d69cdbf"
}, },
{ {
"ImportPath": "github.com/google/certificate-transparency/go", "ImportPath": "github.com/google/certificate-transparency/go",
@ -1922,187 +1946,187 @@
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud", "ImportPath": "github.com/rackspace/gophercloud",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack", "ImportPath": "github.com/rackspace/gophercloud/openstack",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes", "ImportPath": "github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/common/extensions", "ImportPath": "github.com/rackspace/gophercloud/openstack/common/extensions",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/bootfromvolume", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/bootfromvolume",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/diskconfig", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/diskconfig",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/volumeattach", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/volumeattach",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/flavors", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/flavors",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/images", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/images",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/servers", "ImportPath": "github.com/rackspace/gophercloud/openstack/compute/v2/servers",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v2/tenants", "ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v2/tenants",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v2/tokens", "ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v2/tokens",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v3/extensions/trust", "ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v3/extensions/trust",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v3/tokens", "ImportPath": "github.com/rackspace/gophercloud/openstack/identity/v3/tokens",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/floatingips",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/routers", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/routers",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/members", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/members",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/pools", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/pools",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/vips", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/vips",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/groups",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/rules", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/security/rules",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/ports", "ImportPath": "github.com/rackspace/gophercloud/openstack/networking/v2/ports",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/openstack/utils", "ImportPath": "github.com/rackspace/gophercloud/openstack/utils",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/pagination", "ImportPath": "github.com/rackspace/gophercloud/pagination",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/rackspace", "ImportPath": "github.com/rackspace/gophercloud/rackspace",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/rackspace/blockstorage/v1/volumes", "ImportPath": "github.com/rackspace/gophercloud/rackspace/blockstorage/v1/volumes",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/rackspace/compute/v2/servers", "ImportPath": "github.com/rackspace/gophercloud/rackspace/compute/v2/servers",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/rackspace/compute/v2/volumeattach", "ImportPath": "github.com/rackspace/gophercloud/rackspace/compute/v2/volumeattach",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/rackspace/identity/v2/tokens", "ImportPath": "github.com/rackspace/gophercloud/rackspace/identity/v2/tokens",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/testhelper", "ImportPath": "github.com/rackspace/gophercloud/testhelper",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
"ImportPath": "github.com/rackspace/gophercloud/testhelper/client", "ImportPath": "github.com/rackspace/gophercloud/testhelper/client",
"Comment": "v1.0.0-1012-ge00690e", "Comment": "v1.0.0-1012-ge00690e8",
"Rev": "e00690e87603abe613e9f02c816c7c4bef82e063" "Rev": "e00690e87603abe613e9f02c816c7c4bef82e063"
}, },
{ {
@ -2639,43 +2663,43 @@
}, },
{ {
"ImportPath": "k8s.io/gengo/args", "ImportPath": "k8s.io/gengo/args",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators", "ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators", "ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/examples/import-boss/generators", "ImportPath": "k8s.io/gengo/examples/import-boss/generators",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/examples/set-gen/generators", "ImportPath": "k8s.io/gengo/examples/set-gen/generators",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/examples/set-gen/sets", "ImportPath": "k8s.io/gengo/examples/set-gen/sets",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/generator", "ImportPath": "k8s.io/gengo/generator",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/namer", "ImportPath": "k8s.io/gengo/namer",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/parser", "ImportPath": "k8s.io/gengo/parser",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/gengo/types", "ImportPath": "k8s.io/gengo/types",
"Rev": "3c6a809462caf39389d70d9ea787ed24c5acffed" "Rev": "c118aa8edfff53fe5b69127a970f54b6cf3a7563"
}, },
{ {
"ImportPath": "k8s.io/heapster/metrics/api/v1/types", "ImportPath": "k8s.io/heapster/metrics/api/v1/types",

File diff suppressed because it is too large Load diff

18
vendor/k8s.io/kubernetes/Makefile generated vendored
View file

@ -470,7 +470,7 @@ help:
endif endif
# Non-dockerized bazel rules. # Non-dockerized bazel rules.
.PHONY: bazel-build bazel-test .PHONY: bazel-build bazel-test bazel-release
ifeq ($(PRINT_HELP),y) ifeq ($(PRINT_HELP),y)
define BAZEL_BUILD_HELP_INFO define BAZEL_BUILD_HELP_INFO
@ -498,5 +498,19 @@ endef
@echo "$$BAZEL_TEST_HELP_INFO" @echo "$$BAZEL_TEST_HELP_INFO"
else else
bazel-test: bazel-test:
bazel test --test_output=errors //cmd/... //pkg/... //federation/... //plugin/... //build/... //third_party/... //hack/... bazel test //cmd/... //pkg/... //federation/... //plugin/... //build/... //third_party/... //hack/... //hack:verify-all
endif
ifeq ($(PRINT_HELP),y)
define BAZEL_BUILD_HELP_INFO
# Build release tars with bazel
#
# Example:
# make bazel-release
endef
bazel-release:
@echo "$$BAZEL_BUILD_HELP_INFO"
else
bazel-release:
bazel build //build/release-tars
endif endif

9
vendor/k8s.io/kubernetes/OWNERS generated vendored
View file

@ -1,4 +1,11 @@
assignees: reviewers:
- brendandburns
- dchen1107
- jbeda
- lavalamp
- smarterclayton
- thockin
approvers:
- bgrant0607 - bgrant0607
- brendandburns - brendandburns
- dchen1107 - dchen1107

View file

@ -29,3 +29,21 @@ aliases:
- ixdy - ixdy
- rmmh - rmmh
- spxtr - spxtr
sig-node-reviewers:
- Random-Liu
- dashpole
- dchen1107
- derekwaynecarr
- dims
- euank
- feiskyer
- mtaufen
- ncdc
- pmorie
- resouer
- sjpotter
- timstclair
- tmrts
- vishh
- yifan-gu
- yujuhong

10
vendor/k8s.io/kubernetes/WORKSPACE generated vendored
View file

@ -10,6 +10,12 @@ git_repository(
remote = "https://github.com/kubernetes/release.git", remote = "https://github.com/kubernetes/release.git",
) )
git_repository(
name = "io_bazel",
commit = "3b29803eb528ff525c7024190ffbf4b08c598cf2",
remote = "https://github.com/ixdy/bazel.git",
)
load("@io_bazel_rules_go//go:def.bzl", "go_repositories") load("@io_bazel_rules_go//go:def.bzl", "go_repositories")
go_repositories() go_repositories()
@ -23,8 +29,8 @@ debs = (
), ),
( (
"libc_deb", "libc_deb",
"ee4d9dea08728e2c2bbf43d819c3c7e61798245fab4b983ae910865980f791ad", "6bbd506b171a9f29b09fde77e2749c0aa0c1439058df9d1a6408d464069b7dd6",
"http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.19-18+deb8u6_amd64.deb", "http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.24-9_amd64.deb",
), ),
( (
"iptables_deb", "iptables_deb",

File diff suppressed because it is too large Load diff

View file

@ -1353,6 +1353,10 @@
"affinity": { "affinity": {
"$ref": "v1.Affinity", "$ref": "v1.Affinity",
"description": "If specified, the pod's scheduling constraints" "description": "If specified, the pod's scheduling constraints"
},
"schedulername": {
"type": "string",
"description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler."
} }
} }
}, },
@ -1570,12 +1574,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's keys must be defined"
} }
} }
}, },
@ -2001,12 +2009,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's keys must be defined"
} }
} }
}, },
@ -2187,7 +2199,11 @@
}, },
"terminationMessagePath": { "terminationMessagePath": {
"type": "string", "type": "string",
"description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated." "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated."
},
"terminationMessagePolicy": {
"type": "string",
"description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated."
}, },
"imagePullPolicy": { "imagePullPolicy": {
"type": "string", "type": "string",
@ -2253,6 +2269,10 @@
"configMapRef": { "configMapRef": {
"$ref": "v1.ConfigMapEnvSource", "$ref": "v1.ConfigMapEnvSource",
"description": "The ConfigMap to select from" "description": "The ConfigMap to select from"
},
"secretRef": {
"$ref": "v1.SecretEnvSource",
"description": "The Secret to select from"
} }
} }
}, },
@ -2263,6 +2283,24 @@
"name": { "name": {
"type": "string", "type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap must be defined"
}
}
},
"v1.SecretEnvSource": {
"id": "v1.SecretEnvSource",
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret must be defined"
} }
} }
}, },
@ -2323,6 +2361,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key to select." "description": "The key to select."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's key must be defined"
} }
} }
}, },
@ -2340,6 +2382,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key of the secret to select from. Must be a valid secret key." "description": "The key of the secret to select from. Must be a valid secret key."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's key must be defined"
} }
} }
}, },
@ -3040,7 +3086,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

View file

@ -1371,7 +1371,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

View file

@ -1358,6 +1358,10 @@
"affinity": { "affinity": {
"$ref": "v1.Affinity", "$ref": "v1.Affinity",
"description": "If specified, the pod's scheduling constraints" "description": "If specified, the pod's scheduling constraints"
},
"schedulername": {
"type": "string",
"description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler."
} }
} }
}, },
@ -1575,12 +1579,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's keys must be defined"
} }
} }
}, },
@ -2006,12 +2014,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's keys must be defined"
} }
} }
}, },
@ -2192,7 +2204,11 @@
}, },
"terminationMessagePath": { "terminationMessagePath": {
"type": "string", "type": "string",
"description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated." "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated."
},
"terminationMessagePolicy": {
"type": "string",
"description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated."
}, },
"imagePullPolicy": { "imagePullPolicy": {
"type": "string", "type": "string",
@ -2258,6 +2274,10 @@
"configMapRef": { "configMapRef": {
"$ref": "v1.ConfigMapEnvSource", "$ref": "v1.ConfigMapEnvSource",
"description": "The ConfigMap to select from" "description": "The ConfigMap to select from"
},
"secretRef": {
"$ref": "v1.SecretEnvSource",
"description": "The Secret to select from"
} }
} }
}, },
@ -2268,6 +2288,24 @@
"name": { "name": {
"type": "string", "type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap must be defined"
}
}
},
"v1.SecretEnvSource": {
"id": "v1.SecretEnvSource",
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret must be defined"
} }
} }
}, },
@ -2328,6 +2366,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key to select." "description": "The key to select."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's key must be defined"
} }
} }
}, },
@ -2345,6 +2387,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key of the secret to select from. Must be a valid secret key." "description": "The key of the secret to select from. Must be a valid secret key."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's key must be defined"
} }
} }
}, },
@ -3020,7 +3066,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

File diff suppressed because it is too large Load diff

View file

@ -7730,6 +7730,10 @@
"affinity": { "affinity": {
"$ref": "v1.Affinity", "$ref": "v1.Affinity",
"description": "If specified, the pod's scheduling constraints" "description": "If specified, the pod's scheduling constraints"
},
"schedulername": {
"type": "string",
"description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler."
} }
} }
}, },
@ -7947,12 +7951,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's keys must be defined"
} }
} }
}, },
@ -8378,12 +8386,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's keys must be defined"
} }
} }
}, },
@ -8564,7 +8576,11 @@
}, },
"terminationMessagePath": { "terminationMessagePath": {
"type": "string", "type": "string",
"description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated." "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated."
},
"terminationMessagePolicy": {
"type": "string",
"description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated."
}, },
"imagePullPolicy": { "imagePullPolicy": {
"type": "string", "type": "string",
@ -8630,6 +8646,10 @@
"configMapRef": { "configMapRef": {
"$ref": "v1.ConfigMapEnvSource", "$ref": "v1.ConfigMapEnvSource",
"description": "The ConfigMap to select from" "description": "The ConfigMap to select from"
},
"secretRef": {
"$ref": "v1.SecretEnvSource",
"description": "The Secret to select from"
} }
} }
}, },
@ -8640,6 +8660,24 @@
"name": { "name": {
"type": "string", "type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap must be defined"
}
}
},
"v1.SecretEnvSource": {
"id": "v1.SecretEnvSource",
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret must be defined"
} }
} }
}, },
@ -8700,6 +8738,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key to select." "description": "The key to select."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's key must be defined"
} }
} }
}, },
@ -8717,6 +8759,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key of the secret to select from. Must be a valid secret key." "description": "The key of the secret to select from. Must be a valid secret key."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's key must be defined"
} }
} }
}, },
@ -9359,7 +9405,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

View file

@ -1381,7 +1381,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

View file

@ -3068,7 +3068,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",
@ -3177,10 +3177,6 @@
}, },
"description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds." "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds."
}, },
"attributeRestrictions": {
"type": "string",
"description": "AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports. If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error."
},
"apiGroups": { "apiGroups": {
"type": "array", "type": "array",
"items": { "items": {

File diff suppressed because it is too large Load diff

View file

@ -66,8 +66,8 @@
"description": "get information of a group" "description": "get information of a group"
}, },
{ {
"path": "/apis/certificates.k8s.io/v1alpha1", "path": "/apis/certificates.k8s.io/v1beta1",
"description": "API at /apis/certificates.k8s.io/v1alpha1" "description": "API at /apis/certificates.k8s.io/v1beta1"
}, },
{ {
"path": "/apis/certificates.k8s.io", "path": "/apis/certificates.k8s.io",
@ -89,6 +89,10 @@
"path": "/apis/policy", "path": "/apis/policy",
"description": "get information of a group" "description": "get information of a group"
}, },
{
"path": "/apis/rbac.authorization.k8s.io/v1beta1",
"description": "API at /apis/rbac.authorization.k8s.io/v1beta1"
},
{ {
"path": "/apis/rbac.authorization.k8s.io/v1alpha1", "path": "/apis/rbac.authorization.k8s.io/v1alpha1",
"description": "API at /apis/rbac.authorization.k8s.io/v1alpha1" "description": "API at /apis/rbac.authorization.k8s.io/v1alpha1"

View file

@ -894,7 +894,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",

View file

@ -16597,7 +16597,7 @@
}, },
"v1.DeleteOptions": { "v1.DeleteOptions": {
"id": "v1.DeleteOptions", "id": "v1.DeleteOptions",
"description": "DeleteOptions may be provided when deleting an API object", "description": "DeleteOptions may be provided when deleting an API object.",
"properties": { "properties": {
"kind": { "kind": {
"type": "string", "type": "string",
@ -18272,6 +18272,10 @@
"affinity": { "affinity": {
"$ref": "v1.Affinity", "$ref": "v1.Affinity",
"description": "If specified, the pod's scheduling constraints" "description": "If specified, the pod's scheduling constraints"
},
"schedulername": {
"type": "string",
"description": "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler."
} }
} }
}, },
@ -18424,12 +18428,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's keys must be defined"
} }
} }
}, },
@ -18568,12 +18576,16 @@
"items": { "items": {
"$ref": "v1.KeyToPath" "$ref": "v1.KeyToPath"
}, },
"description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'."
}, },
"defaultMode": { "defaultMode": {
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's keys must be defined"
} }
} }
}, },
@ -18656,7 +18668,11 @@
}, },
"terminationMessagePath": { "terminationMessagePath": {
"type": "string", "type": "string",
"description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated." "description": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated."
},
"terminationMessagePolicy": {
"type": "string",
"description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated."
}, },
"imagePullPolicy": { "imagePullPolicy": {
"type": "string", "type": "string",
@ -18722,6 +18738,10 @@
"configMapRef": { "configMapRef": {
"$ref": "v1.ConfigMapEnvSource", "$ref": "v1.ConfigMapEnvSource",
"description": "The ConfigMap to select from" "description": "The ConfigMap to select from"
},
"secretRef": {
"$ref": "v1.SecretEnvSource",
"description": "The Secret to select from"
} }
} }
}, },
@ -18732,6 +18752,24 @@
"name": { "name": {
"type": "string", "type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap must be defined"
}
}
},
"v1.SecretEnvSource": {
"id": "v1.SecretEnvSource",
"description": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.",
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names"
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret must be defined"
} }
} }
}, },
@ -18792,6 +18830,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key to select." "description": "The key to select."
},
"optional": {
"type": "boolean",
"description": "Specify whether the ConfigMap or it's key must be defined"
} }
} }
}, },
@ -18809,6 +18851,10 @@
"key": { "key": {
"type": "string", "type": "string",
"description": "The key of the secret to select from. Must be a valid secret key." "description": "The key of the secret to select from. Must be a valid secret key."
},
"optional": {
"type": "boolean",
"description": "Specify whether the Secret or it's key must be defined"
} }
} }
}, },

94
vendor/k8s.io/kubernetes/build/BUILD generated vendored
View file

@ -1,6 +1,22 @@
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
load("@bazel_tools//tools/build_defs/docker:docker.bzl", "docker_build") load("@io_bazel//tools/build_defs/docker:docker.bzl", "docker_build")
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//build/debs:all-srcs",
"//build/release-tars:all-srcs",
],
tags = ["automanaged"],
)
docker_build( docker_build(
name = "busybox", name = "busybox",
@ -34,43 +50,59 @@ docker_build(
], ],
) )
DOCKERIZED_BINARIES = {
"kube-apiserver": {
"base": ":busybox-libc",
"target": "//cmd/kube-apiserver:kube-apiserver",
},
"kube-controller-manager": {
"base": ":busybox-libc",
"target": "//cmd/kube-controller-manager:kube-controller-manager",
},
"kube-scheduler": {
"base": ":busybox-libc",
"target": "//plugin/cmd/kube-scheduler:kube-scheduler",
},
"kube-aggregator": {
"base": ":busybox-libc",
"target": "//cmd/kube-aggregator:kube-aggregator",
},
"kube-proxy": {
"base": ":busybox-net",
"target": "//cmd/kube-proxy:kube-proxy",
},
}
[genrule(
name = binary + "_docker_tag",
srcs = [meta["target"]],
outs = [binary + ".docker_tag"],
# Currently each target has two outputs, the binary and its library, so hash only the first item (the binary).
# This can be made less hacky when we have static linking working.
cmd = "md5sum $(locations " + meta["target"] + ") | grep '" + binary + "'$$ | cut -f1 -d' ' | tr -d '\n' > $@",
) for binary, meta in DOCKERIZED_BINARIES.items()]
[docker_build( [docker_build(
name = binary, name = binary,
base = ":busybox-libc", base = meta["base"],
cmd = ["/usr/bin/" + binary], cmd = ["/usr/bin/" + binary],
debs = [ debs = [
"//build/debs:%s.deb" % binary, "//build/debs:%s.deb" % binary,
], ],
repository = "gcr.io/google-containers", image_tags = [
) for binary in [ "@%s.docker_tag" % binary,
"kube-apiserver",
"kube-controller-manager",
"kube-scheduler",
"kube-aggregator",
]]
docker_build(
name = "kube-proxy",
base = ":busybox-net",
cmd = ["/usr/bin/kube-proxy"],
debs = [
"//build/debs:kube-proxy.deb",
], ],
repository = "gcr.io/google-containers", repository = "gcr.io/google_containers/" + binary,
) repository_append_package = False,
symlinks = {
# Some cluster startup scripts expect to find the binaries in /usr/local/bin,
# but the debs install the binaries into /usr/bin.
"/usr/local/bin/" + binary: "/usr/bin/" + binary,
},
) for binary, meta in DOCKERIZED_BINARIES.items()]
filegroup( filegroup(
name = "package-srcs", name = "docker-artifacts",
srcs = glob(["**"]), srcs = [":%s.tar" % binary for binary in DOCKERIZED_BINARIES.keys()] +
tags = ["automanaged"], [":%s.docker_tag" % binary for binary in DOCKERIZED_BINARIES.keys()],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//build/debs:all-srcs",
],
tags = ["automanaged"],
) )

View file

@ -1,4 +1,10 @@
assignees: reviewers:
- ihmccreery
- ixdy
- jbeda
- lavalamp
- zmerlynn
approvers:
- ihmccreery - ihmccreery
- ixdy - ixdy
- jbeda - jbeda

View file

@ -356,34 +356,37 @@ function kube::release::package_salt_tarball() {
function kube::release::package_kube_manifests_tarball() { function kube::release::package_kube_manifests_tarball() {
kube::log::status "Building tarball: manifests" kube::log::status "Building tarball: manifests"
local salt_dir="${KUBE_ROOT}/cluster/saltbase/salt"
local release_stage="${RELEASE_STAGE}/manifests/kubernetes" local release_stage="${RELEASE_STAGE}/manifests/kubernetes"
rm -rf "${release_stage}" rm -rf "${release_stage}"
local dst_dir="${release_stage}/gci-trusty"
mkdir -p "${dst_dir}"
local salt_dir="${KUBE_ROOT}/cluster/saltbase/salt" mkdir -p "${release_stage}"
cp "${salt_dir}/cluster-autoscaler/cluster-autoscaler.manifest" "${dst_dir}/"
cp "${salt_dir}/fluentd-gcp/fluentd-gcp.yaml" "${release_stage}/" cp "${salt_dir}/fluentd-gcp/fluentd-gcp.yaml" "${release_stage}/"
cp "${salt_dir}/kube-registry-proxy/kube-registry-proxy.yaml" "${release_stage}/" cp "${salt_dir}/kube-registry-proxy/kube-registry-proxy.yaml" "${release_stage}/"
cp "${salt_dir}/kube-proxy/kube-proxy.manifest" "${release_stage}/" cp "${salt_dir}/kube-proxy/kube-proxy.manifest" "${release_stage}/"
cp "${salt_dir}/etcd/etcd.manifest" "${dst_dir}"
cp "${salt_dir}/kube-scheduler/kube-scheduler.manifest" "${dst_dir}" local gci_dst_dir="${release_stage}/gci-trusty"
cp "${salt_dir}/kube-apiserver/kube-apiserver.manifest" "${dst_dir}" mkdir -p "${gci_dst_dir}"
cp "${salt_dir}/kube-apiserver/abac-authz-policy.jsonl" "${dst_dir}" cp "${salt_dir}/cluster-autoscaler/cluster-autoscaler.manifest" "${gci_dst_dir}/"
cp "${salt_dir}/kube-controller-manager/kube-controller-manager.manifest" "${dst_dir}" cp "${salt_dir}/etcd/etcd.manifest" "${gci_dst_dir}"
cp "${salt_dir}/kube-addons/kube-addon-manager.yaml" "${dst_dir}" cp "${salt_dir}/kube-scheduler/kube-scheduler.manifest" "${gci_dst_dir}"
cp "${salt_dir}/l7-gcp/glbc.manifest" "${dst_dir}" cp "${salt_dir}/kube-apiserver/kube-apiserver.manifest" "${gci_dst_dir}"
cp "${salt_dir}/rescheduler/rescheduler.manifest" "${dst_dir}/" cp "${salt_dir}/kube-apiserver/abac-authz-policy.jsonl" "${gci_dst_dir}"
cp "${salt_dir}/e2e-image-puller/e2e-image-puller.manifest" "${dst_dir}/" cp "${salt_dir}/kube-controller-manager/kube-controller-manager.manifest" "${gci_dst_dir}"
cp "${KUBE_ROOT}/cluster/gce/trusty/configure-helper.sh" "${dst_dir}/trusty-configure-helper.sh" cp "${salt_dir}/kube-addons/kube-addon-manager.yaml" "${gci_dst_dir}"
cp "${KUBE_ROOT}/cluster/gce/gci/configure-helper.sh" "${dst_dir}/gci-configure-helper.sh" cp "${salt_dir}/l7-gcp/glbc.manifest" "${gci_dst_dir}"
cp "${KUBE_ROOT}/cluster/gce/gci/mounter/mounter" "${dst_dir}/gci-mounter" cp "${salt_dir}/rescheduler/rescheduler.manifest" "${gci_dst_dir}/"
cp "${KUBE_ROOT}/cluster/gce/gci/health-monitor.sh" "${dst_dir}/health-monitor.sh" cp "${salt_dir}/e2e-image-puller/e2e-image-puller.manifest" "${gci_dst_dir}/"
cp "${KUBE_ROOT}/cluster/gce/container-linux/configure-helper.sh" "${dst_dir}/container-linux-configure-helper.sh" cp "${KUBE_ROOT}/cluster/gce/trusty/configure-helper.sh" "${gci_dst_dir}/trusty-configure-helper.sh"
cp -r "${salt_dir}/kube-admission-controls/limit-range" "${dst_dir}" cp "${KUBE_ROOT}/cluster/gce/gci/configure-helper.sh" "${gci_dst_dir}/gci-configure-helper.sh"
cp "${KUBE_ROOT}/cluster/gce/gci/mounter/mounter" "${gci_dst_dir}/gci-mounter"
cp "${KUBE_ROOT}/cluster/gce/gci/health-monitor.sh" "${gci_dst_dir}/health-monitor.sh"
cp "${KUBE_ROOT}/cluster/gce/container-linux/configure-helper.sh" "${gci_dst_dir}/container-linux-configure-helper.sh"
cp -r "${salt_dir}/kube-admission-controls/limit-range" "${gci_dst_dir}"
local objects local objects
objects=$(cd "${KUBE_ROOT}/cluster/addons" && find . \( -name \*.yaml -or -name \*.yaml.in -or -name \*.json \) | grep -v demo) objects=$(cd "${KUBE_ROOT}/cluster/addons" && find . \( -name \*.yaml -or -name \*.yaml.in -or -name \*.json \) | grep -v demo)
tar c -C "${KUBE_ROOT}/cluster/addons" ${objects} | tar x -C "${dst_dir}" tar c -C "${KUBE_ROOT}/cluster/addons" ${objects} | tar x -C "${gci_dst_dir}"
kube::release::clean_cruft kube::release::clean_cruft

View file

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
.PHONY: all push push-legacy container clean .PHONY: all push push-legacy container clean orphan
REGISTRY ?= gcr.io/google_containers REGISTRY ?= gcr.io/google_containers
IMAGE = $(REGISTRY)/pause-$(ARCH) IMAGE = $(REGISTRY)/pause-$(ARCH)
@ -25,7 +25,7 @@ ARCH ?= amd64
ALL_ARCH = amd64 arm arm64 ppc64le s390x ALL_ARCH = amd64 arm arm64 ppc64le s390x
CFLAGS = -Os -Wall -static CFLAGS = -Os -Wall -Werror -static
KUBE_CROSS_IMAGE ?= gcr.io/google_containers/kube-cross KUBE_CROSS_IMAGE ?= gcr.io/google_containers/kube-cross
KUBE_CROSS_VERSION ?= $(shell cat ../build-image/cross/VERSION) KUBE_CROSS_VERSION ?= $(shell cat ../build-image/cross/VERSION)
@ -97,5 +97,16 @@ ifeq ($(ARCH),amd64)
endif endif
touch $@ touch $@
# Useful for testing, not automatically included in container image
orphan: bin/orphan-$(ARCH)
bin/orphan-$(ARCH): orphan.c
mkdir -p bin
docker run -u $$(id -u):$$(id -g) -v $$(pwd):/build \
$(KUBE_CROSS_IMAGE):$(KUBE_CROSS_VERSION) \
/bin/bash -c "\
cd /build && \
$(TRIPLE)-gcc $(CFLAGS) -o $@ $^ && \
$(TRIPLE)-strip $@"
clean: clean:
rm -rf .container-* .push-* bin/ rm -rf .container-* .push-* bin/

View file

@ -14,10 +14,23 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package types /* Creates a zombie to be reaped by init. Useful for testing. */
// int64 is used as a safe bet against wrap-around (uid's are general #include <stdio.h>
// int32) and to support uid_t -1, and -2. #include <unistd.h>
type UnixUserID int64 int main() {
type UnixGroupID int64 pid_t pid;
pid = fork();
if (pid == 0) {
while (getppid() > 1)
;
printf("Child exiting: pid=%d ppid=%d\n", getpid(), getppid());
return 0;
} else if (pid > 0) {
printf("Parent exiting: pid=%d ppid=%d\n", getpid(), getppid());
return 0;
}
perror("Could not create child");
return 1;
}

View file

@ -17,20 +17,36 @@ limitations under the License.
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
static void sigdown(int signo) { static void sigdown(int signo) {
psignal(signo, "shutting down, got signal"); psignal(signo, "Shutting down, got signal");
exit(0); exit(0);
} }
static void sigreap(int signo) {
while (waitpid(-1, NULL, WNOHANG) > 0)
;
}
int main() { int main() {
if (signal(SIGINT, sigdown) == SIG_ERR) if (getpid() != 1)
/* Not an error because pause sees use outside of infra containers. */
fprintf(stderr, "Warning: pause should be the first process in a pod\n");
if (sigaction(SIGINT, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)
return 1; return 1;
if (signal(SIGTERM, sigdown) == SIG_ERR) if (sigaction(SIGTERM, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)
return 2; return 2;
signal(SIGKILL, sigdown); if (sigaction(SIGCHLD, &(struct sigaction){.sa_handler = sigreap,
for (;;) pause(); .sa_flags = SA_NOCLDSTOP},
fprintf(stderr, "error: infinite loop terminated\n"); NULL) < 0)
return 3;
for (;;)
pause();
fprintf(stderr, "Error: infinite loop terminated\n");
return 42; return 42;
} }

261
vendor/k8s.io/kubernetes/build/release-tars/BUILD generated vendored Normal file
View file

@ -0,0 +1,261 @@
package(default_visibility = ["//visibility:public"])
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
)
config_setting(
name = "embed_license_targets",
values = {
"define": "EMBED_LICENSE_TARGETS=true",
},
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes-src",
extension = "tar.gz",
files = [
"//:all-srcs",
],
package_dir = "kubernetes",
strip_prefix = "//",
)
# FIXME: this should be configurable/auto-detected
PLATFORM_ARCH_STRING = "linux-amd64"
# KUBE_CLIENT_TARGETS
CLIENT_TARGETS = [
"//cmd/kubectl",
"//federation/cmd/kubefed",
]
# KUBE_NODE_TARGETS
NODE_TARGETS = [
"//cmd/kube-proxy",
"//cmd/kubelet",
]
# KUBE_SERVER_TARGETS
# No need to duplicate CLIENT_TARGETS or NODE_TARGETS here,
# since we include them in the actual build rule.
SERVER_TARGETS = [
"//cmd/hyperkube",
"//cmd/kube-aggregator",
"//cmd/kube-apiserver",
"//cmd/kube-controller-manager",
"//cmd/kube-discovery",
"//cmd/kubeadm",
"//plugin/cmd/kube-scheduler",
]
# kube::golang::test_targets
TEST_BINARY_TARGETS = [
"//cmd/gendocs",
"//cmd/genkubedocs",
"//cmd/genman",
"//cmd/genswaggertypedocs",
"//cmd/genyaml",
"//cmd/linkcheck",
"//cmd/mungedocs",
"//examples/k8petstore/web-server/src",
"//federation/cmd/genfeddocs",
"//test/e2e:e2e.test",
"//vendor:github.com/onsi/ginkgo/ginkgo_bin",
"//cmd/kubemark", # TODO: server platforms only
"//test/e2e_node:e2e_node.test", # TODO: server platforms only
]
TEST_PORTABLE_TARGETS = [
"//federation/develop:all-srcs",
"//hack:e2e.go",
"//hack:federated-ginkgo-e2e.sh",
"//hack:get-build.sh",
"//hack:ginkgo-e2e.sh",
"//hack/e2e-internal:all-srcs",
"//hack/lib:all-srcs",
"//test/e2e/testing-manifests:all-srcs",
"//test/kubemark:all-srcs",
]
# Included in node and server tarballs.
LICENSE_TARGETS = [
"//:Godeps/LICENSES",
":kubernetes-src.tar.gz",
]
pkg_tar(
name = "_client-bin",
files = CLIENT_TARGETS,
mode = "0755",
package_dir = "client/bin",
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes-client-%s" % PLATFORM_ARCH_STRING,
extension = "tar.gz",
package_dir = "kubernetes",
deps = [
":_client-bin",
],
)
pkg_tar(
name = "_node-bin",
files = NODE_TARGETS + CLIENT_TARGETS,
mode = "0755",
package_dir = "node/bin",
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes-node-%s" % PLATFORM_ARCH_STRING,
extension = "tar.gz",
files = select({
":embed_license_targets": LICENSE_TARGETS,
"//conditions:default": [],
}),
mode = "0644",
package_dir = "kubernetes",
deps = [
":_node-bin",
],
)
pkg_tar(
name = "_server-bin",
files = SERVER_TARGETS + NODE_TARGETS + CLIENT_TARGETS + [
"//build:docker-artifacts",
],
mode = "0755",
package_dir = "server/bin",
visibility = ["//visibility:private"],
)
genrule(
name = "dummy",
outs = [".dummy"],
cmd = "touch $@",
)
# Some of the startup scripts fail if there isn't an addons/ directory in the server tarball.
pkg_tar(
name = "_server-addons",
files = [
":.dummy",
],
package_dir = "addons",
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes-server-%s" % PLATFORM_ARCH_STRING,
extension = "tar.gz",
files = select({
":embed_license_targets": LICENSE_TARGETS,
"//conditions:default": [],
}),
mode = "0644",
package_dir = "kubernetes",
deps = [
":_server-addons",
":_server-bin",
],
)
pkg_tar(
name = "_test-bin",
files = TEST_BINARY_TARGETS,
mode = "0755",
package_dir = "platforms/" + PLATFORM_ARCH_STRING.replace("-", "/"),
# TODO: how to make this multiplatform?
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes-test",
extension = "tar.gz",
files = TEST_PORTABLE_TARGETS,
package_dir = "kubernetes",
strip_prefix = "//",
deps = [
# TODO: how to make this multiplatform?
":_test-bin",
],
)
pkg_tar(
name = "_full_server",
files = [
":kubernetes-manifests.tar.gz",
":kubernetes-salt.tar.gz",
],
package_dir = "server",
visibility = ["//visibility:private"],
)
pkg_tar(
name = "kubernetes",
extension = "tar.gz",
files = [
# TODO: the version file
"//:README.md",
"//:Vagrantfile",
"//cluster:all-srcs",
"//docs:all-srcs",
"//examples:all-srcs",
"//third_party/htpasswd:all-srcs",
] + select({
":embed_license_targets": ["//:Godeps/LICENSES"],
"//conditions:default": [],
}),
package_dir = "kubernetes",
strip_prefix = "//",
deps = [
":_full_server",
"//federation:release",
],
)
pkg_tar(
name = "kubernetes-manifests",
extension = "tar.gz",
deps = [
"//cluster:manifests",
],
)
pkg_tar(
name = "kubernetes-salt",
extension = "tar.gz",
deps = [
"//cluster/saltbase:salt",
],
)
filegroup(
name = "release-tars",
srcs = [
":kubernetes.tar.gz",
":kubernetes-client-%s.tar.gz" % PLATFORM_ARCH_STRING,
":kubernetes-node-%s.tar.gz" % PLATFORM_ARCH_STRING,
":kubernetes-server-%s.tar.gz" % PLATFORM_ARCH_STRING,
":kubernetes-manifests.tar.gz",
":kubernetes-salt.tar.gz",
":kubernetes-src.tar.gz",
":kubernetes-test.tar.gz",
],
)

View file

@ -1,5 +1,7 @@
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
licenses(["notice"]) licenses(["notice"])
filegroup( filegroup(
@ -14,6 +16,31 @@ filegroup(
srcs = [ srcs = [
":package-srcs", ":package-srcs",
"//cluster/addons:all-srcs", "//cluster/addons:all-srcs",
"//cluster/gce:all-srcs",
"//cluster/saltbase:all-srcs",
], ],
tags = ["automanaged"], tags = ["automanaged"],
) )
# All of the manifests that are expected to be in a "gci-trusty"
# subdir of the manifests tarball.
pkg_tar(
name = "_manifests-gci-trusty",
package_dir = "gci-trusty",
visibility = ["//visibility:private"],
deps = [
"//cluster/addons",
"//cluster/gce:gci-trusty-manifests",
"//cluster/saltbase:gci-trusty-salt-manifests",
],
)
pkg_tar(
name = "manifests",
mode = "0644",
package_dir = "kubernetes",
deps = [
":_manifests-gci-trusty",
"//cluster/saltbase:salt-manifests",
],
)

View file

@ -1,4 +1,10 @@
assignees: reviewers:
- eparis
- jbeda
- mikedanese
- roberthbailey
- zmerlynn
approvers:
- eparis - eparis
- jbeda - jbeda
- mikedanese - mikedanese

View file

@ -4,21 +4,14 @@ load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
filegroup( filegroup(
name = "addon-srcs", name = "addon-srcs",
srcs = glob([ srcs = glob(
"calico-policy-controller/*", [
"cluster-loadbalancing/*", "**/*.json",
"cluster-monitoring/*", "**/*.yaml",
"dashboard/*", "**/*.yaml.in",
"dns/*", ],
"etcd-empty-dir-cleanup/*", exclude = ["**/*demo*/**"],
"fluentd-elasticsearch/*", ),
"fluentd-gcp/*",
"gci/*",
"node-problem-detector/*",
"podsecuritypolicies/*",
"python-image/*",
"registry/*",
]),
) )
pkg_tar( pkg_tar(
@ -27,6 +20,7 @@ pkg_tar(
files = [ files = [
":addon-srcs", ":addon-srcs",
], ],
mode = "0644",
strip_prefix = ".", strip_prefix = ".",
) )

View file

@ -1,3 +1,6 @@
assignees: approvers:
- DirectXMan12 - DirectXMan12
- piosz - piosz
reviewers:
- DirectXMan12
- piosz

View file

@ -1,3 +1,6 @@
assignees: approvers:
- bowei
- mrhohn
reviewers:
- bowei - bowei
- mrhohn - mrhohn

View file

@ -1,3 +1,6 @@
assignees: approvers:
- bowei
- mrhohn
reviewers:
- bowei - bowei
- mrhohn - mrhohn

View file

@ -47,7 +47,7 @@ spec:
spec: spec:
containers: containers:
- name: kubedns - name: kubedns
image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.11.0
resources: resources:
# TODO: Set memory limits when we've profiled the container for large # TODO: Set memory limits when we've profiled the container for large
# clusters, then set request = limit to keep this container in # clusters, then set request = limit to keep this container in
@ -96,7 +96,7 @@ spec:
name: metrics name: metrics
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /healthcheck/dnsmasq path: /healthcheck/dnsmasq
@ -124,7 +124,7 @@ spec:
cpu: 150m cpu: 150m
memory: 10Mi memory: 10Mi
- name: sidecar - name: sidecar
image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /metrics path: /metrics

View file

@ -47,7 +47,7 @@ spec:
spec: spec:
containers: containers:
- name: kubedns - name: kubedns
image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.11.0
resources: resources:
# TODO: Set memory limits when we've profiled the container for large # TODO: Set memory limits when we've profiled the container for large
# clusters, then set request = limit to keep this container in # clusters, then set request = limit to keep this container in
@ -96,7 +96,7 @@ spec:
name: metrics name: metrics
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /healthcheck/dnsmasq path: /healthcheck/dnsmasq
@ -124,7 +124,7 @@ spec:
cpu: 150m cpu: 150m
memory: 10Mi memory: 10Mi
- name: sidecar - name: sidecar
image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /metrics path: /metrics

View file

@ -47,7 +47,7 @@ spec:
spec: spec:
containers: containers:
- name: kubedns - name: kubedns
image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.11.0
resources: resources:
# TODO: Set memory limits when we've profiled the container for large # TODO: Set memory limits when we've profiled the container for large
# clusters, then set request = limit to keep this container in # clusters, then set request = limit to keep this container in
@ -95,7 +95,7 @@ spec:
name: metrics name: metrics
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-dnsmasq-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /healthcheck/dnsmasq path: /healthcheck/dnsmasq
@ -123,7 +123,7 @@ spec:
cpu: 150m cpu: 150m
memory: 10Mi memory: 10Mi
- name: sidecar - name: sidecar
image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.10.1 image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.11.0
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /metrics path: /metrics

View file

@ -1,19 +0,0 @@
# This is the main user for the e2e tests. This is ok to leave long term
# since the first user in the test can reasonably be high power
# its kubecfg in gce
# TODO consider provisioning each test its namespace and giving it an
# admin user. This still has to exist, but e2e wouldn't normally use it
apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: ClusterRoleBinding
metadata:
name: e2e-user-cluster-admin
labels:
kubernetes.io/cluster-service: "true"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiVersion: rbac/v1alpha1
kind: User
name: kubecfg

View file

@ -1,3 +1,6 @@
assignees: approvers:
- Crassirostris - Crassirostris
- piosz - piosz
reviewers:
- Crassirostris
- piosz

View file

@ -20,7 +20,7 @@ spec:
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
containers: containers:
- image: gcr.io/google_containers/elasticsearch:v2.4.1 - image: gcr.io/google_containers/elasticsearch:v2.4.1-1
name: elasticsearch-logging name: elasticsearch-logging
resources: resources:
# need more cpu upon initialization, therefore burstable class # need more cpu upon initialization, therefore burstable class

View file

@ -16,7 +16,7 @@
# The current value of the tag to be used for building and # The current value of the tag to be used for building and
# pushing an image to gcr.io # pushing an image to gcr.io
TAG = v2.4.1 TAG = v2.4.1-1
build: elasticsearch_logging_discovery build: elasticsearch_logging_discovery
docker build --pull -t gcr.io/google_containers/elasticsearch:$(TAG) . docker build --pull -t gcr.io/google_containers/elasticsearch:$(TAG) .

View file

@ -1,5 +1,6 @@
cluster.name: kubernetes-logging cluster.name: kubernetes-logging
node.name: ${NODE_NAME}
node.master: ${NODE_MASTER} node.master: ${NODE_MASTER}
node.data: ${NODE_DATA} node.data: ${NODE_DATA}

View file

@ -24,9 +24,10 @@ import (
"time" "time"
"github.com/golang/glog" "github.com/golang/glog"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
restclient "k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/restclient"
) )
func flattenSubsets(subsets []api.EndpointSubset) []string { func flattenSubsets(subsets []api.EndpointSubset) []string {
@ -52,10 +53,10 @@ func main() {
if err != nil { if err != nil {
glog.Fatalf("Failed to make client: %v", err) glog.Fatalf("Failed to make client: %v", err)
} }
namespace := api.NamespaceSystem namespace := metav1.NamespaceSystem
envNamespace := os.Getenv("NAMESPACE") envNamespace := os.Getenv("NAMESPACE")
if envNamespace != "" { if envNamespace != "" {
if _, err := client.Core().Namespaces().Get(envNamespace); err != nil { if _, err := client.Core().Namespaces().Get(envNamespace, meta_v1.GetOptions{}); err != nil {
glog.Fatalf("%s namespace doesn't exist: %v", envNamespace, err) glog.Fatalf("%s namespace doesn't exist: %v", envNamespace, err)
} }
namespace = envNamespace namespace = envNamespace
@ -65,7 +66,7 @@ func main() {
// Look for endpoints associated with the Elasticsearch loggging service. // Look for endpoints associated with the Elasticsearch loggging service.
// First wait for the service to become available. // First wait for the service to become available.
for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) { for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) {
elasticsearch, err = client.Core().Services(namespace).Get("elasticsearch-logging") elasticsearch, err = client.Core().Services(namespace).Get("elasticsearch-logging", meta_v1.GetOptions{})
if err == nil { if err == nil {
break break
} }
@ -82,7 +83,7 @@ func main() {
// Wait for some endpoints. // Wait for some endpoints.
count := 0 count := 0
for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) { for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) {
endpoints, err = client.Core().Endpoints(namespace).Get("elasticsearch-logging") endpoints, err = client.Core().Endpoints(namespace).Get("elasticsearch-logging", meta_v1.GetOptions{})
if err != nil { if err != nil {
continue continue
} }

View file

@ -14,6 +14,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
export NODE_NAME=${NODE_NAME:-${HOSTNAME}}
export NODE_MASTER=${NODE_MASTER:-true} export NODE_MASTER=${NODE_MASTER:-true}
export NODE_DATA=${NODE_DATA:-true} export NODE_DATA=${NODE_DATA:-true}
export HTTP_PORT=${HTTP_PORT:-9200} export HTTP_PORT=${HTTP_PORT:-9200}

View file

@ -1,3 +1,6 @@
assignees: approvers:
- Crassirostris - Crassirostris
- piosz - piosz
reviewers:
- Crassirostris
- piosz

View file

@ -2,23 +2,23 @@
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
name: fluentd-gcp-v1.31 name: fluentd-gcp-v1.34
namespace: kube-system namespace: kube-system
labels: labels:
k8s-app: fluentd-gcp k8s-app: fluentd-gcp
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
version: v1.31 version: v1.34
spec: spec:
template: template:
metadata: metadata:
labels: labels:
k8s-app: fluentd-gcp k8s-app: fluentd-gcp
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
version: v1.31 version: v1.34
spec: spec:
containers: containers:
- name: fluentd-gcp - name: fluentd-gcp
image: gcr.io/google_containers/fluentd-gcp:1.32 image: gcr.io/google_containers/fluentd-gcp:1.34
# If fluentd consumes its own logs, the following situation may happen: # If fluentd consumes its own logs, the following situation may happen:
# fluentd fails to send a chunk to the server => writes it to the log => # fluentd fails to send a chunk to the server => writes it to the log =>
# tries to send this message to the server => fails to send a chunk and so on. # tries to send this message to the server => fails to send a chunk and so on.
@ -40,8 +40,6 @@ spec:
- name: varlibdockercontainers - name: varlibdockercontainers
mountPath: /var/lib/docker/containers mountPath: /var/lib/docker/containers
readOnly: true readOnly: true
- name: libsystemddir
mountPath: /host/lib
# Liveness probe is aimed to help in situarions where fluentd # Liveness probe is aimed to help in situarions where fluentd
# silently hangs for no apparent reasons until manual restart. # silently hangs for no apparent reasons until manual restart.
# The idea of this probe is that if fluentd is not queueing or # The idea of this probe is that if fluentd is not queueing or
@ -84,6 +82,3 @@ spec:
- name: varlibdockercontainers - name: varlibdockercontainers
hostPath: hostPath:
path: /var/lib/docker/containers path: /var/lib/docker/containers
- name: libsystemddir
hostPath:
path: /usr/lib64

View file

@ -36,6 +36,7 @@ RUN apt-get -qq update && \
td-agent-gem install --no-document fluent-plugin-record-reformer -v 0.8.2 && \ td-agent-gem install --no-document fluent-plugin-record-reformer -v 0.8.2 && \
td-agent-gem install --no-document fluent-plugin-systemd -v 0.0.5 && \ td-agent-gem install --no-document fluent-plugin-systemd -v 0.0.5 && \
td-agent-gem install --no-document fluent-plugin-google-cloud -v 0.5.2 && \ td-agent-gem install --no-document fluent-plugin-google-cloud -v 0.5.2 && \
td-agent-gem install --no-document fluent-plugin-detect-exceptions -v 0.0.4 && \
# Remove build tools # Remove build tools
apt-get remove -y -qq gcc make && \ apt-get remove -y -qq gcc make && \
apt-get autoremove -y -qq && \ apt-get autoremove -y -qq && \

View file

@ -26,7 +26,7 @@
.PHONY: build push .PHONY: build push
PREFIX=gcr.io/google_containers PREFIX=gcr.io/google_containers
TAG = 1.32 TAG = 1.34
build: build:
docker build --pull -t $(PREFIX)/fluentd-gcp:$(TAG) . docker build --pull -t $(PREFIX)/fluentd-gcp:$(TAG) .

View file

@ -70,7 +70,18 @@
<match reform.**> <match reform.**>
type record_reformer type record_reformer
enable_ruby true enable_ruby true
tag kubernetes.${tag_suffix[4].split('-')[0..-2].join('-')} tag raw.kubernetes.${tag_suffix[4].split('-')[0..-2].join('-')}
</match>
# Detect exceptions in the log output and forward them as one log entry.
<match raw.kubernetes.**>
type detect_exceptions
remove_tag_prefix raw
message log
stream stream
multiline_flush_interval 5
max_bytes 500000
max_lines 1000
</match> </match>
# Example: # Example:

View file

@ -17,12 +17,6 @@
# For systems without journald # For systems without journald
mkdir -p /var/log/journal mkdir -p /var/log/journal
if [ -e /host/lib/libsystemd* ]
then
rm /lib/x86_64-linux-gnu/libsystemd*
cp /host/lib/libsystemd* /lib/x86_64-linux-gnu/
fi
LD_PRELOAD=/opt/td-agent/embedded/lib/libjemalloc.so LD_PRELOAD=/opt/td-agent/embedded/lib/libjemalloc.so
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9

Some files were not shown because too many files have changed in this diff Show more