Page MenuHomePhabricator

Dot in job name gives non-helpful error in toolforge-jobs
Closed, ResolvedPublic

Description

Similar to T305592, putting a "." in a job name gives an unhelpful error message.

To reproduce on tools-sgebastion-11

As a one-off job:

$ toolforge-jobs run bad.job.name --command /usr/bin/date --image tf-python39
ERROR: unable to create job: "HTTP 422: likely an internal bug. k8s JSON: {\"apiVersion\": \"batch/v1\", \"kind\": \"Job\", \"metadata\": {\"name\": \"bad.job.name\", \"namespace\": \"tool-dyk-tools\", \"labels\": {\"toolforge\": \"tool\", \"app.kubernetes.io/version\": \"1\", \"app.kubernetes.io/managed-by\": \"toolforge-jobs-framework\", \"app.kubernetes.io/created-by\": \"dyk-tools\", \"app.kubernetes.io/component\": \"jobs\", \"app.kubernetes.io/name\": \"bad.job.name\", \"jobs.toolforge.org/filelog\": \"yes\", \"jobs.toolforge.org/emails\": \"none\", \"jobs.toolforge.org/command-new-format\": \"yes\"}}, \"spec\": {\"template\": {\"metadata\": {\"labels\": {\"toolforge\": \"tool\", \"app.kubernetes.io/version\": \"1\", \"app.kubernetes.io/managed-by\": \"toolforge-jobs-framework\", \"app.kubernetes.io/created-by\": \"dyk-tools\", \"app.kubernetes.io/component\": \"jobs\", \"app.kubernetes.io/name\": \"bad.job.name\", \"jobs.toolforge.org/filelog\": \"yes\", \"jobs.toolforge.org/emails\": \"none\", \"jobs.toolforge.org/command-new-format\": \"yes\"}}, \"spec\": {\"restartPolicy\": \"Never\", \"containers\": [{\"name\": \"bad.job.name\", \"image\": \"docker-registry.tools.wmflabs.org/toolforge-python39-sssd-base:latest\", \"workingDir\": \"/data/project/dyk-tools\", \"command\": [\"/bin/sh\", \"-c\", \"--\", \"exec 1>>bad.job.name.out;exec 2>>bad.job.name.err;/usr/bin/date\"], \"resources\": {}}]}}, \"ttlSecondsAfterFinished\": 30, \"backoffLimit\": 0}}"

As a scheduled job:

$ toolforge-jobs run bad.job.name --command /usr/bin/date --image tf-python39 --schedule "1 * * * *"
ERROR: unable to create job: "HTTP 422: likely wrong schedule time. k8s JSON: {\"apiVersion\": \"batch/v1\", \"kind\": \"CronJob\", \"metadata\": {\"name\": \"bad.job.name\", \"namespace\": \"tool-dyk-tools\", \"labels\": {\"toolforge\": \"tool\", \"app.kubernetes.io/version\": \"1\", \"app.kubernetes.io/managed-by\": \"toolforge-jobs-framework\", \"app.kubernetes.io/created-by\": \"dyk-tools\", \"app.kubernetes.io/component\": \"cronjobs\", \"app.kubernetes.io/name\": \"bad.job.name\", \"jobs.toolforge.org/filelog\": \"yes\", \"jobs.toolforge.org/emails\": \"none\", \"jobs.toolforge.org/command-new-format\": \"yes\"}}, \"spec\": {\"schedule\": \"1 * * * *\", \"successfulJobsHistoryLimit\": 0, \"failedJobsHistoryLimit\": 0, \"concurrencyPolicy\": \"Forbid\", \"startingDeadlineSeconds\": 30, \"jobTemplate\": {\"spec\": {\"template\": {\"metadata\": {\"labels\": {\"toolforge\": \"tool\", \"app.kubernetes.io/version\": \"1\", \"app.kubernetes.io/managed-by\": \"toolforge-jobs-framework\", \"app.kubernetes.io/created-by\": \"dyk-tools\", \"app.kubernetes.io/component\": \"cronjobs\", \"app.kubernetes.io/name\": \"bad.job.name\", \"jobs.toolforge.org/filelog\": \"yes\", \"jobs.toolforge.org/emails\": \"none\", \"jobs.toolforge.org/command-new-format\": \"yes\"}}, \"spec\": {\"restartPolicy\": \"Never\", \"containers\": [{\"name\": \"bad.job.name\", \"image\": \"docker-registry.tools.wmflabs.org/toolforge-python39-sssd-base:latest\", \"workingDir\": \"/data/project/dyk-tools\", \"command\": [\"/bin/sh\", \"-c\", \"--\", \"exec 1>>bad.job.name.out;exec 2>>bad.job.name.err;/usr/bin/date\"], \"resources\": {}}]}}, \"ttlSecondsAfterFinished\": 30, \"backoffLimit\": 0}}}}"

In both cases, toolforge-jobs should produce a useful diagnostic such as:

"bad.job.name" is not a valid k8s job name

It would be even better if it could say why it wasn't valid, but even this would be better than what it does now. Likewise for any other invalid characters, not just dot.

Event Timeline

Change 892926 had a related patch set uploaded (by Majavah; author: Majavah):

[cloud/toolforge/jobs-framework-api@main] job: Hardcode container name as 'job'

https://gerrit.wikimedia.org/r/892926

Change 892926 merged by jenkins-bot:

[cloud/toolforge/jobs-framework-api@main] job: Hardcode container name as 'job'

https://gerrit.wikimedia.org/r/892926

taavi claimed this task.
taavi subscribed.

Now works as expected:

[tools.majavah-test@tools-sgebastion-11 ~] $ toolforge-jobs run bad.job.name --command /usr/bin/date --image tf-python39
[tools.majavah-test@tools-sgebastion-11 ~] $ cat bad.job.name.out 
Wed 05 Apr 2023 03:17:40 PM UTC