diff --git a/cmd/helpers/nomad_helper.go b/cmd/helpers/nomad_helper.go deleted file mode 100644 index 013e3cf..0000000 --- a/cmd/helpers/nomad_helper.go +++ /dev/null @@ -1,5 +0,0 @@ -package main - -func main() { - //controllers.SendNomadJob("a4200d60-8817-44a5-92a0-5fe6de44e563.zip", "blockssh") -} diff --git a/config/config.go b/config/config.go index c74a470..fa919fd 100644 --- a/config/config.go +++ b/config/config.go @@ -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 { @@ -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. @@ -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") @@ -109,6 +112,7 @@ func GetDefaultedConfig() *Config { EnableAuth: *enableAuth, DisableUpload: *disableUpload, ServerHost: *serverHost, + GatewayTld: *gatewayTLD, GatewayDockerImage: *gatewayDockerImage, GanacheDockerImage: *ganacheDockerImage, InviteOnlyMode: *inviteOnlyMode, diff --git a/controllers/upload.go b/controllers/upload.go index ecbcd89..7a61554 100644 --- a/controllers/upload.go +++ b/controllers/upload.go @@ -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) diff --git a/k8s/ganache/ingress.go b/k8s/ganache/ingress.go index 8811943..5ce62c1 100644 --- a/k8s/ganache/ingress.go +++ b/k8s/ganache/ingress.go @@ -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}, -// }, -// }, -// }, -// }, -// }, -// }, -// }, -// }, -// } -//} diff --git a/k8s/gateway/deployment.go b/k8s/gateway/deployment.go index 8020ffe..f3ec066 100644 --- a/k8s/gateway/deployment.go +++ b/k8s/gateway/deployment.go @@ -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. }, diff --git a/k8s/gateway/ingress.go b/k8s/gateway/ingress.go index 9e70e8b..9dec701 100644 --- a/k8s/gateway/ingress.go +++ b/k8s/gateway/ingress.go @@ -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 { @@ -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", @@ -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{ diff --git a/k8s/installer.go b/k8s/installer.go index 33d0e00..308132b 100644 --- a/k8s/installer.go +++ b/k8s/installer.go @@ -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" ) @@ -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 } @@ -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 { @@ -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.") }