openqa-clone-job(1)

πŸ’– openqa-clone-job(1) πŸ’–

okay so bestie, welcome to the openQA Documentation page for openqa-clone-job(1) ✨ β€” the little script that lets you copy a whole openQA job (and, like, its entire friend group) into a brand new job. it's giving ctrl+c ctrl+v but make it infrastructure. πŸ‘‘


🌸 NAME 🌸

openqa-clone-job β€” creates a new job based on an existing job 🫢


✨ SYNOPSIS ✨

Clones a job from the local or a remote openQA instance. Downloads all assets associated with the job (unless --skip-download is specified). Optionally settings can be modified. πŸ’…

openqa-clone-job [OPTIONS] JOBREF [KEY=[VALUE] ...]

# clones job 42 (and any existing parents) from "openqa.opensuse.org" to the local openQA instance
# note: If job 42 is a parallel parent (e.g. a "server" job), its parallel children (e.g. "client"
#       jobs) will be cloned as well.
openqa-clone-job https://openqa.opensuse.org/t42
openqa-clone-job --from https://openqa.opensuse.org/tests/42
openqa-clone-job --from https://openqa.opensuse.org 42

# clones job 42 (and any existing parents) from "openqa.opensuse.org" to the openQA instance "openqa.example.com"
openqa-clone-job --skip-download --from https://openqa.opensuse.org --host openqa.example.com 42

# clones job 42 (and any existing parents) within "openqa.opensuse.org" modifying some job settings
openqa-clone-job --within-instance https://openqa.opensuse.org/t42 MAKETESTSNAPSHOTS=1 TEST+=:PR-123 FOOBAR=

# clones job 42 including all of its direct children but excluding its chained parents
openqa-clone-job --skip-chained-deps --clone-children https://openqa.opensuse.org/tests/42

# clones the cluster attached to job 42 modifying job-specific settings to
# test without interfering with production jobs
openqa-clone-job --skip-chained-deps --within-instance https://openqa.opensuse.org/tests/42 _GROUP=0 WORKER_CLASS:client=,worker2 {TEST,BUILD}+=-my-test-boo123

πŸ¦‹ DESCRIPTION πŸ¦‹

Call with either a full URL pointing to a test job to clone from or one of both parameters --from or --within-instance. The job ID can be specified as part of the URL or as its own parameter. πŸŽ€

API key and secret are read from client.conf if not specified via CLI arguments or environment variables OPENQA_API_KEY and OPENQA_API_SECRET. The config file is checked for under $OPENQA_CONFIG, ~/.config/openqa and /etc/openqa in this order. It must look like this:

[openqa.opensuse.org]
key = 45ABCEB4562ACB04
secret = 4BA0003086C4CB95
[another.host]
key = D7345DA7B9D86B3B
secret = A98CDBA9C8DB87BD

Any parent jobs (chained or parallel) are also cloned unless --skip-deps or --skip-chained-deps is specified. If --skip-chained-deps is specified published assets generated by parent jobs are downloaded to be directly used instead of generated. 🌈

Keep in mind that by default any additionally specified job settings are NOT added to the also cloned parent jobs. Specify --parental-inheritance if this is wanted. It is also possible to specify the job a setting should be added to explicitly, e.g. WORKER_CLASS:create_hpc=special-worker. In this example the setting WORKER_CLASS will only be set to the specified value for jobs where the setting TEST equals create_hpc. For this keep in mind that the parameter parsing is executed in the order specified so changing the setting TEST should come after job-specific settings. 🧠✨

note note note: the child job is the one which has the START_AFTER_TEST or PARALLEL_WITH setting, and the parent job is the one mentioned by that setting. iykyk πŸ’…
BIG warning bestie: cloning directly chained dependencies (START_DIRECTLY_AFTER_TEST) is NOT supported. like, at all. don't try it. 😭

πŸ’… OPTIONS πŸ’…

  • --host HOST β€” Specifies the hostname of the target openQA instance (defaults to localhost).

Assets are still always downloaded to the local machine. When specifying a remote host make sure the assets are already there and use --skip-download. 🫢

  • --from HOST β€” Specifies the hostname of the openQA instance to clone the job from (deduced from JOBREF if it is a URL).
  • --dir DIR β€” Specifies the directory to store test assets (defaults to $OPENQA_SHAREDIR/factory).
  • --skip-checks β€” Deprecated option. The logic was inverted, so currently the check is skipped by default. If you were using it, just remove it and the behavior will remain the same. πŸ’€ (fr, just delete it from your script)
  • --check-repos β€” Enables additional checks for availability of maintenance update repositories (SUSE specific check).
  • --skip-deps β€” Do NOT clone parent jobs (which is done by default).
  • --skip-chained-deps β€” Do NOT clone chained parent jobs (jobs specified via START_AFTER_TEST).

This makes the job use the downloaded HDD image instead of running the generator job again which is of course only possible if --host is the local machine. πŸ–₯️

  • --skip-download β€” Do NOT download assets. You need to ensure all required assets are provided yourself. (you got this, bestie 🫑)
  • --ignore-missing-assets β€” Cloning a job will not fail if an asset is missing.
  • --clone-children β€” Clone all direct child jobs as well. By default, only parallel child jobs are cloned. πŸ‘Ά
  • --max-depth β€” Specifies the max depth for cloning children. By default, only direct children are cloned. Use 0 to denote infinity. ♾️
  • --within-instance HOST β€” A shortcut for --skip-download --from HOST --host HOST to clone a job within a local or remote instance.
  • --repeat N β€” Do the same clone operation N times; this can be useful for Statistical investigation. Example:
openqa-clone-job --skip-chained-deps --repeat=50 --within-instance \
https://openqa.opensuse.org 123456

Will create 50 clones of the same job. πŸ”

  • --retry N β€” Retries up to N times with exponential backoff on transient download errors. The default number of retries is 5. Can be set to 0 to disable retrying.
  • --show-progress β€” Displays a progress bar when downloading assets. πŸ“Š (the little bar goes brrr, we love to see it)
  • --parental-inheritance β€” Provides parental job with settings specified via command line (they go to child job by default).
  • --export-command β€” Prints an openqa-cli command to create the jobs instead of creating them directly. This is useful to customize the API call or to review it before submitting. ✨
  • --badge β€” Instead of the normal plain text scenario name and URL outputs a markdown list entry of labeled badges and links. πŸŽ€
  • --reproduce β€” Ensure the cloned jobs use the same version of the test code and needles as the original jobs.
  • --apikey <value> β€” Specifies the public key needed for API authentication. Overrides config file setting and environment variable OPENQA_API_KEY. Use is discouraged due to risk of leaking credentials. πŸ™ˆ
  • --apisecret <value> β€” Specifies the secret key needed for API authentication. Overrides config file setting and environment variable OPENQA_API_SECRET. Use is discouraged due to risk of leaking credentials. πŸ™ˆ
  • --verbose, -v β€” Increases verbosity. πŸ—£οΈ
  • --help, -h β€” Prints help. πŸ†˜

and that's the whole page, bestie!! you now officially know how to clone jobs like a main character. βœ¨πŸ‘‘

this masterpiece of documentation was delivered to you by openqa-clone-job(1) from the openQA gang β€” via perl v5.42.3 dated 2026-09-10. stay slaying, stay cloning, and remember: skip your downloads responsibly. πŸ’–πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from