Skip to content

Commit

Permalink
Gateway TLD to have per deployment domain
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinmay Naik authored and mattkanwisher committed Feb 10, 2018
1 parent 7eb0743 commit b4c289c
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 183 deletions.
5 changes: 0 additions & 5 deletions cmd/helpers/nomad_helper.go

This file was deleted.

4 changes: 4 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const (
DefaultKey = "CONFIG"
DefaultGanacheImage = "gcr.io/robotic-catwalk-188706/loom-ganache:test"
DefaultGatewayImage = "gcr.io/robotic-catwalk-188706/rpc_gateway:e3face0"
DefaultGatewayTld = "loomapps.io"
)

type S3EndPoint struct {
Expand All @@ -28,6 +29,7 @@ type Config struct {
BindAddr string
EnableAuth bool
DisableUpload bool
GatewayTld string
GatewayDockerImage string
GanacheDockerImage string
KubeConfigPath string // Path to GCP Kubernetes config file for out-of-cluster authentication.
Expand Down Expand Up @@ -67,6 +69,7 @@ var (
level = envflag.String("LOG_LEVEL", "debug", "Log level minimum to output. Info/Debug/Warn")
serverHost = envflag.String("SERVER_HOST", "http://127.0.0.1:8081", "hostname for oauth redirects")
loomDashboardHost = envflag.String("LOOM_DASHBOARD_API_HOST", "https://dashboard.loomx.io", "hostname for production dashboard to read data from it, for the gateway.")
gatewayTLD = envflag.String("GATEWAY_TLD", DefaultGatewayTld, "Default top level domain for gateway, loomapps.io")
gatewayDockerImage = envflag.String("GATEWAY_DOCKER_IMAGE", DefaultGatewayImage, "Gateway docker image version")
ganacheDockerImage = envflag.String("GANACHE_DOCKER_IMAGE", DefaultGanacheImage, "Ganache docker image version")
ethereumURI = envflag.String("ETHEREUM_URI", "http://localhost:8545", "Test RPC Host address")
Expand Down Expand Up @@ -109,6 +112,7 @@ func GetDefaultedConfig() *Config {
EnableAuth: *enableAuth,
DisableUpload: *disableUpload,
ServerHost: *serverHost,
GatewayTld: *gatewayTLD,
GatewayDockerImage: *gatewayDockerImage,
GanacheDockerImage: *ganacheDockerImage,
InviteOnlyMode: *inviteOnlyMode,
Expand Down
93 changes: 0 additions & 93 deletions controllers/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,99 +70,6 @@ func deployToK8s(filename, slug string, cfg *config.Config) error {
return nil
}

//TODO set NOMAD_ADDR
//func SendNomadJob(filename, slug, dockerVersion string) error {
// if slug == "" {
// return errors.New("slug is blank won't send to nomad")
// }
//
// ncfg := api.DefaultConfig()
// nomadClient, err := api.NewClient(ncfg)
// if err != nil {
// return err
// }
// name := fmt.Sprintf("loomapp-%s", slug)
// traefikTags := fmt.Sprintf("traefik.frontend.rule=Host:%s.loomapps.io", slug)
// job := &api.Job{
// ID: helper.StringToPtr(name),
// Name: helper.StringToPtr(name),
// Datacenters: []string{"dc1"},
// Type: helper.StringToPtr("service"),
// Update: &api.UpdateStrategy{
// MaxParallel: helper.IntToPtr(1),
// },
// TaskGroups: []*api.TaskGroup{
// {
// Name: helper.StringToPtr("loomapps-client"),
// Count: helper.IntToPtr(1),
// RestartPolicy: &api.RestartPolicy{
// Interval: helper.TimeToPtr(5 * time.Minute),
// Attempts: helper.IntToPtr(10),
// Delay: helper.TimeToPtr(25 * time.Second),
// Mode: helper.StringToPtr("delay"),
// },
// // EphemeralDisk: &api.EphemeralDisk{
// // SizeMB: helper.IntToPtr(300),
// // },
// Tasks: []*api.Task{
// {
// Name: name,
// Driver: "docker",
// Config: map[string]interface{}{
// "image": fmt.Sprintf("loomnetwork/rpc_gateway:%s", dockerVersion), //TODO make this a config option
// "port_map": []map[string]int{{
// "web": 8081,
// }},
// },
// Env: map[string]string{
// "SPAWN_NETWORK": "node /src/build/cli.node.js",
// "APP_ZIP_FILE": fmt.Sprintf("do://uploads/%s", filename),
// "DEMO_MODE": "false",
// "PRIVATE_KEY_JSON_PATH": "data.json",
// "APP_SLUG": slug,
// },
// Resources: &api.Resources{
// CPU: helper.IntToPtr(500),
// MemoryMB: helper.IntToPtr(500),
// Networks: []*api.NetworkResource{
// {
// MBits: helper.IntToPtr(10),
// DynamicPorts: []api.Port{
// {
// Label: "web",
// },
// },
// },
// },
// },
// Services: []*api.Service{
// {
// Name: fmt.Sprintf("loomapp-%s-check", slug),
// Tags: []string{"global", "traefik.tags=loomapp", traefikTags},
// PortLabel: "web",
// Checks: []api.ServiceCheck{
// {
// Name: "alive",
// Type: "tcp",
// Interval: 10 * time.Second,
// Timeout: 2 * time.Second,
// },
// },
// },
// },
// Templates: []*api.Template{},
// },
// },
// },
// },
// }
//
// jobs := nomadClient.Jobs()
// res, wmeta, err := jobs.Register(job, nil)
// fmt.Printf("res--%v \n wmeta --- %v\n", res, wmeta)
// return err
//}

func UploadApplication(c *gin.Context) {
r := c.Request
cfg := config.Default(c)
Expand Down
74 changes: 1 addition & 73 deletions k8s/ganache/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,83 +8,11 @@ import (
"k8s.io/client-go/kubernetes"
)

const ingressControllerClass = "traefik-internal"

//func makeHost(slug string) string {
// return fmt.Sprintf("%v.chain.loomapps.io", slug)
//}
//
//func MakeIngressName(slug string) string {
// return fmt.Sprintf("%v-%v-%v", ingressControllerClass, Ident, slug)
//}

func (g *Installer) CreateIngress(slug string, client *kubernetes.Clientset) error {
func (g *Installer) CreateIngress(slug, host string, client *kubernetes.Clientset) error {
return nil
//iClient := client.ExtensionsV1beta1().Ingresses(apiv1.NamespaceDefault)
//ingress := g.createIngressStruct(slug)
//
//ig, err := g.GetIngress(MakeIngressName(slug), client)
//if err == nil && ig != nil {
// g.updateStruct(ingress, ig)
// if _, err := iClient.Update(ingress); err != nil {
// return errors.Wrap(err, "Ingress update failed")
// }
//
// return nil
//}
//
//// Transform the Error.
//ss, ok := err.(k8serror.APIStatus)
//if !ok {
// return errors.Wrapf(err, "Unexpected error message %v", err)
//}
//
//if strings.Contains(ss.Status().Message, "not found") {
// if _, err := iClient.Create(ingress); err != nil {
// return errors.Wrap(err, "Ingress rule creation failed")
// }
// return nil
//}
//
//return errors.Errorf("Unhandled Error %v", ss.Status().Message)
}

func (g *Installer) GetIngress(slug string, client *kubernetes.Clientset) (*extensionsv1beta1.Ingress, error) {
iClient := client.ExtensionsV1beta1().Ingresses(apiv1.NamespaceDefault)
return iClient.Get(slug, metav1.GetOptions{})
}

// Create an Ingress document.
//func (g *Installer) createIngressStruct(slug string) *extensionsv1beta1.Ingress {
// return &extensionsv1beta1.Ingress{
// TypeMeta: metav1.TypeMeta{
// Kind: "Ingress",
// },
// ObjectMeta: metav1.ObjectMeta{
// Name: MakeIngressName(slug),
// Annotations: map[string]string{
// "kubernetes.io/ingress.class": ingressControllerClass,
// },
// },
// Spec: extensionsv1beta1.IngressSpec{
// Rules: []extensionsv1beta1.IngressRule{
// {
// Host: makeHost(slug),
// IngressRuleValue: extensionsv1beta1.IngressRuleValue{
// HTTP: &extensionsv1beta1.HTTPIngressRuleValue{
// Paths: []extensionsv1beta1.HTTPIngressPath{
// {
// Path: "/",
// Backend: extensionsv1beta1.IngressBackend{
// ServiceName: MakeName(slug),
// ServicePort: apputils.IntOrString{IntVal: ganachePort},
// },
// },
// },
// },
// },
// },
// },
// },
// }
//}
3 changes: 1 addition & 2 deletions k8s/gateway/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,9 @@ func (g *Installer) createDeploymentStruct(image, slug string, env []apiv1.EnvVa
{
Name: Ident,
Image: image,
//Command: []string{"./root/start.sh"},
Resources: apiv1.ResourceRequirements{
Limits: apiv1.ResourceList{
//apiv1.ResourceCPU: resource.MustParse(gatewayCPULimit),
apiv1.ResourceCPU: resource.MustParse(gatewayCPULimit),
apiv1.ResourceMemory: resource.MustParse(gatewayMemLimit),
//I don't think Kubernetes can limit Network bandwidth as of yet.
},
Expand Down
12 changes: 4 additions & 8 deletions k8s/gateway/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,13 @@ import (

const ingressControllerClass = "traefik"

func makeHost(slug string) string {
return fmt.Sprintf("%v.loomapps.io", slug)
}

func MakeIngressName(slug string) string {
return fmt.Sprintf("%v-%v-%v", ingressControllerClass, Ident, slug)
}

func (g *Installer) CreateIngress(slug string, client *kubernetes.Clientset) error {
func (g *Installer) CreateIngress(slug, host string, client *kubernetes.Clientset) error {
iClient := client.ExtensionsV1beta1().Ingresses(apiv1.NamespaceDefault)
ingress := g.createIngressStruct(slug)
ingress := g.createIngressStruct(slug, host)

ig, err := g.GetIngress(MakeIngressName(slug), client)
if err == nil && ig != nil {
Expand Down Expand Up @@ -61,7 +57,7 @@ func (g *Installer) GetIngress(slug string, client *kubernetes.Clientset) (*exte
}

// Create an Ingress document.
func (g *Installer) createIngressStruct(slug string) *extensionsv1beta1.Ingress {
func (g *Installer) createIngressStruct(slug, host string) *extensionsv1beta1.Ingress {
return &extensionsv1beta1.Ingress{
TypeMeta: metav1.TypeMeta{
Kind: "Ingress",
Expand All @@ -75,7 +71,7 @@ func (g *Installer) createIngressStruct(slug string) *extensionsv1beta1.Ingress
Spec: extensionsv1beta1.IngressSpec{
Rules: []extensionsv1beta1.IngressRule{
{
Host: makeHost(slug),
Host: host,
IngressRuleValue: extensionsv1beta1.IngressRuleValue{
HTTP: &extensionsv1beta1.HTTPIngressRuleValue{
Paths: []extensionsv1beta1.HTTPIngressPath{
Expand Down
10 changes: 8 additions & 2 deletions k8s/installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"github.com/loomnetwork/dashboard/k8s/gateway"
"github.com/pkg/errors"

"fmt"

apiv1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes"
)
Expand All @@ -15,7 +17,7 @@ type installer interface {
GetZone(slug string, c *kubernetes.Clientset) (string, error)

CreateService(slug string, c *kubernetes.Clientset) error
CreateIngress(slug string, c *kubernetes.Clientset) error
CreateIngress(slug, host string, c *kubernetes.Clientset) error
CreateDeployment(image, slug string, env []apiv1.EnvVar, c *kubernetes.Clientset) error
}

Expand All @@ -31,6 +33,10 @@ func getInstaller(ident string) installer {
return nil
}

func makeHost(slug string, cfg *config.Config) string {
return fmt.Sprintf("%v.%v", slug, cfg.GatewayTld)
}

func Install(ident, slug string, env map[string]interface{}, cfg *config.Config) error {
client, err := makeClient(cfg)
if err != nil {
Expand All @@ -52,7 +58,7 @@ func Install(ident, slug string, env map[string]interface{}, cfg *config.Config)
return errors.Wrap(err, "could not create k8s service.")
}

if err := i.CreateIngress(slug, client); err != nil {
if err := i.CreateIngress(slug, makeHost(slug, cfg), client); err != nil {
return errors.Wrap(err, "could not create k8s Ingress.")
}

Expand Down

0 comments on commit b4c289c

Please sign in to comment.