Esempio n. 1
0
 /// <summary>
 /// Configures a <see cref="LocalWorkspaceOptions"/> for use with a local backend. Useful for portable
 /// integration testing.
 /// </summary>
 /// <param name="options"></param>
 public static LocalWorkspaceOptions ConfigureForLocalBackend(this LocalWorkspaceOptions options)
 {
     options.EnvironmentVariables ??= new Dictionary <string, string?>();
     options.EnvironmentVariables.Add(EnvironmentVariableKeys.ConfigPassphrase, "secret");
     options.EnvironmentVariables.Add(EnvironmentVariableKeys.ConfigBackendUrl, "file://~");
     return(options);
 }
Esempio n. 2
0
        static async Task <int> DeployStack(
            string stack,
            string name,
            string tier,
            string track,
            string version,
            string image,
            int percentage
            )
        {
            var currentDir = Directory.GetCurrentDirectory();

            Information("Starting with {Name} {Stack} in {CurrentDir}", name, stack, currentDir);

            var customStackPath  = Path.Combine(currentDir, "deploy");
            var usingCustomStack = Directory.Exists(customStackPath);

            if (usingCustomStack)
            {
                Information("Using the custom stack in {Directory}", customStackPath);
            }

            LocalWorkspaceOptions stackArgs = usingCustomStack
                ? new LocalProgramArgs(stack, customStackPath)
                : new InlineProgramArgs(name, stack, PulumiFn.Create <DefaultStack>());

            using var workspace = await LocalWorkspace.CreateAsync(stackArgs);

            var appStack = await WorkspaceStack.CreateOrSelectAsync(stack, workspace);

            await appStack.RefreshAsync();

            Information("Configuring stack {Stack}", stack);

            var appSettings = new AutoDevOpsSettings.AppSettings(name, tier, track, version);

            var deploymentSettings = await Settings.GetDeploymentSettings();

            await appStack.SetJsonConfig("gitlab", Settings.GitLabSettings());

            await appStack.SetJsonConfig("registry", Settings.RegistrySettings(), true);

            await appStack.SetJsonConfig("app", appSettings);

            await appStack.SetJsonConfig("deploy", Settings.DeploySettings(image, percentage));

            await appStack.SetJsonConfig("service", deploymentSettings.Service);

            await appStack.SetJsonConfig("ingress", deploymentSettings.Ingress);

            await appStack.SetJsonConfig("prometheus", deploymentSettings.Prometheus);

            Information("Installing plugins");

            await appStack.Workspace.InstallPluginAsync("kubernetes", "v3.3.0");

            Information("Deploying stack {Stack}", stack);

            var result = await appStack.UpAsync(
                new UpOptions {
                OnStandardOutput = Information,
                OnStandardError  = Error
            }
                );

            Information("Deployment result: {Result}", result.Summary.Message);

            if (!Env.EnvironmentUrl.IsEmpty())
            {
                Information("Environment URL: {EnvironmentUrl}", Env.EnvironmentUrl);
            }

            return(result.Summary.Result == UpdateState.Succeeded ? 0 : -1);
        }