askCommonAdvancedOptions prompts for advanced options that are common across all runbook run scenarios. This includes schedule time, guided failure mode, and package download options. It does NOT handle excluded steps or run targets as those are runbook-specific.
( asker question.Asker, now func() time.Time, scheduledStartTime *string, scheduledExpiryTime *string, guidedFailureMode *string, forcePackageDownload *bool, isScheduledStartTimeSpecified bool, isGuidedFailureModeSpecified bool, isForcePackageDownloadSpecified bool, )
| 598 | // This includes schedule time, guided failure mode, and package download options. |
| 599 | // It does NOT handle excluded steps or run targets as those are runbook-specific. |
| 600 | func askCommonAdvancedOptions( |
| 601 | asker question.Asker, |
| 602 | now func() time.Time, |
| 603 | scheduledStartTime *string, |
| 604 | scheduledExpiryTime *string, |
| 605 | guidedFailureMode *string, |
| 606 | forcePackageDownload *bool, |
| 607 | isScheduledStartTimeSpecified bool, |
| 608 | isGuidedFailureModeSpecified bool, |
| 609 | isForcePackageDownloadSpecified bool, |
| 610 | ) error { |
| 611 | if !isScheduledStartTimeSpecified { |
| 612 | referenceNow := now() |
| 613 | maxSchedStartTime := referenceNow.Add(30 * 24 * time.Hour) |
| 614 | |
| 615 | var answer surveyext.DatePickerAnswer |
| 616 | err := asker(&surveyext.DatePicker{ |
| 617 | Message: "Scheduled start time", |
| 618 | Help: "Enter the date and time that this runbook should run. A value less than 1 minute in the future means 'now'", |
| 619 | Default: referenceNow, |
| 620 | Min: referenceNow, |
| 621 | Max: maxSchedStartTime, |
| 622 | OverrideNow: referenceNow, |
| 623 | AnswerFormatter: executionscommon.ScheduledStartTimeAnswerFormatter, |
| 624 | }, &answer) |
| 625 | if err != nil { |
| 626 | return err |
| 627 | } |
| 628 | schedTime := answer.Time |
| 629 | if schedTime.After(referenceNow.Add(1 * time.Minute)) { |
| 630 | *scheduledStartTime = schedTime.Format(time.RFC3339) |
| 631 | |
| 632 | startPlusFiveMin := schedTime.Add(5 * time.Minute) |
| 633 | err = asker(&surveyext.DatePicker{ |
| 634 | Message: "Scheduled expiry time", |
| 635 | Help: "At the start time, the run will be queued. If it does not begin before 'expiry' time, it will be cancelled. Minimum of 5 minutes after start time", |
| 636 | Default: startPlusFiveMin, |
| 637 | Min: startPlusFiveMin, |
| 638 | Max: maxSchedStartTime.Add(24 * time.Hour), |
| 639 | OverrideNow: referenceNow, |
| 640 | }, &answer) |
| 641 | if err != nil { |
| 642 | return err |
| 643 | } |
| 644 | *scheduledExpiryTime = answer.Time.Format(time.RFC3339) |
| 645 | } |
| 646 | } |
| 647 | |
| 648 | if !isGuidedFailureModeSpecified { |
| 649 | gfm, err := executionscommon.AskGuidedFailureMode(asker) |
| 650 | if err != nil { |
| 651 | return err |
| 652 | } |
| 653 | *guidedFailureMode = gfm |
| 654 | } |
| 655 | |
| 656 | if !isForcePackageDownloadSpecified { |
| 657 | fpd, err := executionscommon.AskPackageDownload(asker) |
no test coverage detected