Ejemplo n.º 1
0
        public async Task Request()
        {
            var project = await Repository.Projects.FindByNameOrIdOrFail(ProjectNameOrId).ConfigureAwait(false);

            var runbook = await Repository.Runbooks.FindByNameOrIdOrFail(RunbookNameOrId, project).ConfigureAwait(false);

            var environments = await Repository.Environments.FindByNamesOrIdsOrFail(EnvironmentNamesOrIds).ConfigureAwait(false);

            var tenants = await RetrieveTenants();

            LogScheduledDeployment();

            var payload = new RunbookRunParameters
            {
                RunbookId               = runbook.Id,
                ProjectId               = project.Id,
                EnvironmentIds          = environments.Select(env => env.Id).ToArray(),
                RunbookSnapshotNameOrId = Snapshot,
                UseDefaultSnapshot      = UseDefaultSnapshot,
                ForcePackageDownload    = ForcePackageDownload,
                SpecificMachineIds      = IncludedMachineIds.ToArray(),
                ExcludedMachineIds      = ExcludedMachineIds.ToArray(),
                SkipActions             = StepNamesToSkip.ToArray(),
                UseGuidedFailure        = GuidedFailure,
                TenantIds               = tenants,
                TenantTagNames          = TenantTagNames.ToArray(),
                QueueTime               = RunAt,
                QueueTimeExpiry         = NoRunAfter,
                FormValues              = Variables
            };

            RunbookRuns = await Repository.Runbooks.Run(runbook, payload);

            if (RunbookRuns.Any() && WaitForRun)
            {
                var waiter = executionResourceWaiterFactory(Repository, ServerBaseUrl);
                await waiter.WaitForRunbookRunToComplete(
                    RunbookRuns,
                    project,
                    Progress,
                    NoRawLog,
                    RawLogFile,
                    CancelOnTimeout,
                    RunCheckSleepCycle,
                    RunTimeout)
                .ConfigureAwait(false);
            }
        }