private async Task Deploy(string name, string image, string nameSpace, int min, int max, double cpu, int memory, string port, string pullSecret) { await CreateNamespace(nameSpace); var deploymentName = $"{name}-deployment"; await DeleteDeploymentIfExists(deploymentName, nameSpace); ColoredConsole.WriteLine("Deploying function to Kubernetes..."); var deployment = GetDeployment(deploymentName, image, cpu, memory, port, nameSpace, min, pullSecret); var json = Newtonsoft.Json.JsonConvert.SerializeObject(deployment, Newtonsoft.Json.Formatting.None, new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }); await KubectlHelper.RunKubectl($"apply -f deployment.json --namespace {nameSpace}"); ColoredConsole.WriteLine("Deployment successful"); var service = GetService(deploymentName, nameSpace, port); try { // we can safely ignore the error here await KubectlHelper.KubectlApply(service, showOutput : false); } catch { } await TryRemoveAutoscaler(deploymentName, nameSpace); await CreateAutoscaler(deploymentName, nameSpace, min, max); var externalIP = ""; ColoredConsole.WriteLine("Waiting for External IP..."); while (string.IsNullOrEmpty(externalIP)) { var svc = await KubectlHelper.KubectlGet <JObject>($"{deploymentName}-service --namespace {nameSpace}"); if (svc != null) { var obj = svc.SelectToken("Status.LoadBalancer.Ingress[0].Ip"); if (obj != null) { externalIP = obj.ToString(); } } } ColoredConsole.WriteLine(); ColoredConsole.WriteLine("Function deployed successfully!"); ColoredConsole.WriteLine($"Function IP: {externalIP}"); }
private async Task <string> GetIstioClusterIngressEndpoint() { var gateway = await KubectlHelper.KubectlGet <JObject>("service istio-ingressgateway --namespace istio-system"); if (gateway == null) { return(string.Empty); } var endpoint = gateway.SelectToken("Status.LoadBalancer.Ingress[0].Hostname")?.ToString(); if (!string.IsNullOrEmpty(endpoint)) { return(endpoint); } return(gateway.SelectToken("Status.LoadBalancer.Ingress[0].Ip")?.ToString()); }