podex: move to contrib

This commit is contained in:
Johan Euphrosine
2014-10-02 10:37:41 -07:00
parent 1b2604f642
commit e5b3e41ef9
6 changed files with 60 additions and 30 deletions

View File

@@ -0,0 +1,28 @@
# How to become a contributor and submit your own code
## Contributor License Agreements
We'd love to accept your patches! Before we can take them, we have to jump a couple of legal hurdles.
Please fill out either the individual or corporate Contributor License Agreement (CLA).
* If you are an individual writing original source code and you're sure you own the intellectual property, then you'll need to sign an [individual CLA](http://code.google.com/legal/individual-cla-v1.0.html).
* If you work for a company that wants to allow you to contribute your work, then you'll need to sign a [corporate CLA](http://code.google.com/legal/corporate-cla-v1.0.html).
Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. Once we receive it, we'll be able to accept your pull requests.
## Contributing A Patch
1. Submit an issue describing your proposed change to the repo in question.
1. The repo owner will respond to your issue promptly.
1. If your proposed change is accepted, and you haven't already done so, sign a Contributor License Agreement (see details above).
1. Fork the desired repo, develop and test your code changes.
1. Submit a pull request.
## Protocols for Collaborative Development
Please read [this doc](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/collab.md) for information on how we're running development for the project.
## Adding dependencies
If your patch depends on new packages, add that package with [`godep`](https://github.com/tools/godep). Follow the [instructions to add a dependency](https://github.com/tools/godep#add-a-dependency).

View File

@@ -0,0 +1,18 @@
# Maintainers
People responsible for ports of Kubernetes to different environments. CC at least one maintainer on relevant issues and PRs.
## OS Distributions
* RedHat, Fedora: [Clayton Coleman](https://github.com/smarterclayton), [Derek Carr](https://github.com/derekwaynecarr), [Scott Collier](https://github.com/scollier)
* CoreOS: [Kelsey Hightower](https://github.com/kelseyhightower)
## Providers / Environments
* GCE: [Brendan Burns](https://github.com/brendandburns), [Joe Beda](https://github.com/jbeda), [Daniel Smith](https://github.com/lavalamp), [Tim Hockin](https://github.com/thockin)
* Azure: [Jeff Mendoza](https://github.com/jeffmendoza)
* Vsphere: [Pieter Noordhuis](https://github.com/pietern)
* Rackspace: [Ryan Richard](https://github.com/doublerr)
* Ovirt: [Federico Simoncelli](https://github.com/simon3z)
* Local: [Derek Carr](https://github.com/derekwaynecarr)
* Vagrant: [Derek Carr](https://github.com/derekwaynecarr)

14
contrib/podex/README.md Normal file
View File

@@ -0,0 +1,14 @@
# podex
## Description
`podex` is a command line tool to bootstrap a kubernetes container manifests from docker image metadata.
Manifests can then be edited by a human to match deployment needs.
## Usage
```
$ docker pull google/nodejs-hello
$ podex -yaml google/nodejs-hello > pod.yaml
$ podex -json google/nodejs-hello > pod.json
```

113
contrib/podex/podex.go Normal file
View File

@@ -0,0 +1,113 @@
/*
Copyright 2014 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// podex is a command line tool to bootstrap kubernetes container
// manifests from docker image metadata.
//
// Manifests can then be edited by a human to match deployment needs.
//
// Example usage:
//
// $ docker pull google/nodejs-hello
// $ podex -yaml google/nodejs-hello > google/nodejs-hello/pod.yaml
// $ podex -json google/nodejs-hello > google/nodejs-hello/pod.json
package main
import (
"encoding/json"
"flag"
"log"
"os"
"strconv"
"strings"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
dockerclient "github.com/fsouza/go-dockerclient"
"gopkg.in/yaml.v1"
)
const usage = "usage: podex [-json|-yaml] <repo/dockerimage>"
var generateJSON = flag.Bool("json", false, "generate json manifest")
var generateYAML = flag.Bool("yaml", false, "generate yaml manifest")
func main() {
flag.Parse()
if flag.NArg() < 1 {
log.Fatal(usage)
}
imageName := flag.Arg(0)
if len(imageName) == 0 {
log.Fatal(usage)
}
if !*generateJSON && !*generateYAML {
log.Fatal(usage)
}
parts := strings.Split(imageName, "/")
baseName := parts[len(parts)-1]
dockerHost := os.Getenv("DOCKER_HOST")
docker, err := dockerclient.NewClient(dockerHost)
if err != nil {
log.Fatalf("failed to connect to %q: %v", dockerHost, err)
}
img, err := docker.InspectImage(imageName)
if err != nil {
log.Fatalf("failed to inspect image %q: %v", imageName, err)
}
manifest := api.ContainerManifest{
Version: "v1beta1",
ID: baseName + "-pod",
Containers: []api.Container{{
Name: baseName,
Image: imageName,
}},
RestartPolicy: api.RestartPolicy{
Always: &api.RestartPolicyAlways{},
},
}
for p, _ := range img.Config.ExposedPorts {
port, err := strconv.Atoi(p.Port())
if err != nil {
log.Fatalf("failed to parse port %q: %v", parts[0], err)
}
manifest.Containers[0].Ports = append(manifest.Containers[0].Ports, api.Port{
Name: strings.Join([]string{baseName, p.Proto(), p.Port()}, "-"),
ContainerPort: port,
Protocol: api.Protocol(strings.ToUpper(p.Proto())),
})
}
if *generateJSON {
bs, err := json.MarshalIndent(manifest, "", " ")
if err != nil {
log.Fatalf("failed to render JSON container manifest: %v", err)
}
os.Stdout.Write(bs)
}
if *generateYAML {
bs, err := yaml.Marshal(manifest)
if err != nil {
log.Fatalf("failed to render YAML container manifest: %v", err)
}
os.Stdout.Write(bs)
}
}