{
  "id": "cronjob-task",
  "title": "Create a CronJob",
  "category": "Workloads & Scheduling",
  "difficulty": "Easy",
  "type": "task",
  "weight": 4,
  "description": "## Create a CronJob\n\nCronJobs create Jobs on a repeating schedule, perfect for maintenance tasks like log rotation, backups, or report generation.\n\n**Your task:**\n\nCreate a CronJob named `date-printer` that:\n- Runs **every minute** (`* * * * *`)\n- Uses `busybox:1.36`\n- Executes: `date`\n- Has `successfulJobsHistoryLimit: 3`",
  "hints": [
    {
      "title": "CronJob manifest",
      "body": "Use `kubectl create cronjob` and then patch with `successfulJobsHistoryLimit: 3`, or create a cronjob with a manifest. The schedule uses standard cron syntax.",
      "command": "cat <<EOF | kubectl apply -f -\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: date-printer\nspec:\n  schedule: \"* * * * *\"\n  successfulJobsHistoryLimit: 3\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          restartPolicy: OnFailure\n          containers:\n          - name: printer\n            image: busybox:1.36\n            command: [\"date\"]\nEOF"
    }
  ],
  "setup_commands": [],
  "validation": {
    "commands": [
      {
        "description": "CronJob 'date-printer' exists",
        "command": "kubectl get cronjob date-printer -o jsonpath='{.metadata.name}'",
        "expected_output": "date-printer",
        "match": "exact"
      },
      {
        "description": "CronJob schedule is every minute",
        "command": "kubectl get cronjob date-printer -o jsonpath='{.spec.schedule}'",
        "expected_output": "* * * * *",
        "match": "exact"
      },
      {
        "description": "CronJob uses busybox:1.36 image",
        "command": "kubectl get cronjob date-printer -o jsonpath='{.spec.jobTemplate.spec.template.spec.containers[0].image}'",
        "expected_output": "busybox:1.36",
        "match": "exact"
      },
      {
        "description": "CronJob has successfulJobsHistoryLimit: 3",
        "command": "kubectl get cronjob date-printer -o jsonpath='{.spec.successfulJobsHistoryLimit}'",
        "expected_output": "3",
        "match": "exact"
      }
    ]
  },
  "default_namespace": "default",
  "teardown_commands": [
    {
      "command": "kubectl delete cronjob date-printer --ignore-not-found"
    }
  ]
}
