Beispiel #1
0
            private async Task <IReadOnlyCollection <DeployCommand.Types.Secret> > GetServiceSecrets(
                ServiceConfiguration service,
                SecretsResponse existingAppSecrets
                )
            {
                if (!service.Secrets.Any())
                {
                    return(new List <DeployCommand.Types.Secret>());
                }

                var secrets = service.Secrets.Select(secret => new DeployCommand.Types.Secret
                {
                    Name = secret
                }).ToList();

                var existingServiceSecretNames = (existingAppSecrets.Services
                                                  .SingleOrDefault(s => s.Name == service.Name)
                                                  ?.Secrets ?? new RepeatedField <SecretsResponse.Types.Secret>())
                                                 .Select(s => s.Name)
                                                 .ToHashSet();

                foreach (var secret in secrets)
                {
                    var secretAlreadyExists = existingServiceSecretNames.Contains(secret.Name);
                    if (args.UpdateSecretValues || !secretAlreadyExists)
                    {
                        await Console.Out.WriteLineAsync(
                            $"Please enter a value for the {secret.Name} secret for service {service.Name}" +
                            (secretAlreadyExists ? " (leave blank to keep existing value unchanged)" : "") +
                            ":"
                            );

                        var value = await Console.In.ReadLineAsync();

                        var isValid = secretAlreadyExists || !string.IsNullOrEmpty(value);
                        while (!isValid)
                        {
                            await Console.Out.WriteLineAsync(
                                $"Value for secret {secret.Name} must not be empty. Please enter a value again: "
                                );

                            value = await Console.In.ReadLineAsync();

                            isValid = !string.IsNullOrEmpty(value);
                        }

                        secret.Value = string.IsNullOrEmpty(value) ? null : value;
                    }
                }

                return(secrets);
            }
        public void GetSecrets_ValidData(string secretString)
        {
            var secretsResponse = new SecretsResponse
            {
                Data = new SecretData {
                    Value = Encoding.UTF8.GetBytes(secretString)
                }
            };

            var secrets = secretsResponse.GetSecrets();

            secrets.Length.Should().Be(5);
            secrets.Should().BeEquivalentTo("secret1", "secret2", "secret3", "secret4", "secret5");
        }
Beispiel #3
0
            private async Task <DeployCommand.Types.Service> ProcessService(
                ServiceConfiguration service,
                string applicationName,
                string configFileDirectory,
                SecretsResponse existingAppSecrets,
                int deploymentVersion
                )
            {
                output.Verbose($"Processing service '{service.Name}' ...");

                string dockerImage         = null;
                var    isPublicDockerImage = false;

                if (service.SpecifiesTemplate)
                {
                    dockerImage = await BuildDockerImageFromTemplate(
                        service,
                        applicationName,
                        configFileDirectory,
                        deploymentVersion
                        );
                }
                else if (service.SpecifiesDockerfile)
                {
                    dockerImage = await BuildDockerImageFromDockerfile(
                        service,
                        applicationName,
                        configFileDirectory,
                        deploymentVersion
                        );
                }
                else if (service.SpecifiesDockerImage)
                {
                    dockerImage         = service.DockerImage;
                    isPublicDockerImage = true;
                }

                output.Verbose($"Successfully processed '{service.Name}'.");

                return(new DeployCommand.Types.Service
                {
                    Name = service.Name,
                    DockerImage = dockerImage,
                    IsPublicDockerImage = isPublicDockerImage,
                    HttpPort = service.HttpPort,
                    TcpPorts = { service.TcpPorts },
                    UdpPorts = { service.UdpPorts },
                    Replicas = service.Replicas,
                    PersistentStoragePath = service.PersistentStoragePath,
                    EnvironmentVariables =
                    {
                        service.EnvironmentVariables.Select(pair => new DeployCommand.Types.EnvironmentVariable
                        {
                            Name = pair.Key,
                            Value = pair.Value,
                        })
                    },
                    Secrets =
                    {
                        await GetServiceSecrets(service, existingAppSecrets),
                    },
                });
            }