{"record":{"id":"8495d002039c73f8","repo":"pulumi/pulumi","slug":"cron-is-required-for-kind-drift","errorCode":null,"errorMessage":"--cron is required for --kind=drift","messagePattern":"--cron is required for --kind=drift","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/pulumi/stack/stack_schedule_new.go","lineNumber":319,"sourceCode":"\nfunc validateScheduleNewArgs(kind string, args stackScheduleNewArgs) error {\n\tswitch kind {\n\tcase scheduleKindRaw:\n\t\tif args.cron == \"\" && args.once == \"\" {\n\t\t\treturn errors.New(\"one of --cron or --once is required for --kind=raw\")\n\t\t}\n\t\tif args.operation == \"\" {\n\t\t\treturn errors.New(\"--operation is required for --kind=raw\")\n\t\t}\n\t\tif args.autoRemediate {\n\t\t\treturn errors.New(\"--auto-remediate is only valid for --kind=drift\")\n\t\t}\n\t\tif args.deleteAfterDestroy {\n\t\t\treturn errors.New(\"--delete-after-destroy is only valid for --kind=ttl\")\n\t\t}\n\tcase scheduleKindDrift:\n\t\tif args.cron == \"\" {\n\t\t\treturn errors.New(\"--cron is required for --kind=drift\")\n\t\t}\n\t\tif args.once != \"\" {\n\t\t\treturn errors.New(\"--once is not valid for --kind=drift; use --cron\")\n\t\t}\n\t\tif args.operation != \"\" {\n\t\t\treturn errors.New(\"--operation is not valid for --kind=drift\")\n\t\t}\n\t\tif args.deleteAfterDestroy {\n\t\t\treturn errors.New(\"--delete-after-destroy is only valid for --kind=ttl\")\n\t\t}\n\tcase scheduleKindTTL:\n\t\tif args.once == \"\" {\n\t\t\treturn errors.New(\"--once is required for --kind=ttl\")\n\t\t}\n\t\tif args.cron != \"\" {\n\t\t\treturn errors.New(\"--cron is not valid for --kind=ttl; use --once\")\n\t\t}\n\t\tif args.operation != \"\" {","sourceCodeStart":301,"sourceCodeEnd":337,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/cmd/pulumi/stack/stack_schedule_new.go#L301-L337","documentation":"A drift-detection schedule runs on a recurring basis, so it requires a cron expression; one-shot timing (--once) is not supported for drift. validateScheduleNewArgs enforces this at pkg/cmd/pulumi/stack/stack_schedule_new.go:318.","triggerScenarios":"Running `pulumi stack schedule new --kind=drift` with neither --cron nor with only --once set.","commonSituations":"Adapting a raw one-shot schedule command to kind=drift while keeping --once; forgetting that drift schedules are always recurring.","solutions":["Add a --cron expression, e.g. --cron \"0 */6 * * *\".","If you need a one-shot run, use --kind=raw --once ... --operation refresh instead."],"exampleFix":"// before\npulumi stack schedule new --kind=drift --once \"2026-09-01T00:00:00Z\"\n// after\npulumi stack schedule new --kind=drift --cron \"0 */6 * * *\"","handlingStrategy":"validation","validationCode":"KIND=drift\nif [ \"$KIND\" = drift ] && [ -z \"$CRON\" ]; then echo \"--cron is required for --kind=drift\"; exit 1; fi","typeGuard":null,"tryCatchPattern":"if ! pulumi stack schedule new --kind=drift --cron \"$CRON\"; then\n  echo \"verify the cron expression and required --cron flag\"\nfi","preventionTips":["Always pass --cron when kind is drift; drift schedules are recurring only.","Validate the cron expression before invoking (e.g. with a cron parser).","Don't reuse raw one-shot (--once) invocations for drift schedules."],"tags":["cli","schedules","flag-validation"],"backgroundTag":"required-flag-missing","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}