Deployment IOperationSource <Deployment> .CreateResult(Response response, CancellationToken cancellationToken) { using var document = JsonDocument.Parse(response.ContentStream); var data = DeploymentData.DeserializeDeploymentData(document.RootElement); return(new Deployment(_armClient, data)); }
internal static DeploymentCollection DeserializeDeploymentCollection(JsonElement element) { IReadOnlyList <DeploymentData> value = default; Optional <string> nextLink = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("value")) { List <DeploymentData> array = new List <DeploymentData>(); foreach (var item in property.Value.EnumerateArray()) { array.Add(DeploymentData.DeserializeDeploymentData(item)); } value = array; continue; } if (property.NameEquals("nextLink")) { nextLink = property.Value.GetString(); continue; } } return(new DeploymentCollection(value, nextLink.Value)); }
private void DeploymentSetup() { //Creates instance to define settings folder in a location and create it based on name of App and if Dev deployment var deployment = new DeploymentData(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))); SetLogFilePath("LogFile", deployment.SettingsFolder); AppMode = deployment.Mode; if (deployment.NetworkDeployed == true) { try { //Start auto update system and subscribe to event var updateManager = new UpdateManager(deployment.UpdateLocation); updateManager.UpdateComplete += UpdateComplete; } catch (Exception e) { log.Fatal(e); } try { //listen for DB updates var WatchDataBase = new DataBaseWatcher(deployment.UpdateLocation); DataBaseWatcher.DataBaseUpdated += (o, e) => { this.ReloadData(o, e.FullPath); DBUpdated = true; }; } catch (Exception e) { log.Fatal(e); } } }
internal static DeploymentListResult DeserializeDeploymentListResult(JsonElement element) { Optional <IReadOnlyList <DeploymentData> > value = default; Optional <string> nextLink = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("value")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } List <DeploymentData> array = new List <DeploymentData>(); foreach (var item in property.Value.EnumerateArray()) { array.Add(DeploymentData.DeserializeDeploymentData(item)); } value = array; continue; } if (property.NameEquals("nextLink")) { nextLink = property.Value.GetString(); continue; } } return(new DeploymentListResult(Optional.ToList(value), nextLink.Value)); }
public string GenerateCaddyfile(DeploymentData data, CaddyProfile profile) { var sb = new StringBuilder(); if (profile.SpecifyEmail) { sb.AppendLine("{"); sb.AppendLine($" email {Constants.Email}"); sb.AppendLine("}"); } void GenerateSection(string prefix, CaddyProfile caddyProfile, string serviceNamePrefix) { var domainPrefix = string.IsNullOrEmpty(prefix) ? string.Empty : $"{prefix}."; var servicePrefix = string.IsNullOrEmpty(prefix) ? string.Empty : $"{prefix}-"; sb.AppendLine(); sb.AppendLine($"{domainPrefix}{caddyProfile.Domain} {{"); sb.AppendLine($" reverse_proxy {servicePrefix}{caddyProfile.WebUiAddress}"); sb.AppendLine("}"); sb.AppendLine(); sb.AppendLine($"{domainPrefix}api.{caddyProfile.Domain} {{"); foreach (var service in data.Services .Where(s => s.AddToReverseProxyInProduction || !caddyProfile.IsProd) .OrderBy(service => service.ServiceName)) { sb.AppendLine($" handle_path /{service.ServiceName}/* {{"); sb.AppendLine($" reverse_proxy {servicePrefix}{Constants.GetReverseProxyAddressWithPort(service, serviceNamePrefix)}"); sb.AppendLine(" }"); sb.AppendLine(); } sb.AppendLine(" respond 404"); sb.AppendLine("}"); } GenerateSection(string.Empty, profile, profile.Value == "local" ? "local-" : string.Empty); if (profile.Value == "host") { GenerateSection("dev", profile, string.Empty); GenerateSection(string.Empty, new CaddyProfile("local"), "local-"); } return(sb.ToString()); }
public ServiceData AddDeployment(Action<DeploymentData> setter) { var data = new DeploymentData(); setter(data); switch (data.Slot) { case DeploymentSlot.Production: ProductionDeployment = data; break; case DeploymentSlot.Staging: StagingDeployment = data; break; } return this; }
private string GetIconClass(DeploymentData data) { if (data.IsCancelled) { return("fas fa-trash text-warning"); } if (!data.IsComplete) { return("fas fa-spinner fa-spin text-info"); } if (data.IsSuccess) { return("fas fa-check text-success"); } return("fas fa-exclamation-triangle text-danger"); }
private bool PrepareDeploymentsList() { if (Blackboard.LoginTokens == null) { Owner.SetState(Owner.StartState); } var deploymentData = Blackboard.LoginTokens .Select(token => (DeploymentData.TryFromLoginToken(token, out var data), data)) .Where(pair => pair.Item1) .Select(pair => pair.data) .ToList(); ScreenManager.InformOfDeployments(deploymentData); return(deploymentData.Any(data => data.IsAvailable)); }
public ServiceData AddDeployment(Action <DeploymentData> setter) { var data = new DeploymentData(); setter(data); switch (data.Slot) { case DeploymentSlot.Production: ProductionDeployment = data; break; case DeploymentSlot.Staging: StagingDeployment = data; break; } return(this); }
private HostedServiceGetDetailedResponse.Deployment CreateDeploymentResponse(DeploymentData d) { if (d != null) { return(new HostedServiceGetDetailedResponse.Deployment { DeploymentSlot = d.Slot, Name = d.Name, Roles = { new Role { RoleName = "Role1" } } }); } return(null); }
private HostedServiceGetDetailedResponse.Deployment CreateDeploymentResponse(DeploymentData d) { if (d != null) { return new HostedServiceGetDetailedResponse.Deployment { DeploymentSlot = d.Slot, Name = d.Name, Roles = { new Role { RoleName = "Role1" } } }; } return null; }
public string Generate(DeploymentData deploymentData, Environment environment) { var sb = new StringBuilder(); sb.AppendLine($"version: '{Constants.DockerComposeVersion}'"); sb.AppendLine(); // Declare networks. sb.AppendLine("networks:"); foreach (var network in deploymentData.GetAllNetworks(environment)) { sb.AppendLine($" {network}:"); } if (environment.Value == Environment.Prod) { foreach (var network in Constants.ExternalNetworksForHostProdCompose) { sb.AppendLine($" {network}:"); sb.AppendLine(" external: true"); } } if (environment.Value != Environment.Local && environment.Value != Environment.Debug) { foreach (var network in Constants.InfraExternalNetworks) { sb.AppendLine($" {network}:"); sb.AppendLine(" external: true"); } } sb.AppendLine(); // Declare services. sb.AppendLine("services:"); foreach (var service in deploymentData.GetServiceInformations(environment)) { sb.AppendLine($" {service.ContainerName}:"); sb.AppendLine($" image: {service.ImageName}"); sb.AppendLine($" container_name: {service.ContainerName}"); sb.AppendLine($" networks:"); foreach (var network in service.Networks) { sb.AppendLine($" - {network}"); } if (service.Ports.Any()) { sb.AppendLine($" ports:"); foreach (var port in service.Ports) { sb.AppendLine($" - {port}"); } } if (service.Volumes.Any()) { sb.AppendLine($" volumes:"); foreach (var volume in service.Volumes) { sb.AppendLine($" - {volume}"); } } if (service.BuildConfiguration != null) { sb.AppendLine($" build:"); sb.AppendLine($" context: {service.BuildConfiguration.Context}"); sb.AppendLine($" dockerfile: {service.BuildConfiguration.Dockerfile}"); } if (environment.RestartUnlessStopped) { sb.AppendLine($" restart: unless-stopped"); } sb.AppendLine($" mem_limit: {service.MemLimit}"); sb.AppendLine($" mem_reservation: {service.MemReservation}"); sb.AppendLine(" env_file:"); sb.AppendLine(" - deployment/.env"); foreach (var envFile in service.EnvFiles) { sb.AppendLine($" - {envFile}"); } sb.AppendLine(); } if (environment.Value == "local") { sb.AppendLine(@" local-typingrealm-caddy: image: caddy container_name: local-typingrealm-caddy networks: - local-typingrealm-net ports: - 80:80 - 443:443 restart: unless-stopped volumes: - ./reverse-proxy/Caddyfile.local:/etc/caddy/Caddyfile - ./infrastructure-data/local/caddy_data:/data mem_limit: 1g mem_reservation: 750m env_file: - deployment/.env.local"); } else if (environment.Value == "strict-prod") { sb.AppendLine(@" typingrealm-caddy: image: caddy container_name: typingrealm-caddy networks: - typingrealm-net ports: - 80:80 - 443:443 volumes: - ./reverse-proxy/Caddyfile.prod:/etc/caddy/Caddyfile - ./infrastructure-data/prod/caddy_data:/data restart: unless-stopped mem_limit: 1g mem_reservation: 750m env_file: - deployment/.env.prod"); } else if (environment.Value == "prod") { sb.AppendLine(@" typingrealm-caddy: image: caddy container_name: typingrealm-caddy networks: - typingrealm-net - local-tyr_local-typingrealm-net - dev-tyr_dev-typingrealm-net ports: - 80:80 - 443:443 volumes: - ./reverse-proxy/Caddyfile.host:/etc/caddy/Caddyfile - ./infrastructure-data/prod/caddy_data:/data restart: unless-stopped mem_limit: 1g mem_reservation: 750m env_file: - deployment/.env.prod"); } return(sb.ToString()); }
public DeploymentLogic() { _data = new DeploymentData(); }
public IEnumerable <EnvFile> GenerateEnvFiles(DeploymentData deploymentData, Environment environment) { if (!environment.GenerateEnvFiles) { yield break; } var envVars = new List <EnvVariable>(); var serviceEnvVars = deploymentData.Services .Where(s => s.ServiceName != Constants.WebUiServiceName) .Select(x => new { Service = x, EnvVars = new List <EnvVariable>() }) .ToDictionary(x => x.Service.ServiceName); if (environment.IsDevelopmentEnv && !environment.IsDebug && !environment.IsLocal) { envVars.Add(new EnvVariable("ASPNETCORE_ENVIRONMENT", "Development")); } else if (environment.IsDebug) { envVars.Add(new EnvVariable("ASPNETCORE_ENVIRONMENT", "Debug")); } else if (environment.IsLocal) { envVars.Add(new EnvVariable("ASPNETCORE_ENVIRONMENT", "Local")); } foreach (var service in deploymentData.Services) { if (service.RawServiceName == Constants.WebUiServiceName) { continue; } if (service.RawServiceName == Constants.AuthorityServiceName) { if (environment.IsDebug) { envVars.Add(new EnvVariable("SERVICE_AUTHORITY", $"http://host.docker.internal:{service.Port}/")); } else { envVars.Add(new EnvVariable("SERVICE_AUTHORITY", $"http://{environment.EnvironmentPrefix}{DeploymentData.ProjectName}-{service.ServiceName}/")); } continue; } var serviceAddress = environment.IsDebug ? $"http://host.docker.internal:{service.Port}" : $"http://{environment.EnvironmentPrefix}{DeploymentData.ProjectName}-{service.ServiceName}"; envVars.Add(new EnvVariable($"{service.ServiceName.ToUpperInvariant()}_URL", serviceAddress)); if (service.CacheType == CacheType.Redis) { if (environment.IsDebug) { var devRedisPort = DeploymentData.GetInfrastructurePort(6379, Environment.DevEnvironment, service).Split(":")[0]; serviceEnvVars[service.ServiceName].EnvVars.Add(new EnvVariable(Constants.CacheConfigurationKey, $"host.docker.internal:{devRedisPort}")); } else { serviceEnvVars[service.ServiceName].EnvVars.Add(new EnvVariable(Constants.CacheConfigurationKey, $"{environment.EnvironmentPrefix}{DeploymentData.ProjectName}-{service.ServiceName}-redis:6379")); } } if (service.DatabaseType == DatabaseType.Postgres) { serviceEnvVars[service.ServiceName].EnvVars.Add(new EnvVariable("POSTGRES_PASSWORD", Constants.PostgresPassword)); if (environment.IsDebug) { var server = $"host.docker.internal"; var devPostgresPort = DeploymentData.GetInfrastructurePort(5432, Environment.DevEnvironment, service).Split(":")[0]; var connectionString = $"Server={server}; Port={devPostgresPort}; User Id={Constants.PostgresUserId}; Password={Constants.PostgresPassword}; Database={Constants.PostgresDatabase}"; serviceEnvVars[service.ServiceName].EnvVars.Add(new EnvVariable(Constants.DatabaseConfigurationKey, connectionString)); } else { var connectionString = $"Server={environment.EnvironmentPrefix}{DeploymentData.ProjectName}-{service.ServiceName}-postgres; Port=5432; User Id={Constants.PostgresUserId}; Password={Constants.PostgresPassword}; Database={Constants.PostgresDatabase}"; serviceEnvVars[service.ServiceName].EnvVars.Add(new EnvVariable(Constants.DatabaseConfigurationKey, connectionString)); } } } // Logging. if (environment.IsDebug) { envVars.Add(new(Constants.LoggingConfigurationKey, "http://host.docker.internal:9200;admin_password")); } else if (!environment.IsLocal) { envVars.Add(new(Constants.LoggingConfigurationKey, $"http://{Constants.ProjectName}-infra-elasticsearch:9200;admin_password")); } var sb = new StringBuilder(); foreach (var v in envVars.OrderBy(x => x.Name)) { sb.AppendLine($"{v.Name}={v.Value}"); } yield return(new EnvFile($".env.{environment.Value}", sb.ToString())); foreach (var serviceVars in serviceEnvVars.Values) { sb = new StringBuilder(); foreach (var v in serviceVars.EnvVars.OrderBy(x => x.Name)) { sb.AppendLine($"{v.Name}={v.Value}"); } yield return(new EnvFile($".env.{environment.Value}.{serviceVars.Service.ServiceName}", sb.ToString())); } }