Example #1
0
        public void TestDeployService()
        {
            Context.Configuration.AddService("my-Service", "dummy-svc");
            _driver.DeployService("my-Service");
            // deployment config
            var deployCfgFile = new KubernetesDeploymentConfigFile("my-Service-deployment.yml");

            deployCfgFile.Exists().ShouldBeTrue();
            var deployCfg = deployCfgFile.KubernetesDeploymentConfig;

            deployCfg.ApiVersion.ShouldBe("apps/v1");
            deployCfg.Kind.ShouldBe("Deployment");
            deployCfg.MetaData.Name.ShouldBe("my-service");
            deployCfg.MetaData.Labels["app"].ShouldBe("my-service");
            deployCfg.Spec.Selector.MatchLabels["app"].ShouldBe("my-service");
            deployCfg.Spec.Template.Metadata.Labels["app"].ShouldBe("my-service");
            deployCfg.Spec.Template.Spec.Containers[0].Name.ShouldBe("my-service");
            // service config
            var svcCfgFile = new KubernetesServiceConfigFile("my-Service-service.yml");

            svcCfgFile.Exists().ShouldBeTrue();
            var svcCfg = new KubernetesServiceConfigFile("my-Service-service.yml").KubernetesServiceConfig;

            svcCfg.ApiVersion.ShouldBe("v1");
            svcCfg.Kind.ShouldBe("Service");
            svcCfg.MetaData.Name.ShouldBe("my-service");
            svcCfg.Spec.Selector["app"].ShouldBe("my-service");
            // commands
            Shell.Commands.Count.ShouldBe(2);
            Shell.Commands[0].ShouldBe("kubectl apply --filename my-Service-deployment.yml");
            Shell.Commands[1].ShouldBe("kubectl apply --filename my-Service-service.yml");
        }
Example #2
0
        public void TestDeployApp()
        {
            Context.Configuration.AddApp("my-App");
            _driver.DeployApp("my-App");
            // Dockerfile
            var dockerfileFile = new KubernetesDotnetAppDockerfileFile("Dockerfile");

            dockerfileFile.Exists().ShouldBeTrue();
            var dockerfile = dockerfileFile.KubernetesDotnetAppDockerfile;

            dockerfile.App.ShouldBe("my-App");
            dockerfile.BaseImage.ShouldBe("steeltoeoss/dotnet-runtime:2.1");
            dockerfile.BuildPath.ShouldBe("bin/Debug/netcoreapp2.1/publish");
            // deployment config
            var deployCfgFile = new KubernetesDeploymentConfigFile("my-App-deployment.yml");

            deployCfgFile.Exists().ShouldBeTrue();
            var deployCfg = deployCfgFile.KubernetesDeploymentConfig;

            deployCfg.ApiVersion.ShouldBe("apps/v1");
            deployCfg.Kind.ShouldBe("Deployment");
            deployCfg.MetaData.Name.ShouldBe("my-app");
            deployCfg.MetaData.Labels["app"].ShouldBe("my-app");
            deployCfg.Spec.Selector.MatchLabels["app"].ShouldBe("my-app");
            deployCfg.Spec.Template.Metadata.Labels["app"].ShouldBe("my-app");
            deployCfg.Spec.Template.Spec.Containers[0].Name.ShouldBe("my-app");
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("my-app");
            deployCfg.Spec.Template.Spec.Containers[0].ImagePullPolicy.ShouldBe("Never");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(80);
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("my-app");
            deployCfg.Spec.Template.Spec.Containers[0].Env.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Env[0].Name.ShouldBe("GET_HOSTS_FROM");
            deployCfg.Spec.Template.Spec.Containers[0].Env[0].Value.ShouldBe("dns");
            // service config
            var svcCfgFile = new KubernetesServiceConfigFile("my-App-service.yml");

            svcCfgFile.Exists().ShouldBeTrue();
            var svcCfg = new KubernetesServiceConfigFile("my-App-service.yml").KubernetesServiceConfig;

            svcCfg.ApiVersion.ShouldBe("v1");
            svcCfg.Kind.ShouldBe("Service");
            svcCfg.MetaData.Name.ShouldBe("my-app");
            svcCfg.Spec.Type.ShouldBe("NodePort");
            svcCfg.Spec.Ports[0].Port.ShouldBe(80);
            svcCfg.Spec.Selector["app"].ShouldBe("my-app");
            // commands
            Shell.Commands.Count.ShouldBe(3);
            Shell.Commands[0].ShouldBe("docker build --tag my-app .");
            Shell.Commands[1].ShouldBe("kubectl apply --filename my-App-deployment.yml");
            Shell.Commands[2].ShouldBe("kubectl apply --filename my-App-service.yml");
        }
Example #3
0
        public void TestDeployPostgreSql()
        {
            Context.Configuration.AddService("my-service", "postgresql");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/postgresql:10.8");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(5432);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(5432);
        }
Example #4
0
        public void TestDeployZipkin()
        {
            Context.Configuration.AddService("my-service", "zipkin");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/zipkin:2.11");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(9411);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(9411);
        }
Example #5
0
        public void TestDeployRabbitMQ()
        {
            Context.Configuration.AddService("my-service", "rabbitmq");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/rabbitmq:3.7");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(5672);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(5672);
        }
Example #6
0
        public void TestDeployHystrixDashboard()
        {
            Context.Configuration.AddService("my-service", "hystrix-dashboard");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/hystrix-dashboard:1.4");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(7979);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(7979);
        }
Example #7
0
        public void TestDeployEurekaServer()
        {
            Context.Configuration.AddService("my-service", "eureka-server");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/eureka-server:2.0");
            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(8761);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(8761);
        }
Example #8
0
        public void TestDeployRedis()
        {
            Context.Configuration.AddService("my-service", "redis");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(6379);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(6379);
            _driver.DeployService("my-service", "linux");
            deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/redis-amd64-linux:4.0.11");
            _driver.DeployService("my-service", "windows");
            deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/redis-amd64-windows:3.0.504");
        }
Example #9
0
        public void TestDeployMicrosoftSqlServer()
        {
            Context.Configuration.AddService("my-service", "mssql");
            _driver.DeployService("my-service");
            var deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;

            deployCfg.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            deployCfg.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(1433);
            var svcCfg = new KubernetesServiceConfigFile("my-service-service.yml").KubernetesServiceConfig;

            svcCfg.Spec.Ports[0].Port.ShouldBe(1433);
            _driver.DeployService("my-service", "linux");
            deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/mssql-amd64-linux:2017-CU11");
            _driver.DeployService("my-service", "windows");
            deployCfg = new KubernetesDeploymentConfigFile("my-service-deployment.yml").KubernetesDeploymentConfig;
            deployCfg.Spec.Template.Spec.Containers[0].Image.ShouldBe("steeltoeoss/mssql-amd64-windows:2017-CU1");
        }
Example #10
0
        public void TestLoadFromFile()
        {
            File.WriteAllText(_configFile, SampleConfig);
            var cfgFile = new KubernetesDeploymentConfigFile(_configFile);

            cfgFile.KubernetesDeploymentConfig.ApiVersion.ShouldBe("apps/v1");
            cfgFile.KubernetesDeploymentConfig.Kind.ShouldBe("Deployment");
            cfgFile.KubernetesDeploymentConfig.MetaData.Name.ShouldBe("my-service-name");
            cfgFile.KubernetesDeploymentConfig.MetaData.Labels["label1"].ShouldBe("value1");
            cfgFile.KubernetesDeploymentConfig.Spec.Replicas.ShouldBe(9);
            cfgFile.KubernetesDeploymentConfig.Spec.Selector.MatchLabels["label2"].ShouldBe("value2");
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Metadata.Labels["label3"].ShouldBe("value3");
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Spec.Containers.Count.ShouldBe(1);
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Spec.Containers[0].Name.ShouldBe("my-container");
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Spec.Containers[0].Image.ShouldBe("my-container-image");
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Spec.Containers[0].Ports.Count.ShouldBe(1);
            cfgFile.KubernetesDeploymentConfig.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort.ShouldBe(1234);
        }
Example #11
0
        public void TestStoreToFile()
        {
            var cfgFile = new KubernetesDeploymentConfigFile(_configFile);

            cfgFile.KubernetesDeploymentConfig.ApiVersion = "apps/v1";
            cfgFile.KubernetesDeploymentConfig.Kind       = "Deployment";
            cfgFile.KubernetesDeploymentConfig.MetaData   = new KubernetesConfig.ConfigMetaData()
            {
                Name   = "my-service-name",
                Labels = new Dictionary <string, string>
                {
                    { "label1", "value1" }
                }
            };
            cfgFile.KubernetesDeploymentConfig.Spec = new KubernetesDeploymentConfig.DeploymentSpec()
            {
                Replicas = 9,
                Selector = new KubernetesDeploymentConfig.DeploymentSpec.ServiceSelector()
                {
                    MatchLabels = new Dictionary <string, string>()
                    {
                        { "label2", "value2" }
                    }
                },
                Template = new KubernetesDeploymentConfig.DeploymentSpec.ServiceTemplate()
                {
                    Metadata = new KubernetesDeploymentConfig.DeploymentSpec.ServiceTemplate.ServiceMetaData()
                    {
                        Labels = new Dictionary <string, string>
                        {
                            {
                                "label3", "value3"
                            }
                        }
                    },
                    Spec = new KubernetesDeploymentConfig.DeploymentSpec.ServiceTemplate.TemplateSpec()
                    {
                        Containers =
                            new List <KubernetesDeploymentConfig.DeploymentSpec.ServiceTemplate.TemplateSpec.Container>
                        {
                            {
                                new KubernetesDeploymentConfig.DeploymentSpec.ServiceTemplate.TemplateSpec.
                                Container()
                                {
                                    Name  = "my-container",
                                    Image = "my-container-image",
                                    Ports = new List <KubernetesConfig.ServicePorts>()
                                    {
                                        new KubernetesConfig.ServicePorts()
                                        {
                                            ContainerPort = 1234
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
            cfgFile.Store();
            File.ReadAllText(_configFile).ShouldBe(SampleConfig);
        }