From 1e5e58532bc8b4acf314c2b2f62631e89d495b16 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Mon, 26 Apr 2021 16:48:23 -0700 Subject: [PATCH] New lorax documentation - 34.10 --- docs/composer-cli.rst | 542 - docs/composer.cli.rst | 101 - docs/composer.rst | 37 - docs/conf.py | 1 - docs/html/.buildinfo | 2 +- docs/html/.doctrees/composer-cli.doctree | Bin 117558 -> 0 bytes docs/html/.doctrees/composer.cli.doctree | Bin 427593 -> 0 bytes docs/html/.doctrees/composer.doctree | Bin 66251 -> 0 bytes docs/html/.doctrees/environment.pickle | Bin 2450517 -> 1983815 bytes docs/html/.doctrees/index.doctree | Bin 8319 -> 8645 bytes docs/html/.doctrees/lifted.doctree | Bin 3715 -> 0 bytes docs/html/.doctrees/livemedia-creator.doctree | Bin 170060 -> 170310 bytes docs/html/.doctrees/lorax.doctree | Bin 81120 -> 81120 bytes docs/html/.doctrees/modules.doctree | Bin 2554 -> 2536 bytes docs/html/.doctrees/pylorax.api.doctree | Bin 1004255 -> 0 bytes docs/html/.doctrees/pylorax.doctree | Bin 607937 -> 577219 bytes docs/html/README | 5 - docs/html/_modules/composer/cli.html | 258 - .../_modules/composer/cli/blueprints.html | 778 -- docs/html/_modules/composer/cli/cmdline.html | 250 - docs/html/_modules/composer/cli/compose.html | 891 -- docs/html/_modules/composer/cli/modules.html | 248 - docs/html/_modules/composer/cli/projects.html | 310 - .../html/_modules/composer/cli/providers.html | 522 - docs/html/_modules/composer/cli/sources.html | 352 - docs/html/_modules/composer/cli/status.html | 256 - docs/html/_modules/composer/cli/upload.html | 477 - .../html/_modules/composer/cli/utilities.html | 323 - docs/html/_modules/composer/http_client.html | 458 - docs/html/_modules/composer/unix_socket.html | 261 - docs/html/_modules/index.html | 86 +- docs/html/_modules/lifted/config.html | 233 - docs/html/_modules/lifted/providers.html | 443 - docs/html/_modules/lifted/queue.html | 467 - docs/html/_modules/lifted/upload.html | 410 - docs/html/_modules/pylorax.html | 49 +- docs/html/_modules/pylorax/api/bisect.html | 249 - .../_modules/pylorax/api/checkparams.html | 244 - docs/html/_modules/pylorax/api/cmdline.html | 263 - docs/html/_modules/pylorax/api/compose.html | 1467 --- docs/html/_modules/pylorax/api/config.html | 340 - .../_modules/pylorax/api/crossdomain.html | 264 - docs/html/_modules/pylorax/api/dnfbase.html | 386 - .../_modules/pylorax/api/flask_blueprint.html | 254 - docs/html/_modules/pylorax/api/gitrpm.html | 422 - docs/html/_modules/pylorax/api/projects.html | 897 -- docs/html/_modules/pylorax/api/queue.html | 1063 -- docs/html/_modules/pylorax/api/recipes.html | 1476 --- docs/html/_modules/pylorax/api/server.html | 303 - docs/html/_modules/pylorax/api/timestamp.html | 251 - docs/html/_modules/pylorax/api/toml.html | 242 - docs/html/_modules/pylorax/api/utils.html | 249 - docs/html/_modules/pylorax/api/v0.html | 2197 ---- docs/html/_modules/pylorax/api/v1.html | 1242 -- docs/html/_modules/pylorax/api/workspace.html | 329 - docs/html/_modules/pylorax/base.html | 47 +- docs/html/_modules/pylorax/buildstamp.html | 47 +- docs/html/_modules/pylorax/cmdline.html | 49 +- docs/html/_modules/pylorax/creator.html | 51 +- docs/html/_modules/pylorax/decorators.html | 47 +- docs/html/_modules/pylorax/discinfo.html | 47 +- docs/html/_modules/pylorax/dnfbase.html | 49 +- docs/html/_modules/pylorax/dnfhelper.html | 47 +- docs/html/_modules/pylorax/executils.html | 99 +- docs/html/_modules/pylorax/imgutils.html | 68 +- docs/html/_modules/pylorax/installer.html | 64 +- docs/html/_modules/pylorax/ltmpl.html | 49 +- docs/html/_modules/pylorax/monitor.html | 50 +- docs/html/_modules/pylorax/mount.html | 47 +- docs/html/_modules/pylorax/sysutils.html | 51 +- docs/html/_modules/pylorax/treebuilder.html | 47 +- docs/html/_modules/pylorax/treeinfo.html | 47 +- docs/html/_sources/composer-cli.rst.txt | 542 - docs/html/_sources/composer.cli.rst.txt | 101 - docs/html/_sources/composer.rst.txt | 37 - docs/html/_sources/lifted.rst.txt | 46 - docs/html/_sources/modules.rst.txt | 1 - docs/html/_sources/pylorax.api.rst.txt | 173 - docs/html/_static/ajax-loader.gif | Bin 673 -> 0 bytes docs/html/_static/basic.css | 3 +- docs/html/_static/comment-bright.png | Bin 756 -> 0 bytes docs/html/_static/comment-close.png | Bin 829 -> 0 bytes docs/html/_static/comment.png | Bin 641 -> 0 bytes docs/html/_static/css/badge_only.css | 2 +- docs/html/_static/css/theme.css | 6 +- docs/html/_static/doctools.js | 14 +- docs/html/_static/documentation_options.js | 2 +- docs/html/_static/down-pressed.png | Bin 222 -> 0 bytes docs/html/_static/down.png | Bin 202 -> 0 bytes docs/html/_static/fonts/Inconsolata-Bold.ttf | Bin 108360 -> 0 bytes .../_static/fonts/Inconsolata-Regular.ttf | Bin 95960 -> 0 bytes docs/html/_static/fonts/Lato-Bold.ttf | Bin 657188 -> 0 bytes docs/html/_static/fonts/Lato-BoldItalic.ttf | Bin 699008 -> 0 bytes docs/html/_static/fonts/Lato-Italic.ttf | Bin 723544 -> 0 bytes docs/html/_static/fonts/Lato-Regular.ttf | Bin 657212 -> 0 bytes docs/html/_static/fonts/Lato/lato-bold.eot | Bin 256056 -> 0 bytes docs/html/_static/fonts/Lato/lato-bold.ttf | Bin 657188 -> 0 bytes docs/html/_static/fonts/Lato/lato-bold.woff | Bin 309728 -> 0 bytes docs/html/_static/fonts/Lato/lato-bold.woff2 | Bin 184912 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.eot | Bin 266158 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.ttf | Bin 699008 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.woff | Bin 323344 -> 0 bytes .../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 193308 -> 0 bytes docs/html/_static/fonts/Lato/lato-italic.eot | Bin 268604 -> 0 bytes docs/html/_static/fonts/Lato/lato-italic.ttf | Bin 723544 -> 0 bytes docs/html/_static/fonts/Lato/lato-italic.woff | Bin 328412 -> 0 bytes .../html/_static/fonts/Lato/lato-italic.woff2 | Bin 195704 -> 0 bytes docs/html/_static/fonts/Lato/lato-regular.eot | Bin 253461 -> 0 bytes docs/html/_static/fonts/Lato/lato-regular.ttf | Bin 657212 -> 0 bytes .../html/_static/fonts/Lato/lato-regular.woff | Bin 309192 -> 0 bytes .../_static/fonts/Lato/lato-regular.woff2 | Bin 182708 -> 0 bytes docs/html/_static/fonts/RobotoSlab-Bold.ttf | Bin 170616 -> 0 bytes .../html/_static/fonts/RobotoSlab-Regular.ttf | Bin 169064 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 79520 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 170616 -> 0 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 87624 -> 0 bytes .../RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 67312 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.eot | Bin 78331 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.ttf | Bin 169064 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.woff | Bin 86288 -> 0 bytes .../RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 66444 -> 0 bytes .../_static/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../_static/fonts/fontawesome-webfont.svg | 2671 ---- .../_static/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../_static/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../_static/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes docs/html/_static/jquery-3.2.1.js | 10253 --------------- docs/html/_static/jquery-3.4.1.js | 10598 ---------------- docs/html/_static/js/badge_only.js | 1 + docs/html/_static/js/modernizr.min.js | 4 - docs/html/_static/js/theme.js | 4 +- docs/html/_static/language_data.js | 6 +- docs/html/_static/pygments.css | 7 +- docs/html/_static/searchtools.js | 36 +- docs/html/_static/underscore-1.12.0.js | 2027 +++ docs/html/_static/underscore-1.3.1.js | 999 -- docs/html/_static/underscore.js | 37 +- docs/html/_static/up-pressed.png | Bin 214 -> 0 bytes docs/html/_static/up.png | Bin 203 -> 0 bytes docs/html/_static/websupport.js | 808 -- docs/html/composer-cli.html | 863 -- docs/html/composer.cli.html | 1503 --- docs/html/composer.html | 504 - docs/html/genindex.html | 370 +- docs/html/index.html | 56 +- docs/html/intro.html | 60 +- docs/html/lifted.html | 222 - docs/html/livemedia-creator.html | 97 +- docs/html/lorax-composer.html | 51 +- docs/html/lorax.html | 78 +- docs/html/mkksiso.html | 62 +- docs/html/modules.html | 87 +- docs/html/objects.inv | Bin 2720 -> 2044 bytes docs/html/product-images.html | 60 +- docs/html/py-modindex.html | 165 +- docs/html/pylorax.api.html | 5206 -------- docs/html/pylorax.html | 638 +- docs/html/search.html | 53 +- docs/html/searchindex.js | 2 +- docs/man/.doctrees/environment.pickle | Bin 2450516 -> 1983814 bytes docs/man/.doctrees/index.doctree | Bin 8319 -> 8645 bytes docs/man/.doctrees/livemedia-creator.doctree | Bin 170060 -> 170310 bytes docs/man/.doctrees/lorax.doctree | Bin 81120 -> 81120 bytes docs/man/.doctrees/modules.doctree | Bin 2554 -> 2536 bytes docs/man/.doctrees/pylorax.doctree | Bin 607937 -> 577219 bytes docs/man/livemedia-creator.1 | 37 +- docs/man/lorax.1 | 20 +- docs/man/mkksiso.1 | 2 +- docs/modules.rst | 1 - 169 files changed, 3406 insertions(+), 55913 deletions(-) delete mode 100644 docs/composer-cli.rst delete mode 100644 docs/composer.cli.rst delete mode 100644 docs/composer.rst delete mode 100644 docs/html/.doctrees/composer-cli.doctree delete mode 100644 docs/html/.doctrees/composer.cli.doctree delete mode 100644 docs/html/.doctrees/composer.doctree delete mode 100644 docs/html/.doctrees/lifted.doctree delete mode 100644 docs/html/.doctrees/pylorax.api.doctree delete mode 100644 docs/html/README delete mode 100644 docs/html/_modules/composer/cli.html delete mode 100644 docs/html/_modules/composer/cli/blueprints.html delete mode 100644 docs/html/_modules/composer/cli/cmdline.html delete mode 100644 docs/html/_modules/composer/cli/compose.html delete mode 100644 docs/html/_modules/composer/cli/modules.html delete mode 100644 docs/html/_modules/composer/cli/projects.html delete mode 100644 docs/html/_modules/composer/cli/providers.html delete mode 100644 docs/html/_modules/composer/cli/sources.html delete mode 100644 docs/html/_modules/composer/cli/status.html delete mode 100644 docs/html/_modules/composer/cli/upload.html delete mode 100644 docs/html/_modules/composer/cli/utilities.html delete mode 100644 docs/html/_modules/composer/http_client.html delete mode 100644 docs/html/_modules/composer/unix_socket.html delete mode 100644 docs/html/_modules/lifted/config.html delete mode 100644 docs/html/_modules/lifted/providers.html delete mode 100644 docs/html/_modules/lifted/queue.html delete mode 100644 docs/html/_modules/lifted/upload.html delete mode 100644 docs/html/_modules/pylorax/api/bisect.html delete mode 100644 docs/html/_modules/pylorax/api/checkparams.html delete mode 100644 docs/html/_modules/pylorax/api/cmdline.html delete mode 100644 docs/html/_modules/pylorax/api/compose.html delete mode 100644 docs/html/_modules/pylorax/api/config.html delete mode 100644 docs/html/_modules/pylorax/api/crossdomain.html delete mode 100644 docs/html/_modules/pylorax/api/dnfbase.html delete mode 100644 docs/html/_modules/pylorax/api/flask_blueprint.html delete mode 100644 docs/html/_modules/pylorax/api/gitrpm.html delete mode 100644 docs/html/_modules/pylorax/api/projects.html delete mode 100644 docs/html/_modules/pylorax/api/queue.html delete mode 100644 docs/html/_modules/pylorax/api/recipes.html delete mode 100644 docs/html/_modules/pylorax/api/server.html delete mode 100644 docs/html/_modules/pylorax/api/timestamp.html delete mode 100644 docs/html/_modules/pylorax/api/toml.html delete mode 100644 docs/html/_modules/pylorax/api/utils.html delete mode 100644 docs/html/_modules/pylorax/api/v0.html delete mode 100644 docs/html/_modules/pylorax/api/v1.html delete mode 100644 docs/html/_modules/pylorax/api/workspace.html delete mode 100644 docs/html/_sources/composer-cli.rst.txt delete mode 100644 docs/html/_sources/composer.cli.rst.txt delete mode 100644 docs/html/_sources/composer.rst.txt delete mode 100644 docs/html/_sources/lifted.rst.txt delete mode 100644 docs/html/_sources/pylorax.api.rst.txt delete mode 100644 docs/html/_static/ajax-loader.gif delete mode 100644 docs/html/_static/comment-bright.png delete mode 100644 docs/html/_static/comment-close.png delete mode 100644 docs/html/_static/comment.png delete mode 100644 docs/html/_static/down-pressed.png delete mode 100644 docs/html/_static/down.png delete mode 100644 docs/html/_static/fonts/Inconsolata-Bold.ttf delete mode 100644 docs/html/_static/fonts/Inconsolata-Regular.ttf delete mode 100644 docs/html/_static/fonts/Lato-Bold.ttf delete mode 100644 docs/html/_static/fonts/Lato-BoldItalic.ttf delete mode 100644 docs/html/_static/fonts/Lato-Italic.ttf delete mode 100644 docs/html/_static/fonts/Lato-Regular.ttf delete mode 100644 docs/html/_static/fonts/Lato/lato-bold.eot delete mode 100644 docs/html/_static/fonts/Lato/lato-bold.ttf delete mode 100644 docs/html/_static/fonts/Lato/lato-bold.woff delete mode 100644 docs/html/_static/fonts/Lato/lato-bold.woff2 delete mode 100644 docs/html/_static/fonts/Lato/lato-bolditalic.eot delete mode 100644 docs/html/_static/fonts/Lato/lato-bolditalic.ttf delete mode 100644 docs/html/_static/fonts/Lato/lato-bolditalic.woff delete mode 100644 docs/html/_static/fonts/Lato/lato-bolditalic.woff2 delete mode 100644 docs/html/_static/fonts/Lato/lato-italic.eot delete mode 100644 docs/html/_static/fonts/Lato/lato-italic.ttf delete mode 100644 docs/html/_static/fonts/Lato/lato-italic.woff delete mode 100644 docs/html/_static/fonts/Lato/lato-italic.woff2 delete mode 100644 docs/html/_static/fonts/Lato/lato-regular.eot delete mode 100644 docs/html/_static/fonts/Lato/lato-regular.ttf delete mode 100644 docs/html/_static/fonts/Lato/lato-regular.woff delete mode 100644 docs/html/_static/fonts/Lato/lato-regular.woff2 delete mode 100644 docs/html/_static/fonts/RobotoSlab-Bold.ttf delete mode 100644 docs/html/_static/fonts/RobotoSlab-Regular.ttf delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff delete mode 100644 docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 delete mode 100644 docs/html/_static/fonts/fontawesome-webfont.eot delete mode 100644 docs/html/_static/fonts/fontawesome-webfont.svg delete mode 100644 docs/html/_static/fonts/fontawesome-webfont.ttf delete mode 100644 docs/html/_static/fonts/fontawesome-webfont.woff delete mode 100644 docs/html/_static/fonts/fontawesome-webfont.woff2 delete mode 100644 docs/html/_static/jquery-3.2.1.js delete mode 100644 docs/html/_static/jquery-3.4.1.js create mode 100644 docs/html/_static/js/badge_only.js delete mode 100644 docs/html/_static/js/modernizr.min.js create mode 100644 docs/html/_static/underscore-1.12.0.js delete mode 100644 docs/html/_static/underscore-1.3.1.js delete mode 100644 docs/html/_static/up-pressed.png delete mode 100644 docs/html/_static/up.png delete mode 100644 docs/html/_static/websupport.js delete mode 100644 docs/html/composer-cli.html delete mode 100644 docs/html/composer.cli.html delete mode 100644 docs/html/composer.html delete mode 100644 docs/html/lifted.html delete mode 100644 docs/html/pylorax.api.html diff --git a/docs/composer-cli.rst b/docs/composer-cli.rst deleted file mode 100644 index 9d62f6a6..00000000 --- a/docs/composer-cli.rst +++ /dev/null @@ -1,542 +0,0 @@ -composer-cli -============ - -:Authors: - Brian C. Lane - -``composer-cli`` is an interactive tool for use with a WELDR API server, -managing blueprints, exploring available packages, and building new images. As -of Fedora 34, `osbuild-composer ` is the recommended -server. - -It requires the server to be installed on the local system, and the user -running it needs to be a member of the ``weldr`` group. - -composer-cli cmdline arguments ------------------------------- - -.. argparse:: - :ref: composer.cli.cmdline.composer_cli_parser - :prog: composer-cli - -Edit a Blueprint ----------------- - -Start out by listing the available blueprints using ``composer-cli blueprints -list``, pick one and save it to the local directory by running ``composer-cli -blueprints save http-server``. - -Edit the file (it will be saved with a .toml extension) and change the -description, add a package or module to it. Send it back to the server by -running ``composer-cli blueprints push http-server.toml``. You can verify that it was -saved by viewing the changelog - ``composer-cli blueprints changes http-server``. - -See the `Example Blueprint`_ for an example. - -Build an image ----------------- - -Build a ``qcow2`` disk image from this blueprint by running ``composer-cli -compose start http-server qcow2``. It will print a UUID that you can use to -keep track of the build. You can also cancel the build if needed. - -The available types of images is displayed by ``composer-cli compose types``. -Currently this consists of: alibaba, ami, ext4-filesystem, google, hyper-v, -live-iso, openstack, partitioned-disk, qcow2, tar, vhd, vmdk - -You can optionally start an upload of the finished image, see `Image Uploads`_ for -more information. - - -Monitor the build status ------------------------- - -Monitor it using ``composer-cli compose status``, which will show the status of -all the builds on the system. You can view the end of the anaconda build logs -once it is in the ``RUNNING`` state using ``composer-cli compose log UUID`` -where UUID is the UUID returned by the start command. - -Once the build is in the ``FINISHED`` state you can download the image. - -Download the image ------------------- - -Downloading the final image is done with ``composer-cli compose image UUID`` and it will -save the qcow2 image as ``UUID-disk.qcow2`` which you can then use to boot a VM like this:: - - qemu-kvm --name test-image -m 1024 -hda ./UUID-disk.qcow2 - - -Image Uploads -------------- - -``composer-cli`` can upload the images to a number of services, including AWS, -OpenStack, and vSphere. The upload can be started when the build is finished, -by using ``composer-cli compose start ...`` or an existing image can be uploaded -with ``composer-cli upload start ...``. In order to access the service you need -to pass authentication details to composer-cli using a TOML file, or reference -a previously saved profile. - -.. note:: - With ``osbuild-composer`` you can only specify upload targets during - the compose process. - - -Providers ---------- - -Providers are the services providers with Ansible playbook support under -``/usr/share/lorax/lifted/providers/``, you will need to gather some provider -specific information in order to authenticate with it. You can view the -required fields using ``composer-cli providers template ``, eg. for AWS -you would run:: - - composer-cli upload template aws - -The output looks like this:: - - provider = "aws" - - [settings] - aws_access_key = "AWS Access Key" - aws_bucket = "AWS Bucket" - aws_region = "AWS Region" - aws_secret_key = "AWS Secret Key" - -Save this into an ``aws-credentials.toml`` file and use it when running ``start``. - -AWS -^^^ - -The access key and secret key can be created by going to the -``IAM->Users->Security Credentials`` section and creating a new access key. The -secret key will only be shown when it is first created so make sure to record -it in a secure place. The region should be the region that you want to use the -AMI in, and the bucket can be an existing bucket, or a new one, following the -normal AWS bucket naming rules. It will be created if it doesn't already exist. - -When uploading the image it is first uploaded to the s3 bucket, and then -converted to an AMI. If the conversion is successful the s3 object will be -deleted. If it fails, re-trying after correcting the problem will re-use the -object if you have not deleted it in the meantime, speeding up the process. - - -Profiles --------- - -Profiles store the authentication settings associated with a specific provider. -Providers can have multiple profiles, as long as their names are unique. For -example, you may have one profile for testing and another for production -uploads. - -Profiles are created by pushing the provider settings template to the server using -``composer-cli providers push `` where ``PROFILE.TOML`` is the same as the -provider template, but with the addition of a ``profile`` field. For example, an AWS -profile named ``test-uploads`` would look like this:: - - provider = "aws" - profile = "test-uploads" - - [settings] - aws_access_key = "AWS Access Key" - aws_bucket = "AWS Bucket" - aws_region = "AWS Region" - aws_secret_key = "AWS Secret Key" - -You can view the profile by using ``composer-cli providers aws test-uploads``. - - -Build an image and upload results ---------------------------------- - -If you have a profile named ``test-uploads``:: - - composer-cli compose start example-http-server ami "http image" aws test-uploads - -Or if you have the settings stored in a TOML file:: - - composer-cli compose start example-http-server ami "http image" aws-settings.toml - -It will return the UUID of the image build, and the UUID of the upload. Once -the build has finished successfully it will start the upload process, which you -can monitor with ``composer-cli upload info `` - -You can also view the upload logs from the Ansible playbook with:: - - ``composer-cli upload log `` - -The type of the image must match the type supported by the provider. - - -Upload an existing image ------------------------- - -You can upload previously built images, as long as they are in the ``FINISHED`` state, using ``composer-cli upload start ...```. If you have a profile named ``test-uploads``:: - - composer-cli upload start "http-image" aws test-uploads - -Or if you have the settings stored in a TOML file:: - - composer-cli upload start "http-image" aws-settings.toml - -This will output the UUID of the upload, which can then be used to monitor the status in the same way -described above. - - -Debugging ---------- - -There are a couple of arguments that can be helpful when debugging problems. -These are only meant for debugging and should not be used to script access to -the API. If you need to do that you can communicate with it directly in the -language of your choice. - -``--json`` will return the server's response as a nicely formatted json output -instead of printing what the command would usually print. - -``--test=1`` will cause a compose start to start creating an image, and then -end with a failed state. - -``--test=2`` will cause a compose to start and then end with a finished state, -without actually composing anything. - - -Blueprint Reference -------------------- - -Blueprints are simple text files in `TOML `_ format that describe -which packages, and what versions, to install into the image. They can also define a limited set -of customizations to make to the final image. - -A basic blueprint looks like this:: - - name = "base" - description = "A base system with bash" - version = "0.0.1" - - [[packages]] - name = "bash" - version = "4.4.*" - -The ``name`` field is the name of the blueprint. It can contain spaces, but they will be converted to ``-`` -when it is written to disk. It should be short and descriptive. - -``description`` can be a longer description of the blueprint, it is only used for display purposes. - -``version`` is a `semver compatible `_ version number. If -a new blueprint is uploaded with the same ``version`` the server will -automatically bump the PATCH level of the ``version``. If the ``version`` -doesn't match it will be used as is. eg. Uploading a blueprint with ``version`` -set to ``0.1.0`` when the existing blueprint ``version`` is ``0.0.1`` will -result in the new blueprint being stored as ``version 0.1.0``. - -[[packages]] and [[modules]] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These entries describe the package names and matching version glob to be installed into the image. - -The names must match the names exactly, and the versions can be an exact match -or a filesystem-like glob of the version using ``*`` wildcards and ``?`` -character matching. - -.. note:: - Currently there are no differences between ``packages`` and ``modules`` - in ``osbuild-composer``. Both are treated like an rpm package dependency. - -For example, to install ``tmux-2.9a`` and ``openssh-server-8.*``, you would add -this to your blueprint:: - - [[packages]] - name = "tmux" - version = "2.9a" - - [[packages]] - name = "openssh-server" - version = "8.*" - - - -[[groups]] -^^^^^^^^^^ - -The ``groups`` entries describe a group of packages to be installed into the image. Package groups are -defined in the repository metadata. Each group has a descriptive name used primarily for display -in user interfaces and an ID more commonly used in kickstart files. Here, the ID is the expected -way of listing a group. - -Groups have three different ways of categorizing their packages: mandatory, default, and optional. -For purposes of blueprints, mandatory and default packages will be installed. There is no mechanism -for selecting optional packages. - -For example, if you want to install the ``anaconda-tools`` group you would add this to your -blueprint:: - - [[groups]] - name="anaconda-tools" - -``groups`` is a TOML list, so each group needs to be listed separately, like ``packages`` but with -no version number. - - -Customizations -^^^^^^^^^^^^^^ - -The ``[customizations]`` section can be used to configure the hostname of the final image. eg.:: - - [customizations] - hostname = "baseimage" - -This is optional and may be left out to use the defaults. - - -[customizations.kernel] -*********************** - -This allows you to append arguments to the bootloader's kernel commandline. This will not have any -effect on ``tar`` or ``ext4-filesystem`` images since they do not include a bootloader. - -For example:: - - [customizations.kernel] - append = "nosmt=force" - - -[[customizations.sshkey]] -************************* - -Set an existing user's ssh key in the final image:: - - [[customizations.sshkey]] - user = "root" - key = "PUBLIC SSH KEY" - -The key will be added to the user's authorized_keys file. - -.. warning:: - - ``key`` expects the entire content of ``~/.ssh/id_rsa.pub`` - - -[[customizations.user]] -*********************** - -Add a user to the image, and/or set their ssh key. -All fields for this section are optional except for the ``name``, here is a complete example:: - - [[customizations.user]] - name = "admin" - description = "Administrator account" - password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..." - key = "PUBLIC SSH KEY" - home = "/srv/widget/" - shell = "/usr/bin/bash" - groups = ["widget", "users", "wheel"] - uid = 1200 - gid = 1200 - -If the password starts with ``$6$``, ``$5$``, or ``$2b$`` it will be stored as -an encrypted password. Otherwise it will be treated as a plain text password. - -.. warning:: - - ``key`` expects the entire content of ``~/.ssh/id_rsa.pub`` - - -[[customizations.group]] -************************ - -Add a group to the image. ``name`` is required and ``gid`` is optional:: - - [[customizations.group]] - name = "widget" - gid = 1130 - - -[customizations.timezone] -************************* - -Customizing the timezone and the NTP servers to use for the system:: - - [customizations.timezone] - timezone = "US/Eastern" - ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"] - -The values supported by ``timezone`` can be listed by running ``timedatectl list-timezones``. - -If no timezone is setup the system will default to using `UTC`. The ntp servers are also -optional and will default to using the distribution defaults which are fine for most uses. - -In some image types there are already NTP servers setup, eg. Google cloud image, and they -cannot be overridden because they are required to boot in the selected environment. But the -timezone will be updated to the one selected in the blueprint. - - -[customizations.locale] -*********************** - -Customize the locale settings for the system:: - - [customizations.locale] - languages = ["en_US.UTF-8"] - keyboard = "us" - -The values supported by ``languages`` can be listed by running ``localectl list-locales`` from -the command line. - -The values supported by ``keyboard`` can be listed by running ``localectl list-keymaps`` from -the command line. - -Multiple languages can be added. The first one becomes the -primary, and the others are added as secondary. One or the other of ``languages`` -or ``keyboard`` must be included (or both) in the section. - - -[customizations.firewall] -************************* - -By default the firewall blocks all access except for services that enable their ports explicitly, -like ``sshd``. This command can be used to open other ports or services. Ports are configured using -the port:protocol format:: - - [customizations.firewall] - ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp"] - -Numeric ports, or their names from ``/etc/services`` can be used in the ``ports`` enabled/disabled lists. - -The blueprint settings extend any existing settings in the image templates, so if ``sshd`` is -already enabled it will extend the list of ports with the ones listed by the blueprint. - -If the distribution uses ``firewalld`` you can specify services listed by ``firewall-cmd --get-services`` -in a ``customizations.firewall.services`` section:: - - [customizations.firewall.services] - enabled = ["ftp", "ntp", "dhcp"] - disabled = ["telnet"] - -Remember that the ``firewall.services`` are different from the names in ``/etc/services``. - -Both are optional, if they are not used leave them out or set them to an empty list ``[]``. If you -only want the default firewall setup this section can be omitted from the blueprint. - -NOTE: The ``Google`` and ``OpenStack`` templates explicitly disable the firewall for their environment. -This cannot be overridden by the blueprint. - -[customizations.services] -************************* - -This section can be used to control which services are enabled at boot time. -Some image types already have services enabled or disabled in order for the -image to work correctly, and cannot be overridden. eg. ``ami`` requires -``sshd``, ``chronyd``, and ``cloud-init``. Without them the image will not -boot. Blueprint services are added to, not replacing, the list already in the -templates, if any. - -The service names are systemd service units. You may specify any systemd unit -file accepted by ``systemctl enable`` eg. ``cockpit.socket``:: - - [customizations.services] - enabled = ["sshd", "cockpit.socket", "httpd"] - disabled = ["postfix", "telnetd"] - - -[[repos.git]] -~~~~~~~~~~~~~ - -.. note:: - Currently ``osbuild-composer`` does not support ``repos.git`` - -The ``[[repos.git]]`` entries are used to add files from a `git repository `_ -repository to the created image. The repository is cloned, the specified ``ref`` is checked out -and an rpm is created to install the files to a ``destination`` path. The rpm includes a summary -with the details of the repository and reference used to create it. The rpm is also included in the -image build metadata. - -To create an rpm named ``server-config-1.0-1.noarch.rpm`` you would add this to your blueprint:: - - [[repos.git]] - rpmname="server-config" - rpmversion="1.0" - rpmrelease="1" - summary="Setup files for server deployment" - repo="PATH OF GIT REPO TO CLONE" - ref="v1.0" - destination="/opt/server/" - -* rpmname: Name of the rpm to create, also used as the prefix name in the tar archive -* rpmversion: Version of the rpm, eg. "1.0.0" -* rpmrelease: Release of the rpm, eg. "1" -* summary: Summary string for the rpm -* repo: URL of the get repo to clone and create the archive from -* ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash -* destination: Path to install the / of the git repo at when installing the rpm - -An rpm will be created with the contents of the git repository referenced, with the files -being installed under ``/opt/server/`` in this case. - -``ref`` can be any valid git reference for use with ``git archive``. eg. to use the head -of a branch set it to ``origin/branch-name``, a tag name, or a commit hash. - -Note that the repository is cloned in full each time a build is started, so pointing to a -repository with a large amount of history may take a while to clone and use a significant -amount of disk space. The clone is temporary and is removed once the rpm is created. - -Example Blueprint ------------------ - -This example blueprint will install the ``tmux``, ``git``, and ``vim-enhanced`` -packages. It will set the ``root`` ssh key, add the ``widget`` and ``admin`` -users as well as a ``students`` group:: - - name = "example-custom-base" - description = "A base system with customizations" - version = "0.0.1" - - [[packages]] - name = "tmux" - version = "*" - - [[packages]] - name = "git" - version = "*" - - [[packages]] - name = "vim-enhanced" - version = "*" - - [customizations] - hostname = "custombase" - - [[customizations.sshkey]] - user = "root" - key = "A SSH KEY FOR ROOT" - - [[customizations.user]] - name = "widget" - description = "Widget process user account" - home = "/srv/widget/" - shell = "/usr/bin/false" - groups = ["dialout", "users"] - - [[customizations.user]] - name = "admin" - description = "Widget admin account" - password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31LeOUleVK/R/aeWVHVZDi26zAH.o0ywBKH9Tc0/wm7sW/q39uyd1" - home = "/srv/widget/" - shell = "/usr/bin/bash" - groups = ["widget", "users", "students"] - uid = 1200 - - [[customizations.user]] - name = "plain" - password = "simple plain password" - - [[customizations.user]] - name = "bart" - key = "SSH KEY FOR BART" - groups = ["students"] - - [[customizations.group]] - name = "widget" - - [[customizations.group]] - name = "students" diff --git a/docs/composer.cli.rst b/docs/composer.cli.rst deleted file mode 100644 index 4dd2e240..00000000 --- a/docs/composer.cli.rst +++ /dev/null @@ -1,101 +0,0 @@ -composer.cli package -==================== - -Submodules ----------- - -composer.cli.blueprints module ------------------------------- - -.. automodule:: composer.cli.blueprints - :members: - :undoc-members: - :show-inheritance: - -composer.cli.cmdline module ---------------------------- - -.. automodule:: composer.cli.cmdline - :members: - :undoc-members: - :show-inheritance: - -composer.cli.compose module ---------------------------- - -.. automodule:: composer.cli.compose - :members: - :undoc-members: - :show-inheritance: - -composer.cli.help module ------------------------- - -.. automodule:: composer.cli.help - :members: - :undoc-members: - :show-inheritance: - -composer.cli.modules module ---------------------------- - -.. automodule:: composer.cli.modules - :members: - :undoc-members: - :show-inheritance: - -composer.cli.projects module ----------------------------- - -.. automodule:: composer.cli.projects - :members: - :undoc-members: - :show-inheritance: - -composer.cli.providers module ------------------------------ - -.. automodule:: composer.cli.providers - :members: - :undoc-members: - :show-inheritance: - -composer.cli.sources module ---------------------------- - -.. automodule:: composer.cli.sources - :members: - :undoc-members: - :show-inheritance: - -composer.cli.status module --------------------------- - -.. automodule:: composer.cli.status - :members: - :undoc-members: - :show-inheritance: - -composer.cli.upload module --------------------------- - -.. automodule:: composer.cli.upload - :members: - :undoc-members: - :show-inheritance: - -composer.cli.utilities module ------------------------------ - -.. automodule:: composer.cli.utilities - :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- - -.. automodule:: composer.cli - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/composer.rst b/docs/composer.rst deleted file mode 100644 index 1ff06326..00000000 --- a/docs/composer.rst +++ /dev/null @@ -1,37 +0,0 @@ -composer package -================ - -Subpackages ------------ - -.. toctree:: - :maxdepth: 4 - - composer.cli - -Submodules ----------- - -composer.http\_client module ----------------------------- - -.. automodule:: composer.http_client - :members: - :undoc-members: - :show-inheritance: - -composer.unix\_socket module ----------------------------- - -.. automodule:: composer.unix_socket - :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- - -.. automodule:: composer - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/conf.py b/docs/conf.py index ed68fdd2..a608bdcc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -265,7 +265,6 @@ latex_documents = [ man_pages = [ ('lorax', 'lorax', u'Lorax Documentation', [u'Weldr Team'], 1), ('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Weldr Team'], 1), - ('composer-cli', 'composer-cli', u'Composer Cmdline Utility Documentation', [u'Weldr Team'], 1), ('mkksiso', 'mkksiso', u'Make Kickstart ISO Utility Documentation', [u'Weldr Team'], 1), ] diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo index 55d53fdf..868d206c 100644 --- a/docs/html/.buildinfo +++ b/docs/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d9d287449bd26afc7e34fe721edb25e6 +config: 104e0d6d3c6e3c01ee6ff4cd3c66e316 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/.doctrees/composer-cli.doctree b/docs/html/.doctrees/composer-cli.doctree deleted file mode 100644 index c61a78b796d8f323cd548a9aafcd8cfbba398317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117558 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 diff --git a/docs/html/.doctrees/composer.cli.doctree b/docs/html/.doctrees/composer.cli.doctree deleted file mode 100644 index 48ce8ea4bc9f268e358e4c348594b2f92c3d987e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427593 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�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 B(r5qx diff --git a/docs/html/.doctrees/composer.doctree b/docs/html/.doctrees/composer.doctree deleted file mode 100644 index 04cba15a2e627bd8272c347b3c67e0b6d7145f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66251 zcmdsg3zQ_)dEP$ey|3Z1%VTy?3-Op?XJ!|WEVFod2oMs>4jWjcSQ2V#x@)GYwqJBr z@6MWow8CJsNhwIsGDMbS6eD!(M2U_C4iW)EAPPQqFp4CjgM)EIByfxr8KXxeJIepx zcU9f$Th%>1OW1REX8PX$-uu7qfB*a4Th&JfKecAn>Q(qJ+~hYLx3)BEmCLny+4kGv zNV#5WRqa~PzPmm3vGy(P$#Ar39rEj~X31`ctAL{9xRr9#uC;GyhZ~VRa4Y^SYd`GU zrNFJ%M001*8FGeiXiqw$;b7nf6Y)&Ja&XjYGvwhDX3_l8{LhZI{Wku!G8qO+^v0e(AwrUPmmo|_y!FmLHfl@*5 zO_!*0E?h5^P^!4?-)dXodbd`pw958^TOl;gJ}VrlT1#cS5jgEV17H-ZK|EzH99XQ> z=i5iaA;&G3!Lg2p8(3>mFj8w(=k2ClZtqzYjuAid>$S>ZpdADMl)Rue-o>;q463_0 zuDWm&6MW`S(`qz86f3UH-Ox_a=3Hyu7TOQj`HJZ*Zj5-bVw*AULW*r-uHi_}7z59! z*2^u_8kq}QLbXWx#ZAy{JuX~a5_I2+;ujm#2H_Zp!pD-5L`ype0-bg8@vXuqoFHg? zs0f|`W-8DDxolCQRWTwVZ5X9XbT;AKp-RTB5}zWsE2_APjerFqp zcVYa2NmyGf)EBga&sq()*lJeV5EE8|!1wY9WSHtvF^7B@0s?n<4(o1msxax+m?^ab zPk~l+@=Atua?d&2VX}c)24FENC9E$pgdDrD|oD4>2FqIMQg^5JL~z zBz8XuZ6BwO*$=x@g^m)z<5CX`_rO(mODH}^CHqb%$((OG-$M8O3n_;4ZEnZo$*{0U zgSrE|S#e>BRJ1-Gx0EmxHM3}_Hd?1Nq6S(OZs1-~jEk70hLu+BAu8(YaZ$t7wd4Zv z8p!&?IHekUxl&#Q!dJkff57KmxR%UDRQKO&%C^w@2v6Py$kq~r{W7s?0aMOw4=x=);H{08Dd3o2~sJ=W{hAo9CB+UKT5RS5{`V3CRjJL zqtc(R5h>ho(6tYhAZ49_?hYgjdu&6(YcG`RRm-il z!?k`;Zinlj#9nGt+>#qW#(@NZ)m*e8-`iGXE2uU|L%s>LZn^C|9}bajOKoQ_Oc!sO zayVt;Z~(@IC1$`0suc_u-r1xfj~Fy!Dt7#1v5@n{FC1b^Zg`?D$N`HaJ#ITg;mAU( zQlW|O^Ejs;g_H&6@}AY;1z*DuMS?R8qNRE*z|=c#N=)=eapEpQdgUn9;W^jZ5VC89 zz_AM~JlkbR`~#;D)Jf^3``%k<)**lAfj3VR;Wpj@s$18fTh!(vl1}v_?xNDXGIme( zHX4pCxOSynj0HhDH^}yg)GHd3Rjg?|xQ*@OkyR#(N|DeAbTr}JmO&l2BEJ*fM~PO5 z=^^rfLD~58_445ae^9+{9{k1*(nT9Zp^I){R};-W2L=b!elI}(JF67k(~v}RpB^i-L5tq%XfX1c?d{NK0C3Q1lydhq18F1KCCt+bTpyXF$yg$^CimSmd`x(sgGPxJT3L2c>z~1nC%k`2NWIU(FYffz z@X>j2CZq{b{}-`QaeM0R-UCW!N`j$HCVoc7Pe&7^)tD2%P8w*Pm{w_=*n2F(QD>Lk zu*R%B=CWf3Qq^U>ZvhYSmAiw>Zi2q0@XTd}@Cla{H9D6Sl_#UiYAq)nG@SwwN9wxkYhFlph-NtL{c*F+ai`CC!SWRGqFsNB{?=kSwLs+82CF0WEh7r-tnN>fLfs{{M zLfSbPM5b+L(j}Nt=!^JE@x{)K=1C*E+n`2^z^@odNMw&}f5RcRU!y^PxIXW(UEM;f zM$aSQWCMUBQtJIV$QcgT>JI_@=|URfT_FzLaVSgNL+>LN@7)N>6VavimL7m-Kcs73p&z{ z45mj9E(}0cT8ns-$rV1i|MJdDP(jd71E((6@bB%09wOlhqcKCIF4Z*9BU0Xbpqt3b zaTONy4n=uC10U6+Q5TuGqiB@(e&7U!IvajRv>o3wd4C0CB@ij^!zhU!jUszVXUMaF zgm8+{8E_~zvk0p4*Eq=ts^XP^j88P0wM|AhQrj*qmkSmRdj-Jk$l*4oZ&u;@Yp>>! zz(6JZ+q(%g1QOQ`ibCa(^>?ao@r`Jrg6vRDL|~M=Fj*z@x8TDmVWnJ{w>feGIcv3W zI)T>D-F?Whg0slq=k2y3Z#{jw;Lh5!(}h}ntYTXT<`&Mr`0QB%!PM+Stkbd;ScO9_ zB*V}z4Xps>p;l{$3-%I#JX3C}vPf4t%eM-~raua50`os^AXS5Tm=jQY3i_79Gju`-pFk%>jSig< zmE#yCA{G-9AxzeRgxHd%ZSg>_+u^ef$O8topavN@_WOj?2#%dj14{%RrbQTmNZw2n zt*Gy1NL_wm;8mJ{`QJ}T1Fiqjs$TtXd_a@!DH)RDe;W*>s{eV<0psyxq60d1JoGJv zXZ|OIPxzmx(fOaKJVCBf(s0rRwbkH-*gm%xzHYE=!VA+AO(bQQ*nJs#Wt(dZ!Wkix zkdQ7LCiXsqU!Xi}rMM1AjVnbY)0jpZVqyT<6l4T=mM2mVk#4cuTyP9Z?-}H4Bt0Tu zJ8+dnlt;lHGT~t54Ekb5MSU%^QFG#8w`X9M8TVFHhA9n*7&ku@_Gtq11Z2Frd5 zzN-hzcAL1v^?Rb4wO^z5{dq7zz{#)%>hi88LPP=yL{z$c-u6m4BKv(C*4*uf2Ems)0{wM&`q>kOo>Grd7TA@aiE= zQlz94iVy!^1M{j6drt##4rFO9upxzKJ}iV!_^_za`LL+mtT&r<(i8&lLhK{A7k+ErfL0(4{LgxDi{eE(cQMY83$>-iqiFZX`vbQCMi! zs{~^rPtb_Fuo)<&^)nEIC;U@nH!pZ}eFk+fo1r?E*=9Mxqk|ckWw!HC8Kz7lV!MH| zTY@KZVfEKUDu`>eUKoXJF#oxMp&kMa8!r)Re%mmlvew*|ft1-6)s@S(odW{Hk9ZoI z3qRr;0Aal(e)Kei1Py+K#d`ec2@tOz_|eXC{ZOq^x5`C)Za5Qqbh;irQv2x^JDQDh zqa>&VIhrmsn)OB40r|W4H(PdJE>%5ea5=t@MS^gNl`t$tMVR0U;QKju^QV2JfbT+0I9x zAEJZo(G3ERs4iHoN>Ds#RiJq!+=eIktwy8X42pi$Y6ds8>i7x^#OC?EG0I2!B9U|= zGc96&x+&HV?60a(Nk{C@(==FV?C%wrje6{F(Zrn|`;*#EV1LiRSlwfP$SHUW!TxBd zB(T-9P>d@AJlID!t+hYKq^;3XaeYrqU96W*YIT1)MwTexAf+R3B? zx9{N{MtwmQe#hXgd^drp!d+rIEZ?IHs-TIxDeI%PG^vahib+gB!!Kl%1|bD0jdwo^ z7K0Rqnbzsn@DUw{`YrCi*O4kq1UC($1z*WXiyJ+i;QiR> z{iTMdjvKx2Xd0~aM(>NjgMOp;Z4-C;jh@tYVx#wQ=&}2a9&!q63EAjT2PXTHJE1u1 zMsMm$8+LSXu7bNf414lOh2Q2VP&einM~)W4@4b;xU}?e|f?uXrV=VWRQqcfHUSH&` zMRwA5Zj;Nrb(_c_G~2qJjC@V8V3f9Xi=3;RC#*DiExUaqUXlYx*A;jEe0f?1PeQ{B zS#_!E2=9hlSr!N*lJL6IAdJl0SkgL88fcSNT4hXHN4Q{uH&GDf?Fs{LO8WXP1F4$6 z=G}l@34Kd7u=G`^A(6g{8eRG-Dkt#lGtHnv4Pi$zn1I+{?sRs_pe)oYOFYqmGbWy! z38{Im4K*znU)RfS1`Slp{V1VTn!uZ3dp1P5(8Ho-1xnzB{tsvG>=_ zlwG*N=(~7TO|>h8uj~zk6gk>}1|Me{Wvd#70BrykPJ` z24 zpQlLN9XmIgrw_gI%u|>yx!FfWYBu{=tl#WUj`eY~4=ZZ+M^n-_`@EZOH~XhylFB<- znTJv?0=0HZ#rf6}cm2D7mSzphyX)r?>v#RKR@wE7LJ?)jTCq2yG`Q=R(s);+V6k2Q ziav`{(($dw0*X4)6fEF_gtoVv12^l&)3bI+N7|9K^k~BU4q*zNrTPI={H})ojxfc& zng%NkQ(OZ)=wXUanYh!#6jIv>nBpDKWA`uxa>`)}I^zgT@lGgaDWmZ`8aB7$ZNdCe z6SzL%<7-T;!j)I-hfOYdJcVx)vNsTc#CsYUn()4k>~{W&jb(qGiyHsQ>-m9?C#8P+ z|Cq^NW)Pa?X5T@+rdaGuY@i?h=Ej1ZS%q#8=!9~JcBoc@CkTB)ac+1QF+YHmyv_q zfXM$g_y*?j?0orELTYsV3CL^YlU3}fQVnUbXQm8C%a%6q8SLgk8 z14pPb=DhDSkgCq>6@WPVzRdd|kW1m2^9tb;&MRtk&MPW6#_T1gZ5XeCsE)02JKS!A zN)is2o?js;J5c_c3~tQ!m>Baj?lHejJ>Cc&2-K%D3iNv!L}v@rXHd1Kg(-rbXLY2C*bo;24gQiqb2$dyTyUtsqZd<2u;I{Gx)NL;zDirT)ozxhfQ{X z4LWUu_(mN8qU}J-0HO~s*TW`yRV1LIEopQ#Zl_g?U`=*H8t=IBVXvbI5| zY{}&aujV*`EQorV$z7VBy({Ba;BZ-BPo1#-&r^2P z;Q&s1E(84#<^Mk2DDR7pVt&+w4xYYx@F;*ckf@)SX%X7f&7yuldr#=}up3kvS&vZL z?48VyX&S6Fw08;cpojJzF>$Ad_N2BG(B4_lWB1S=atg{LH;`yFB+%X@6u+UMy&ob& z6W*)HZZ>GI|LYjh)Za)=MRq3Tcf;)i*jM^+#lQ;4*NfB_7JNI{L2?%H@@gMa0mt>p zTUPLOJop;su?0IQIRy(|$PCwd2u#Yqnq<*EXyfDa1S=J9VP2WRM1b=Cky_&ynXTdd z99z)$Dk~c6KP0$#%7~2`L^lJuEb^DhW7QGbumclb+NeG`nmPCyXSrV1U3>HNWa-&plGpH9W!C=t> zAzf)$bjiS=v>$WcfHcrLFRkj;c|UI8NO9hOW*}9a*V_-oIbhK{fm{mDoL2~+a9&ZP zb6!yy2R}vp*TJILD!0SkWKc=M;nH(cBxSJZwhX;87zSg0Mi^$4kecsQWrRh)nSn{R zFg**T#)T=8d}P5d`v!~tPh>ami+27;26Zr-p*oh?W;tQeH5)T06~D}FyKZ37lMD>? z5L(h;(Gv_q;(TPV=y(QFW?NKOF57kv2n-hG8D}n7ly8B=%uB+e`+?iYHk3a1hQ)eV zbT4S4AJ4tbaty6$9m<4-;&ub>$=c0XCkPtFQpJTYe^z_x769F*auR=|OJAOTD;d0t z0~`o*7J-(ArtrGuhB-m?32bwnq74rAM9RdHN>I#ZMo|#Ol%jYyp;R#xb44$~-J#=K zkG0*VBTc~uj}Y44V9Wb-GnehG=nazfi^(hb%<-8)5(|@RE)h4sdETjHMi!DLMIx2K6E-gL;l5q$>^exCREL{h0IGq=D9XX;rVz`w;_2iu2xVAXS~$y8?)F zKs`r*Tnf*eR|ubQUQwfSUQw9~>cLjI9d6#Bl7z!`c4G$hY|PLr+gf7G&$zYxIU!v( zsOPB+OtOXP2~@3VVTwRKalkO5vY@QaK*|h@ zy2@qP&Y^&TJUrLT1@iFhU6?Kj@>~JjYCs+=)`L73fhPI^@@xmdhCF1L3E|nMMR<4@ z-NHKs-ht*u+kCxzxGxCLeuHcA%{C%D`+$}PrEuSJAv|2>1iUjMYbcs73q&j>z)mTn z1PJU%3A}j}CI;+miGym>1yp=LZ>1g9aj(ZvS~}7c4CN+5+Z(*|N!@sQ);_Ky&C1$< z(6J-$qA7*&{(C|ZHTxgvhSYQS1s!Qe?$U!IpAQH=>Aa~Q;M1RI`0ofleO=RFrNJi~ zc+i7SPnx*XgHKZ13GitT^w>T4gq*@+OTZ@@6$rkv7m6|3WdWZ~CNH|gOp$!uJA4Zc zzWW4jC~;sqoj`cC_Y)itUTlu+WP_Lb5rv8DeN3XwZhwmmP92HNd8t`*q)0T z-S%8m9y4qSIZ*d_>5GoC71(A_FOo8B=~O~$#FqN;_THv}OKC*r!8OuA>%p|DR}cPe z14oJn-)10HJ=mKA;v4|eQ6QJXGY=NRCp=ix=sZ|dYG2PQ)|F6O4GRsn&+UH)49dyx ze>*U_laKe}tK7&U%5UY8YBasUkzQ63 zEd4`+r*Uuy!O{nSmWHY2`=XtQ;0eTZL#&#@rm<47?h@?us~H7C>{JTmJ&dv)d+hYj zb=>PAz(3WIra*xIh0ykfoxZFaPtV#*I?}AHDT!|m?DUtqA@$t-LPy$>yY!IBrw3xE zI&bO+cKVhRl6g=^>~yQ9!AfJNkATwk*y$-I?)2EH)OG?p{XC4-J$8zm!ct7IQyLWr ze)#)PjKMDpc6u7YPW?K(U7x(XE(Jj~k%_?OT@5+{54*~sDv?1f<2RwjA~1cQ{*}lN zRYw28)M5syS?>5DL~efB&i^23pxyb?s$O^gcN#cC$7C1vLIbIq zc;^LEKM8$H;n~h#2%p&biyGa|UsN75FcmpacZKPzkeK%qo^Mbuk}@#0K}e4YnEJGV zOKC*r!B3F}S`VgGy?XEq296XDe%?T;da!pt5a$3>Uj%X~Jo8{7e8Pi8jn0Ebr4}s} zi%Tk)itTgz-xCJqi+`q`U|E8^=c*4eNzLNiv9EsrV?)S7a;p`^K{kb&RGOUix5ox2e1WQ zu=)U|QuPry^EvU3ItiQ7>NuE6O2xWMz|>6{1wt@Y3gm5sW^Vv6^-LZ2dQ9-GI?@zO za2uiR4NTpw8&A*L1v=8KtaS&bUauQc&)q-Kk#^)RJ!JCffnci6oB9E!wlw^A1XG)u z2I@{B9B$eR!QqD8_TB@p9gHk}S7E_AsJE9I6}RLD?W3eVu$u7Xe>>b(tk%n|itX>< zxAAuC^OVCqjHPIV8aBB!tv6EKxV1p=o29~S(w zfT`OEm}(XFU$gh>f*&;9+9JFSw-CFHYM>Hf&HGot5%|}A21SYdp&w8x3(rIqpGAIF z3QBz_gVZc@{3GORiiPqwEtLAKK_PPM%l7?$MjB}M{j{pregF3i9HC<}DD}GrQZ@GE zg;HOJzNPSN-!Ftu?E6KHZr?8|j~SGT9OOm^{=}eOv;>1vzfMSx36y%;md-h+G$Qlh zQ%M7@2h*xvJ@|YBM~VmUG?1zu?EM^+9A7=hZHqBhZL0=&{2{5gc*n-HNw7gJ8RjXxP-H&Zv&8&L8(t>2*C`x!F(knbo1|M zv|g@ntoeEd(OFXUB&ybwRK0Pa)aPQJkO@ltRt9x2o1r?E*=9MR)E{SHmf7w#R7Nh_ zbpxf2oz!_b?;!xCL8(KAA#px3D0OWHQf6CJS1#Lj4hRfN<-4U^P%7VT3hO1IRLm_j zP%0Mdq0~!26CI#bDa@qvKsdp-^E0@epP{c$oS}RDw(S&dXd{9k$<((j78sf3oB?EK z-OvVeIAhL)v!2Fi=Nx!X`gm*JS;v7sK<)tAn{>u`LAaHVKijIgOCKsyNR;=?zK<(P zv?@j<7m+AkqBHnf2(yzon_!)JFVHD6oD4GD%UPx}I9qQ4IZgw)nTog$!eMy-WYe|% zHVS%wxRomDLiwIb6qJboilx;v5jF5yXJ{^HTd380B20xJNO>WE()DcP@UC*b#83%% zqDMEv?DfFQd-m_&cUiqwvrG70^Kj91&+4w_eK0&P*=1p}RIz-&;MTNEOtr(aGc%W> z5sD2tUyT}R(s_&*gwsjBqL-Niw`$j0!S3^S?&Jvks&G@;_De;pR)g<2BHFpTEqWZH zQt^k5`A6Z71g8F&!Q&XP=zSDDZo<1+I9{J^3~|PJN{F&qtA8$8N^MloPh=C+!2<>< zrFSO^96Jp-K4~h>imock$LBKgf#(8RK3*1DIXQAZqxc7XC{BUdm+^~}9@O!#2e`ki zBTWIg{|%v4Sx(9$?=%myO0IVCIjZYF(=nju^=U$y`J0KJ*Yw=+n~7Ne=fPH6*l#UN zWiA2vJIehlx-q)=ULrcQTvp>N0zW&z?jdlcF zUxH#xF|wR9T=*`_xBXp(U1Y`Cbt9%~v+PaR(bfCLX+cz<_h3c8k;SSl;V|o@EoOl% z0&jaeQCkGh2;Y`rKsv!j!{G{iePPq8wB-uvT?~D)6zozsYc52@aUr z6e=ER9EL;{G73mgm2iifflG1332(Qi50zB$oXDQH=cC3(Tx+@@)lWX9xWXpx3aVRq?*fr| zxb+Ue2WIUdN+r7{maPIo{9P-P-dds(SSJOilyB@+Z1R!g+t5<{u#Gu}d z_!rJ$&%#c)WYS(<3Cb~P7Me>B@7Rj$SEtlg=VAvW6m+@Ecre^mq6s`+aM9*+$&{*4 zwF9SKhU{A$>5@Gd+k9xY2D5CC=^Y!vrh)${lwk7?!SnLSrjAu?@U!=y~zqHLeoH1xSY<*a+yJ0zWHT_@YHlqYAZ{Khy@egVF){`E}J+Og-;4Mj%fUQz074 z$ugzE;)YKFJwLMsmj@bD+upPA$yh+2l29n=vtxQMFLWI4=79ok) zg=t@xsrK0=I7SCHEkHZ<@|)l$?+9cWJevwRoWwIK1~!SQK~|-mV8l-IB8Dza137WR zsTESvvLZ|uXA_nnOj1(sA{07?Fm2IWh=T=b)luc|&Bza?1X_ONl6_2&rjm|-J$h5r zkt$m+o>3sg@j*hn%t+JCItKK-9wMZfk*1@Xo;xB=N|x^spON-^iMZs~-CX?1wZBRDo9@3G}W39`woHADOt*Cwo%ciDd6A z=rMn?$B`!FlxKQ0>XA%u3W_skdKbiirdG33ap%wH+b1|4YQWMv8^xS(QOpc8y+m{t zg_+Ld*h0?XqVU5HQB1mro66i#459cD;Vzmj=0hl6)$|bY*df5N;9Rcl?2RB#KZkbG zo3kPmFG4GdP@wH8LXkswoM{wv@+P4@OPi^Q(jy19Vjzan>aVc_0%AnfrwWfPSw731 z67pHGKu3p6%V#G}1xZP=9m!|kg2jnko944jx=6|lGC;Z|54LA8J)EH@KAq0Ll`N8< zQg=N6#`5dC!#Gpq zJigHN+3x+}c>FB89d3%9U&qpNIe7T1DcF$MGN$F^>_l36$E0@!$fOL-R41=1Fs`Il zJDLboB0CSqIes?Nuu2E4MY}B`vaBn}y4c-^wTiCSbh1x4`H zCinmVaHM=LT+d4?Zq07bg(JQl1n`i7-wuz17}5&dia)#1B(75iMB;r`r3Duc1OmTl zE*xF7YXHj!^(M3*g}1%feqdD_@Bz*&ahM|XeE>d=v5ycs;nRkoUMkLm{8$Ua4dSH+ zfM}0jsMiBH47ZiaJ*&eFJ{&dFTGiqbyhpU!hLVkV@c_P#vtF$dx1I|pXo+31NlEdL z8#wTFodDwl%P=BqAPUwuZNwLf75kuFY42GRjyYCEd>jmqvzGvA0BM4j&xr=Z!LmKy zT7>>KB0>+k0*a<>RiR`wXj&y3g=*gsZggvnR#3ESrFt2t+Tmy`SeW_M8Q+D!w?-?A zcC%S;79D^*Ds~g}jI5U6p_ol@Um)7cAn64jmxl;eWJ}^DrJ#7w^d86;ERy( z8VdL=>ZlBkybj)jFFwM=8}|>_0&A)0xQk8&{)3wiRO;yA>;0+)^XaA*OkW>bo)X-6tEJVR$wuVKSgMLpw$3oHbU$P+yK-=r~6TGl6uLlEr6-{{68Ke zg5R2t(v92IdAkf#@-U3$*zjQ4(QtFAQnwBi?W*NgidMPYv`Iv`BV23O4z^*<4o7Gt zfT;&w0OH}r|T>@w>ls7-i=2#Iu@`?_1wUHhD7MCD>##4{e$H{{ zoLlEe%Q@0&j3%(QKkaYnX2xt$cw&K#+17b}Q z_s#}gAJ*db9hhW23OvE-!<8vZF1jZFrsT9$SH0**R$#c-cRNk+oIiFR_x=h2&X@4V z3j^@uyZGaoA^7o4{PFP-_;DBhc*hw0*o8mNS`RF6X>ODG+LV+cpp`FcgfHbQ!0tWZ#oMtU6Oqmo9)NBW0#zZqbnu{qust63F}!BSSL zw{W>>hwDo9N(I6O1PDlHhA(5~cf)MGy?re%8&(rm2#66rtfF*4v7$wa*NI{hkjBcm M$g=f_&X3vu2OJ2a%K!iX diff --git a/docs/html/.doctrees/environment.pickle b/docs/html/.doctrees/environment.pickle index 0b8d7a155e1f982de6215c1a81c43fc1d878e27f..f787de3ec54c1f44ed4dabd4ab2ed06eb2c1bd87 100644 GIT binary patch literal 1983815 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

*XBo9%2svz7Ru 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�J74d%A|u?db+N9JbS`2zjTIwVLW@+jDZA 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 CTLGv5 literal 2450517 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

    )BiVE++ce@LhV^C#)0xqj(=- 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Ƚ$rm7^RNI5u^3CR49l?+ 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Ƚ$rm7^RNI5u^3CR49l?+tFQ)Z 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ɂ*?xp3$PeVupBF}8f&l~8?YH$upK+F8+))H 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

    ^|ShS<(8?2@m|x6cyFX|Tq$Wi;p! zTQym;I~m3>L~~9%on>1sr=V2ZitLQk^_V%5dmW9<*Yk605LO*vO&pLcV|V& zN{>GVdDwGbCkyP*d@30CnS_`t+~W~1_`k?{1lcOwcXXM2jnZi%yMY2uZh~vL8{K(k zHy4`-l*yZ)-h+w#Tu1SRO5S=`B&)uC;i?h`gh|q`F4jq?v)8@UlgSoAsy5YiFj@7# z<+J3z$|AvEjM#D9w*}_*HTPIE0Mgs|)6d$&)B;nYJ7_8kgTo2nDI9;Malw8RnNJqP zyqJM?eeh9c1+#TGfaOQ$B~%x?nK;;)ld;W}{(B?3wqwUL3(UE2@ReS z<*^PjYhRvB4IWzr+ypSpW~wIbBZlvlth2AcUd`Qc0SbU)&eY0%55T|M)mWv3rI@3H zf}Y%`Z=%r_A=I8*z>MkaF(Fc-u%NQkEMmEt!dY?}?s6Y3;0 zv6New-GIP<7C4_}KNDNK(lVYllt1S)sBzs*ytRq@BAff+;s^MfH*i)nn^d`afu^kp6v=KMEtGc_os=B+nx~FP*`Qij5TqGz?T>BO{H-KZ_C*mD= z5GnLKXKOYGX7`kUo$9Rf1;L-sR5!7?6y?#Z^F5(Fmqp<~d5ZAEtn*7AL7t*3!mqQ= z_8eMR%CwLU(s_T*`I^A5WWeG&088`>9c}5GIp;S*eR%?^D3BulKIc4J0OBGL)rFDi zaiQS6NzjE9imNfL`c}c&B_L6&RoT_6;QfO0DS?UM3Ksv7!aplGUlN=+s&F$;Lq++j z;QT}=#L)!ChPxvCTyXv{ZKMbz1N^h#+xQ&df}aDuc#l!NplMQau?f zSM}oZY}ZES47f@{jBvHI8D;w9VDQvw!BFD=IPVxViSG=UAX6?M(;_a-YY!Jr7CVE+ z6^e@E%f;S+1B4^mh-ZIvdl(HbU&t2q{orAUZ|U7(@xdocGc(Kc%htNz8wB3jd1MvW zOV*t?Zoh58CDyXGo6(9@?Vj56gw;R_ciR2Vg60L?)VBi{37Y(N)Ncmvnlo z?s%sza{iL()uWOSxr8a3`!ZM9Bnl3c0&5ewtr2wymfD(05wBm}TX#$s+TIGnJ)n(Z zGa|B){k=!kN;shmEIGSs&B-HA2gm`2D6qx3k62LRxsT*fgDYVifZH(=vMeLgQDoh( zHn#T;8&+la$hu#t*DJe?qcz}0=RTk=k|y(@JbXp(VU*x1@_9xBkd6kNjr#gFYE~0(!SetuwM5NrW)Em|H!<|aq+CQx0K)+#I)&ckf>QMg*-jXNc!Vg>% z=10bS1aXF-tkXhB5S;o0_tZsVXUd&<3Ux6Io!%}wZFYQ)xDuU%id1<(Se3s7B8%I# z-leF*<<-@Gzi*#)W7`kT5a*ud9mk;F;>ce_gzWH5 z_6pGr_%YQxj{J+x3N)KaHi5B0kDf-G3NasmO@TO$%lgr9LNg19>Hpv9sFA`lXlG@Bjh)0Br%0#;t4UnE1n%+wRj&InZs z*nSsrkk6w$BH4tGBa>Jv(xRxR1kUu{^4+j|3oFydSkF~UMAXVUMOP5z9fke~ES+6M zgVBgS4qjdW$3sHK_$=bqa9p8}l>E>p1+l%5CY#jGoI3!%K$>*GLIdR5X7Zz>Wcn&X zq7nuN3X`z7B&L3@bIq`9DrEXsjirMX_d9Y8*hcTz6S_rHamBh7oMdvSO2@!b3X&D7 z*tS`fOLogWMSAw)tA~xv*WbzIV6X1+>XmuHFNt4siyN_D>6CuPrcFQaB6s4vNmsP{ zgo8PwH0#okNb$N%6qzF_kvufBkfqcTPs}1p!Z%8*iY%}9%jp}BGJgOE-LCF|17shx zG%y?2xPIDg8=Vt{&Z}V`YG@m=69a787_lNFVArU=<(F8~?nHGF$AKs$FSAh`h)Khn z0PS<8zFEQ&nW$!67e&%Fl=i}Zv*PB5CmU;)5vp?O4obTDj}>Zc>y)MP?-skfbakbp zz1r-uNfY@kRAdW3G&$0zn*!j9`f diff --git a/docs/html/.doctrees/index.doctree b/docs/html/.doctrees/index.doctree index 3b2253c4ddb6b0d990ef2b7f04a7fa9551feb04d..32a748cda481a5d617bb2c01c12f9d8d8aee6cb8 100644 GIT binary patch delta 1835 zcmbuAO>7%Q6o9+2*T0S9jep}bwi73{6XQChk*JDAiHL+MBa?FA$5KiiXVURv??$^e zq=%}FR1{OKP}|u^p@I~M)N(>9zNBeYsYp5W0^&zisfs8P*Hi@s1tg%nS$7R_6LH}3 zc6N5&eBbW8XFq&)^*Qz=JHOI>nO!oH6=S+)W@`+qU@tyRZrH=@9vID$pG-3I5qZ@d zg!qDNt%W(T`Y#vu*_)`C@dK|7SzD)ww0p@$17aCIWvSOdw zJCvA^azY*_Rf?nrcVLsNwm+}a+UwGDf$%#IyRblysqYzf9e zzOwBNY1k*5vAiA9G;+kA<%0Bveu6rjx0846NybbLxg%S@^RM<{&;BjI`^hsq6U+es z5B3Z`dgZ~#*eRWTeP@3f^TfW*XJ-t#vDFkazvPEkcpB* z4qx}O(kfw8-1nGIN%wijA#o?0d`g;67x)ym_mSHw?#AKsA3ibzi*YBlXd`)NyTQwU zthpR^`Xb9pTTzs9Gl{%dnigdwH41`X)NK}=W$v>kn?=ng2sY=b4XafoarmR;eU58g zsMlqhR_q*E;qF;}q$*zi2fDZ)nu5PeCmI!;?uHt8uTiz8dLb>6`|bVAFU0SPKuo#1 zAZA@X%wM4IB4=FvmOtv-{!VVVo?@)zQ%{2Ic6T~A=(N@v=?Jjaftq9Ltwo1`BiN%DxUzDe>3x#%as!30uUn6#ZJn%JqBmNr*w2k#Lpl5Km zHs(Lx!d$O?5x8I&J%wla@95H75b!Gg9B<%tK1OHyXn2i=muWan!yFCQXt+Yd0=y7E zPc8@DCr)LweKL5piZ`m-4pl9?s%2KStg4ogso)NJOtUy%$Ib!v8eYfu>&y_{T4RpU zk;a^DFl%%)PrD3*n#(GYV2TNQ_VOfI9+>m?-1xuZxWs$M==t7UvZzgI@e zV!kXP6wZr6Iad(maO2lLTo%KED4>~wTrLPl!;@mZQbIyG9M!uskuMgaD(w!;={vpf zf3|vC)&D6>a7bapId8Ag%Xh&wcu--B=uK2q(=Cdzd~6!2iusk1mof)4&#Q{DSP+n! gwksxCtVnsJ;wUZUP6HgL7svnUZ0N2W84W-EH&cF4Pyhe` delta 1604 zcmaLXTTBya6aZjm?350r+&XPRKwAm|)gq`5M$u?U_CX?16O$D+TFU6pNU07qag!xp zFs7KvZp`Us6W4?)x)Og3a)-KXkmUtG;Vrtw&25N9Pe3i14ia0y!EC`{y6OTXj!i|{bNr(z<- z>ew}-z&_TUX&3lvw!8`^1BFrr{yK-Xg31Vv&N6{5U`tp%Yv@RIu`E1wd*QY#R5oP_ z{;+FKfm4nMkFjQR)wto_w{k_aOON%%+42n4B*FvC@Fxt)okcG=gWcq{AAnVRA#S=i zf9)LwA)i~w%gZURx#7oxs8}LEHn0db%cV6f8O9kcxeU#N$GN1~-KhlW2i=K@;ft2X zS;_pGOet%=b{VUDtzW>jLZmP%Zv2F4{)lOwgIRB3E){kvTXQh9XklQ3$04qn2lKsW zqc8CVOag9s+C<&LxL{pTAT(}xbf)&Mp5sYco>Y;p9MAF4qUCW`6q`x{;c=t5H>t-CN3G7cdqvAyjuRyV%9R`kE!vJn=s3$A67N`um9F-j zF?+V1x_KCWEqx+C!!x+^Dc{-Hgu_QPW4CvE2z%leyPch8gJof=tWkIa4sRG^gSQ&v zH{Kc{4}v}g2E7gPJ2UTp=9B&7Ef?IdB@l%&rLuH}*7(cQ9>#*xv?t=E;VaGvAXs}b zi($THzbTE;Wun>T+FRUUxiowB{j6E|U#SsRA<8Edz;l1C>m#cLMgoh0RO?aI6t2Rg zhAWZm?&<4R57V2eeTJ+>P7|J3D$yu{qwrUW+x@Mzvt(VCcb2RRuKI(*{<*SlTXu+K zAueiSCU4&H=z7X!V=)*nxo{AjGTd{7jwkBu)J zS#abe8`AF6)_WM(4fYqCVbfZKX6h;Ir0^{TgTgR{NeUAb&fwE&KVwK4a$hW=4t#e| z?dPA{lN~&52fLAGGijbM&6A~hqBKvE);3dyjufk)PxKI5YBGkAG0CRcOVbddQrxhO XM%*xD8?Mrb4ESVqi`@d83a$MBw$t}p diff --git a/docs/html/.doctrees/lifted.doctree b/docs/html/.doctrees/lifted.doctree deleted file mode 100644 index f7e18c5a00b130ea07f18638eed9f498e5974ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3715 zcmaJ^+iDv}7*68IwtSH6I7wS_z?8N)X=Js~i_)7wN}$wK7i}qpkSwF!k!JAj&Snm_ zTpDOE0!f)bAe$#B1OlZ`5Xem+Pt$kkH+zKoQLcNyU9M^Yc&Pz zimGjqQhbKmP_|OSt(DCIa<10l8%+UQSm{+> z97letBXhyS%pCAr1^9=C8ae~~#Jd{w?*RQ<6T@ks4;!FAYzo-ILNBv^9Po(_%moYe zbHJ9VW0FviU?I@zZ;6H4xZM*M`s9j&GzJMqV)}26nBaWK&^amlf5T$79Uc&1z_lWQILR z?cy&aG?)qH)Med)ZI5Y8CDB5rI0OWvO_M0WVKq17LH9n6E5*^s5T|u5e9w(EcMEeZ z_$7~0dtoGmj)kU;%e}L9-A(M+MBZd1WR!x^QJAEO=ZnZK0tzax}KG!asJAw8fWMxtF|B&?1tyGbV;vC>2vRWh|~E1*L&hPlomkuhQg4oOJ_ zN?S|fQwJ)2VmmxejP_{kivV1yZ5uu6ece+WzpqYTdQ?gwJx1anq!Mvm2MY$sP*J5Y*VoxYfnv>Oh9LX;Td69Q0b*FzGI4OSn7JHYuI_A0w2 zsV`*U1vH^?05cq!F|dpItaIVuftO%o;gggt+72;Vcs0qMz(k2xWgViL5jcuX z#w2tKyBP(cjg@=*nv^JN0^v;}mromXk_bh;reu~PzV;5d;(2~{y?`q+3>^@+5kPRM ztOj<|t^tff{*!DuM9LIw-iW(Z$gPqIO*~+ts3SkayXGiE0@E(B?KaaoQQ!3Yhlhu| z$&qFv-W77(59mQ3oT{JNOHRURbP}GX5u&US)n(9opMLQb!qSl=f5wcX)Ml=hX0#C4 zYdO`U%nZ{}2or5hhRFXwvvhCSUPCrTUR79?`<_Dkq3Kh5IrE0cib{tZN$X-1Ad6SA zR#!(<-G(}fHJNyfk6DOswowX~-fJo%D5i%7wW}bxm7VjW7Yd&g5xnLzf-=GT<~4;E zbIr$t^u9^pjN8_;6}+hRr$`dv^LT`(E{p$yYX?{yr};K$G^7FQ@d&mUr5f5U`52G; z9*qbOJ^X`^G~2VE*aaFNqysaw%Xu3>-64y39B|~d_B4@Winf9`--ID#g~ne9#3pbn z_#-r`DQdo^gA8q>>aggt9~(aCOOBZT-eK?AJ9dZNX7|{yOtXjV8T*U9Vt=!@?2WN) z$ElAJMA0qP?+5J8fZZD~Jz&oU?A3t19T;}qUA@ENf1BNclDkmy07?#_^AH7v- z*UT@?>MCx|*cEgPUl`X9QoHJlFvRNs14hQuw*~zL0`)lk(N!mrC`9~yQfOAW!K!gg Wkyk5n_Ut#jRyZLH{yZ-}Bo|l6F diff --git a/docs/html/.doctrees/livemedia-creator.doctree b/docs/html/.doctrees/livemedia-creator.doctree index a44ec5a0bfb0af4920ab5a6bb95ea68bb36f71e9..d9049c9778a61269cd756670cebcd387d171b957 100644 GIT binary patch delta 428 zcmX@Jf$P{NE|vz?sRA2WcFHlX-n>uFi*d4(k}OAFzHV7&QAzA%T?PHgQ#E8KCn!iv zo~WQTd6T;Qz;ahKMJ6+9$w1U; z^-eC*k>gG-C@oe9a}Ed%j-5PL*$iy9ptjOvA8kdjxswy64N-Rwlgp? mfWTzM|F0)6vsT$^$yo89bLylSU{QwY8~-!bZZ&5TodE!R+ln>- delta 413 zcmX@MiR;V;E|vz?sf-(0cFHm8ZQdv6#mKD?t*e`tuUnQ`R5H0xLvFI6g7#z`4VlSB z8uF8;E2vEF)-V9FWhd{~5S{#1W7_07no^UmY06G!R+5?gUUS0ahe{HYuWHLq-l8Qj zSx8V-{;0O@61X1~w*9MRu~E&Veh}W2a<@_3*l+rX`l8?Z%9Z75}GhVXEbvDmnu!&amB(kx6t00NJdG(EtDd diff --git a/docs/html/.doctrees/lorax.doctree b/docs/html/.doctrees/lorax.doctree index bc096b53007a35f8b69b0f918bfcdf75764f6c75..08db33a8c3fc37742aba5b50c8fd8aaf72c676a0 100644 GIT binary patch delta 382 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

    tz~d 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 diff --git a/docs/html/.doctrees/pylorax.doctree b/docs/html/.doctrees/pylorax.doctree index a6da55d3b0dfafaa219cefc1f103996970176636..ebf30d76707f6f9d6f60310a59ca9dfc189d2717 100644 GIT binary patch literal 577219 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 - - - - - - - - composer.cli — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli

    -#
    -# composer-cli
    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -from composer.cli.blueprints import blueprints_cmd
    -from composer.cli.modules import modules_cmd
    -from composer.cli.projects import projects_cmd
    -from composer.cli.compose import compose_cmd
    -from composer.cli.sources import sources_cmd
    -from composer.cli.status import status_cmd
    -from composer.cli.upload import upload_cmd
    -from composer.cli.providers import providers_cmd
    -
    -command_map = {
    -    "blueprints": blueprints_cmd,
    -    "modules":    modules_cmd,
    -    "projects":   projects_cmd,
    -    "compose":    compose_cmd,
    -    "sources":    sources_cmd,
    -    "status":     status_cmd,
    -    "upload":     upload_cmd,
    -    "providers":  providers_cmd
    -    }
    -
    -
    -
    [docs]def main(opts): - """ Main program execution - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - """ - - # Making sure opts.args is not empty (thus, has a command and subcommand) - # is already handled in src/bin/composer-cli. - if opts.args[0] not in command_map: - log.error("Unknown command %s", opts.args[0]) - return 1 - else: - try: - return command_map[opts.args[0]](opts) - except Exception as e: - log.error(str(e)) - return 1
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/blueprints.html b/docs/html/_modules/composer/cli/blueprints.html deleted file mode 100644 index ca1ec1d0..00000000 --- a/docs/html/_modules/composer/cli/blueprints.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - composer.cli.blueprints — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.blueprints

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import os
    -
    -from composer import http_client as client
    -from composer.cli.help import blueprints_help
    -from composer.cli.utilities import argify, frozen_toml_filename, toml_filename, handle_api_result
    -from composer.cli.utilities import packageNEVRA
    -
    -
    [docs]def blueprints_cmd(opts): - """Process blueprints commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - - This dispatches the blueprints commands to a function - """ - cmd_map = { - "list": blueprints_list, - "show": blueprints_show, - "changes": blueprints_changes, - "diff": blueprints_diff, - "save": blueprints_save, - "delete": blueprints_delete, - "depsolve": blueprints_depsolve, - "push": blueprints_push, - "freeze": blueprints_freeze, - "tag": blueprints_tag, - "undo": blueprints_undo, - "workspace": blueprints_workspace - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(blueprints_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown blueprints command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json)
    - -
    [docs]def blueprints_list(socket_path, api_version, args, show_json=False): - """Output the list of available blueprints - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints list - """ - api_route = client.api_url(api_version, "/blueprints/list") - result = client.get_url_json_unlimited(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - # "list" should output a plain list of identifiers, one per line. - print("\n".join(result["blueprints"])) - - return rc
    - -
    [docs]def blueprints_show(socket_path, api_version, args, show_json=False): - """Show the blueprints, in TOML format - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints show <blueprint,...> Display the blueprint in TOML format. - - Multiple blueprints will be separated by \n\n - """ - for blueprint in argify(args): - api_route = client.api_url(api_version, "/blueprints/info/%s?format=toml" % blueprint) - print(client.get_url_raw(socket_path, api_route) + "\n\n") - - return 0
    - -
    [docs]def blueprints_changes(socket_path, api_version, args, show_json=False): - """Display the changes for each of the blueprints - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints changes <blueprint,...> Display the changes for each blueprint. - """ - def changes_total_fn(data): - """Return the maximum number of possible changes""" - - # Each blueprint can have a different total, return the largest one - return max([c["total"] for c in data["blueprints"]]) - - api_route = client.api_url(api_version, "/blueprints/changes/%s" % (",".join(argify(args)))) - result = client.get_url_json_unlimited(socket_path, api_route, total_fn=changes_total_fn) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for blueprint in result["blueprints"]: - print(blueprint["name"]) - for change in blueprint["changes"]: - prettyCommitDetails(change) - - return rc
    - -
    [docs]def prettyCommitDetails(change, indent=4): - """Print the blueprint's change in a nice way - - :param change: The individual blueprint change dict - :type change: dict - :param indent: Number of spaces to indent - :type indent: int - """ - def revision(): - if change["revision"]: - return " revision %d" % change["revision"] - else: - return "" - - print(" " * indent + change["timestamp"] + " " + change["commit"] + revision()) - print(" " * indent + change["message"] + "\n")
    - -
    [docs]def blueprints_diff(socket_path, api_version, args, show_json=False): - """Display the differences between 2 versions of a blueprint - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints diff <blueprint-name> Display the differences between 2 versions of a blueprint. - <from-commit> Commit hash or NEWEST - <to-commit> Commit hash, NEWEST, or WORKSPACE - """ - if len(args) == 0: - log.error("blueprints diff is missing the blueprint name, from commit, and to commit") - return 1 - elif len(args) == 1: - log.error("blueprints diff is missing the from commit, and the to commit") - return 1 - elif len(args) == 2: - log.error("blueprints diff is missing the to commit") - return 1 - - api_route = client.api_url(api_version, "/blueprints/diff/%s/%s/%s" % (args[0], args[1], args[2])) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for diff in result["diff"]: - print(pretty_diff_entry(diff)) - - return rc
    - -
    [docs]def pretty_dict(d): - """Return the dict as a human readable single line - - :param d: key/values - :type d: dict - :returns: String of the dict's keys and values - :rtype: str - - key="str", key="str1,str2", ... - """ - result = [] - for k in d: - if type(d[k]) == type(""): - result.append('%s="%s"' % (k, d[k])) - elif type(d[k]) == type([]) and type(d[k][0]) == type(""): - result.append('%s="%s"' % (k, ", ".join(d[k]))) - elif type(d[k]) == type([]) and type(d[k][0]) == type({}): - result.append('%s="%s"' % (k, pretty_dict(d[k]))) - return " ".join(result)
    - -
    [docs]def dict_names(lst): - """Return comma-separated list of the dict's name/user fields - - :param d: key/values - :type d: dict - :returns: String of the dict's keys and values - :rtype: str - - root, norm - """ - if "user" in lst[0]: - field_name = "user" - elif "name" in lst[0]: - field_name = "name" - else: - # Use first fields in sorted keys - field_name = sorted(lst[0].keys())[0] - - return ", ".join(d[field_name] for d in lst)
    - -
    [docs]def pretty_diff_entry(diff): - """Generate nice diff entry string. - - :param diff: Difference entry dict - :type diff: dict - :returns: Nice string - """ - if diff["old"] and diff["new"]: - change = "Changed" - elif diff["new"] and not diff["old"]: - change = "Added" - elif diff["old"] and not diff["new"]: - change = "Removed" - else: - change = "Unknown" - - if diff["old"]: - name = list(diff["old"].keys())[0] - elif diff["new"]: - name = list(diff["new"].keys())[0] - else: - name = "Unknown" - - def details(diff): - if change == "Changed": - if type(diff["old"][name]) == type(""): - if name == "Description" or " " in diff["old"][name]: - return '"%s" -> "%s"' % (diff["old"][name], diff["new"][name]) - else: - return "%s -> %s" % (diff["old"][name], diff["new"][name]) - elif name in ["Module", "Package"]: - return "%s %s -> %s" % (diff["old"][name]["name"], diff["old"][name]["version"], - diff["new"][name]["version"]) - elif type(diff["old"][name]) == type([]): - if type(diff["old"][name][0]) == type(""): - return "%s -> %s" % (" ".join(diff["old"][name]), " ".join(diff["new"][name])) - elif type(diff["old"][name][0]) == type({}): - # Lists of dicts are too long to display in detail, just show their names - return "%s -> %s" % (dict_names(diff["old"][name]), dict_names(diff["new"][name])) - elif type(diff["old"][name]) == type({}): - return "%s -> %s" % (pretty_dict(diff["old"][name]), pretty_dict(diff["new"][name])) - else: - return "Unknown" - elif change == "Added": - if name in ["Module", "Package"]: - return "%s %s" % (diff["new"][name]["name"], diff["new"][name]["version"]) - elif name in ["Group"]: - return diff["new"][name]["name"] - elif type(diff["new"][name]) == type(""): - return diff["new"][name] - elif type(diff["new"][name]) == type([]): - if type(diff["new"][name][0]) == type(""): - return " ".join(diff["new"][name]) - elif type(diff["new"][name][0]) == type({}): - # Lists of dicts are too long to display in detail, just show their names - return dict_names(diff["new"][name]) - elif type(diff["new"][name]) == type({}): - return pretty_dict(diff["new"][name]) - else: - return "unknown/todo: %s" % type(diff["new"][name]) - elif change == "Removed": - if name in ["Module", "Package"]: - return "%s %s" % (diff["old"][name]["name"], diff["old"][name]["version"]) - elif name in ["Group"]: - return diff["old"][name]["name"] - elif type(diff["old"][name]) == type(""): - return diff["old"][name] - elif type(diff["old"][name]) == type([]): - if type(diff["old"][name][0]) == type(""): - return " ".join(diff["old"][name]) - elif type(diff["old"][name][0]) == type({}): - # Lists of dicts are too long to display in detail, just show their names - return dict_names(diff["old"][name]) - elif type(diff["old"][name]) == type({}): - return pretty_dict(diff["old"][name]) - else: - return "unknown/todo: %s" % type(diff["new"][name]) - - return change + " " + name + " " + details(diff)
    - -
    [docs]def blueprints_save(socket_path, api_version, args, show_json=False): - """Save the blueprint to a TOML file - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints save <blueprint,...> Save the blueprint to a file, <blueprint-name>.toml - """ - for blueprint in argify(args): - api_route = client.api_url(api_version, "/blueprints/info/%s?format=toml" % blueprint) - blueprint_toml = client.get_url_raw(socket_path, api_route) - open(toml_filename(blueprint), "w").write(blueprint_toml) - - return 0
    - -
    [docs]def blueprints_delete(socket_path, api_version, args, show_json=False): - """Delete a blueprint from the server - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - delete <blueprint> Delete a blueprint from the server - """ - api_route = client.api_url(api_version, "/blueprints/delete/%s" % args[0]) - result = client.delete_url_json(socket_path, api_route) - - return handle_api_result(result, show_json)[0]
    - -
    [docs]def blueprints_depsolve(socket_path, api_version, args, show_json=False): - """Display the packages needed to install the blueprint - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints depsolve <blueprint,...> Display the packages needed to install the blueprint. - """ - api_route = client.api_url(api_version, "/blueprints/depsolve/%s" % (",".join(argify(args)))) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for blueprint in result["blueprints"]: - if blueprint["blueprint"].get("version", ""): - print("blueprint: %s v%s" % (blueprint["blueprint"]["name"], blueprint["blueprint"]["version"])) - else: - print("blueprint: %s" % (blueprint["blueprint"]["name"])) - for dep in blueprint["dependencies"]: - print(" " + packageNEVRA(dep)) - - return rc
    - -
    [docs]def blueprints_push(socket_path, api_version, args, show_json=False): - """Push a blueprint TOML file to the server, updating the blueprint - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - push <blueprint> Push a blueprint TOML file to the server. - """ - api_route = client.api_url(api_version, "/blueprints/new") - rval = 0 - for blueprint in argify(args): - if not os.path.exists(blueprint): - log.error("Missing blueprint file: %s", blueprint) - continue - blueprint_toml = open(blueprint, "r").read() - - result = client.post_url_toml(socket_path, api_route, blueprint_toml) - if handle_api_result(result, show_json)[0]: - rval = 1 - - return rval
    - -
    [docs]def blueprints_freeze(socket_path, api_version, args, show_json=False): - """Handle the blueprints freeze commands - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints freeze <blueprint,...> Display the frozen blueprint's modules and packages. - blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format. - blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml. - """ - if args[0] == "show": - return blueprints_freeze_show(socket_path, api_version, args[1:], show_json) - elif args[0] == "save": - return blueprints_freeze_save(socket_path, api_version, args[1:], show_json) - - if len(args) == 0: - log.error("freeze is missing the blueprint name") - return 1 - - api_route = client.api_url(api_version, "/blueprints/freeze/%s" % (",".join(argify(args)))) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for entry in result["blueprints"]: - blueprint = entry["blueprint"] - if blueprint.get("version", ""): - print("blueprint: %s v%s" % (blueprint["name"], blueprint["version"])) - else: - print("blueprint: %s" % (blueprint["name"])) - - for m in blueprint["modules"]: - print(" %s-%s" % (m["name"], m["version"])) - - for p in blueprint["packages"]: - print(" %s-%s" % (p["name"], p["version"])) - - return rc
    - -
    [docs]def blueprints_freeze_show(socket_path, api_version, args, show_json=False): - """Show the frozen blueprint in TOML format - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format. - """ - if len(args) == 0: - log.error("freeze show is missing the blueprint name") - return 1 - - for blueprint in argify(args): - api_route = client.api_url(api_version, "/blueprints/freeze/%s?format=toml" % blueprint) - print(client.get_url_raw(socket_path, api_route)) - - return 0
    - -
    [docs]def blueprints_freeze_save(socket_path, api_version, args, show_json=False): - """Save the frozen blueprint to a TOML file - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml. - """ - if len(args) == 0: - log.error("freeze save is missing the blueprint name") - return 1 - - for blueprint in argify(args): - api_route = client.api_url(api_version, "/blueprints/freeze/%s?format=toml" % blueprint) - blueprint_toml = client.get_url_raw(socket_path, api_route) - open(frozen_toml_filename(blueprint), "w").write(blueprint_toml) - - return 0
    - -
    [docs]def blueprints_tag(socket_path, api_version, args, show_json=False): - """Tag the most recent blueprint commit as a release - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints tag <blueprint> Tag the most recent blueprint commit as a release. - """ - api_route = client.api_url(api_version, "/blueprints/tag/%s" % args[0]) - result = client.post_url(socket_path, api_route, "") - - return handle_api_result(result, show_json)[0]
    - -
    [docs]def blueprints_undo(socket_path, api_version, args, show_json=False): - """Undo changes to a blueprint - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints undo <blueprint> <commit> Undo changes to a blueprint by reverting to the selected commit. - """ - if len(args) == 0: - log.error("undo is missing the blueprint name and commit hash") - return 1 - elif len(args) == 1: - log.error("undo is missing commit hash") - return 1 - - api_route = client.api_url(api_version, "/blueprints/undo/%s/%s" % (args[0], args[1])) - result = client.post_url(socket_path, api_route, "") - - return handle_api_result(result, show_json)[0]
    - -
    [docs]def blueprints_workspace(socket_path, api_version, args, show_json=False): - """Push the blueprint TOML to the temporary workspace storage - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - blueprints workspace <blueprint> Push the blueprint TOML to the temporary workspace storage. - """ - api_route = client.api_url(api_version, "/blueprints/workspace") - rval = 0 - for blueprint in argify(args): - if not os.path.exists(blueprint): - log.error("Missing blueprint file: %s", blueprint) - continue - blueprint_toml = open(blueprint, "r").read() - - result = client.post_url_toml(socket_path, api_route, blueprint_toml) - if handle_api_result(result, show_json)[0]: - rval = 1 - - return rval
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/cmdline.html b/docs/html/_modules/composer/cli/cmdline.html deleted file mode 100644 index f69757d0..00000000 --- a/docs/html/_modules/composer/cli/cmdline.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - composer.cli.cmdline — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.cmdline

    -#
    -# Copyright (C) 2018 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import os
    -import sys
    -import argparse
    -
    -from composer import vernum
    -from composer.cli.help import epilog
    -
    -VERSION = "{0}-{1}".format(os.path.basename(sys.argv[0]), vernum)
    -
    -
    [docs]def composer_cli_parser(): - """ Return the ArgumentParser for composer-cli""" - - parser = argparse.ArgumentParser(description="Lorax Composer commandline tool", - epilog=epilog, - formatter_class=argparse.RawDescriptionHelpFormatter, - fromfile_prefix_chars="@") - - parser.add_argument("-j", "--json", action="store_true", default=False, - help="Output the raw JSON response instead of the normal output.") - parser.add_argument("-s", "--socket", default="/run/weldr/api.socket", metavar="SOCKET", - help="Path to the socket file to listen on") - parser.add_argument("--log", dest="logfile", default=None, metavar="LOG", - help="Path to logfile (./composer-cli.log)") - parser.add_argument("-a", "--api", dest="api_version", default="1", metavar="APIVER", - help="API Version to use") - parser.add_argument("--test", dest="testmode", default=0, type=int, metavar="TESTMODE", - help="Pass test mode to compose. 1=Mock compose with fail. 2=Mock compose with finished.") - parser.add_argument("-V", action="store_true", dest="showver", - help="show program's version number and exit") - - # Commands are implemented by parsing the remaining arguments outside of argparse - parser.add_argument('args', nargs=argparse.REMAINDER) - - return parser
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/compose.html b/docs/html/_modules/composer/cli/compose.html deleted file mode 100644 index dbdaab13..00000000 --- a/docs/html/_modules/composer/cli/compose.html +++ /dev/null @@ -1,891 +0,0 @@ - - - - - - - - - - - composer.cli.compose — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.compose

    -#
    -# Copyright (C) 2018-2020 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -from datetime import datetime
    -import sys
    -import json
    -import toml
    -
    -from composer import http_client as client
    -from composer.cli.help import compose_help
    -from composer.cli.utilities import argify, handle_api_result, packageNEVRA, get_arg
    -
    -
    [docs]def compose_cmd(opts): - """Process compose commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - - This dispatches the compose commands to a function - - compose_cmd expects api to be passed. eg. - - {"version": 1, "backend": "lorax-composer"} - - """ - result = client.get_url_json(opts.socket, "/api/status") - # Get the api version and fall back to 0 if it fails. - api_version = result.get("api", "0") - backend = result.get("backend", "unknown") - api = {"version": api_version, "backend": backend} - - cmd_map = { - "list": compose_list, - "status": compose_status, - "types": compose_types, - "start": compose_start, - "log": compose_log, - "cancel": compose_cancel, - "delete": compose_delete, - "info": compose_info, - "metadata": compose_metadata, - "results": compose_results, - "logs": compose_logs, - "image": compose_image, - "start-ostree": compose_ostree, - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(compose_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown compose command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json, opts.testmode, api=api)
    - -
    [docs]def get_size(args): - """Return optional --size argument, and remaining args - - :param args: list of arguments - :type args: list of strings - :returns: (args, size) - :rtype: tuple - - - check size argument for int - - check other args for --size in wrong place - - raise error? Or just return 0? - - no size returns 0 in size - - multiply by 1024**2 to make it easier on users to specify large sizes - - """ - args, value = get_arg(args, "--size", int) - value = value * 1024**2 if value is not None else 0 - return (args, value)
    - -
    [docs]def get_parent(args): - """Return optional --parent argument, and remaining args - - :param args: list of arguments - :type args: list of strings - :returns: (args, parent) - :rtype: tuple - """ - args, value = get_arg(args, "--parent") - value = value if value is not None else "" - return (args, value)
    - -
    [docs]def get_ref(args): - """Return optional --ref argument, and remaining args - - :param args: list of arguments - :type args: list of strings - :returns: (args, parent) - :rtype: tuple - """ - args, value = get_arg(args, "--ref") - value = value if value is not None else "" - return (args, value)
    - -
    [docs]def compose_list(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Return a simple list of compose identifiers""" - - states = ("running", "waiting", "finished", "failed") - - which = set() - - if any(a not in states for a in args): - # TODO: error about unknown state - return 1 - elif not args: - which.update(states) - else: - which.update(args) - - results = [] - - if "running" in which or "waiting" in which: - api_route = client.api_url(api_version, "/compose/queue") - r = client.get_url_json(socket_path, api_route) - if "running" in which: - results += r["run"] - if "waiting" in which: - results += r["new"] - - if "finished" in which: - api_route = client.api_url(api_version, "/compose/finished") - r = client.get_url_json(socket_path, api_route) - results += r["finished"] - - if "failed" in which: - api_route = client.api_url(api_version, "/compose/failed") - r = client.get_url_json(socket_path, api_route) - results += r["failed"] - - if results: - if show_json: - print(json.dumps(results, indent=4)) - else: - list_fmt = "{id} {queue_status} {blueprint} {version} {compose_type}" - print("\n".join(list_fmt.format(**c) for c in results)) - - return 0
    - -
    [docs]def compose_status(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Return the status of all known composes - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - This doesn't map directly to an API command, it combines the results from queue, finished, - and failed so raw JSON output is not available. - """ - def get_status(compose): - return {"id": compose["id"], - "blueprint": compose["blueprint"], - "version": compose["version"], - "compose_type": compose["compose_type"], - "image_size": compose["image_size"], - "status": compose["queue_status"], - "created": compose.get("job_created"), - "started": compose.get("job_started"), - "finished": compose.get("job_finished")} - - # Sort the status in a specific order - def sort_status(a): - order = ["RUNNING", "WAITING", "FINISHED", "FAILED"] - return (order.index(a["status"]), a["blueprint"], a["version"], a["compose_type"]) - - status = [] - - # Get the composes currently in the queue - api_route = client.api_url(api_version, "/compose/queue") - result = client.get_url_json(socket_path, api_route) - status.extend(list(map(get_status, result["run"] + result["new"]))) - - # Get the list of finished composes - api_route = client.api_url(api_version, "/compose/finished") - result = client.get_url_json(socket_path, api_route) - status.extend(list(map(get_status, result["finished"]))) - - # Get the list of failed composes - api_route = client.api_url(api_version, "/compose/failed") - result = client.get_url_json(socket_path, api_route) - status.extend(list(map(get_status, result["failed"]))) - - # Sort them by status (running, waiting, finished, failed) and then by name and version. - status.sort(key=sort_status) - - if show_json: - print(json.dumps(status, indent=4)) - return 0 - - # Print them as UUID blueprint STATUS - for c in status: - if c["image_size"] > 0: - image_size = str(c["image_size"]) - else: - image_size = "" - - dt = datetime.fromtimestamp(c.get("finished") or c.get("started") or c.get("created")) - - print("%s %-8s %s %-15s %s %-16s %s" % (c["id"], c["status"], dt.strftime("%c"), c["blueprint"], - c["version"], c["compose_type"], image_size))
    - - -
    [docs]def compose_types(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Return information about the supported compose types - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - Add additional details to types that are known to composer-cli. Raw JSON output does not - include this extra information. - """ - api_route = client.api_url(api_version, "/compose/types") - result = client.get_url_json(socket_path, api_route) - if show_json: - print(json.dumps(result, indent=4)) - return 0 - - # output a plain list of identifiers, one per line - print("\n".join(t["name"] for t in result["types"] if t["enabled"]))
    - -
    [docs]def compose_start(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Start a new compose using the selected blueprint and type - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one. - :type testmode: int - :param api: Details about the API server, "version" and "backend" - :type api: dict - - compose start [--size XXX] <blueprint-name> <compose-type> [<image-name> <provider> <profile> | <image-name> <profile.toml>] - """ - if api == None: - log.error("Missing api version/backend") - return 1 - - # Get the optional size before checking other parameters - try: - args, size = get_size(args) - except (RuntimeError, ValueError) as e: - log.error(str(e)) - return 1 - - if len(args) == 0: - log.error("start is missing the blueprint name and output type") - return 1 - if len(args) == 1: - log.error("start is missing the output type") - return 1 - if len(args) == 3: - log.error("start is missing the provider and profile details") - return 1 - - config = { - "blueprint_name": args[0], - "compose_type": args[1], - "branch": "master" - } - if size > 0: - if api["backend"] == "lorax-composer": - log.warning("lorax-composer does not support --size, it will be ignored.") - else: - config["size"] = size - - if len(args) == 4: - config["upload"] = {"image_name": args[2]} - # profile TOML file (maybe) - try: - config["upload"].update(toml.load(args[3])) - except toml.TomlDecodeError as e: - log.error(str(e)) - return 1 - elif len(args) == 5: - config["upload"] = { - "image_name": args[2], - "provider": args[3], - "profile": args[4] - } - - if testmode: - test_url = "?test=%d" % testmode - else: - test_url = "" - api_route = client.api_url(api_version, "/compose" + test_url) - result = client.post_url_json(socket_path, api_route, json.dumps(config)) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - print("Compose %s added to the queue" % result["build_id"]) - - if "upload_id" in result and result["upload_id"]: - print ("Upload %s added to the upload queue" % result["upload_id"]) - - return rc
    - -
    [docs]def compose_ostree(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Start a new ostree compose using the selected blueprint and type - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one. - :type testmode: int - :param api: Details about the API server, "version" and "backend" - :type api: dict - - compose start-ostree [--size XXXX] [--parent PARENT] [--ref REF] <BLUEPRINT> <TYPE> [<IMAGE-NAME> <PROFILE.TOML>] - """ - if api == None: - log.error("Missing api version/backend") - return 1 - - if api["backend"] == "lorax-composer": - log.warning("lorax-composer doesn not support start-ostree.") - return 1 - - # Get the optional size before checking other parameters - try: - args, size = get_size(args) - args, parent = get_parent(args) - args, ref = get_ref(args) - except (RuntimeError, ValueError) as e: - log.error(str(e)) - return 1 - - if len(args) == 0: - log.error("start-ostree is missing the blueprint name, output type, and ostree details") - return 1 - if len(args) == 1: - log.error("start-ostree is missing the output type") - return 1 - if len(args) == 3: - log.error("start-ostree is missing the provider TOML file") - return 1 - - config = { - "blueprint_name": args[0], - "compose_type": args[1], - "branch": "master", - "ostree": {"ref": ref, "parent": parent}, - } - if size > 0: - config["size"] = size - - if len(args) == 4: - config["upload"] = {"image_name": args[2]} - # profile TOML file (maybe) - try: - config["upload"].update(toml.load(args[3])) - except toml.TomlDecodeError as e: - log.error(str(e)) - return 1 - - if testmode: - test_url = "?test=%d" % testmode - else: - test_url = "" - api_route = client.api_url(api_version, "/compose" + test_url) - result = client.post_url_json(socket_path, api_route, json.dumps(config)) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - print("Compose %s added to the queue" % result["build_id"]) - - if "upload_id" in result and result["upload_id"]: - print ("Upload %s added to the upload queue" % result["upload_id"]) - - return rc
    - -
    [docs]def compose_log(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Show the last part of the compose log - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose log <uuid> [<size>kB] - - This will display the last 1kB of the compose's log file. Can be used to follow progress - during the build. - """ - if len(args) == 0: - log.error("log is missing the compose build id") - return 1 - if len(args) == 2: - try: - log_size = int(args[1]) - except ValueError: - log.error("Log size must be an integer.") - return 1 - else: - log_size = 1024 - - api_route = client.api_url(api_version, "/compose/log/%s?size=%d" % (args[0], log_size)) - try: - result = client.get_url_raw(socket_path, api_route) - except RuntimeError as e: - print(str(e)) - return 1 - - print(result) - return 0
    - -
    [docs]def compose_cancel(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Cancel a running compose - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose cancel <uuid> - - This will cancel a running compose. It does nothing if the compose has finished. - """ - if len(args) == 0: - log.error("cancel is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/cancel/%s" % args[0]) - result = client.delete_url_json(socket_path, api_route) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def compose_delete(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Delete a finished compose's results - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose delete <uuid,...> - - Delete the listed compose results. It will only delete results for composes that have finished - or failed, not a running compose. - """ - if len(args) == 0: - log.error("delete is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/delete/%s" % (",".join(argify(args)))) - result = client.delete_url_json(socket_path, api_route) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def compose_info(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Return detailed information about the compose - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose info <uuid> - - This returns information about the compose, including the blueprint and the dependencies. - """ - if len(args) == 0: - log.error("info is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/info/%s" % args[0]) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - if result["image_size"] > 0: - image_size = str(result["image_size"]) - else: - image_size = "" - - - print("%s %-8s %-15s %s %-16s %s" % (result["id"], - result["queue_status"], - result["blueprint"]["name"], - result["blueprint"]["version"], - result["compose_type"], - image_size)) - print("Packages:") - for p in result["blueprint"]["packages"]: - print(" %s-%s" % (p["name"], p["version"])) - - print("Modules:") - for m in result["blueprint"]["modules"]: - print(" %s-%s" % (m["name"], m["version"])) - - print("Dependencies:") - for d in result["deps"]["packages"]: - print(" " + packageNEVRA(d)) - - return rc
    - -
    [docs]def compose_metadata(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Download a tar file of the compose's metadata - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose metadata <uuid> - - Saves the metadata as uuid-metadata.tar - """ - if len(args) == 0: - log.error("metadata is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/metadata/%s" % args[0]) - try: - rc = client.download_file(socket_path, api_route) - except RuntimeError as e: - print(str(e)) - rc = 1 - - return rc
    - -
    [docs]def compose_results(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Download a tar file of the compose's results - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose results <uuid> - - The results includes the metadata, output image, and logs. - It is saved as uuid.tar - """ - if len(args) == 0: - log.error("results is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/results/%s" % args[0]) - try: - rc = client.download_file(socket_path, api_route, sys.stdout.isatty()) - except RuntimeError as e: - print(str(e)) - rc = 1 - - return rc
    - -
    [docs]def compose_logs(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Download a tar of the compose's logs - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose logs <uuid> - - Saves the logs as uuid-logs.tar - """ - if len(args) == 0: - log.error("logs is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/logs/%s" % args[0]) - try: - rc = client.download_file(socket_path, api_route, sys.stdout.isatty()) - except RuntimeError as e: - print(str(e)) - rc = 1 - - return rc
    - -
    [docs]def compose_image(socket_path, api_version, args, show_json=False, testmode=0, api=None): - """Download the compose's output image - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - compose image <uuid> - - This downloads only the result image, saving it as the image name, which depends on the type - of compose that was selected. - """ - if len(args) == 0: - log.error("logs is missing the compose build id") - return 1 - - api_route = client.api_url(api_version, "/compose/image/%s" % args[0]) - try: - rc = client.download_file(socket_path, api_route, sys.stdout.isatty()) - except RuntimeError as e: - print(str(e)) - rc = 1 - - return rc
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/modules.html b/docs/html/_modules/composer/cli/modules.html deleted file mode 100644 index 9cfc2738..00000000 --- a/docs/html/_modules/composer/cli/modules.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - - - composer.cli.modules — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.modules

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -from composer import http_client as client
    -from composer.cli.help import modules_help
    -from composer.cli.utilities import handle_api_result
    -
    -
    [docs]def modules_cmd(opts): - """Process modules commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - """ - if opts.args[1] == "help" or opts.args[1] == "--help": - print(modules_help) - return 0 - elif opts.args[1] != "list": - log.error("Unknown modules command: %s", opts.args[1]) - return 1 - - api_route = client.api_url(opts.api_version, "/modules/list") - result = client.get_url_json_unlimited(opts.socket, api_route) - (rc, exit_now) = handle_api_result(result, opts.json) - if exit_now: - return rc - - # "list" should output a plain list of identifiers, one per line. - print("\n".join(r["name"] for r in result["modules"])) - - return rc
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/projects.html b/docs/html/_modules/composer/cli/projects.html deleted file mode 100644 index 096e715a..00000000 --- a/docs/html/_modules/composer/cli/projects.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - - - - composer.cli.projects — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.projects

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import textwrap
    -
    -from composer import http_client as client
    -from composer.cli.help import projects_help
    -from composer.cli.utilities import handle_api_result
    -
    -
    [docs]def projects_cmd(opts): - """Process projects commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - """ - cmd_map = { - "list": projects_list, - "info": projects_info, - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(projects_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown projects command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json)
    - -
    [docs]def projects_list(socket_path, api_version, args, show_json=False): - """Output the list of available projects - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - projects list - """ - api_route = client.api_url(api_version, "/projects/list") - result = client.get_url_json_unlimited(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for proj in result["projects"]: - for k in [field for field in ("name", "summary", "homepage", "description") if proj[field]]: - print("%s: %s" % (k.title(), textwrap.fill(proj[k], subsequent_indent=" " * (len(k)+2)))) - print("\n\n") - - return rc
    - -
    [docs]def projects_info(socket_path, api_version, args, show_json=False): - """Output info on a list of projects - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - projects info <project,...> - """ - if len(args) == 0: - log.error("projects info is missing the packages") - return 1 - - api_route = client.api_url(api_version, "/projects/info/%s" % ",".join(args)) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - for proj in result["projects"]: - for k in [field for field in ("name", "summary", "homepage", "description") if proj[field]]: - print("%s: %s" % (k.title(), textwrap.fill(proj[k], subsequent_indent=" " * (len(k)+2)))) - print("Builds: ") - for build in proj["builds"]: - print(" %s%s-%s.%s at %s for %s" % ("" if not build["epoch"] else str(build["epoch"]) + ":", - build["source"]["version"], - build["release"], - build["arch"], - build["build_time"], - build["changelog"])) - print("") - return rc
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/providers.html b/docs/html/_modules/composer/cli/providers.html deleted file mode 100644 index 10d7523a..00000000 --- a/docs/html/_modules/composer/cli/providers.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - - - - - composer.cli.providers — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.providers

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import json
    -import toml
    -import os
    -
    -from composer import http_client as client
    -from composer.cli.help import providers_help
    -from composer.cli.utilities import handle_api_result, toml_filename
    -
    -
    [docs]def providers_cmd(opts): - """Process providers commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - - This dispatches the providers commands to a function - """ - cmd_map = { - "list": providers_list, - "info": providers_info, - "show": providers_show, - "push": providers_push, - "save": providers_save, - "delete": providers_delete, - "template": providers_template - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(providers_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown providers command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json, opts.testmode)
    - -
    [docs]def providers_list(socket_path, api_version, args, show_json=False, testmode=0): - """Return the list of providers - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers list - """ - api_route = client.api_url(api_version, "/upload/providers") - r = client.get_url_json(socket_path, api_route) - results = r["providers"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - else: - if len(args) == 1: - if args[0] not in results: - log.error("%s is not a valid provider", args[0]) - return 1 - print("\n".join(sorted(results[args[0]]["profiles"].keys()))) - else: - print("\n".join(sorted(results.keys()))) - - return 0
    - -
    [docs]def providers_info(socket_path, api_version, args, show_json=False, testmode=0): - """Show information about each provider - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers info <PROVIDER> - """ - if len(args) == 0: - log.error("info is missing the provider name") - return 1 - - api_route = client.api_url(api_version, "/upload/providers") - r = client.get_url_json(socket_path, api_route) - results = r["providers"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - else: - if args[0] not in results: - log.error("%s is not a valid provider", args[0]) - return 1 - p = results[args[0]] - print("%s supports these image types: %s" % (p["display"], ", ".join(p["supported_types"]))) - print("Settings:") - for k in p["settings-info"]: - f = p["settings-info"][k] - print(" %-20s: %s is a %s" % (k, f["display"], f["type"])) - - return 0
    - -
    [docs]def providers_show(socket_path, api_version, args, show_json=False, testmode=0): - """Return details about a provider - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers show <provider> <profile> - """ - if len(args) == 0: - log.error("show is missing the provider name") - return 1 - if len(args) == 1: - log.error("show is missing the profile name") - return 1 - - api_route = client.api_url(api_version, "/upload/providers") - r = client.get_url_json(socket_path, api_route) - results = r["providers"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - else: - if args[0] not in results: - log.error("%s is not a valid provider", args[0]) - return 1 - if args[1] not in results[args[0]]["profiles"]: - log.error("%s is not a valid %s profile", args[1], args[0]) - return 1 - - # Print the details for this profile - # fields are different for each provider, so we just print out the key:values - for k in results[args[0]]["profiles"][args[1]]: - print("%s: %s" % (k, results[args[0]]["profiles"][args[1]][k])) - return 0
    - -
    [docs]def providers_push(socket_path, api_version, args, show_json=False, testmode=0): - """Add a new provider profile or overwrite an existing one - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers push <profile.toml> - - """ - if len(args) == 0: - log.error("push is missing the profile TOML file") - return 1 - if not os.path.exists(args[0]): - log.error("Missing profile TOML file: %s", args[0]) - return 1 - - api_route = client.api_url(api_version, "/upload/providers/save") - profile = toml.load(args[0]) - result = client.post_url_json(socket_path, api_route, json.dumps(profile)) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def providers_save(socket_path, api_version, args, show_json=False, testmode=0): - """Save a provider's profile to a TOML file - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers save <provider> <profile> - - """ - if len(args) == 0: - log.error("save is missing the provider name") - return 1 - if len(args) == 1: - log.error("save is missing the profile name") - return 1 - - api_route = client.api_url(api_version, "/upload/providers") - r = client.get_url_json(socket_path, api_route) - results = r["providers"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - else: - if args[0] not in results: - log.error("%s is not a valid provider", args[0]) - return 1 - if args[1] not in results[args[0]]["profiles"]: - log.error("%s is not a valid %s profile", args[1], args[0]) - return 1 - - profile = { - "provider": args[0], - "profile": args[1], - "settings": results[args[0]]["profiles"][args[1]] - } - open(toml_filename(args[1]), "w").write(toml.dumps(profile)) - - return 0
    - -
    [docs]def providers_delete(socket_path, api_version, args, show_json=False, testmode=0): - """Delete a profile from a provider - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers delete <provider> <profile> - - """ - if len(args) == 0: - log.error("delete is missing the provider name") - return 1 - if len(args) == 1: - log.error("delete is missing the profile name") - return 1 - - api_route = client.api_url(api_version, "/upload/providers/delete/%s/%s" % (args[0], args[1])) - result = client.delete_url_json(socket_path, api_route) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def providers_template(socket_path, api_version, args, show_json=False, testmode=0): - """Return a TOML template for setting the provider's fields - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - providers template <provider> - """ - if len(args) == 0: - log.error("template is missing the provider name") - return 1 - - api_route = client.api_url(api_version, "/upload/providers") - r = client.get_url_json(socket_path, api_route) - results = r["providers"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - return 0 - - if args[0] not in results: - log.error("%s is not a valid provider", args[0]) - return 1 - - template = {"provider": args[0]} - settings = results[args[0]]["settings-info"] - template["settings"] = dict([(k, settings[k]["display"]) for k in settings]) - print(toml.dumps(template)) - - return 0
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/sources.html b/docs/html/_modules/composer/cli/sources.html deleted file mode 100644 index d71d0fc0..00000000 --- a/docs/html/_modules/composer/cli/sources.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - - - - - - composer.cli.sources — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.sources

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import os
    -
    -from composer import http_client as client
    -from composer.cli.help import sources_help
    -from composer.cli.utilities import argify, handle_api_result
    -
    -
    [docs]def sources_cmd(opts): - """Process sources commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - """ - cmd_map = { - "list": sources_list, - "info": sources_info, - "add": sources_add, - "change": sources_add, - "delete": sources_delete, - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(sources_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown sources command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json)
    - -
    [docs]def sources_list(socket_path, api_version, args, show_json=False): - """Output the list of available sources - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - sources list - """ - api_route = client.api_url(api_version, "/projects/source/list") - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - # "list" should output a plain list of identifiers, one per line. - print("\n".join(result["sources"])) - return rc
    - -
    [docs]def sources_info(socket_path, api_version, args, show_json=False): - """Output info on a list of projects - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - sources info <source-name> - """ - if len(args) == 0: - log.error("sources info is missing the name of the source") - return 1 - - if show_json: - api_route = client.api_url(api_version, "/projects/source/info/%s" % ",".join(args)) - result = client.get_url_json(socket_path, api_route) - rc = handle_api_result(result, show_json)[0] - else: - api_route = client.api_url(api_version, "/projects/source/info/%s?format=toml" % ",".join(args)) - try: - result = client.get_url_raw(socket_path, api_route) - print(result) - rc = 0 - except RuntimeError as e: - print(str(e)) - rc = 1 - - return rc
    - -
    [docs]def sources_add(socket_path, api_version, args, show_json=False): - """Add or change a source - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - sources add <source.toml> - """ - api_route = client.api_url(api_version, "/projects/source/new") - rval = 0 - for source in argify(args): - if not os.path.exists(source): - log.error("Missing source file: %s", source) - continue - source_toml = open(source, "r").read() - - result = client.post_url_toml(socket_path, api_route, source_toml) - if handle_api_result(result, show_json)[0]: - rval = 1 - return rval
    - -
    [docs]def sources_delete(socket_path, api_version, args, show_json=False): - """Delete a source - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - - sources delete <source-name> - """ - api_route = client.api_url(api_version, "/projects/source/delete/%s" % args[0]) - result = client.delete_url_json(socket_path, api_route) - - return handle_api_result(result, show_json)[0]
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/status.html b/docs/html/_modules/composer/cli/status.html deleted file mode 100644 index a86ee4c9..00000000 --- a/docs/html/_modules/composer/cli/status.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - composer.cli.status — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.status

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -from composer import http_client as client
    -from composer.cli.help import status_help
    -from composer.cli.utilities import handle_api_result
    -
    -
    [docs]def status_cmd(opts): - """Process status commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - """ - if opts.args[1] == "help" or opts.args[1] == "--help": - print(status_help) - return 0 - elif opts.args[1] != "show": - log.error("Unknown status command: %s", opts.args[1]) - return 1 - - result = client.get_url_json(opts.socket, "/api/status") - (rc, exit_now) = handle_api_result(result, opts.json) - if exit_now: - return rc - - print("API server status:") - print(" Database version: " + result["db_version"]) - print(" Database supported: %s" % result["db_supported"]) - print(" Schema version: " + result["schema_version"]) - print(" API version: " + result["api"]) - print(" Backend: " + result["backend"]) - print(" Build: " + result["build"]) - - if result["msgs"]: - print("Error messages:") - print("\n".join([" " + r for r in result["msgs"]])) - - return rc
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/upload.html b/docs/html/_modules/composer/cli/upload.html deleted file mode 100644 index 252e4863..00000000 --- a/docs/html/_modules/composer/cli/upload.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - - - - - composer.cli.upload — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.upload

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import json
    -import toml
    -import os
    -
    -from composer import http_client as client
    -from composer.cli.help import upload_help
    -from composer.cli.utilities import handle_api_result
    -
    -
    [docs]def upload_cmd(opts): - """Process upload commands - - :param opts: Cmdline arguments - :type opts: argparse.Namespace - :returns: Value to return from sys.exit() - :rtype: int - - This dispatches the upload commands to a function - """ - cmd_map = { - "list": upload_list, - "info": upload_info, - "start": upload_start, - "log": upload_log, - "cancel": upload_cancel, - "delete": upload_delete, - "reset": upload_reset, - } - if opts.args[1] == "help" or opts.args[1] == "--help": - print(upload_help) - return 0 - elif opts.args[1] not in cmd_map: - log.error("Unknown upload command: %s", opts.args[1]) - return 1 - - return cmd_map[opts.args[1]](opts.socket, opts.api_version, opts.args[2:], opts.json, opts.testmode)
    - -
    [docs]def upload_list(socket_path, api_version, args, show_json=False, testmode=0): - """Return the composes and their associated upload uuids and status - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload list - """ - api_route = client.api_url(api_version, "/compose/finished") - r = client.get_url_json(socket_path, api_route) - results = r["finished"] - if not results: - return 0 - - if show_json: - print(json.dumps(results, indent=4)) - else: - compose_fmt = "{id} {queue_status} {blueprint} {version} {compose_type}" - upload_fmt = ' {uuid} "{image_name}" {provider_name} {status}' - for c in results: - print(compose_fmt.format(**c)) - print("\n".join(upload_fmt.format(**u) for u in c["uploads"])) - print() - - return 0
    - -
    [docs]def upload_info(socket_path, api_version, args, show_json=False, testmode=0): - """Return detailed information about the upload - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload info <uuid> - - This returns information about the upload, including uuid, name, status, service, and image. - """ - if len(args) == 0: - log.error("info is missing the upload uuid") - return 1 - - api_route = client.api_url(api_version, "/upload/info/%s" % args[0]) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - image_path = result["upload"]["image_path"] - print("%s %-8s %-15s %-8s %s" % (result["upload"]["uuid"], - result["upload"]["status"], - result["upload"]["image_name"], - result["upload"]["provider_name"], - os.path.basename(image_path) if image_path else "UNFINISHED")) - - return rc
    - -
    [docs]def upload_start(socket_path, api_version, args, show_json=False, testmode=0): - """Start upload up a build uuid image - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload start <build-uuid> <image-name> [<provider> <profile> | <profile.toml>] - """ - if len(args) == 0: - log.error("start is missing the compose build id") - return 1 - if len(args) == 1: - log.error("start is missing the image name") - return 1 - if len(args) == 2: - log.error("start is missing the provider and profile details") - return 1 - - body = {"image_name": args[1]} - if len(args) == 3: - try: - body.update(toml.load(args[2])) - except toml.TomlDecodeError as e: - log.error(str(e)) - return 1 - elif len(args) == 4: - body["provider"] = args[2] - body["profile"] = args[3] - else: - log.error("start has incorrect number of arguments") - return 1 - - api_route = client.api_url(api_version, "/compose/uploads/schedule/%s" % args[0]) - result = client.post_url_json(socket_path, api_route, json.dumps(body)) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - print("Upload %s added to the queue" % result["upload_id"]) - return rc
    - -
    [docs]def upload_log(socket_path, api_version, args, show_json=False, testmode=0): - """Return the upload log - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload log <build-uuid> - """ - if len(args) == 0: - log.error("log is missing the upload uuid") - return 1 - - api_route = client.api_url(api_version, "/upload/log/%s" % args[0]) - result = client.get_url_json(socket_path, api_route) - (rc, exit_now) = handle_api_result(result, show_json) - if exit_now: - return rc - - print("Upload log for %s:\n" % result["upload_id"]) - print(result["log"]) - - return 0
    - -
    [docs]def upload_cancel(socket_path, api_version, args, show_json=False, testmode=0): - """Cancel the queued or running upload - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload cancel <build-uuid> - """ - if len(args) == 0: - log.error("cancel is missing the upload uuid") - return 1 - - api_route = client.api_url(api_version, "/upload/cancel/%s" % args[0]) - result = client.delete_url_json(socket_path, api_route) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def upload_delete(socket_path, api_version, args, show_json=False, testmode=0): - """Delete an upload and remove it from the build - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload delete <build-uuid> - """ - if len(args) == 0: - log.error("delete is missing the upload uuid") - return 1 - - api_route = client.api_url(api_version, "/upload/delete/%s" % args[0]) - result = client.delete_url_json(socket_path, api_route) - return handle_api_result(result, show_json)[0]
    - -
    [docs]def upload_reset(socket_path, api_version, args, show_json=False, testmode=0): - """Reset the upload and execute it again - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param api_version: Version of the API to talk to. eg. "0" - :type api_version: str - :param args: List of remaining arguments from the cmdline - :type args: list of str - :param show_json: Set to True to show the JSON output instead of the human readable output - :type show_json: bool - :param testmode: unused in this function - :type testmode: int - - upload reset <build-uuid> - """ - if len(args) == 0: - log.error("reset is missing the upload uuid") - return 1 - - api_route = client.api_url(api_version, "/upload/reset/%s" % args[0]) - result = client.post_url_json(socket_path, api_route, json.dumps({})) - return handle_api_result(result, show_json)[0]
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/cli/utilities.html b/docs/html/_modules/composer/cli/utilities.html deleted file mode 100644 index f26f0c20..00000000 --- a/docs/html/_modules/composer/cli/utilities.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - - - - composer.cli.utilities — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.cli.utilities

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import json
    -
    -
    [docs]def argify(args): - """Take a list of human args and return a list with each item - - :param args: list of strings with possible commas and spaces - :type args: list of str - :returns: List of all the items - :rtype: list of str - - Examples: - - ["one,two", "three", ",four", ",five,"] returns ["one", "two", "three", "four", "five"] - """ - return [i for i in [arg for entry in args for arg in entry.split(",")] if i]
    - -
    [docs]def toml_filename(blueprint_name): - """Convert a blueprint name into a filename.toml - - :param blueprint_name: The blueprint's name - :type blueprint_name: str - :returns: The blueprint name with ' ' converted to - and .toml appended - :rtype: str - """ - return blueprint_name.replace(" ", "-") + ".toml"
    - -
    [docs]def frozen_toml_filename(blueprint_name): - """Convert a blueprint name into a filename.toml - - :param blueprint_name: The blueprint's name - :type blueprint_name: str - :returns: The blueprint name with ' ' converted to - and .toml appended - :rtype: str - """ - return blueprint_name.replace(" ", "-") + ".frozen.toml"
    - -
    [docs]def handle_api_result(result, show_json=False): - """Log any errors, return the correct value - - :param result: JSON result from the http query - :type result: dict - :rtype: tuple - :returns: (rc, should_exit_now) - - Return the correct rc for the program (0 or 1), and whether or - not to continue processing the results. - """ - if show_json: - print(json.dumps(result, indent=4)) - else: - for err in result.get("errors", []): - log.error(err["msg"]) - - # What's the rc? If status is present, use that - # If not, use length of errors - if "status" in result: - rc = int(not result["status"]) - else: - rc = int(len(result.get("errors", [])) > 0) - - # Caller should return if showing json, or status was present and False - exit_now = show_json or ("status" in result and rc) - return (rc, exit_now)
    - -
    [docs]def packageNEVRA(pkg): - """Return the package info as a NEVRA - - :param pkg: The package details - :type pkg: dict - :returns: name-[epoch:]version-release-arch - :rtype: str - """ - if pkg["epoch"]: - return "%s-%s:%s-%s.%s" % (pkg["name"], pkg["epoch"], pkg["version"], pkg["release"], pkg["arch"]) - else: - return "%s-%s-%s.%s" % (pkg["name"], pkg["version"], pkg["release"], pkg["arch"])
    - -
    [docs]def get_arg(args, name, argtype=None): - """Return optional value from args, and remaining args - - :param args: list of arguments - :type args: list of strings - :param name: The argument to remove from the args list - :type name: string - :param argtype: Type to use for checking the argument value - :type argtype: type - :returns: (args, value) - :rtype: tuple - - This removes the optional argument and value from the argument list, returns the new list, - and the value of the argument. - """ - try: - idx = args.index(name) - if len(args) < idx+2: - raise RuntimeError(f"{name} is missing the value") - value = args[idx+1] - except ValueError: - return (args, None) - - if argtype: - value = argtype(value) - - return (args[:idx]+args[idx+2:], value)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/http_client.html b/docs/html/_modules/composer/http_client.html deleted file mode 100644 index edaa8d47..00000000 --- a/docs/html/_modules/composer/http_client.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - - - - - - - composer.http_client — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.http_client

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("composer-cli")
    -
    -import os
    -import sys
    -import json
    -from urllib.parse import urlparse, urlunparse
    -
    -from composer.unix_socket import UnixHTTPConnectionPool
    -
    -
    [docs]def api_url(api_version, url): - """Return the versioned path to the API route - - :param api_version: The version of the API to talk to. eg. "0" - :type api_version: str - :param url: The API route to talk to - :type url: str - :returns: The full url to use for the route and API version - :rtype: str - """ - return os.path.normpath("/api/v%s/%s" % (api_version, url))
    - -
    [docs]def append_query(url, query): - """Add a query argument to a URL - - The query should be of the form "param1=what&param2=ever", i.e., no - leading '?'. The new query data will be appended to any existing - query string. - - :param url: The original URL - :type url: str - :param query: The query to append - :type query: str - :returns: The new URL with the query argument included - :rtype: str - """ - - url_parts = urlparse(url) - if url_parts.query: - new_query = url_parts.query + "&" + query - else: - new_query = query - return urlunparse([url_parts[0], url_parts[1], url_parts[2], - url_parts[3], new_query, url_parts[5]])
    - -
    [docs]def get_url_raw(socket_path, url): - """Return the raw results of a GET request - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to request - :type url: str - :returns: The raw response from the server - :rtype: str - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("GET", url) - if r.status == 400: - err = json.loads(r.data.decode("utf-8")) - if "status" in err and err["status"] == False: - msgs = [e["msg"] for e in err["errors"]] - raise RuntimeError(", ".join(msgs)) - - return r.data.decode('utf-8')
    - -
    [docs]def get_url_json(socket_path, url): - """Return the JSON results of a GET request - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to request - :type url: str - :returns: The json response from the server - :rtype: dict - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("GET", url) - return json.loads(r.data.decode('utf-8'))
    - -
    [docs]def get_url_json_unlimited(socket_path, url, total_fn=None): - """Return the JSON results of a GET request - - For URLs that use offset/limit arguments, this command will - fetch all results for the given request. - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to request - :type url: str - :returns: The json response from the server - :rtype: dict - """ - def default_total_fn(data): - """Return the total number of available results""" - return data["total"] - - http = UnixHTTPConnectionPool(socket_path) - - # Start with limit=0 to just get the number of objects - total_url = append_query(url, "limit=0") - r_total = http.request("GET", total_url) - json_total = json.loads(r_total.data.decode('utf-8')) - - # Where to get the total from - if not total_fn: - total_fn = default_total_fn - - # Add the "total" returned by limit=0 as the new limit - unlimited_url = append_query(url, "limit=%d" % total_fn(json_total)) - r_unlimited = http.request("GET", unlimited_url) - return json.loads(r_unlimited.data.decode('utf-8'))
    - -
    [docs]def delete_url_json(socket_path, url): - """Send a DELETE request to the url and return JSON response - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to send DELETE to - :type url: str - :returns: The json response from the server - :rtype: dict - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("DELETE", url) - return json.loads(r.data.decode("utf-8"))
    - -
    [docs]def post_url(socket_path, url, body): - """POST raw data to the URL - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to send POST to - :type url: str - :param body: The data for the body of the POST - :type body: str - :returns: The json response from the server - :rtype: dict - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("POST", url, - body=body.encode("utf-8")) - return json.loads(r.data.decode("utf-8"))
    - -
    [docs]def post_url_toml(socket_path, url, body): - """POST a TOML string to the URL - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to send POST to - :type url: str - :param body: The data for the body of the POST - :type body: str - :returns: The json response from the server - :rtype: dict - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("POST", url, - body=body.encode("utf-8"), - headers={"Content-Type": "text/x-toml"}) - return json.loads(r.data.decode("utf-8"))
    - -
    [docs]def post_url_json(socket_path, url, body): - """POST some JSON data to the URL - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to send POST to - :type url: str - :param body: The data for the body of the POST - :type body: str - :returns: The json response from the server - :rtype: dict - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("POST", url, - body=body.encode("utf-8"), - headers={"Content-Type": "application/json"}) - return json.loads(r.data.decode("utf-8"))
    - -
    [docs]def get_filename(headers): - """Get the filename from the response header - - :param response: The urllib3 response object - :type response: Response - :raises: RuntimeError if it cannot find a filename in the header - :returns: Filename from content-disposition header - :rtype: str - """ - log.debug("Headers = %s", headers) - if "content-disposition" not in headers: - raise RuntimeError("No Content-Disposition header; cannot get filename") - - try: - k, _, v = headers["content-disposition"].split(";")[1].strip().partition("=") - if k != "filename": - raise RuntimeError("No filename= found in content-disposition header") - except RuntimeError: - raise - except Exception as e: - raise RuntimeError("Error parsing filename from content-disposition header: %s" % str(e)) - - return os.path.basename(v)
    - -
    [docs]def download_file(socket_path, url, progress=True): - """Download a file, saving it to the CWD with the included filename - - :param socket_path: Path to the Unix socket to use for API communication - :type socket_path: str - :param url: URL to send POST to - :type url: str - """ - http = UnixHTTPConnectionPool(socket_path) - r = http.request("GET", url, preload_content=False) - if r.status == 400: - err = json.loads(r.data.decode("utf-8")) - if not err["status"]: - msgs = [e["msg"] for e in err["errors"]] - raise RuntimeError(", ".join(msgs)) - - filename = get_filename(r.headers) - if os.path.exists(filename): - msg = "%s exists, skipping download" % filename - log.error(msg) - raise RuntimeError(msg) - - with open(filename, "wb") as f: - while True: - data = r.read(10 * 1024**2) - if not data: - break - f.write(data) - - if progress: - data_written = f.tell() - if data_written > 5 * 1024**2: - sys.stdout.write("%s: %0.2f MB \r" % (filename, data_written / 1024**2)) - else: - sys.stdout.write("%s: %0.2f kB\r" % (filename, data_written / 1024)) - sys.stdout.flush() - - print("") - r.release_conn() - - return 0
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/composer/unix_socket.html b/docs/html/_modules/composer/unix_socket.html deleted file mode 100644 index cd2f95b9..00000000 --- a/docs/html/_modules/composer/unix_socket.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - composer.unix_socket — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for composer.unix_socket

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import http.client
    -import socket
    -import urllib3
    -
    -
    -# These 2 classes were adapted and simplified for use with just urllib3.
    -# Originally from https://github.com/msabramo/requests-unixsocket/blob/master/requests_unixsocket/adapters.py
    -
    -# The following was adapted from some code from docker-py
    -# https://github.com/docker/docker-py/blob/master/docker/transport/unixconn.py
    -
    [docs]class UnixHTTPConnection(http.client.HTTPConnection, object): - - def __init__(self, socket_path, timeout=60*5): - """Create an HTTP connection to a unix domain socket - - :param socket_path: The path to the Unix domain socket - :param timeout: Number of seconds to timeout the connection - """ - super(UnixHTTPConnection, self).__init__('localhost', timeout=timeout) - self.socket_path = socket_path - self.sock = None - - def __del__(self): # base class does not have d'tor - if self.sock: - self.sock.close() - -
    [docs] def connect(self): - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - sock.settimeout(self.timeout) - sock.connect(self.socket_path) - self.sock = sock
    - -
    [docs]class UnixHTTPConnectionPool(urllib3.connectionpool.HTTPConnectionPool): - - def __init__(self, socket_path, timeout=60*5): - """Create a connection pool using a Unix domain socket - - :param socket_path: The path to the Unix domain socket - :param timeout: Number of seconds to timeout the connection - - NOTE: retries are disabled for these connections, they are never useful - """ - super(UnixHTTPConnectionPool, self).__init__('localhost', timeout=timeout, retries=False) - self.socket_path = socket_path - - def _new_conn(self): - return UnixHTTPConnection(self.socket_path, self.timeout)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/index.html b/docs/html/_modules/index.html index d81c393e..f8eb5be9 100644 --- a/docs/html/_modules/index.html +++ b/docs/html/_modules/index.html @@ -1,38 +1,38 @@ - - + - + - + + + Overview: module code — Lorax 34.10 documentation + + + + + + - Overview: module code — Lorax 34.3 documentation - + - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    @@ -233,7 +206,6 @@ - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for lifted.config

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -from pylorax.sysutils import joinpaths
    -
    -
    [docs]def configure(conf): - """Add lifted settings to the configuration - - :param conf: configuration object - :type conf: ComposerConfig - :returns: None - - This uses the composer.share_dir and composer.lib_dir as the base - directories for the settings. - """ - share_dir = conf.get("composer", "share_dir") - lib_dir = conf.get("composer", "lib_dir") - - conf.add_section("upload") - conf.set("upload", "providers_dir", joinpaths(share_dir, "/lifted/providers/")) - conf.set("upload", "queue_dir", joinpaths(lib_dir, "/upload/queue/")) - conf.set("upload", "settings_dir", joinpaths(lib_dir, "/upload/settings/"))
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/lifted/providers.html b/docs/html/_modules/lifted/providers.html deleted file mode 100644 index 577205c6..00000000 --- a/docs/html/_modules/lifted/providers.html +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - - - - - - lifted.providers — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for lifted.providers

    -#
    -# Copyright (C) 2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -from glob import glob
    -import os
    -import re
    -import stat
    -
    -import pylorax.api.toml as toml
    -
    -
    -def _get_profile_path(ucfg, provider_name, profile, exists=True):
    -    """Helper to return the directory and path for a provider's profile file
    -
    -    :param ucfg: upload config
    -    :type ucfg: object
    -    :param provider_name: the name of the cloud provider, e.g. "azure"
    -    :type provider_name: str
    -    :param profile: the name of the profile to save
    -    :type profile: str != ""
    -    :returns: Full path of the profile .toml file
    -    :rtype: str
    -    :raises: ValueError when passed invalid settings or an invalid profile name
    -    :raises: RuntimeError when the provider or profile couldn't be found
    -    """
    -    # Make sure no path elements are present
    -    profile = os.path.basename(profile)
    -    provider_name = os.path.basename(provider_name)
    -    if not profile:
    -        raise ValueError("Profile name cannot be empty!")
    -    if not provider_name:
    -        raise ValueError("Provider name cannot be empty!")
    -
    -    directory = os.path.join(ucfg["settings_dir"], provider_name)
    -    # create the settings directory if it doesn't exist
    -    os.makedirs(directory, exist_ok=True)
    -
    -    path = os.path.join(directory, f"{profile}.toml")
    -    if exists and not os.path.isfile(path):
    -        raise RuntimeError(f'Couldn\'t find profile "{profile}"!')
    -
    -    return os.path.abspath(path)
    -
    -
    [docs]def resolve_provider(ucfg, provider_name): - """Get information about the specified provider as defined in that - provider's `provider.toml`, including the provider's display name and expected - settings. - - At a minimum, each setting has a display name (that likely differs from its - snake_case name) and a type. Currently, there are two types of settings: - string and boolean. String settings can optionally have a "placeholder" - value for use on the front end and a "regex" for making sure that a value - follows an expected pattern. - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the provider to look for - :type provider_name: str - :raises: RuntimeError when the provider couldn't be found - :returns: the provider - :rtype: dict - """ - # Make sure no path elements are present - provider_name = os.path.basename(provider_name) - path = os.path.join(ucfg["providers_dir"], provider_name, "provider.toml") - try: - with open(path) as provider_file: - provider = toml.load(provider_file) - except OSError as error: - raise RuntimeError(f'Couldn\'t find provider "{provider_name}"!') from error - - return provider
    - - -
    [docs]def load_profiles(ucfg, provider_name): - """Return all settings profiles associated with a provider - - :param ucfg: upload config - :type ucfg: object - :param provider_name: name a provider to find profiles for - :type provider_name: str - :returns: a dict of settings dicts, keyed by profile name - :rtype: dict - """ - # Make sure no path elements are present - provider_name = os.path.basename(provider_name) - - def load_path(path): - with open(path) as file: - return toml.load(file) - - def get_name(path): - return os.path.splitext(os.path.basename(path))[0] - - paths = glob(os.path.join(ucfg["settings_dir"], provider_name, "*")) - return {get_name(path): load_path(path) for path in paths}
    - - -
    [docs]def resolve_playbook_path(ucfg, provider_name): - """Given a provider's name, return the path to its playbook - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the provider to find the playbook for - :type provider_name: str - :raises: RuntimeError when the provider couldn't be found - :returns: the path to the playbook - :rtype: str - """ - # Make sure no path elements are present - provider_name = os.path.basename(provider_name) - - path = os.path.join(ucfg["providers_dir"], provider_name, "playbook.yaml") - if not os.path.isfile(path): - raise RuntimeError(f'Couldn\'t find playbook for "{provider_name}"!') - return path
    - - -
    [docs]def list_providers(ucfg): - """List the names of the available upload providers - - :param ucfg: upload config - :type ucfg: object - :returns: a list of all available provider_names - :rtype: list of str - """ - paths = glob(os.path.join(ucfg["providers_dir"], "*")) - return sorted(os.path.basename(path) for path in paths)
    - - -
    [docs]def validate_settings(ucfg, provider_name, settings, image_name=None): - """Raise a ValueError if any settings are invalid - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the provider to validate the settings against - :type provider_name: str - :param settings: the settings to validate - :type settings: dict - :param image_name: optionally check whether an image_name is valid - :type image_name: str - :raises: ValueError when the passed settings are invalid - :raises: RuntimeError when provider_name can't be found - """ - if image_name == "": - raise ValueError("Image name cannot be empty!") - type_map = {"string": str, "boolean": bool} - settings_info = resolve_provider(ucfg, provider_name)["settings-info"] - for key, value in settings.items(): - if key not in settings_info: - raise ValueError(f'Received unexpected setting: "{key}"!') - setting_type = settings_info[key]["type"] - correct_type = type_map[setting_type] - if not isinstance(value, correct_type): - raise ValueError( - f'Expected a {correct_type} for "{key}", received a {type(value)}!' - ) - if setting_type == "string" and "regex" in settings_info[key]: - if not re.match(settings_info[key]["regex"], value): - raise ValueError(f'Value "{value}" is invalid for setting "{key}"!')
    - - -
    [docs]def save_settings(ucfg, provider_name, profile, settings): - """Save (and overwrite) settings for a given provider - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the cloud provider, e.g. "azure" - :type provider_name: str - :param profile: the name of the profile to save - :type profile: str != "" - :param settings: settings to save for that provider - :type settings: dict - :raises: ValueError when passed invalid settings or an invalid profile name - """ - path = _get_profile_path(ucfg, provider_name, profile, exists=False) - validate_settings(ucfg, provider_name, settings, image_name=None) - - # touch the TOML file if it doesn't exist - if not os.path.isfile(path): - open(path, "a").close() - - # make sure settings files aren't readable by others, as they will contain - # sensitive credentials - current = stat.S_IMODE(os.lstat(path).st_mode) - os.chmod(path, current & ~stat.S_IROTH) - - with open(path, "w") as settings_file: - toml.dump(settings, settings_file)
    - -
    [docs]def load_settings(ucfg, provider_name, profile): - """Load settings for a provider's profile - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the cloud provider, e.g. "azure" - :type provider_name: str - :param profile: the name of the profile to save - :type profile: str != "" - :returns: The profile settings for the selected provider - :rtype: dict - :raises: ValueError when passed invalid settings or an invalid profile name - :raises: RuntimeError when the provider or profile couldn't be found - :raises: ValueError when the passed settings are invalid - - This also calls validate_settings on the loaded settings, potentially - raising an error if the saved settings are invalid. - """ - path = _get_profile_path(ucfg, provider_name, profile) - - with open(path) as file: - settings = toml.load(file) - validate_settings(ucfg, provider_name, settings) - return settings
    - -
    [docs]def delete_profile(ucfg, provider_name, profile): - """Delete a provider's profile settings file - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the cloud provider, e.g. "azure" - :type provider_name: str - :param profile: the name of the profile to save - :type profile: str != "" - :raises: ValueError when passed invalid settings or an invalid profile name - :raises: RuntimeError when the provider or profile couldn't be found - """ - path = _get_profile_path(ucfg, provider_name, profile) - - if os.path.exists(path): - os.unlink(path)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/lifted/queue.html b/docs/html/_modules/lifted/queue.html deleted file mode 100644 index b9f79b9b..00000000 --- a/docs/html/_modules/lifted/queue.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - - - - - lifted.queue — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for lifted.queue

    -#
    -# Copyright (C) 2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -from functools import partial
    -from glob import glob
    -import logging
    -import multiprocessing
    -
    -# We use a multiprocessing Pool for uploads so that we can cancel them with a
    -# simple SIGINT, which should bubble down to subprocesses.
    -from multiprocessing import Pool
    -
    -# multiprocessing.dummy is to threads as multiprocessing is to processes.
    -# Since daemonic processes can't have children, we use a thread to monitor the
    -# upload pool.
    -from multiprocessing.dummy import Process
    -
    -from operator import attrgetter
    -import os
    -import stat
    -import time
    -
    -import pylorax.api.toml as toml
    -
    -from lifted.upload import Upload
    -from lifted.providers import resolve_playbook_path, validate_settings
    -
    -# the maximum number of simultaneous uploads
    -SIMULTANEOUS_UPLOADS = 1
    -
    -log = logging.getLogger("lifted")
    -multiprocessing.log_to_stderr().setLevel(logging.INFO)
    -
    -
    -def _get_queue_path(ucfg):
    -    path = ucfg["queue_dir"]
    -
    -    # create the upload_queue directory if it doesn't exist
    -    os.makedirs(path, exist_ok=True)
    -
    -    return path
    -
    -
    -def _get_upload_path(ucfg, uuid, write=False):
    -    # Make sure no path elements are present
    -    uuid = os.path.basename(uuid)
    -
    -    path = os.path.join(_get_queue_path(ucfg), f"{uuid}.toml")
    -    if write and not os.path.exists(path):
    -        open(path, "a").close()
    -    if os.path.exists(path):
    -        # make sure uploads aren't readable by others, as they will contain
    -        # sensitive credentials
    -        current = stat.S_IMODE(os.lstat(path).st_mode)
    -        os.chmod(path, current & ~stat.S_IROTH)
    -    return path
    -
    -
    -def _list_upload_uuids(ucfg):
    -    paths = glob(os.path.join(_get_queue_path(ucfg), "*"))
    -    return [os.path.splitext(os.path.basename(path))[0] for path in paths]
    -
    -
    -def _write_upload(ucfg, upload):
    -    with open(_get_upload_path(ucfg, upload.uuid, write=True), "w") as upload_file:
    -        toml.dump(upload.serializable(), upload_file)
    -
    -
    -def _write_callback(ucfg):
    -    return partial(_write_upload, ucfg)
    -
    -
    -
    [docs]def get_upload(ucfg, uuid, ignore_missing=False, ignore_corrupt=False): - """Get an Upload object by UUID - - :param ucfg: upload config - :type ucfg: object - :param uuid: UUID of the upload to get - :type uuid: str - :param ignore_missing: if True, don't raise a RuntimeError when the specified upload is missing, instead just return None - :type ignore_missing: bool - :param ignore_corrupt: if True, don't raise a RuntimeError when the specified upload could not be deserialized, instead just return None - :type ignore_corrupt: bool - :returns: the upload object or None - :rtype: Upload or None - :raises: RuntimeError - """ - try: - with open(_get_upload_path(ucfg, uuid), "r") as upload_file: - return Upload(**toml.load(upload_file)) - except FileNotFoundError as error: - if not ignore_missing: - raise RuntimeError(f"Could not find upload {uuid}!") from error - except toml.TomlError as error: - if not ignore_corrupt: - raise RuntimeError(f"Could not parse upload {uuid}!") from error
    - - -
    [docs]def get_uploads(ucfg, uuids): - """Gets a list of Upload objects from a list of upload UUIDs, ignoring - missing or corrupt uploads - - :param ucfg: upload config - :type ucfg: object - :param uuids: list of upload UUIDs to get - :type uuids: list of str - :returns: a list of the uploads that were successfully deserialized - :rtype: list of Upload - """ - uploads = ( - get_upload(ucfg, uuid, ignore_missing=True, ignore_corrupt=True) - for uuid in uuids - ) - return list(filter(None, uploads))
    - - -
    [docs]def get_all_uploads(ucfg): - """Get a list of all stored Upload objects - - :param ucfg: upload config - :type ucfg: object - :returns: a list of all stored upload objects - :rtype: list of Upload - """ - return get_uploads(ucfg, _list_upload_uuids(ucfg))
    - - -
    [docs]def create_upload(ucfg, provider_name, image_name, settings): - """Creates a new upload - - :param ucfg: upload config - :type ucfg: object - :param provider_name: the name of the cloud provider to upload to, e.g. "azure" - :type provider_name: str - :param image_name: what to name the image in the cloud - :type image_name: str - :param settings: settings to pass to the upload, specific to the cloud provider - :type settings: dict - :returns: the created upload object - :rtype: Upload - """ - validate_settings(ucfg, provider_name, settings, image_name) - return Upload( - provider_name=provider_name, - playbook_path=resolve_playbook_path(ucfg, provider_name), - image_name=image_name, - settings=settings, - status_callback=_write_callback(ucfg), - )
    - - -
    [docs]def ready_upload(ucfg, uuid, image_path): - """Pass an image_path to an upload and mark it ready to execute - - :param ucfg: upload config - :type ucfg: object - :param uuid: the UUID of the upload to mark ready - :type uuid: str - :param image_path: the path of the image to pass to the upload - :type image_path: str - """ - get_upload(ucfg, uuid).ready(image_path, _write_callback(ucfg))
    - - -
    [docs]def reset_upload(ucfg, uuid, new_image_name=None, new_settings=None): - """Reset an upload so it can be attempted again - - :param ucfg: upload config - :type ucfg: object - :param uuid: the UUID of the upload to reset - :type uuid: str - :param new_image_name: optionally update the upload's image_name - :type new_image_name: str - :param new_settings: optionally update the upload's settings - :type new_settings: dict - """ - upload = get_upload(ucfg, uuid) - validate_settings( - ucfg, - upload.provider_name, - new_settings or upload.settings, - new_image_name or upload.image_name, - ) - if new_image_name: - upload.image_name = new_image_name - if new_settings: - upload.settings = new_settings - upload.reset(_write_callback(ucfg))
    - - -
    [docs]def cancel_upload(ucfg, uuid): - """Cancel an upload - - :param ucfg: the compose config - :type ucfg: ComposerConfig - :param uuid: the UUID of the upload to cancel - :type uuid: str - """ - get_upload(ucfg, uuid).cancel(_write_callback(ucfg))
    - - -
    [docs]def delete_upload(ucfg, uuid): - """Delete an upload - - :param ucfg: the compose config - :type ucfg: ComposerConfig - :param uuid: the UUID of the upload to delete - :type uuid: str - """ - upload = get_upload(ucfg, uuid) - if upload and upload.is_cancellable(): - upload.cancel() - os.remove(_get_upload_path(ucfg, uuid))
    - - -
    [docs]def start_upload_monitor(ucfg): - """Start a thread that manages the upload queue - - :param ucfg: the compose config - :type ucfg: ComposerConfig - """ - process = Process(target=_monitor, args=(ucfg,)) - process.daemon = True - process.start()
    - - -def _monitor(ucfg): - log.info("Started upload monitor.") - for upload in get_all_uploads(ucfg): - # Set abandoned uploads to FAILED - if upload.status == "RUNNING": - upload.set_status("FAILED", _write_callback(ucfg)) - pool = Pool(processes=SIMULTANEOUS_UPLOADS) - pool_uuids = set() - - def remover(uuid): - return lambda _: pool_uuids.remove(uuid) - - while True: - # Every second, scoop up READY uploads from the filesystem and throw - # them in the pool - all_uploads = get_all_uploads(ucfg) - for upload in sorted(all_uploads, key=attrgetter("creation_time")): - ready = upload.status == "READY" - if ready and upload.uuid not in pool_uuids: - log.info("Starting upload %s...", upload.uuid) - pool_uuids.add(upload.uuid) - callback = remover(upload.uuid) - pool.apply_async( - upload.execute, - (_write_callback(ucfg),), - callback=callback, - error_callback=callback, - ) - time.sleep(1) -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/lifted/upload.html b/docs/html/_modules/lifted/upload.html deleted file mode 100644 index fe76972a..00000000 --- a/docs/html/_modules/lifted/upload.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - - - - - lifted.upload — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for lifted.upload

    -#
    -# Copyright (C) 2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -from datetime import datetime
    -import logging
    -from multiprocessing import current_process
    -import os
    -import signal
    -from uuid import uuid4
    -
    -from ansible_runner.interface import run as ansible_run
    -from ansible_runner.exceptions import AnsibleRunnerException
    -
    -log = logging.getLogger("lifted")
    -
    -
    -
    [docs]class Upload: - """Represents an upload of an image to a cloud provider. Instances of this - class are serialized as TOML and stored in the upload queue directory, - which is /var/lib/lorax/upload/queue/ by default""" - - def __init__( - self, - uuid=None, - provider_name=None, - playbook_path=None, - image_name=None, - settings=None, - creation_time=None, - upload_log=None, - upload_pid=None, - image_path=None, - status_callback=None, - status=None, - ): - self.uuid = uuid or str(uuid4()) - self.provider_name = provider_name - self.playbook_path = playbook_path - self.image_name = image_name - self.settings = settings - self.creation_time = creation_time or datetime.now().timestamp() - self.upload_log = upload_log or "" - self.upload_pid = upload_pid - self.image_path = image_path - if status: - self.status = status - else: - self.set_status("WAITING", status_callback) - - def _log(self, message, callback=None): - """Logs something to the upload log with an optional callback - - :param message: the object to log - :type message: object - :param callback: a function of the form callback(self) - :type callback: function - """ - if message: - messages = str(message).splitlines() - - # Log multi-line messages as individual log lines - for m in messages: - log.info(m) - self.upload_log += f"{message}\n" - if callback: - callback(self) - -
    [docs] def serializable(self): - """Returns a representation of the object as a dict for serialization - - :returns: the object's __dict__ - :rtype: dict - """ - return self.__dict__
    - -
    [docs] def summary(self): - """Return a dict with useful information about the upload - - :returns: upload information - :rtype: dict - """ - - return { - "uuid": self.uuid, - "status": self.status, - "provider_name": self.provider_name, - "image_name": self.image_name, - "image_path": self.image_path, - "creation_time": self.creation_time, - "settings": self.settings, - }
    - -
    [docs] def set_status(self, status, status_callback=None): - """Sets the status of the upload with an optional callback - - :param status: the new status - :type status: str - :param status_callback: a function of the form callback(self) - :type status_callback: function - """ - self._log("Setting status to %s" % status) - self.status = status - if status_callback: - status_callback(self)
    - -
    [docs] def ready(self, image_path, status_callback): - """Provide an image_path and mark the upload as ready to execute - - :param image_path: path of the image to upload - :type image_path: str - :param status_callback: a function of the form callback(self) - :type status_callback: function - """ - self._log("Setting image_path to %s" % image_path) - self.image_path = image_path - if self.status == "WAITING": - self.set_status("READY", status_callback)
    - -
    [docs] def reset(self, status_callback): - """Reset the upload so it can be attempted again - - :param status_callback: a function of the form callback(self) - :type status_callback: function - """ - if self.is_cancellable(): - raise RuntimeError(f"Can't reset, status is {self.status}!") - if not self.image_path: - raise RuntimeError("Can't reset, no image supplied yet!") - # self.error = None - self._log("Resetting state") - self.set_status("READY", status_callback)
    - -
    [docs] def is_cancellable(self): - """Is the upload in a cancellable state? - - :returns: whether the upload is cancellable - :rtype: bool - """ - return self.status in ("WAITING", "READY", "RUNNING")
    - -
    [docs] def cancel(self, status_callback=None): - """Cancel the upload. Sends a SIGINT to self.upload_pid. - - :param status_callback: a function of the form callback(self) - :type status_callback: function - """ - if not self.is_cancellable(): - raise RuntimeError(f"Can't cancel, status is already {self.status}!") - if self.upload_pid: - os.kill(self.upload_pid, signal.SIGINT) - self.set_status("CANCELLED", status_callback)
    - -
    [docs] def execute(self, status_callback=None): - """Execute the upload. Meant to be called from a dedicated process so - that the upload can be cancelled by sending a SIGINT to - self.upload_pid. - - :param status_callback: a function of the form callback(self) - :type status_callback: function - """ - if self.status != "READY": - raise RuntimeError("This upload is not ready!") - - try: - self.upload_pid = current_process().pid - self.set_status("RUNNING", status_callback) - self._log("Executing playbook.yml") - - # NOTE: event_handler doesn't seem to be called for playbook errors - logger = lambda e: self._log(e["stdout"], status_callback) - - runner = ansible_run( - playbook=self.playbook_path, - extravars={ - **self.settings, - "image_name": self.image_name, - "image_path": self.image_path, - }, - event_handler=logger, - verbosity=2, - ) - - # Try logging events and stats -- but they may not exist, so catch the error - try: - for e in runner.events: - self._log("%s" % dir(e), status_callback) - - self._log("%s" % runner.stats, status_callback) - except AnsibleRunnerException: - self._log("%s" % runner.stdout.read(), status_callback) - - if runner.status == "successful": - self.set_status("FINISHED", status_callback) - else: - self.set_status("FAILED", status_callback) - except Exception: - import traceback - log.error(traceback.format_exc(limit=2))
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax.html b/docs/html/_modules/pylorax.html index 9877fc52..131dffd4 100644 --- a/docs/html/_modules/pylorax.html +++ b/docs/html/_modules/pylorax.html @@ -1,38 +1,38 @@ - - + - + - + + + pylorax — Lorax 34.10 documentation + + + + + + - pylorax — Lorax 34.3 documentation - + - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -217,7 +220,7 @@ DRACUT_DEFAULT = ["--xz", "--install", "/.buildstamp", "--no-early-microcode", "--add", "fips"] # Used for DNF conf.module_platform_id -DEFAULT_PLATFORM_ID = "platform:f32" +DEFAULT_PLATFORM_ID = "platform:f34"
      [docs]class ArchData(DataHolder): lib64_arches = ("x86_64", "ppc64le", "s390x", "ia64", "aarch64") @@ -618,20 +621,25 @@
      -
    @@ -640,7 +648,6 @@ - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.bisect

    -#
    -# Copyright (C) 2018 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    [docs]def insort_left(a, x, key=None, lo=0, hi=None): - """Insert item x in list a, and keep it sorted assuming a is sorted. - - :param a: sorted list - :type a: list - :param x: item to insert into the list - :type x: object - :param key: Function to use to compare items in the list - :type key: function - :returns: index where the item was inserted - :rtype: int - - If x is already in a, insert it to the left of the leftmost x. - Optional args lo (default 0) and hi (default len(a)) bound the - slice of a to be searched. - - This is a modified version of bisect.insort_left that can use a - function for the compare, and returns the index position where it - was inserted. - """ - if key is None: - key = lambda i: i - - if lo < 0: - raise ValueError('lo must be non-negative') - if hi is None: - hi = len(a) - while lo < hi: - mid = (lo+hi)//2 - if key(a[mid]) < key(x): lo = mid+1 - else: hi = mid - a.insert(lo, x) - return lo
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/checkparams.html b/docs/html/_modules/pylorax/api/checkparams.html deleted file mode 100644 index 9e14ce7b..00000000 --- a/docs/html/_modules/pylorax/api/checkparams.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - pylorax.api.checkparams — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.checkparams

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -from flask import jsonify
    -from functools import update_wrapper
    -
    -# A decorator for checking the parameters provided to the API route implementing
    -# functions.  The tuples parameter is a list of tuples.  Each tuple is the string
    -# name of a parameter ("blueprint_name", not blueprint_name), the value it's set
    -# to by flask if the caller did not provide it, and a message to be returned to
    -# the user.
    -#
    -# If the parameter is set to its default, the error message is returned.  Otherwise,
    -# the decorated function is called and its return value is returned.
    -
    [docs]def checkparams(tuples): - def decorator(f): - def wrapped_function(*args, **kwargs): - for tup in tuples: - if kwargs[tup[0]] == tup[1]: - log.error("(%s) %s", f.__name__, tup[2]) - return jsonify(status=False, errors=[tup[2]]), 400 - - return f(*args, **kwargs) - - return update_wrapper(wrapped_function, f) - - return decorator
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/cmdline.html b/docs/html/_modules/pylorax/api/cmdline.html deleted file mode 100644 index 0aa34e91..00000000 --- a/docs/html/_modules/pylorax/api/cmdline.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - pylorax.api.cmdline — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.cmdline

    -#
    -# cmdline.py
    -#
    -# Copyright (C) 2018 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import os
    -import sys
    -import argparse
    -
    -from pylorax import vernum
    -
    -DEFAULT_USER  = "root"
    -DEFAULT_GROUP = "weldr"
    -
    -version = "{0}-{1}".format(os.path.basename(sys.argv[0]), vernum)
    -
    -
    [docs]def lorax_composer_parser(): - """ Return the ArgumentParser for lorax-composer""" - - parser = argparse.ArgumentParser(description="Lorax Composer API Server", - fromfile_prefix_chars="@") - - parser.add_argument("--socket", default="/run/weldr/api.socket", metavar="SOCKET", - help="Path to the socket file to listen on") - parser.add_argument("--user", default=DEFAULT_USER, metavar="USER", - help="User to use for reduced permissions") - parser.add_argument("--group", default=DEFAULT_GROUP, metavar="GROUP", - help="Group to set ownership of the socket to") - parser.add_argument("--log", dest="logfile", default="/var/log/lorax-composer/composer.log", metavar="LOG", - help="Path to logfile (/var/log/lorax-composer/composer.log)") - parser.add_argument("--mockfiles", default="/var/tmp/bdcs-mockfiles/", metavar="MOCKFILES", - help="Path to JSON files used for /api/mock/ paths (/var/tmp/bdcs-mockfiles/)") - parser.add_argument("--sharedir", type=os.path.abspath, metavar="SHAREDIR", - help="Directory containing all the templates. Overrides config file sharedir") - parser.add_argument("-V", action="store_true", dest="showver", - help="show program's version number and exit") - parser.add_argument("-c", "--config", default="/etc/lorax/composer.conf", metavar="CONFIG", - help="Path to lorax-composer configuration file.") - parser.add_argument("--releasever", default=None, metavar="STRING", - help="Release version to use for $releasever in dnf repository urls") - parser.add_argument("--tmp", default="/var/tmp", - help="Top level temporary directory") - parser.add_argument("--proxy", default=None, metavar="PROXY", - help="Set proxy for DNF, overrides configuration file setting.") - parser.add_argument("--no-system-repos", action="store_true", default=False, - help="Do not copy over system repos from /etc/yum.repos.d/ at startup") - parser.add_argument("BLUEPRINTS", metavar="BLUEPRINTS", - help="Path to the blueprints") - - return parser
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/compose.html b/docs/html/_modules/pylorax/api/compose.html deleted file mode 100644 index f9442b66..00000000 --- a/docs/html/_modules/pylorax/api/compose.html +++ /dev/null @@ -1,1467 +0,0 @@ - - - - - - - - - - - pylorax.api.compose — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.compose

    -# Copyright (C) 2018-2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Setup for composing an image
    -
    -Adding New Output Types
    ------------------------
    -
    -The new output type must add a kickstart template to ./share/composer/ where the
    -name of the kickstart (without the trailing .ks) matches the entry in compose_args.
    -
    -The kickstart should not have any url or repo entries, these will be added at build
    -time. The %packages section should be the last thing, and while it can contain mandatory
    -packages required by the output type, it should not have the trailing %end because the
    -package NEVRAs will be appended to it at build time.
    -
    -compose_args should have a name matching the kickstart, and it should set the novirt_install
    -parameters needed to generate the desired output. Other types should be set to False.
    -
    -"""
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -import os
    -from glob import glob
    -from io import StringIO
    -from math import ceil
    -import shutil
    -from uuid import uuid4
    -
    -# Use pykickstart to calculate disk image size
    -from pykickstart.parser import KickstartParser
    -from pykickstart.version import makeVersion
    -
    -from pylorax import ArchData, find_templates, get_buildarch
    -from pylorax.api.gitrpm import create_gitrpm_repo
    -from pylorax.api.projects import projects_depsolve, projects_depsolve_with_size, dep_nevra
    -from pylorax.api.projects import ProjectsError
    -from pylorax.api.recipes import read_recipe_and_id
    -from pylorax.api.timestamp import TS_CREATED, write_timestamp
    -import pylorax.api.toml as toml
    -from pylorax.base import DataHolder
    -from pylorax.imgutils import default_image_name
    -from pylorax.ltmpl import LiveTemplateRunner
    -from pylorax.sysutils import joinpaths, flatconfig
    -
    -
    -
    [docs]def test_templates(dbo, share_dir): - """ Try depsolving each of the the templates and report any errors - - :param dbo: dnf base object - :type dbo: dnf.Base - :returns: List of template types and errors - :rtype: List of errors - - Return a list of templates and errors encountered or an empty list - """ - template_errors = [] - for compose_type, enabled in compose_types(share_dir): - if not enabled: - continue - - # Read the kickstart template for this type - ks_template_path = joinpaths(share_dir, "composer", compose_type) + ".ks" - ks_template = open(ks_template_path, "r").read() - - # How much space will the packages in the default template take? - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(ks_template+"\n%end\n") - pkgs = [(name, "*") for name in ks.handler.packages.packageList] - grps = [grp.name for grp in ks.handler.packages.groupList] - try: - projects_depsolve(dbo, pkgs, grps) - except ProjectsError as e: - template_errors.append("Error depsolving %s: %s" % (compose_type, str(e))) - - return template_errors
    - - -
    [docs]def repo_to_ks(r, url="url"): - """ Return a kickstart line with the correct args. - :param r: DNF repository information - :type r: dnf.Repo - :param url: "url" or "baseurl" to use for the baseurl parameter - :type url: str - :returns: kickstart command arguments for url/repo command - :rtype: str - - Set url to "baseurl" if it is a repo, leave it as "url" for the installation url. - """ - cmd = "" - # url uses --url not --baseurl - if r.baseurl: - cmd += '--%s="%s" ' % (url, r.baseurl[0]) - elif r.metalink: - cmd += '--metalink="%s" ' % r.metalink - elif r.mirrorlist: - cmd += '--mirrorlist="%s" ' % r.mirrorlist - else: - raise RuntimeError("Repo has no baseurl, metalink, or mirrorlist") - - if r.proxy: - cmd += '--proxy="%s" ' % r.proxy - - if not r.sslverify: - cmd += '--noverifyssl' - - if r.sslcacert: - cmd += ' --sslcacert="%s"' % r.sslcacert - if r.sslclientcert: - cmd += ' --sslclientcert="%s"' % r.sslclientcert - if r.sslclientkey: - cmd += ' --sslclientkey="%s"' % r.sslclientkey - - return cmd
    - - -
    [docs]def bootloader_append(line, kernel_append): - """ Insert the kernel_append string into the --append argument - - :param line: The bootloader ... line - :type line: str - :param kernel_append: The arguments to append to the --append section - :type kernel_append: str - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(line) - - if ks.handler.bootloader.appendLine: - ks.handler.bootloader.appendLine += " %s" % kernel_append - else: - ks.handler.bootloader.appendLine = kernel_append - - # Converting back to a string includes a comment, return just the bootloader line - return str(ks.handler.bootloader).splitlines()[-1]
    - - -
    [docs]def get_kernel_append(recipe): - """Return the customizations.kernel append value - - :param recipe: - :type recipe: Recipe object - :returns: append value or empty string - :rtype: str - """ - if "customizations" not in recipe or \ - "kernel" not in recipe["customizations"] or \ - "append" not in recipe["customizations"]["kernel"]: - return "" - return recipe["customizations"]["kernel"]["append"]
    - - -
    [docs]def timezone_cmd(line, settings): - """ Update the timezone line with the settings - - :param line: The timezone ... line - :type line: str - :param settings: A dict with timezone and/or ntpservers list - :type settings: dict - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(line) - - if "timezone" in settings: - ks.handler.timezone.timezone = settings["timezone"] - if "ntpservers" in settings: - ks.handler.timezone.ntpservers = settings["ntpservers"] - - # Converting back to a string includes a comment, return just the timezone line - return str(ks.handler.timezone).splitlines()[-1]
    - - -
    [docs]def get_timezone_settings(recipe): - """Return the customizations.timezone dict - - :param recipe: - :type recipe: Recipe object - :returns: append value or empty string - :rtype: dict - """ - if "customizations" not in recipe or \ - "timezone" not in recipe["customizations"]: - return {} - return recipe["customizations"]["timezone"]
    - - -
    [docs]def lang_cmd(line, languages): - """ Update the lang line with the languages - - :param line: The lang ... line - :type line: str - :param settings: The list of languages - :type settings: list - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(line) - - if languages: - ks.handler.lang.lang = languages[0] - - if len(languages) > 1: - ks.handler.lang.addsupport = languages[1:] - - # Converting back to a string includes a comment, return just the lang line - return str(ks.handler.lang).splitlines()[-1]
    - - -
    [docs]def get_languages(recipe): - """Return the customizations.locale.languages list - - :param recipe: The recipe - :type recipe: Recipe object - :returns: list of language strings - :rtype: list - """ - if "customizations" not in recipe or \ - "locale" not in recipe["customizations"] or \ - "languages" not in recipe["customizations"]["locale"]: - return [] - return recipe["customizations"]["locale"]["languages"]
    - - -
    [docs]def keyboard_cmd(line, layout): - """ Update the keyboard line with the layout - - :param line: The keyboard ... line - :type line: str - :param settings: The keyboard layout - :type settings: str - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(line) - - if layout: - ks.handler.keyboard.keyboard = layout - ks.handler.keyboard.vc_keymap = "" - ks.handler.keyboard.x_layouts = [] - - # Converting back to a string includes a comment, return just the keyboard line - return str(ks.handler.keyboard).splitlines()[-1]
    - - -
    [docs]def get_keyboard_layout(recipe): - """Return the customizations.locale.keyboard list - - :param recipe: The recipe - :type recipe: Recipe object - :returns: The keyboard layout string - :rtype: str - """ - if "customizations" not in recipe or \ - "locale" not in recipe["customizations"] or \ - "keyboard" not in recipe["customizations"]["locale"]: - return [] - return recipe["customizations"]["locale"]["keyboard"]
    - - -
    [docs]def firewall_cmd(line, settings): - """ Update the firewall line with the new ports and services - - :param line: The firewall ... line - :type line: str - :param settings: A dict with the list of services and ports to enable and disable - :type settings: dict - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(line) - - # Do not override firewall --disabled - if ks.handler.firewall.enabled != False and settings: - ks.handler.firewall.ports = sorted(set(settings["ports"] + ks.handler.firewall.ports)) - ks.handler.firewall.services = sorted(set(settings["enabled"] + ks.handler.firewall.services)) - ks.handler.firewall.remove_services = sorted(set(settings["disabled"] + ks.handler.firewall.remove_services)) - - # Converting back to a string includes a comment, return just the keyboard line - return str(ks.handler.firewall).splitlines()[-1]
    - - -
    [docs]def get_firewall_settings(recipe): - """Return the customizations.firewall settings - - :param recipe: The recipe - :type recipe: Recipe object - :returns: A dict of settings - :rtype: dict - """ - settings = {"ports": [], "enabled": [], "disabled": []} - - if "customizations" not in recipe or \ - "firewall" not in recipe["customizations"]: - return settings - - settings["ports"] = recipe["customizations"]["firewall"].get("ports", []) - - if "services" in recipe["customizations"]["firewall"]: - settings["enabled"] = recipe["customizations"]["firewall"]["services"].get("enabled", []) - settings["disabled"] = recipe["customizations"]["firewall"]["services"].get("disabled", []) - return settings
    - - -
    [docs]def services_cmd(line, settings): - """ Update the services line with additional services to enable/disable - - :param line: The services ... line - :type line: str - :param settings: A dict with the list of services to enable and disable - :type settings: dict - - Using pykickstart to process the line is the best way to make sure it - is parsed correctly, and re-assembled for inclusion into the final kickstart - """ - # Empty services and no additional settings, return an empty string - if not line and not settings["enabled"] and not settings["disabled"]: - return "" - - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - - # Allow passing in a 'default' so that the enable/disable may be applied to it, without - # parsing it and emitting a kickstart error message - if line != "services": - ks.readKickstartFromString(line) - - # Add to any existing services, removing any duplicates - ks.handler.services.enabled = sorted(set(settings["enabled"] + ks.handler.services.enabled)) - ks.handler.services.disabled = sorted(set(settings["disabled"] + ks.handler.services.disabled)) - - # Converting back to a string includes a comment, return just the keyboard line - return str(ks.handler.services).splitlines()[-1]
    - - -
    [docs]def get_services(recipe): - """Return the customizations.services settings - - :param recipe: The recipe - :type recipe: Recipe object - :returns: A dict of settings - :rtype: dict - """ - settings = {"enabled": [], "disabled": []} - - if "customizations" not in recipe or \ - "services" not in recipe["customizations"]: - return settings - - settings["enabled"] = sorted(recipe["customizations"]["services"].get("enabled", [])) - settings["disabled"] = sorted(recipe["customizations"]["services"].get("disabled", [])) - return settings
    - - -
    [docs]def get_default_services(recipe): - """Get the default string for services, based on recipe - :param recipe: The recipe - - :type recipe: Recipe object - :returns: string with "services" or "" - :rtype: str - - When no services have been selected we don't need to add anything to the kickstart - so return an empty string. Otherwise return "services" which will be updated with - the settings. - """ - services = get_services(recipe) - - if services["enabled"] or services["disabled"]: - return "services" - else: - return ""
    - - -
    [docs]def customize_ks_template(ks_template, recipe): - """ Customize the kickstart template and return it - - :param ks_template: The kickstart template - :type ks_template: str - :param recipe: - :type recipe: Recipe object - - Apply customizations to existing template commands, or add defaults for ones that are - missing and required. - - Apply customizations.kernel.append to the bootloader argument in the template. - Add bootloader line if it is missing. - - Add default timezone if needed. It does NOT replace an existing timezone entry - """ - # Commands to be modified [NEW-COMMAND-FUNC, NEW-VALUE, DEFAULT, REPLACE] - # The function is called with a kickstart command string and the value to replace - # The value is specific to the command, and is understood by the function - # The default is a complete kickstart command string, suitable for writing to the template - # If REPLACE is False it will not change an existing entry only add a missing one - commands = {"bootloader": [bootloader_append, - get_kernel_append(recipe), - 'bootloader --location=none', True], - "timezone": [timezone_cmd, - get_timezone_settings(recipe), - 'timezone UTC', False], - "lang": [lang_cmd, - get_languages(recipe), - 'lang en_US.UTF-8', True], - "keyboard": [keyboard_cmd, - get_keyboard_layout(recipe), - 'keyboard --xlayouts us --vckeymap us', True], - "firewall": [firewall_cmd, - get_firewall_settings(recipe), - 'firewall --enabled', True], - "services": [services_cmd, - get_services(recipe), - get_default_services(recipe), True] - } - found = {} - - output = StringIO() - for line in ks_template.splitlines(): - for cmd in commands: - (new_command, value, default, replace) = commands[cmd] - if line.startswith(cmd): - found[cmd] = True - if value and replace: - log.debug("Replacing %s with %s", cmd, value) - print(new_command(line, value), file=output) - else: - log.debug("Skipping %s", cmd) - print(line, file=output) - break - else: - # No matches, write the line as-is - print(line, file=output) - - # Write out defaults for the ones not found - # These must go FIRST because the template still needs to have the packages added - defaults = StringIO() - for cmd in commands: - if cmd in found: - continue - (new_command, value, default, _) = commands[cmd] - if value and default: - log.debug("Setting %s to use %s", cmd, value) - print(new_command(default, value), file=defaults) - elif default: - log.debug("Setting %s to %s", cmd, default) - print(default, file=defaults) - - return defaults.getvalue() + output.getvalue()
    - - -
    [docs]def write_ks_root(f, user): - """ Write kickstart root password and sshkey entry - - :param f: kickstart file object - :type f: open file object - :param user: A blueprint user dictionary - :type user: dict - :returns: True if it wrote a rootpw command to the kickstart - :rtype: bool - - If the entry contains a ssh key, use sshkey to write it - If it contains password, use rootpw to set it - - root cannot be used with the user command. So only key and password are supported - for root. - """ - wrote_rootpw = False - - # ssh key uses the sshkey kickstart command - if "key" in user: - f.write('sshkey --user %s "%s"\n' % (user["name"], user["key"])) - - if "password" in user: - if any(user["password"].startswith(prefix) for prefix in ["$2b$", "$6$", "$5$"]): - log.debug("Detected pre-crypted password") - f.write('rootpw --iscrypted "%s"\n' % user["password"]) - wrote_rootpw = True - else: - log.debug("Detected plaintext password") - f.write('rootpw --plaintext "%s"\n' % user["password"]) - wrote_rootpw = True - - return wrote_rootpw
    - -
    [docs]def write_ks_user(f, user): - """ Write kickstart user and sshkey entry - - :param f: kickstart file object - :type f: open file object - :param user: A blueprint user dictionary - :type user: dict - - If the entry contains a ssh key, use sshkey to write it - All of the user fields are optional, except name, write out a kickstart user entry - with whatever options are relevant. - """ - # ssh key uses the sshkey kickstart command - if "key" in user: - f.write('sshkey --user %s "%s"\n' % (user["name"], user["key"])) - - # Write out the user kickstart command, much of it is optional - f.write("user --name %s" % user["name"]) - if "home" in user: - f.write(" --homedir %s" % user["home"]) - - if "password" in user: - if any(user["password"].startswith(prefix) for prefix in ["$2b$", "$6$", "$5$"]): - log.debug("Detected pre-crypted password") - f.write(" --iscrypted") - else: - log.debug("Detected plaintext password") - f.write(" --plaintext") - - f.write(" --password \"%s\"" % user["password"]) - - if "shell" in user: - f.write(" --shell %s" % user["shell"]) - - if "uid" in user: - f.write(" --uid %d" % int(user["uid"])) - - if "gid" in user: - f.write(" --gid %d" % int(user["gid"])) - - if "description" in user: - f.write(" --gecos \"%s\"" % user["description"]) - - if "groups" in user: - f.write(" --groups %s" % ",".join(user["groups"])) - - f.write("\n")
    - - -
    [docs]def write_ks_group(f, group): - """ Write kickstart group entry - - :param f: kickstart file object - :type f: open file object - :param group: A blueprint group dictionary - :type user: dict - - gid is optional - """ - if "name" not in group: - raise RuntimeError("group entry requires a name") - - f.write("group --name %s" % group["name"]) - if "gid" in group: - f.write(" --gid %d" % int(group["gid"])) - - f.write("\n")
    - - -
    [docs]def add_customizations(f, recipe): - """ Add customizations to the kickstart file - - :param f: kickstart file object - :type f: open file object - :param recipe: - :type recipe: Recipe object - :returns: None - :raises: RuntimeError if there was a problem writing to the kickstart - """ - if "customizations" not in recipe: - f.write('rootpw --lock\n') - return - customizations = recipe["customizations"] - - # allow customizations to be incorrectly specified as [[customizations]] instead of [customizations] - if isinstance(customizations, list): - customizations = customizations[0] - - if "hostname" in customizations: - f.write("network --hostname=%s\n" % customizations["hostname"]) - - # TODO - remove this, should use user section to define this - if "sshkey" in customizations: - # This is a list of entries - for sshkey in customizations["sshkey"]: - if "user" not in sshkey or "key" not in sshkey: - log.error("%s is incorrect, skipping", sshkey) - continue - f.write('sshkey --user %s "%s"\n' % (sshkey["user"], sshkey["key"])) - - # Creating a user also creates a group. Make a list of the names for later - user_groups = [] - # kickstart requires a rootpw line - wrote_rootpw = False - if "user" in customizations: - # only name is required, everything else is optional - for user in customizations["user"]: - if "name" not in user: - raise RuntimeError("user entry requires a name") - - # root is special, cannot use normal user command for it - if user["name"] == "root": - wrote_rootpw = write_ks_root(f, user) - continue - - write_ks_user(f, user) - user_groups.append(user["name"]) - - if "group" in customizations: - for group in customizations["group"]: - if group["name"] not in user_groups: - write_ks_group(f, group) - else: - log.warning("Skipping group %s, already created by user", group["name"]) - - # Lock the root account if no root user password has been specified - if not wrote_rootpw: - f.write('rootpw --lock\n')
    - - -
    [docs]def get_extra_pkgs(dbo, share_dir, compose_type): - """Return extra packages needed for the output type - - :param dbo: dnf base object - :type dbo: dnf.Base - :param share_dir: Path to the top level share directory - :type share_dir: str - :param compose_type: The type of output to create from the recipe - :type compose_type: str - :returns: List of package names (name only, not NEVRA) - :rtype: list - - Currently this is only needed by live-iso, it reads ./live/live-install.tmpl and - processes only the installpkg lines. It lists the packages needed to complete creation of the - iso using the templates such as x86.tmpl - - Keep in mind that the live-install.tmpl is shared between livemedia-creator and lorax-composer, - even though the results are applied differently. - """ - if compose_type != "live-iso": - return [] - - # get the arch information to pass to the runner - arch = ArchData(get_buildarch(dbo)) - defaults = DataHolder(basearch=arch.basearch) - templatedir = joinpaths(find_templates(share_dir), "live") - runner = LiveTemplateRunner(dbo, templatedir=templatedir, defaults=defaults) - runner.run("live-install.tmpl") - log.debug("extra pkgs = %s", runner.pkgs) - - return runner.pkgnames
    - - -
    [docs]def start_build(cfg, dnflock, gitlock, branch, recipe_name, compose_type, test_mode=0): - """ Start the build - - :param cfg: Configuration object - :type cfg: ComposerConfig - :param dnflock: Lock and YumBase for depsolving - :type dnflock: YumLock - :param recipe: The recipe to build - :type recipe: str - :param compose_type: The type of output to create from the recipe - :type compose_type: str - :returns: Unique ID for the build that can be used to track its status - :rtype: str - """ - share_dir = cfg.get("composer", "share_dir") - lib_dir = cfg.get("composer", "lib_dir") - - # Make sure compose_type is valid, only allow enabled types - type_enabled = dict(compose_types(share_dir)).get(compose_type) - if type_enabled is None: - raise RuntimeError("Invalid compose type (%s), must be one of %s" % (compose_type, [t for t, e in compose_types(share_dir)])) - if not type_enabled: - raise RuntimeError("Compose type '%s' is disabled on this architecture" % compose_type) - - # Some image types (live-iso) need extra packages for composer to execute the output template - with dnflock.lock: - extra_pkgs = get_extra_pkgs(dnflock.dbo, share_dir, compose_type) - log.debug("Extra packages needed for %s: %s", compose_type, extra_pkgs) - - with gitlock.lock: - (commit_id, recipe) = read_recipe_and_id(gitlock.repo, branch, recipe_name) - - # Combine modules and packages and depsolve the list - module_nver = recipe.module_nver - package_nver = recipe.package_nver - package_nver.extend([(name, '*') for name in extra_pkgs]) - - projects = sorted(set(module_nver+package_nver), key=lambda p: p[0].lower()) - deps = [] - log.info("depsolving %s", recipe["name"]) - try: - # This can possibly update repodata and reset the YumBase object. - with dnflock.lock_check: - (installed_size, deps) = projects_depsolve_with_size(dnflock.dbo, projects, recipe.group_names, with_core=False) - except ProjectsError as e: - log.error("start_build depsolve: %s", str(e)) - raise RuntimeError("Problem depsolving %s: %s" % (recipe["name"], str(e))) - - # Read the kickstart template for this type - ks_template_path = joinpaths(share_dir, "composer", compose_type) + ".ks" - ks_template = open(ks_template_path, "r").read() - - # How much space will the packages in the default template take? - ks_version = makeVersion() - ks = KickstartParser(ks_version, errorsAreFatal=False, missingIncludeIsFatal=False) - ks.readKickstartFromString(ks_template+"\n%end\n") - pkgs = [(name, "*") for name in ks.handler.packages.packageList] - grps = [grp.name for grp in ks.handler.packages.groupList] - try: - with dnflock.lock: - (template_size, _) = projects_depsolve_with_size(dnflock.dbo, pkgs, grps, with_core=not ks.handler.packages.nocore) - except ProjectsError as e: - log.error("start_build depsolve: %s", str(e)) - raise RuntimeError("Problem depsolving %s: %s" % (recipe["name"], str(e))) - log.debug("installed_size = %d, template_size=%d", installed_size, template_size) - - # Minimum LMC disk size is 1GiB, and anaconda bumps the estimated size up by 10% (which doesn't always work). - installed_size = int((installed_size+template_size)) * 1.2 - log.debug("/ partition size = %d", installed_size) - - # Create the results directory - build_id = str(uuid4()) - results_dir = joinpaths(lib_dir, "results", build_id) - os.makedirs(results_dir) - - # Write the recipe commit hash - commit_path = joinpaths(results_dir, "COMMIT") - with open(commit_path, "w") as f: - f.write(commit_id) - - # Write the original recipe - recipe_path = joinpaths(results_dir, "blueprint.toml") - with open(recipe_path, "w") as f: - f.write(recipe.toml()) - - # Write the frozen recipe - frozen_recipe = recipe.freeze(deps) - recipe_path = joinpaths(results_dir, "frozen.toml") - with open(recipe_path, "w") as f: - f.write(frozen_recipe.toml()) - - # Write out the dependencies to the results dir - deps_path = joinpaths(results_dir, "deps.toml") - with open(deps_path, "w") as f: - f.write(toml.dumps({"packages":deps})) - - # Save a copy of the original kickstart - shutil.copy(ks_template_path, results_dir) - - with dnflock.lock: - repos = list(dnflock.dbo.repos.iter_enabled()) - if not repos: - raise RuntimeError("No enabled repos, canceling build.") - - # Create the git rpms, if any, and return the path to the repo under results_dir - gitrpm_repo = create_gitrpm_repo(results_dir, recipe) - - # Create the final kickstart with repos and package list - ks_path = joinpaths(results_dir, "final-kickstart.ks") - with open(ks_path, "w") as f: - ks_url = repo_to_ks(repos[0], "url") - log.debug("url = %s", ks_url) - f.write('url %s\n' % ks_url) - for idx, r in enumerate(repos[1:]): - ks_repo = repo_to_ks(r, "baseurl") - log.debug("repo composer-%s = %s", idx, ks_repo) - f.write('repo --name="composer-%s" %s\n' % (idx, ks_repo)) - - if gitrpm_repo: - log.debug("repo gitrpms = %s", gitrpm_repo) - f.write('repo --name="gitrpms" --baseurl="file://%s"\n' % gitrpm_repo) - - # Setup the disk for booting - # TODO Add GPT and UEFI boot support - f.write('clearpart --all --initlabel\n') - - # Write the root partition and it's size in MB (rounded up) - f.write('part / --size=%d\n' % ceil(installed_size / 1024**2)) - - # Some customizations modify the template before writing it - f.write(customize_ks_template(ks_template, recipe)) - - for d in deps: - f.write(dep_nevra(d)+"\n") - - # Include the rpms from the gitrpm repo directory - if gitrpm_repo: - for rpm in glob(os.path.join(gitrpm_repo, "*.rpm")): - f.write(os.path.basename(rpm)[:-4]+"\n") - - f.write("%end\n") - - # Other customizations can be appended to the kickstart - add_customizations(f, recipe) - - # Setup the config to pass to novirt_install - log_dir = joinpaths(results_dir, "logs/") - cfg_args = compose_args(compose_type) - - # Get the title, project, and release version from the host - if not os.path.exists("/etc/os-release"): - log.error("/etc/os-release is missing, cannot determine product or release version") - os_release = flatconfig("/etc/os-release") - - log.debug("os_release = %s", dict(os_release.items())) - - cfg_args["title"] = os_release.get("PRETTY_NAME", "") - cfg_args["project"] = os_release.get("NAME", "") - cfg_args["releasever"] = os_release.get("VERSION_ID", "") - cfg_args["volid"] = "" - cfg_args["extra_boot_args"] = get_kernel_append(recipe) - - if "compression" not in cfg_args: - cfg_args["compression"] = "xz" - - if "compress_args" not in cfg_args: - cfg_args["compress_args"] = [] - - cfg_args.update({ - "ks": [ks_path], - "logfile": log_dir, - "timeout": 60, # 60 minute timeout - }) - with open(joinpaths(results_dir, "config.toml"), "w") as f: - f.write(toml.dumps(cfg_args)) - - # Set the initial status - open(joinpaths(results_dir, "STATUS"), "w").write("WAITING") - - # Set the test mode, if requested - if test_mode > 0: - open(joinpaths(results_dir, "TEST"), "w").write("%s" % test_mode) - - write_timestamp(results_dir, TS_CREATED) - log.info("Adding %s (%s %s) to compose queue", build_id, recipe["name"], compose_type) - os.symlink(results_dir, joinpaths(lib_dir, "queue/new/", build_id)) - - return build_id
    - -# Supported output types -
    [docs]def compose_types(share_dir): - r""" Returns a list of tuples of the supported output types, and their state - - The output types come from the kickstart names in /usr/share/lorax/composer/\*ks - - If they are disabled on the current arch their state is False. If enabled, it is True. - eg. [("alibaba", False), ("ext4-filesystem", True), ...] - """ - # These are compose types that are not supported on an architecture. eg. hyper-v on s390 - # If it is not listed, it is allowed - disable_map = { - "arm": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "armhfp": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "aarch64": ["alibaba", "google", "hyper-v", "vhd", "vmdk"], - "ppc": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "ppc64": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "ppc64le": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "s390": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "s390x": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - } - - all_types = sorted([os.path.basename(ks)[:-3] for ks in glob(joinpaths(share_dir, "composer/*.ks"))]) - arch_disabled = disable_map.get(os.uname().machine, []) - - return [(t, t not in arch_disabled) for t in all_types]
    - -
    [docs]def compose_args(compose_type): - """ Returns the settings to pass to novirt_install for the compose type - - :param compose_type: The type of compose to create, from `compose_types()` - :type compose_type: str - - This will return a dict of options that match the ArgumentParser options for livemedia-creator. - These are the ones the define the type of output, it's filename, etc. - Other options will be filled in by `make_compose()` - """ - _MAP = {"tar": {"make_iso": False, - "make_disk": False, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": True, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": default_image_name("xz", "root.tar"), - "tar_disk_name": None, - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "liveimg-tar": {"make_iso": False, - "make_disk": False, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": True, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": default_image_name("xz", "root.tar"), - "tar_disk_name": None, - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "live-iso": {"make_iso": True, - "make_disk": False, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": "live.iso", - "tar_disk_name": None, - "fs_label": "Anaconda", # Live booting may expect this to be 'Anaconda' - "image_only": False, - "app_name": None, - "app_template": None, - "app_file": None, - "iso_only": True, - "iso_name": "live.iso", - "squashfs_only": False, - }, - "partitioned-disk": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": "disk.img", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "qcow2": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "qcow2", - "qemu_args": [], - "image_name": "disk.qcow2", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "ext4-filesystem": {"make_iso": False, - "make_disk": False, - "make_fsimage": True, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": "filesystem.img", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "ami": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": False, - "qemu_args": [], - "image_name": "disk.ami", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "vhd": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "vpc", - "qemu_args": ["-o", "subformat=fixed,force_size"], - "image_name": "disk.vhd", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "vmdk": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "vmdk", - "qemu_args": [], - "image_name": "disk.vmdk", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "openstack": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "qcow2", - "qemu_args": [], - "image_name": "disk.qcow2", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "google": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": True, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 1024, - "image_type": False, # False instead of None because of TOML - "qemu_args": [], - "image_name": "disk.tar.gz", - "tar_disk_name": "disk.raw", - "compression": "gzip", - "compress_args": ["-9"], - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "hyper-v": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "vhdx", - "qemu_args": [], - "image_name": "disk.vhdx", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - "alibaba": {"make_iso": False, - "make_disk": True, - "make_fsimage": False, - "make_appliance": False, - "make_ami": False, - "make_tar": False, - "make_tar_disk": False, - "make_pxe_live": False, - "make_ostree_live": False, - "make_oci": False, - "make_vagrant": False, - "ostree": False, - "live_rootfs_keep_size": False, - "live_rootfs_size": 0, - "image_size_align": 0, - "image_type": "qcow2", - "qemu_args": [], - "image_name": "disk.qcow2", - "tar_disk_name": None, - "fs_label": "", - "image_only": True, - "app_name": None, - "app_template": None, - "app_file": None, - "squashfs_only": False, - }, - } - return _MAP[compose_type]
    - -
    [docs]def move_compose_results(cfg, results_dir): - """Move the final image to the results_dir and cleanup the unneeded compose files - - :param cfg: Build configuration - :type cfg: DataHolder - :param results_dir: Directory to put the results into - :type results_dir: str - """ - if cfg["make_tar"]: - shutil.move(joinpaths(cfg["result_dir"], cfg["image_name"]), results_dir) - elif cfg["make_iso"]: - # Output from live iso is always a boot.iso under images/, move and rename it - shutil.move(joinpaths(cfg["result_dir"], cfg["iso_name"]), joinpaths(results_dir, cfg["image_name"])) - elif cfg["make_disk"] or cfg["make_fsimage"]: - shutil.move(joinpaths(cfg["result_dir"], cfg["image_name"]), joinpaths(results_dir, cfg["image_name"])) - - - # Cleanup the compose directory, but only if it looks like a compose directory - if os.path.basename(cfg["result_dir"]) == "compose": - shutil.rmtree(cfg["result_dir"]) - else: - log.error("Incorrect compose directory, not cleaning up")
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/config.html b/docs/html/_modules/pylorax/api/config.html deleted file mode 100644 index 3e0f0c56..00000000 --- a/docs/html/_modules/pylorax/api/config.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - - - pylorax.api.config — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.config

    -#
    -# Copyright (C) 2017  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import configparser
    -import grp
    -import os
    -import pwd
    -
    -from pylorax.sysutils import joinpaths
    -
    -
    [docs]class ComposerConfig(configparser.ConfigParser): -
    [docs] def get_default(self, section, option, default): - try: - return self.get(section, option) - except configparser.Error: - return default
    - - -
    [docs]def configure(conf_file="/etc/lorax/composer.conf", root_dir="/", test_config=False): - """lorax-composer configuration - - :param conf_file: Path to the config file overriding the default settings - :type conf_file: str - :param root_dir: Directory to prepend to paths, defaults to / - :type root_dir: str - :param test_config: Set to True to skip reading conf_file - :type test_config: bool - :returns: Configuration - :rtype: ComposerConfig - """ - conf = ComposerConfig() - - # set defaults - conf.add_section("composer") - conf.set("composer", "share_dir", os.path.realpath(joinpaths(root_dir, "/usr/share/lorax/"))) - conf.set("composer", "lib_dir", os.path.realpath(joinpaths(root_dir, "/var/lib/lorax/composer/"))) - conf.set("composer", "repo_dir", os.path.realpath(joinpaths(root_dir, "/var/lib/lorax/composer/repos.d/"))) - conf.set("composer", "dnf_conf", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/dnf.conf"))) - conf.set("composer", "dnf_root", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/dnf/root/"))) - conf.set("composer", "cache_dir", os.path.realpath(joinpaths(root_dir, "/var/tmp/composer/cache/"))) - conf.set("composer", "tmp", os.path.realpath(joinpaths(root_dir, "/var/tmp/"))) - - conf.add_section("users") - conf.set("users", "root", "1") - - # Enable all available repo files by default - conf.add_section("repos") - conf.set("repos", "use_system_repos", "1") - conf.set("repos", "enabled", "*") - - conf.add_section("dnf") - - if not test_config: - # read the config file - if os.path.isfile(conf_file): - conf.read(conf_file) - - return conf
    - -
    [docs]def make_owned_dir(p_dir, uid, gid): - """Make a directory and its parents, setting owner and group - - :param p_dir: path to directory to create - :type p_dir: string - :param uid: uid of owner - :type uid: int - :param gid: gid of owner - :type gid: int - :returns: list of errors - :rtype: list of str - - Check to make sure it does not have o+rw permissions and that it is owned by uid:gid - """ - errors = [] - if not os.path.isdir(p_dir): - # Make sure no o+rw permissions are set - orig_umask = os.umask(0o006) - os.makedirs(p_dir, 0o771) - os.chown(p_dir, uid, gid) - os.umask(orig_umask) - else: - p_stat = os.stat(p_dir) - if p_stat.st_mode & 0o006 != 0: - errors.append("Incorrect permissions on %s, no o+rw permissions are allowed." % p_dir) - - if p_stat.st_gid != gid or p_stat.st_uid != 0: - gr_name = grp.getgrgid(gid).gr_name - u_name = pwd.getpwuid(uid) - errors.append("%s should be owned by %s:%s" % (p_dir, u_name, gr_name)) - - return errors
    - -
    [docs]def make_dnf_dirs(conf, uid, gid): - """Make any missing dnf directories owned by user:group - - :param conf: The configuration to use - :type conf: ComposerConfig - :param uid: uid of owner - :type uid: int - :param gid: gid of owner - :type gid: int - :returns: list of errors - :rtype: list of str - """ - errors = [] - for p in ["dnf_conf", "repo_dir", "cache_dir", "dnf_root"]: - p_dir = os.path.abspath(conf.get("composer", p)) - if p == "dnf_conf": - p_dir = os.path.dirname(p_dir) - errors.extend(make_owned_dir(p_dir, uid, gid))
    - -
    [docs]def make_queue_dirs(conf, gid): - """Make any missing queue directories - - :param conf: The configuration to use - :type conf: ComposerConfig - :param gid: Group ID that has access to the queue directories - :type gid: int - :returns: list of errors - :rtype: list of str - """ - errors = [] - lib_dir = conf.get("composer", "lib_dir") - for p in ["queue/run", "queue/new", "results"]: - p_dir = joinpaths(lib_dir, p) - errors.extend(make_owned_dir(p_dir, 0, gid)) - return errors
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/crossdomain.html b/docs/html/_modules/pylorax/api/crossdomain.html deleted file mode 100644 index d8f653fe..00000000 --- a/docs/html/_modules/pylorax/api/crossdomain.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - pylorax.api.crossdomain — Lorax 31.7 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.crossdomain

    -#
    -# Copyright (C) 2017  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -# crossdomain decorator from - http://flask.pocoo.org/snippets/56/
    -from datetime import timedelta
    -from flask import make_response, request, current_app
    -from functools import update_wrapper
    -
    -
    -
    [docs]def crossdomain(origin, methods=None, headers=None, - max_age=21600, attach_to_all=True, - automatic_options=True): - if methods is not None: - methods = ', '.join(sorted(x.upper() for x in methods)) - if headers is not None and not isinstance(headers, str): - headers = ', '.join(x.upper() for x in headers) - if not isinstance(origin, list): - origin = [origin] - if isinstance(max_age, timedelta): - max_age = int(max_age.total_seconds()) - - def get_methods(): - if methods is not None: - return methods - - options_resp = current_app.make_default_options_response() - return options_resp.headers['allow'] - - def decorator(f): - def wrapped_function(*args, **kwargs): - if automatic_options and request.method == 'OPTIONS': - resp = current_app.make_default_options_response() - else: - resp = make_response(f(*args, **kwargs)) - if not attach_to_all and request.method != 'OPTIONS': - return resp - - h = resp.headers - - h.extend([("Access-Control-Allow-Origin", orig) for orig in origin]) - h['Access-Control-Allow-Methods'] = get_methods() - h['Access-Control-Max-Age'] = str(max_age) - if headers is not None: - h['Access-Control-Allow-Headers'] = headers - return resp - - f.provide_automatic_options = False - f.required_methods = ['OPTIONS'] - return update_wrapper(wrapped_function, f) - return decorator
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/dnfbase.html b/docs/html/_modules/pylorax/api/dnfbase.html deleted file mode 100644 index 7928b359..00000000 --- a/docs/html/_modules/pylorax/api/dnfbase.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - - - - - pylorax.api.dnfbase — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.dnfbase

    -#
    -# Copyright (C) 2017-2018 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -# pylint: disable=bad-preconf-access
    -
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -import dnf
    -import dnf.logging
    -from glob import glob
    -import os
    -import shutil
    -from threading import Lock
    -import time
    -
    -from pylorax import DEFAULT_PLATFORM_ID
    -from pylorax.sysutils import flatconfig
    -
    -
    [docs]class DNFLock(object): - """Hold the dnf.Base object and a Lock to control access to it. - - self.dbo is a property that returns the dnf.Base object, but it *may* change - from one call to the next if the upstream repositories have changed. - """ - def __init__(self, conf, expire_secs=6*60*60): - self._conf = conf - self._lock = Lock() - self.dbo = get_base_object(self._conf) - self._expire_secs = expire_secs - self._expire_time = time.time() + self._expire_secs - - @property - def lock(self): - """Check for repo updates (using expiration time) and return the lock - - If the repository has been updated, tear down the old dnf.Base and - create a new one. This is the only way to force dnf to use the new - metadata. - """ - if time.time() > self._expire_time: - return self.lock_check - return self._lock - - @property - def lock_check(self): - """Force a check for repo updates and return the lock - - Use this method sparingly, it removes the repodata and downloads a new copy every time. - """ - self._expire_time = time.time() + self._expire_secs - self.dbo.update_cache() - return self._lock
    - -
    [docs]def get_base_object(conf): - """Get the DNF object with settings from the config file - - :param conf: configuration object - :type conf: ComposerParser - :returns: A DNF Base object - :rtype: dnf.Base - """ - cachedir = os.path.abspath(conf.get("composer", "cache_dir")) - dnfconf = os.path.abspath(conf.get("composer", "dnf_conf")) - dnfroot = os.path.abspath(conf.get("composer", "dnf_root")) - repodir = os.path.abspath(conf.get("composer", "repo_dir")) - - # Setup the config for the DNF Base object - dbo = dnf.Base() - dbc = dbo.conf -# TODO - Handle this -# dbc.logdir = logdir - dbc.installroot = dnfroot - if not os.path.isdir(dnfroot): - os.makedirs(dnfroot) - if not os.path.isdir(repodir): - os.makedirs(repodir) - - dbc.cachedir = cachedir - dbc.reposdir = [repodir] - dbc.install_weak_deps = False - dbc.prepend_installroot('persistdir') - # this is a weird 'AppendOption' thing that, when you set it, - # actually appends. Doing this adds 'nodocs' to the existing list - # of values, over in libdnf, it does not replace the existing values. - dbc.tsflags = ['nodocs'] - - if conf.get_default("dnf", "proxy", None): - dbc.proxy = conf.get("dnf", "proxy") - - if conf.has_option("dnf", "sslverify") and not conf.getboolean("dnf", "sslverify"): - dbc.sslverify = False - - # If the system repos are enabled read the dnf vars from /etc/dnf/vars/ - if not conf.has_option("repos", "use_system_repos") or conf.getboolean("repos", "use_system_repos"): - dbc.substitutions.update_from_etc("/") - log.info("dnf vars: %s", dbc.substitutions) - - _releasever = conf.get_default("composer", "releasever", None) - if not _releasever: - # Use the releasever of the host system - _releasever = dnf.rpm.detect_releasever("/") - log.info("releasever = %s", _releasever) - dbc.releasever = _releasever - - # DNF 3.2 needs to have module_platform_id set, otherwise depsolve won't work correctly - if not os.path.exists("/etc/os-release"): - log.warning("/etc/os-release is missing, cannot determine platform id, falling back to %s", DEFAULT_PLATFORM_ID) - platform_id = DEFAULT_PLATFORM_ID - else: - os_release = flatconfig("/etc/os-release") - platform_id = os_release.get("PLATFORM_ID", DEFAULT_PLATFORM_ID) - log.info("Using %s for module_platform_id", platform_id) - dbc.module_platform_id = platform_id - - # Make sure metadata is always current - dbc.metadata_expire = 0 - dbc.metadata_expire_filter = "never" - - # write the dnf configuration file - with open(dnfconf, "w") as f: - f.write(dbc.dump()) - - # dnf needs the repos all in one directory, composer uses repodir for this - # if system repos are supposed to be used, copy them into repodir, overwriting any previous copies - if not conf.has_option("repos", "use_system_repos") or conf.getboolean("repos", "use_system_repos"): - for repo_file in glob("/etc/yum.repos.d/*.repo"): - shutil.copy2(repo_file, repodir) - dbo.read_all_repos() - - # Remove any duplicate repo entries. These can cause problems with Anaconda, which will fail - # with space problems. - repos = sorted(list(r.id for r in dbo.repos.iter_enabled())) - seen = {"baseurl": [], "mirrorlist": [], "metalink": []} - for source_name in repos: - remove = False - repo = dbo.repos.get(source_name, None) - if repo is None: - log.warning("repo %s vanished while removing duplicates", source_name) - continue - if repo.baseurl: - if repo.baseurl[0] in seen["baseurl"]: - log.info("Removing duplicate repo: %s baseurl=%s", source_name, repo.baseurl[0]) - remove = True - else: - seen["baseurl"].append(repo.baseurl[0]) - elif repo.mirrorlist: - if repo.mirrorlist in seen["mirrorlist"]: - log.info("Removing duplicate repo: %s mirrorlist=%s", source_name, repo.mirrorlist) - remove = True - else: - seen["mirrorlist"].append(repo.mirrorlist) - elif repo.metalink: - if repo.metalink in seen["metalink"]: - log.info("Removing duplicate repo: %s metalink=%s", source_name, repo.metalink) - remove = True - else: - seen["metalink"].append(repo.metalink) - - if remove: - del dbo.repos[source_name] - - # Update the metadata from the enabled repos to speed up later operations - log.info("Updating repository metadata") - try: - dbo.fill_sack(load_system_repo=False) - dbo.read_comps() - dbo.update_cache() - except dnf.exceptions.Error as e: - log.error("Failed to update metadata: %s", str(e)) - raise RuntimeError("Fetching metadata failed: %s" % str(e)) - - return dbo
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/flask_blueprint.html b/docs/html/_modules/pylorax/api/flask_blueprint.html deleted file mode 100644 index c1bf832e..00000000 --- a/docs/html/_modules/pylorax/api/flask_blueprint.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - pylorax.api.flask_blueprint — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.flask_blueprint

    -#
    -# Copyright (C) 2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Flask Blueprints that support skipping routes
    -
    -When using Blueprints for API versioning you will usually want to fall back
    -to the previous version's rules for routes that have no new behavior. To do
    -this we add a 'skip_rule' list to the Blueprint's options dictionary. It lists
    -all of the routes that you do not want to register.
    -
    -For example:
    -    from pylorax.api.v0 import v0
    -    from pylorax.api.v1 import v1
    -
    -    server.register_blueprint(v0, url_prefix="/api/v0/")
    -    server.register_blueprint(v0, url_prefix="/api/v1/", skip_rules=["/blueprints/list"]
    -    server.register_blueprint(v1, url_prefix="/api/v1/")
    -
    -This will register all of v0's routes under `/api/v0`, and all but `/blueprints/list` under /api/v1,
    -and then register v1's version of `/blueprints/list` under `/api/v1`
    -
    -"""
    -from flask import Blueprint
    -from flask.blueprints import BlueprintSetupState
    -
    -
    [docs]class BlueprintSetupStateSkip(BlueprintSetupState): - def __init__(self, blueprint, app, options, first_registration, skip_rules): - self._skip_rules = skip_rules - super(BlueprintSetupStateSkip, self).__init__(blueprint, app, options, first_registration) - -
    [docs] def add_url_rule(self, rule, endpoint=None, view_func=None, **options): - if rule not in self._skip_rules: - super(BlueprintSetupStateSkip, self).add_url_rule(rule, endpoint, view_func, **options)
    - -
    [docs]class BlueprintSkip(Blueprint): - def __init__(self, *args, **kwargs): - super(BlueprintSkip, self).__init__(*args, **kwargs) - -
    [docs] def make_setup_state(self, app, options, first_registration=False): - skip_rules = options.pop("skip_rules", []) - return BlueprintSetupStateSkip(self, app, options, first_registration, skip_rules)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/gitrpm.html b/docs/html/_modules/pylorax/api/gitrpm.html deleted file mode 100644 index 052e01d0..00000000 --- a/docs/html/_modules/pylorax/api/gitrpm.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - - - - - - pylorax.api.gitrpm — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.gitrpm

    -# Copyright (C) 2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Clone a git repository and package it as an rpm
    -
    -This module contains functions for cloning a git repo, creating a tar archive of
    -the selected commit, branch, or tag, and packaging the files into an rpm that will
    -be installed by anaconda when creating the image.
    -"""
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -import os
    -from rpmfluff import SimpleRpmBuild
    -import shutil
    -import subprocess
    -import tempfile
    -import time
    -
    -from pylorax.sysutils import joinpaths
    -
    -
    [docs]def get_repo_description(gitRepo): - """ Return a description including the git repo and reference - - :param gitRepo: A dict with the repository details - :type gitRepo: dict - :returns: A string with the git repo url and reference - :rtype: str - """ - return "Created from %s, reference '%s', on %s" % (gitRepo["repo"], gitRepo["ref"], time.ctime())
    - -
    [docs]class GitArchiveTarball: - """Create a git archive of the selected git repo and reference""" - def __init__(self, gitRepo): - self._gitRepo = gitRepo - self.sourceName = self._gitRepo["rpmname"]+".tar.xz" - -
    [docs] def write_file(self, sourcesDir): - """ Create the tar archive - - :param sourcesDir: Path to use for creating the archive - :type sourcesDir: str - - This clones the git repository and creates a git archive from the specified reference. - The result is in RPMNAME.tar.xz under the sourcesDir - """ - # Clone the repository into a temporary location - cmd = ["git", "clone", self._gitRepo["repo"], joinpaths(sourcesDir, "gitrepo")] - log.debug(cmd) - try: - subprocess.check_output(cmd, stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - log.error("Failed to clone %s: %s", self._gitRepo["repo"], e.output) - raise RuntimeError("Failed to clone %s" % self._gitRepo["repo"]) - - oldcwd = os.getcwd() - try: - os.chdir(joinpaths(sourcesDir, "gitrepo")) - - # Configure archive to create a .tar.xz - cmd = ["git", "config", "tar.tar.xz.command", "xz -c"] - log.debug(cmd) - subprocess.check_call(cmd) - - cmd = ["git", "archive", "--prefix", self._gitRepo["rpmname"] + "/", "-o", joinpaths(sourcesDir, self.sourceName), self._gitRepo["ref"]] - log.debug(cmd) - try: - subprocess.check_output(cmd, stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - log.error("Failed to archive %s: %s", self._gitRepo["repo"], e.output) - raise RuntimeError('Failed to archive %s from ref "%s"' % (self._gitRepo["repo"], - self._gitRepo["ref"])) - finally: - # Cleanup even if there was an error - os.chdir(oldcwd) - shutil.rmtree(joinpaths(sourcesDir, "gitrepo"))
    - -
    [docs]class GitRpmBuild(SimpleRpmBuild): - """Build an rpm containing files from a git repository""" - def __init__(self, *args, **kwargs): - self._base_dir = None - super().__init__(*args, **kwargs) - -
    [docs] def check(self): - raise NotImplementedError
    - -
    [docs] def get_base_dir(self): - """Place all the files under a temporary directory + rpmbuild/ - """ - if not self._base_dir: - self._base_dir = tempfile.mkdtemp(prefix="lorax-git-rpm.") - return joinpaths(self._base_dir, "rpmbuild")
    - -
    [docs] def cleanup_tmpdir(self): - """Remove the temporary directory and all of its contents - """ - if len(self._base_dir) < 5: - raise RuntimeError("Invalid base_dir: %s" % self.get_base_dir()) - - shutil.rmtree(self._base_dir)
    - -
    [docs] def clean(self): - """Remove the base directory from inside the tmpdir""" - if len(self.get_base_dir()) < 5: - raise RuntimeError("Invalid base_dir: %s" % self.get_base_dir()) - shutil.rmtree(self.get_base_dir(), ignore_errors=True)
    - -
    [docs] def add_git_tarball(self, gitRepo): - """Add a tar archive of a git repository to the rpm - - :param gitRepo: A dict with the repository details - :type gitRepo: dict - - This populates the rpm with the URL of the git repository, the summary - describing the repo, the description of the repository and reference used, - and sets up the rpm to install the archive contents into the destination - path. - """ - self.addUrl(gitRepo["repo"]) - self.add_summary(gitRepo["summary"]) - self.add_description(get_repo_description(gitRepo)) - self.addLicense("Unknown") - sourceIndex = self.add_source(GitArchiveTarball(gitRepo)) - self.section_build += "tar -xvf %s\n" % self.sources[sourceIndex].sourceName - dest = os.path.normpath(gitRepo["destination"]) - # Prevent double slash root - if dest == "/": - dest = "" - self.create_parent_dirs(dest) - self.section_install += "cp -r %s/. $RPM_BUILD_ROOT/%s\n" % (gitRepo["rpmname"], dest) - sub = self.get_subpackage(None) - if not dest: - # / is special, we don't want to include / itself, just what's under it - sub.section_files += "/*\n" - else: - sub.section_files += "%s/\n" % dest
    - -
    [docs]def make_git_rpm(gitRepo, dest): - """ Create an rpm from the specified git repo - - :param gitRepo: A dict with the repository details - :type gitRepo: dict - - This will clone the git repository, create an archive of the selected reference, - and build an rpm that will install the files from the repository under the destination - directory. The gitRepo dict should have the following fields:: - - rpmname: "server-config" - rpmversion: "1.0" - rpmrelease: "1" - summary: "Setup files for server deployment" - repo: "PATH OF GIT REPO TO CLONE" - ref: "v1.0" - destination: "/opt/server/" - - * rpmname: Name of the rpm to create, also used as the prefix name in the tar archive - * rpmversion: Version of the rpm, eg. "1.0.0" - * rpmrelease: Release of the rpm, eg. "1" - * summary: Summary string for the rpm - * repo: URL of the get repo to clone and create the archive from - * ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash - * destination: Path to install the / of the git repo at when installing the rpm - """ - gitRpm = GitRpmBuild(gitRepo["rpmname"], gitRepo["rpmversion"], gitRepo["rpmrelease"], ["noarch"]) - try: - gitRpm.add_git_tarball(gitRepo) - gitRpm.do_make() - rpmfile = gitRpm.get_built_rpm("noarch") - shutil.move(rpmfile, dest) - except Exception as e: - log.error("Creating git repo rpm: %s", e) - raise RuntimeError("Creating git repo rpm: %s" % e) - finally: - gitRpm.cleanup_tmpdir() - - return os.path.basename(rpmfile)
    - -# Create the git rpms, if any, and return the path to the repo under results_dir -
    [docs]def create_gitrpm_repo(results_dir, recipe): - """Create a dnf repository with the rpms from the recipe - - :param results_dir: Path to create the repository under - :type results_dir: str - :param recipe: The recipe to get the repos.git entries from - :type recipe: Recipe - :returns: Path to the dnf repository or "" - :rtype: str - - This function creates a dnf repository directory at results_dir+"repo/", - creates rpms for all of the repos.git entries in the recipe, runs createrepo_c - on the dnf repository so that Anaconda can use it, and returns the path to the - repository to the caller. - """ - if "repos" not in recipe or "git" not in recipe["repos"]: - return "" - - gitrepo = joinpaths(results_dir, "repo/") - if not os.path.exists(gitrepo): - os.makedirs(gitrepo) - for r in recipe["repos"]["git"]: - make_git_rpm(r, gitrepo) - cmd = ["createrepo_c", gitrepo] - log.debug(cmd) - try: - subprocess.check_output(cmd, stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - log.error("Failed to create repo at %s: %s", gitrepo, e.output) - raise RuntimeError("Failed to create repo at %s" % gitrepo) - - return gitrepo
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/projects.html b/docs/html/_modules/pylorax/api/projects.html deleted file mode 100644 index 9e76aed7..00000000 --- a/docs/html/_modules/pylorax/api/projects.html +++ /dev/null @@ -1,897 +0,0 @@ - - - - - - - - - - - pylorax.api.projects — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.projects

    -#
    -# Copyright (C) 2017  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -from configparser import ConfigParser
    -import dnf
    -from glob import glob
    -import os
    -import time
    -
    -from pylorax.api.bisect import insort_left
    -from pylorax.sysutils import joinpaths
    -
    -TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
    -
    -
    -
    [docs]class ProjectsError(Exception): - pass
    - - -
    [docs]def api_time(t): - """Convert time since epoch to a string - - :param t: Seconds since epoch - :type t: int - :returns: Time string - :rtype: str - """ - return time.strftime(TIME_FORMAT, time.localtime(t))
    - - -
    [docs]def api_changelog(changelog): - """Convert the changelog to a string - - :param changelog: A list of time, author, string tuples. - :type changelog: tuple - :returns: The most recent changelog text or "" - :rtype: str - - This returns only the most recent changelog entry. - """ - try: - entry = changelog[0][2] - except IndexError: - entry = "" - return entry
    - - -
    [docs]def pkg_to_project(pkg): - """Extract the details from a hawkey.Package object - - :param pkgs: hawkey.Package object with package details - :type pkgs: hawkey.Package - :returns: A dict with the name, summary, description, and url. - :rtype: dict - - upstream_vcs is hard-coded to UPSTREAM_VCS - """ - return {"name": pkg.name, - "summary": pkg.summary, - "description": pkg.description, - "homepage": pkg.url, - "upstream_vcs": "UPSTREAM_VCS"}
    - - -
    [docs]def pkg_to_build(pkg): - """Extract the build details from a hawkey.Package object - - :param pkg: hawkey.Package object with package details - :type pkg: hawkey.Package - :returns: A dict with the build details, epoch, release, arch, build_time, changelog, ... - :rtype: dict - - metadata entries are hard-coded to {} - - Note that this only returns the build dict, it does not include the name, description, etc. - """ - return {"epoch": pkg.epoch, - "release": pkg.release, - "arch": pkg.arch, - "build_time": api_time(pkg.buildtime), - "changelog": "CHANGELOG_NEEDED", # XXX Not in hawkey.Package - "build_config_ref": "BUILD_CONFIG_REF", - "build_env_ref": "BUILD_ENV_REF", - "metadata": {}, - "source": {"license": pkg.license, - "version": pkg.version, - "source_ref": "SOURCE_REF", - "metadata": {}}}
    - - -
    [docs]def pkg_to_project_info(pkg): - """Extract the details from a hawkey.Package object - - :param pkg: hawkey.Package object with package details - :type pkg: hawkey.Package - :returns: A dict with the project details, as well as epoch, release, arch, build_time, changelog, ... - :rtype: dict - - metadata entries are hard-coded to {} - """ - return {"name": pkg.name, - "summary": pkg.summary, - "description": pkg.description, - "homepage": pkg.url, - "upstream_vcs": "UPSTREAM_VCS", - "builds": [pkg_to_build(pkg)]}
    - - -
    [docs]def pkg_to_dep(pkg): - """Extract the info from a hawkey.Package object - - :param pkg: A hawkey.Package object - :type pkg: hawkey.Package - :returns: A dict with name, epoch, version, release, arch - :rtype: dict - """ - return {"name": pkg.name, - "epoch": pkg.epoch, - "version": pkg.version, - "release": pkg.release, - "arch": pkg.arch}
    - - -
    [docs]def proj_to_module(proj): - """Extract the name from a project_info dict - - :param pkg: dict with package details - :type pkg: dict - :returns: A dict with name, and group_type - :rtype: dict - - group_type is hard-coded to "rpm" - """ - return {"name": proj["name"], - "group_type": "rpm"}
    - - -
    [docs]def dep_evra(dep): - """Return the epoch:version-release.arch for the dep - - :param dep: dependency dict - :type dep: dict - :returns: epoch:version-release.arch - :rtype: str - """ - if dep["epoch"] == 0: - return dep["version"]+"-"+dep["release"]+"."+dep["arch"] - else: - return str(dep["epoch"])+":"+dep["version"]+"-"+dep["release"]+"."+dep["arch"]
    - -
    [docs]def dep_nevra(dep): - """Return the name-epoch:version-release.arch""" - return dep["name"]+"-"+dep_evra(dep)
    - - -
    [docs]def projects_list(dbo): - """Return a list of projects - - :param dbo: dnf base object - :type dbo: dnf.Base - :returns: List of project info dicts with name, summary, description, homepage, upstream_vcs - :rtype: list of dicts - """ - return projects_info(dbo, None)
    - - -
    [docs]def projects_info(dbo, project_names): - """Return details about specific projects - - :param dbo: dnf base object - :type dbo: dnf.Base - :param project_names: List of names of projects to get info about - :type project_names: str - :returns: List of project info dicts with pkg_to_project as well as epoch, version, release, etc. - :rtype: list of dicts - - If project_names is None it will return the full list of available packages - """ - if project_names: - pkgs = dbo.sack.query().available().filter(name__glob=project_names) - else: - pkgs = dbo.sack.query().available() - - # iterate over pkgs - # - if pkg.name isn't in the results yet, add pkg_to_project_info in sorted position - # - if pkg.name is already in results, get its builds. If the build for pkg is different - # in any way (version, arch, etc.) add it to the entry's builds list. If it is the same, - # skip it. - results = [] - results_names = {} - for p in pkgs: - if p.name.lower() not in results_names: - idx = insort_left(results, pkg_to_project_info(p), key=lambda p: p["name"].lower()) - results_names[p.name.lower()] = idx - else: - build = pkg_to_build(p) - if build not in results[results_names[p.name.lower()]]["builds"]: - results[results_names[p.name.lower()]]["builds"].append(build) - - return results
    - -def _depsolve(dbo, projects, groups): - """Add projects to a new transaction - - :param dbo: dnf base object - :type dbo: dnf.Base - :param projects: The projects and version globs to find the dependencies for - :type projects: List of tuples - :param groups: The groups to include in dependency solving - :type groups: List of str - :returns: None - :rtype: None - :raises: ProjectsError if there was a problem installing something - """ - # This resets the transaction and updates the cache. - # It is important that the cache always be synchronized because Anaconda will grab its own copy - # and if that is different the NEVRAs will not match and the build will fail. - dbo.reset(goal=True) - install_errors = [] - for name in groups: - try: - dbo.group_install(name, ["mandatory", "default"]) - except dnf.exceptions.MarkingError as e: - install_errors.append(("Group %s" % (name), str(e))) - - for name, version in projects: - # Find the best package matching the name + version glob - # dnf can return multiple packages if it is in more than 1 repository - query = dbo.sack.query().filterm(provides__glob=name) - if version: - query.filterm(version__glob=version) - - query.filterm(latest=1) - if not query: - install_errors.append(("%s-%s" % (name, version), "No match")) - continue - sltr = dnf.selector.Selector(dbo.sack).set(pkg=query) - - # NOTE: dnf says in near future there will be a "goal" attribute of Base class - # so yes, we're using a 'private' attribute here on purpose and with permission. - dbo._goal.install(select=sltr, optional=False) - - if install_errors: - raise ProjectsError("The following package(s) had problems: %s" % ",".join(["%s (%s)" % (pattern, err) for pattern, err in install_errors])) - -
    [docs]def projects_depsolve(dbo, projects, groups): - """Return the dependencies for a list of projects - - :param dbo: dnf base object - :type dbo: dnf.Base - :param projects: The projects to find the dependencies for - :type projects: List of Strings - :param groups: The groups to include in dependency solving - :type groups: List of str - :returns: NEVRA's of the project and its dependencies - :rtype: list of dicts - :raises: ProjectsError if there was a problem installing something - """ - _depsolve(dbo, projects, groups) - - try: - dbo.resolve() - except dnf.exceptions.DepsolveError as e: - raise ProjectsError("There was a problem depsolving %s: %s" % (projects, str(e))) - - if len(dbo.transaction) == 0: - return [] - - return sorted(map(pkg_to_dep, dbo.transaction.install_set), key=lambda p: p["name"].lower())
    - - -
    [docs]def estimate_size(packages, block_size=6144): - """Estimate the installed size of a package list - - :param packages: The packages to be installed - :type packages: list of hawkey.Package objects - :param block_size: The block size to use for rounding up file sizes. - :type block_size: int - :returns: The estimated size of installed packages - :rtype: int - - Estimating actual requirements is difficult without the actual file sizes, which - dnf doesn't provide access to. So use the file count and block size to estimate - a minimum size for each package. - """ - installed_size = 0 - for p in packages: - installed_size += len(p.files) * block_size - installed_size += p.installsize - return installed_size
    - - -
    [docs]def projects_depsolve_with_size(dbo, projects, groups, with_core=True): - """Return the dependencies and installed size for a list of projects - - :param dbo: dnf base object - :type dbo: dnf.Base - :param project_names: The projects to find the dependencies for - :type project_names: List of Strings - :param groups: The groups to include in dependency solving - :type groups: List of str - :returns: installed size and a list of NEVRA's of the project and its dependencies - :rtype: tuple of (int, list of dicts) - :raises: ProjectsError if there was a problem installing something - """ - _depsolve(dbo, projects, groups) - - if with_core: - dbo.group_install("core", ['mandatory', 'default', 'optional']) - - try: - dbo.resolve() - except dnf.exceptions.DepsolveError as e: - raise ProjectsError("There was a problem depsolving %s: %s" % (projects, str(e))) - - if len(dbo.transaction) == 0: - return (0, []) - - installed_size = estimate_size(dbo.transaction.install_set) - deps = sorted(map(pkg_to_dep, dbo.transaction.install_set), key=lambda p: p["name"].lower()) - return (installed_size, deps)
    - - -
    [docs]def modules_list(dbo, module_names): - """Return a list of modules - - :param dbo: dnf base object - :type dbo: dnf.Base - :param offset: Number of modules to skip - :type limit: int - :param limit: Maximum number of modules to return - :type limit: int - :returns: List of module information and total count - :rtype: tuple of a list of dicts and an Int - - Modules don't exist in RHEL7 so this only returns projects - and sets the type to "rpm" - - """ - # TODO - Figure out what to do with this for Fedora 'modules' - return list(map(proj_to_module, projects_info(dbo, module_names)))
    - -
    [docs]def modules_info(dbo, module_names): - """Return details about a module, including dependencies - - :param dbo: dnf base object - :type dbo: dnf.Base - :param module_names: Names of the modules to get info about - :type module_names: str - :returns: List of dicts with module details and dependencies. - :rtype: list of dicts - """ - modules = projects_info(dbo, module_names) - - # Add the dependency info to each one - for module in modules: - module["dependencies"] = projects_depsolve(dbo, [(module["name"], "*.*")], []) - - return modules
    - -
    [docs]def dnf_repo_to_file_repo(repo): - """Return a string representation of a DNF Repo object suitable for writing to a .repo file - - :param repo: DNF Repository - :type repo: dnf.RepoDict - :returns: A string - :rtype: str - - The DNF Repo.dump() function does not produce a string that can be used as a dnf .repo file, - it ouputs baseurl and gpgkey as python lists which DNF cannot read. So do this manually with - only the attributes we care about. - """ - repo_str = "[%s]\nname = %s\n" % (repo.id, repo.name) - if repo.metalink: - repo_str += "metalink = %s\n" % repo.metalink - elif repo.mirrorlist: - repo_str += "mirrorlist = %s\n" % repo.mirrorlist - elif repo.baseurl: - repo_str += "baseurl = %s\n" % repo.baseurl[0] - else: - raise RuntimeError("Repo has no baseurl, metalink, or mirrorlist") - - # proxy is optional - if repo.proxy: - repo_str += "proxy = %s\n" % repo.proxy - - repo_str += "sslverify = %s\n" % repo.sslverify - repo_str += "gpgcheck = %s\n" % repo.gpgcheck - if repo.gpgkey: - repo_str += "gpgkey = %s\n" % ",".join(repo.gpgkey) - - if repo.skip_if_unavailable: - repo_str += "skip_if_unavailable=1\n" - - return repo_str
    - -
    [docs]def repo_to_source(repo, system_source, api=1): - """Return a Weldr Source dict created from the DNF Repository - - :param repo: DNF Repository - :type repo: dnf.RepoDict - :param system_source: True if this source is an immutable system source - :type system_source: bool - :param api: Select which api version of the dict to return (default 1) - :type api: int - :returns: A dict with Weldr Source fields filled in - :rtype: dict - - Example:: - - { - "check_gpg": true, - "check_ssl": true, - "gpgkey_url": [ - "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64" - ], - "id": "fedora", - "name": "Fedora $releasever - $basearch", - "proxy": "http://proxy.brianlane.com:8123", - "system": true - "type": "yum-metalink", - "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64" - } - - The ``name`` field has changed in v1 of the API. - In v0 of the API ``name`` is the repo.id, in v1 it is the repo.name and a new field, - ``id`` has been added for the repo.id - - """ - if api==0: - source = {"name": repo.id, "system": system_source} - else: - source = {"id": repo.id, "name": repo.name, "system": system_source} - if repo.baseurl: - source["url"] = repo.baseurl[0] - source["type"] = "yum-baseurl" - elif repo.metalink: - source["url"] = repo.metalink - source["type"] = "yum-metalink" - elif repo.mirrorlist: - source["url"] = repo.mirrorlist - source["type"] = "yum-mirrorlist" - else: - raise RuntimeError("Repo has no baseurl, metalink, or mirrorlist") - - # proxy is optional - if repo.proxy: - source["proxy"] = repo.proxy - - if not repo.sslverify: - source["check_ssl"] = False - else: - source["check_ssl"] = True - - if not repo.gpgcheck: - source["check_gpg"] = False - else: - source["check_gpg"] = True - - if repo.gpgkey: - source["gpgkey_urls"] = list(repo.gpgkey) - - return source
    - -
    [docs]def source_to_repodict(source): - """Return a tuple suitable for use with dnf.add_new_repo - - :param source: A Weldr source dict - :type source: dict - :returns: A tuple of dnf.Repo attributes - :rtype: (str, list, dict) - - Return a tuple with (id, baseurl|(), kwargs) that can be used - with dnf.repos.add_new_repo - """ - kwargs = {} - if "id" in source: - # This is an API v1 source definition - repoid = source["id"] - if "name" in source: - kwargs["name"] = source["name"] - else: - repoid = source["name"] - - # This will allow errors to be raised so we can catch them - # without this they are logged, but the repo is silently disabled - kwargs["skip_if_unavailable"] = False - - if source["type"] == "yum-baseurl": - baseurl = [source["url"]] - elif source["type"] == "yum-metalink": - kwargs["metalink"] = source["url"] - baseurl = () - elif source["type"] == "yum-mirrorlist": - kwargs["mirrorlist"] = source["url"] - baseurl = () - - if "proxy" in source: - kwargs["proxy"] = source["proxy"] - - if source["check_ssl"]: - kwargs["sslverify"] = True - else: - kwargs["sslverify"] = False - - if source["check_gpg"]: - kwargs["gpgcheck"] = True - else: - kwargs["gpgcheck"] = False - - if "gpgkey_urls" in source: - kwargs["gpgkey"] = tuple(source["gpgkey_urls"]) - - return (repoid, baseurl, kwargs)
    - - -
    [docs]def source_to_repo(source, dnf_conf): - """Return a dnf Repo object created from a source dict - - :param source: A Weldr source dict - :type source: dict - :param dnf_conf: The dnf Config object - :type dnf_conf: dnf.conf - :returns: A dnf Repo object - :rtype: dnf.Repo - - Example:: - - { - "check_gpg": True, - "check_ssl": True, - "gpgkey_urls": [ - "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64" - ], - "id": "fedora", - "name": "Fedora $releasever - $basearch", - "proxy": "http://proxy.brianlane.com:8123", - "system": True - "type": "yum-metalink", - "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64" - } - - If the ``id`` field is included it is used for the repo id, otherwise ``name`` is used. - v0 of the API only used ``name``, v1 added the distinction between ``id`` and ``name``. - """ - repoid, baseurl, kwargs = source_to_repodict(source) - repo = dnf.repo.Repo(repoid, dnf_conf) - if baseurl: - repo.baseurl = baseurl - - # Apply the rest of the kwargs to the Repo object - for k, v in kwargs.items(): - setattr(repo, k, v) - - repo.enable() - - return repo
    - -
    [docs]def get_source_ids(source_path): - """Return a list of the source ids in a file - - :param source_path: Full path and filename of the source (yum repo) file - :type source_path: str - :returns: A list of source id strings - :rtype: list of str - """ - if not os.path.exists(source_path): - return [] - - cfg = ConfigParser() - cfg.read(source_path) - return cfg.sections()
    - -
    [docs]def get_repo_sources(source_glob): - """Return a list of sources from a directory of yum repositories - - :param source_glob: A glob to use to match the source files, including full path - :type source_glob: str - :returns: A list of the source ids in all of the matching files - :rtype: list of str - """ - sources = [] - for f in glob(source_glob): - sources.extend(get_source_ids(f)) - return sources
    - -
    [docs]def delete_repo_source(source_glob, source_id): - """Delete a source from a repo file - - :param source_glob: A glob of the repo sources to search - :type source_glob: str - :param source_id: The repo id to delete - :type source_id: str - :returns: None - :raises: ProjectsError if there was a problem - - A repo file may have multiple sources in it, delete only the selected source. - If it is the last one in the file, delete the file. - - WARNING: This will delete ANY source, the caller needs to ensure that a system - source_id isn't passed to it. - """ - found = False - for f in glob(source_glob): - try: - cfg = ConfigParser() - cfg.read(f) - if source_id in cfg.sections(): - found = True - cfg.remove_section(source_id) - # If there are other sections, rewrite the file without the deleted one - if len(cfg.sections()) > 0: - with open(f, "w") as cfg_file: - cfg.write(cfg_file) - else: - # No sections left, just delete the file - os.unlink(f) - except Exception as e: - raise ProjectsError("Problem deleting repo source %s: %s" % (source_id, str(e))) - if not found: - raise ProjectsError("source %s not found" % source_id)
    - -
    [docs]def new_repo_source(dbo, repoid, source, repo_dir): - """Add a new repo source from a Weldr source dict - - :param dbo: dnf base object - :type dbo: dnf.Base - :param id: The repo id (API v0 uses the name, v1 uses the id) - :type id: str - :param source: A Weldr source dict - :type source: dict - :returns: None - :raises: ... - - Make sure access to the dbo has been locked before calling this. - The `id` parameter will the the 'name' field for API v0, and the 'id' field for API v1 - - DNF variables will be substituted at load time, and on restart. - """ - try: - # Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API) - # If this repo already exists, delete it and replace it with the new one - repos = list(r.id for r in dbo.repos.iter_enabled()) - if repoid in repos: - del dbo.repos[repoid] - - # Add the repo and substitute any dnf variables - _, baseurl, kwargs = source_to_repodict(source) - log.debug("repoid=%s, baseurl=%s, kwargs=%s", repoid, baseurl, kwargs) - r = dbo.repos.add_new_repo(repoid, dbo.conf, baseurl, **kwargs) - r.enable() - - log.info("Updating repository metadata after adding %s", repoid) - dbo.fill_sack(load_system_repo=False) - dbo.read_comps() - - # Remove any previous sources with this id, ignore it if it isn't found - try: - delete_repo_source(joinpaths(repo_dir, "*.repo"), repoid) - except ProjectsError: - pass - - # Make sure the source id can't contain a path traversal by taking the basename - source_path = joinpaths(repo_dir, os.path.basename("%s.repo" % repoid)) - # Write the un-substituted version of the repo to disk - with open(source_path, "w") as f: - repo = source_to_repo(source, dbo.conf) - f.write(dnf_repo_to_file_repo(repo)) - except Exception as e: - log.error("(new_repo_source) adding %s failed: %s", repoid, str(e)) - - # Cleanup the mess, if loading it failed we don't want to leave it in memory - repos = list(r.id for r in dbo.repos.iter_enabled()) - if repoid in repos: - del dbo.repos[repoid] - - log.info("Updating repository metadata after adding %s failed", repoid) - dbo.fill_sack(load_system_repo=False) - dbo.read_comps() - - raise
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/queue.html b/docs/html/_modules/pylorax/api/queue.html deleted file mode 100644 index 63471094..00000000 --- a/docs/html/_modules/pylorax/api/queue.html +++ /dev/null @@ -1,1063 +0,0 @@ - - - - - - - - - - - pylorax.api.queue — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.queue

    -# Copyright (C) 2018 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Functions to monitor compose queue and run anaconda"""
    -import logging
    -log = logging.getLogger("pylorax")
    -program_log = logging.getLogger("program")
    -dnf_log = logging.getLogger("dnf")
    -
    -import os
    -import grp
    -from glob import glob
    -import multiprocessing as mp
    -import pwd
    -import shutil
    -import subprocess
    -from subprocess import Popen, PIPE
    -import time
    -
    -from pylorax import find_templates
    -from pylorax.api.compose import move_compose_results
    -from pylorax.api.recipes import recipe_from_file
    -from pylorax.api.timestamp import TS_CREATED, TS_STARTED, TS_FINISHED, write_timestamp, timestamp_dict
    -import pylorax.api.toml as toml
    -from pylorax.base import DataHolder
    -from pylorax.creator import run_creator
    -from pylorax.sysutils import joinpaths, read_tail
    -
    -from lifted.queue import create_upload, get_uploads, ready_upload, delete_upload
    -
    -
    [docs]def check_queues(cfg): - """Check to make sure the new and run queue symlinks are correct - - :param cfg: Configuration settings - :type cfg: DataHolder - - Also check all of the existing results and make sure any with WAITING - set in STATUS have a symlink in queue/new/ - """ - # Remove broken symlinks from the new and run queues - queue_symlinks = glob(joinpaths(cfg.composer_dir, "queue/new/*")) + \ - glob(joinpaths(cfg.composer_dir, "queue/run/*")) - for link in queue_symlinks: - if not os.path.isdir(os.path.realpath(link)): - log.info("Removing broken symlink %s", link) - os.unlink(link) - - # Write FAILED to the STATUS of any run queue symlinks and remove them - for link in glob(joinpaths(cfg.composer_dir, "queue/run/*")): - log.info("Setting build %s to FAILED, and removing symlink from queue/run/", os.path.basename(link)) - open(joinpaths(link, "STATUS"), "w").write("FAILED\n") - os.unlink(link) - - # Check results STATUS messages - # - If STATUS is missing, set it to FAILED - # - RUNNING should be changed to FAILED - # - WAITING should have a symlink in the new queue - for link in glob(joinpaths(cfg.composer_dir, "results/*")): - if not os.path.exists(joinpaths(link, "STATUS")): - open(joinpaths(link, "STATUS"), "w").write("FAILED\n") - continue - - status = open(joinpaths(link, "STATUS")).read().strip() - if status == "RUNNING": - log.info("Setting build %s to FAILED", os.path.basename(link)) - open(joinpaths(link, "STATUS"), "w").write("FAILED\n") - elif status == "WAITING": - if not os.path.islink(joinpaths(cfg.composer_dir, "queue/new/", os.path.basename(link))): - log.info("Creating missing symlink to new build %s", os.path.basename(link)) - os.symlink(link, joinpaths(cfg.composer_dir, "queue/new/", os.path.basename(link)))
    - -
    [docs]def start_queue_monitor(cfg, uid, gid): - """Start the queue monitor as a mp process - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uid: User ID that owns the queue - :type uid: int - :param gid: Group ID that owns the queue - :type gid: int - :returns: None - """ - lib_dir = cfg.get("composer", "lib_dir") - share_dir = cfg.get("composer", "share_dir") - tmp = cfg.get("composer", "tmp") - monitor_cfg = DataHolder(cfg=cfg, composer_dir=lib_dir, share_dir=share_dir, uid=uid, gid=gid, tmp=tmp) - p = mp.Process(target=monitor, args=(monitor_cfg,)) - p.daemon = True - p.start()
    - -
    [docs]def monitor(cfg): - """Monitor the queue for new compose requests - - :param cfg: Configuration settings - :type cfg: DataHolder - :returns: Does not return - - The queue has 2 subdirectories, new and run. When a compose is ready to be run - a symlink to the uniquely named results directory should be placed in ./queue/new/ - - When the it is ready to be run (it is checked every 30 seconds or after a previous - compose is finished) the symlink will be moved into ./queue/run/ and a STATUS file - will be created in the results directory. - - STATUS can contain one of: WAITING, RUNNING, FINISHED, FAILED - - If the system is restarted while a compose is running it will move any old symlinks - from ./queue/run/ to ./queue/new/ and rerun them. - """ - def queue_sort(uuid): - """Sort the queue entries by their mtime, not their names""" - return os.stat(joinpaths(cfg.composer_dir, "queue/new", uuid)).st_mtime - - check_queues(cfg) - while True: - uuids = sorted(os.listdir(joinpaths(cfg.composer_dir, "queue/new")), key=queue_sort) - - # Pick the oldest and move it into ./run/ - if not uuids: - # No composes left to process, sleep for a bit - time.sleep(5) - else: - src = joinpaths(cfg.composer_dir, "queue/new", uuids[0]) - dst = joinpaths(cfg.composer_dir, "queue/run", uuids[0]) - try: - os.rename(src, dst) - except OSError: - # The symlink may vanish if uuid_cancel() has been called - continue - - # The anaconda logs are also copied into ./anaconda/ in this directory - os.makedirs(joinpaths(dst, "logs"), exist_ok=True) - - def open_handler(loggers, file_name): - handler = logging.FileHandler(joinpaths(dst, "logs", file_name)) - handler.setLevel(logging.DEBUG) - handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s: %(message)s")) - for logger in loggers: - logger.addHandler(handler) - return (handler, loggers) - - loggers = (((log, program_log, dnf_log), "combined.log"), - ((log,), "composer.log"), - ((program_log,), "program.log"), - ((dnf_log,), "dnf.log")) - handlers = [open_handler(loggers, file_name) for loggers, file_name in loggers] - - log.info("Starting new compose: %s", dst) - open(joinpaths(dst, "STATUS"), "w").write("RUNNING\n") - - try: - make_compose(cfg, os.path.realpath(dst)) - log.info("Finished building %s, results are in %s", dst, os.path.realpath(dst)) - open(joinpaths(dst, "STATUS"), "w").write("FINISHED\n") - write_timestamp(dst, TS_FINISHED) - - upload_cfg = cfg.cfg["upload"] - for upload in get_uploads(upload_cfg, uuid_get_uploads(cfg.cfg, uuids[0])): - log.info("Readying upload %s", upload.uuid) - uuid_ready_upload(cfg.cfg, uuids[0], upload.uuid) - except Exception: - import traceback - log.error("traceback: %s", traceback.format_exc()) - -# TODO - Write the error message to an ERROR-LOG file to include with the status -# log.error("Error running compose: %s", e) - open(joinpaths(dst, "STATUS"), "w").write("FAILED\n") - write_timestamp(dst, TS_FINISHED) - finally: - for handler, loggers in handlers: - for logger in loggers: - logger.removeHandler(handler) - handler.close() - - os.unlink(dst)
    - -
    [docs]def make_compose(cfg, results_dir): - """Run anaconda with the final-kickstart.ks from results_dir - - :param cfg: Configuration settings - :type cfg: DataHolder - :param results_dir: The directory containing the metadata and results for the build - :type results_dir: str - :returns: Nothing - :raises: May raise various exceptions - - This takes the final-kickstart.ks, and the settings in config.toml and runs Anaconda - in no-virt mode (directly on the host operating system). Exceptions should be caught - at the higer level. - - If there is a failure, the build artifacts will be cleaned up, and any logs will be - moved into logs/anaconda/ and their ownership will be set to the user from the cfg - object. - """ - - # Check on the ks's presence - ks_path = joinpaths(results_dir, "final-kickstart.ks") - if not os.path.exists(ks_path): - raise RuntimeError("Missing kickstart file at %s" % ks_path) - - # Load the compose configuration - cfg_path = joinpaths(results_dir, "config.toml") - if not os.path.exists(cfg_path): - raise RuntimeError("Missing config.toml for %s" % results_dir) - cfg_dict = toml.loads(open(cfg_path, "r").read()) - - # The keys in cfg_dict correspond to the arguments setup in livemedia-creator - # keys that define what to build should be setup in compose_args, and keys with - # defaults should be setup here. - - # Make sure that image_name contains no path components - cfg_dict["image_name"] = os.path.basename(cfg_dict["image_name"]) - - # Only support novirt installation, set some other defaults - cfg_dict["no_virt"] = True - cfg_dict["disk_image"] = None - cfg_dict["fs_image"] = None - cfg_dict["keep_image"] = False - cfg_dict["domacboot"] = False - cfg_dict["anaconda_args"] = "" - cfg_dict["proxy"] = "" - cfg_dict["armplatform"] = "" - cfg_dict["squashfs_args"] = None - - cfg_dict["lorax_templates"] = find_templates(cfg.share_dir) - cfg_dict["tmp"] = cfg.tmp - # Use default args for dracut - cfg_dict["dracut_conf"] = None - cfg_dict["dracut_args"] = None - - # TODO How to support other arches? - cfg_dict["arch"] = None - - # Compose things in a temporary directory inside the results directory - cfg_dict["result_dir"] = joinpaths(results_dir, "compose") - os.makedirs(cfg_dict["result_dir"]) - - install_cfg = DataHolder(**cfg_dict) - - # Some kludges for the 99-copy-logs %post, failure in it will crash the build - for f in ["/tmp/NOSAVE_INPUT_KS", "/tmp/NOSAVE_LOGS"]: - open(f, "w") - - # Placing a CANCEL file in the results directory will make execWithRedirect send anaconda a SIGTERM - def cancel_build(): - return os.path.exists(joinpaths(results_dir, "CANCEL")) - - log.debug("cfg = %s", install_cfg) - try: - test_path = joinpaths(results_dir, "TEST") - write_timestamp(results_dir, TS_STARTED) - if os.path.exists(test_path): - # Pretend to run the compose - time.sleep(5) - try: - test_mode = int(open(test_path, "r").read()) - except Exception: - test_mode = 1 - if test_mode == 1: - raise RuntimeError("TESTING FAILED compose") - else: - open(joinpaths(results_dir, install_cfg.image_name), "w").write("TEST IMAGE") - else: - run_creator(install_cfg, cancel_func=cancel_build) - - # Extract the results of the compose into results_dir and cleanup the compose directory - move_compose_results(install_cfg, results_dir) - finally: - # Make sure any remaining temporary directories are removed (eg. if there was an exception) - for d in glob(joinpaths(cfg.tmp, "lmc-*")): - if os.path.isdir(d): - shutil.rmtree(d) - elif os.path.isfile(d): - os.unlink(d) - - # Make sure that everything under the results directory is owned by the user - user = pwd.getpwuid(cfg.uid).pw_name - group = grp.getgrgid(cfg.gid).gr_name - log.debug("Install finished, chowning results to %s:%s", user, group) - subprocess.call(["chown", "-R", "%s:%s" % (user, group), results_dir])
    - -
    [docs]def get_compose_type(results_dir): - """Return the type of composition. - - :param results_dir: The directory containing the metadata and results for the build - :type results_dir: str - :returns: The type of compose (eg. 'tar') - :rtype: str - :raises: RuntimeError if no kickstart template can be found. - """ - # Should only be 2 kickstarts, the final-kickstart.ks and the template - t = [os.path.basename(ks)[:-3] for ks in glob(joinpaths(results_dir, "*.ks")) - if "final-kickstart" not in ks] - if len(t) != 1: - raise RuntimeError("Cannot find ks template for build %s" % os.path.basename(results_dir)) - return t[0]
    - -
    [docs]def compose_detail(cfg, results_dir, api=1): - """Return details about the build. - - :param cfg: Configuration settings (required for api=1) - :type cfg: ComposerConfig - :param results_dir: The directory containing the metadata and results for the build - :type results_dir: str - :param api: Select which api version of the dict to return (default 1) - :type api: int - :returns: A dictionary with details about the compose - :rtype: dict - :raises: IOError if it cannot read the directory, STATUS, or blueprint file. - - The following details are included in the dict: - - * id - The uuid of the comoposition - * queue_status - The final status of the composition (FINISHED or FAILED) - * compose_type - The type of output generated (tar, iso, etc.) - * blueprint - Blueprint name - * version - Blueprint version - * image_size - Size of the image, if finished. 0 otherwise. - * uploads - For API v1 details about uploading the image are included - - Various timestamps are also included in the dict. These are all Unix UTC timestamps. - It is possible for these timestamps to not always exist, in which case they will be - None in Python (or null in JSON). The following timestamps are included: - - * job_created - When the user submitted the compose - * job_started - Anaconda started running - * job_finished - Job entered FINISHED or FAILED state - """ - build_id = os.path.basename(os.path.abspath(results_dir)) - status = open(joinpaths(results_dir, "STATUS")).read().strip() - blueprint = recipe_from_file(joinpaths(results_dir, "blueprint.toml")) - - compose_type = get_compose_type(results_dir) - - image_path = get_image_name(results_dir)[1] - if status == "FINISHED" and os.path.exists(image_path): - image_size = os.stat(image_path).st_size - else: - image_size = 0 - - times = timestamp_dict(results_dir) - - detail = {"id": build_id, - "queue_status": status, - "job_created": times.get(TS_CREATED), - "job_started": times.get(TS_STARTED), - "job_finished": times.get(TS_FINISHED), - "compose_type": compose_type, - "blueprint": blueprint["name"], - "version": blueprint["version"], - "image_size": image_size, - } - - if api == 1: - # Get uploads for this build_id - upload_uuids = uuid_get_uploads(cfg, build_id) - summaries = [upload.summary() for upload in get_uploads(cfg["upload"], upload_uuids)] - detail["uploads"] = summaries - return detail
    - -
    [docs]def queue_status(cfg, api=1): - """Return details about what is in the queue. - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param api: Select which api version of the dict to return (default 1) - :type api: int - :returns: A list of the new composes, and a list of the running composes - :rtype: dict - - This returns a dict with 2 lists. "new" is the list of uuids that are waiting to be built, - and "run" has the uuids that are being built (currently limited to 1 at a time). - """ - queue_dir = joinpaths(cfg.get("composer", "lib_dir"), "queue") - new_queue = [os.path.realpath(p) for p in glob(joinpaths(queue_dir, "new/*"))] - run_queue = [os.path.realpath(p) for p in glob(joinpaths(queue_dir, "run/*"))] - - new_details = [] - for n in new_queue: - try: - d = compose_detail(cfg, n, api) - except IOError: - continue - new_details.append(d) - - run_details = [] - for r in run_queue: - try: - d = compose_detail(cfg, r, api) - except IOError: - continue - run_details.append(d) - - return { - "new": new_details, - "run": run_details - }
    - -
    [docs]def uuid_status(cfg, uuid, api=1): - """Return the details of a specific UUID compose - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param api: Select which api version of the dict to return (default 1) - :type api: int - :returns: Details about the build - :rtype: dict or None - - Returns the same dict as `compose_detail()` - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - try: - return compose_detail(cfg, uuid_dir, api) - except IOError: - return None
    - -
    [docs]def build_status(cfg, status_filter=None, api=1): - """Return the details of finished or failed builds - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param status_filter: What builds to return. None == all, "FINISHED", or "FAILED" - :type status_filter: str - :param api: Select which api version of the dict to return (default 1) - :type api: int - :returns: A list of the build details (from compose_detail) - :rtype: list of dicts - - This returns a list of build details for each of the matching builds on the - system. It does not return the status of builds that have not been finished. - Use queue_status() for those. - """ - if status_filter: - status_filter = [status_filter] - else: - status_filter = ["FINISHED", "FAILED"] - - results = [] - result_dir = joinpaths(cfg.get("composer", "lib_dir"), "results") - for build in glob(result_dir + "/*"): - log.debug("Checking status of build %s", build) - - try: - status = open(joinpaths(build, "STATUS"), "r").read().strip() - if status in status_filter: - results.append(compose_detail(cfg, build, api)) - except IOError: - pass - return results
    - -def _upload_list_path(cfg, uuid): - """Return the path to the UPLOADS file - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: Path to the UPLOADS file listing the build's associated uploads - :rtype: str - :raises: RuntimeError if the uuid is not found - """ - results_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - if not os.path.isdir(results_dir): - raise RuntimeError(f'"{uuid}" is not a valid build uuid!') - return joinpaths(results_dir, "UPLOADS") - -
    [docs]def uuid_schedule_upload(cfg, uuid, provider_name, image_name, settings): - """Schedule an upload of an image - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param provider_name: The name of the cloud provider, e.g. "azure" - :type provider_name: str - :param image_name: Path of the image to upload - :type image_name: str - :param settings: Settings to use for the selected provider - :type settings: dict - :returns: uuid of the upload - :rtype: str - :raises: RuntimeError if the uuid is not a valid build uuid - """ - status = uuid_status(cfg, uuid) - if status is None: - raise RuntimeError(f'"{uuid}" is not a valid build uuid!') - - upload = create_upload(cfg["upload"], provider_name, image_name, settings) - uuid_add_upload(cfg, uuid, upload.uuid) - return upload.uuid
    - -
    [docs]def uuid_get_uploads(cfg, uuid): - """Return the list of uploads for a build uuid - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: The upload UUIDs associated with the build UUID - :rtype: frozenset - """ - try: - with open(_upload_list_path(cfg, uuid)) as uploads_file: - return frozenset(uploads_file.read().split()) - except FileNotFoundError: - return frozenset()
    - -
    [docs]def uuid_add_upload(cfg, uuid, upload_uuid): - """Add an upload UUID to a build - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param upload_uuid: The UUID of the upload - :type upload_uuid: str - :returns: None - :rtype: None - """ - if upload_uuid not in uuid_get_uploads(cfg, uuid): - with open(_upload_list_path(cfg, uuid), "a") as uploads_file: - print(upload_uuid, file=uploads_file) - status = uuid_status(cfg, uuid) - if status and status["queue_status"] == "FINISHED": - uuid_ready_upload(cfg, uuid, upload_uuid)
    - -
    [docs]def uuid_remove_upload(cfg, upload_uuid): - """Remove an upload UUID from the build - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param upload_uuid: The UUID of the upload - :type upload_uuid: str - :returns: None - :rtype: None - :raises: RuntimeError if the upload_uuid is not found - """ - for build_uuid in (os.path.basename(b) for b in glob(joinpaths(cfg.get("composer", "lib_dir"), "results/*"))): - uploads = uuid_get_uploads(cfg, build_uuid) - if upload_uuid not in uploads: - continue - - uploads = uploads - frozenset((upload_uuid,)) - with open(_upload_list_path(cfg, build_uuid), "w") as uploads_file: - for upload in uploads: - print(upload, file=uploads_file) - return - - raise RuntimeError(f"{upload_uuid} is not a valid upload id!")
    - -
    [docs]def uuid_ready_upload(cfg, uuid, upload_uuid): - """Set an upload to READY if the build is in FINISHED state - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param upload_uuid: The UUID of the upload - :type upload_uuid: str - :returns: None - :rtype: None - :raises: RuntimeError if the build uuid is invalid or not in FINISHED state. - """ - status = uuid_status(cfg, uuid) - if not status: - raise RuntimeError(f"{uuid} is not a valid build id!") - if status["queue_status"] != "FINISHED": - raise RuntimeError(f"Build {uuid} is not finished!") - _, image_path = uuid_image(cfg, uuid) - ready_upload(cfg["upload"], upload_uuid, image_path)
    - -
    [docs]def uuid_cancel(cfg, uuid): - """Cancel a build and delete its results - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: True if it was canceled and deleted - :rtype: bool - - Only call this if the build status is WAITING or RUNNING - """ - cancel_path = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid, "CANCEL") - if os.path.exists(cancel_path): - log.info("Cancel has already been requested for %s", uuid) - return False - - # This status can change (and probably will) while it is in the middle of doing this: - # It can move from WAITING -> RUNNING or it can move from RUNNING -> FINISHED|FAILED - - # If it is in WAITING remove the symlink and then check to make sure it didn't show up - # in the run queue - queue_dir = joinpaths(cfg.get("composer", "lib_dir"), "queue") - uuid_new = joinpaths(queue_dir, "new", uuid) - if os.path.exists(uuid_new): - try: - os.unlink(uuid_new) - except OSError: - # The symlink may vanish if the queue monitor started the build - pass - uuid_run = joinpaths(queue_dir, "run", uuid) - if not os.path.exists(uuid_run): - # Make sure the build is still in the waiting state - status = uuid_status(cfg, uuid) - if status is None or status["queue_status"] == "WAITING": - # Successfully removed it before the build started - return uuid_delete(cfg, uuid) - - # At this point the build has probably started. Write to the CANCEL file. - open(cancel_path, "w").write("\n") - - # Wait for status to move to FAILED or FINISHED - started = time.time() - while True: - status = uuid_status(cfg, uuid) - if status is None or status["queue_status"] == "FAILED": - break - elif status is not None and status["queue_status"] == "FINISHED": - # The build finished successfully, no point in deleting it now - return False - - # Is this taking too long? Exit anyway and try to cleanup. - if time.time() > started + (10 * 60): - log.error("Failed to cancel the build of %s", uuid) - break - - time.sleep(5) - - # Remove the partial results - uuid_delete(cfg, uuid)
    - -
    [docs]def uuid_delete(cfg, uuid): - """Delete all of the results from a compose - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: True if it was deleted - :rtype: bool - :raises: This will raise an error if the delete failed - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - if not uuid_dir or len(uuid_dir) < 10: - raise RuntimeError("Directory length is too short: %s" % uuid_dir) - - for upload in get_uploads(cfg["upload"], uuid_get_uploads(cfg, uuid)): - delete_upload(cfg["upload"], upload.uuid) - - shutil.rmtree(uuid_dir) - return True
    - -
    [docs]def uuid_info(cfg, uuid, api=1): - """Return information about the composition - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: dictionary of information about the composition or None - :rtype: dict - :raises: RuntimeError if there was a problem - - This will return a dict with the following fields populated: - - * id - The uuid of the comoposition - * config - containing the configuration settings used to run Anaconda - * blueprint - The depsolved blueprint used to generate the kickstart - * commit - The (local) git commit hash for the blueprint used - * deps - The NEVRA of all of the dependencies used in the composition - * compose_type - The type of output generated (tar, iso, etc.) - * queue_status - The final status of the composition (FINISHED or FAILED) - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - if not os.path.exists(uuid_dir): - return None - - # Load the compose configuration - cfg_path = joinpaths(uuid_dir, "config.toml") - if not os.path.exists(cfg_path): - raise RuntimeError("Missing config.toml for %s" % uuid) - cfg_dict = toml.loads(open(cfg_path, "r").read()) - - frozen_path = joinpaths(uuid_dir, "frozen.toml") - if not os.path.exists(frozen_path): - raise RuntimeError("Missing frozen.toml for %s" % uuid) - frozen_dict = toml.loads(open(frozen_path, "r").read()) - - deps_path = joinpaths(uuid_dir, "deps.toml") - if not os.path.exists(deps_path): - raise RuntimeError("Missing deps.toml for %s" % uuid) - deps_dict = toml.loads(open(deps_path, "r").read()) - - details = compose_detail(cfg, uuid_dir, api) - - commit_path = joinpaths(uuid_dir, "COMMIT") - if not os.path.exists(commit_path): - raise RuntimeError("Missing commit hash for %s" % uuid) - commit_id = open(commit_path, "r").read().strip() - - info = {"id": uuid, - "config": cfg_dict, - "blueprint": frozen_dict, - "commit": commit_id, - "deps": deps_dict, - "compose_type": details["compose_type"], - "queue_status": details["queue_status"], - "image_size": details["image_size"], - } - if api == 1: - upload_uuids = uuid_get_uploads(cfg, uuid) - summaries = [upload.summary() for upload in get_uploads(cfg["upload"], upload_uuids)] - info["uploads"] = summaries - return info
    - -
    [docs]def uuid_tar(cfg, uuid, metadata=False, image=False, logs=False): - """Return a tar of the build data - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param metadata: Set to true to include all the metadata needed to reproduce the build - :type metadata: bool - :param image: Set to true to include the output image - :type image: bool - :param logs: Set to true to include the logs from the build - :type logs: bool - :returns: A stream of bytes from tar - :rtype: A generator - :raises: RuntimeError if there was a problem (eg. missing config file) - - This yields an uncompressed tar's data to the caller. It includes - the selected data to the caller by returning the Popen stdout from the tar process. - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - if not os.path.exists(uuid_dir): - raise RuntimeError("%s is not a valid build_id" % uuid) - - # Load the compose configuration - cfg_path = joinpaths(uuid_dir, "config.toml") - if not os.path.exists(cfg_path): - raise RuntimeError("Missing config.toml for %s" % uuid) - cfg_dict = toml.loads(open(cfg_path, "r").read()) - image_name = cfg_dict["image_name"] - - def include_file(f): - if f.endswith("/logs"): - return logs - if f.endswith(image_name): - return image - return metadata - filenames = [os.path.basename(f) for f in glob(joinpaths(uuid_dir, "*")) if include_file(f)] - - tar = Popen(["tar", "-C", uuid_dir, "-cf-"] + filenames, stdout=PIPE) - return tar.stdout
    - -
    [docs]def uuid_image(cfg, uuid): - """Return the filename and full path of the build's image file - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :returns: The image filename and full path - :rtype: tuple of strings - :raises: RuntimeError if there was a problem (eg. invalid uuid, missing config file) - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - return get_image_name(uuid_dir)
    - -
    [docs]def get_image_name(uuid_dir): - """Return the filename and full path of the build's image file - - :param uuid: The UUID of the build - :type uuid: str - :returns: The image filename and full path - :rtype: tuple of strings - :raises: RuntimeError if there was a problem (eg. invalid uuid, missing config file) - """ - uuid = os.path.basename(os.path.abspath(uuid_dir)) - if not os.path.exists(uuid_dir): - raise RuntimeError("%s is not a valid build_id" % uuid) - - # Load the compose configuration - cfg_path = joinpaths(uuid_dir, "config.toml") - if not os.path.exists(cfg_path): - raise RuntimeError("Missing config.toml for %s" % uuid) - cfg_dict = toml.loads(open(cfg_path, "r").read()) - image_name = cfg_dict["image_name"] - - return (image_name, joinpaths(uuid_dir, image_name))
    - -
    [docs]def uuid_log(cfg, uuid, size=1024): - """Return `size` KiB from the end of the most currently relevant log for a - given compose - - :param cfg: Configuration settings - :type cfg: ComposerConfig - :param uuid: The UUID of the build - :type uuid: str - :param size: Number of KiB to read. Default is 1024 - :type size: int - :returns: Up to `size` KiB from the end of the log - :rtype: str - :raises: RuntimeError if there was a problem (eg. no log file available) - - This function will return the end of either the anaconda log, the packaging - log, or the combined composer logs, depending on the progress of the - compose. It tries to return lines from the end of the log, it will attempt - to start on a line boundary, and it may return less than `size` kbytes. - """ - uuid_dir = joinpaths(cfg.get("composer", "lib_dir"), "results", uuid) - if not os.path.exists(uuid_dir): - raise RuntimeError("%s is not a valid build_id" % uuid) - - # While a build is running the logs will be in /tmp/anaconda.log and when it - # has finished they will be in the results directory - status = uuid_status(cfg, uuid) - if status is None: - raise RuntimeError("Status is missing for %s" % uuid) - - def get_log_path(): - # Try to return the most relevant log at any given time during the - # compose. If the compose is not running, return the composer log. - anaconda_log = "/tmp/anaconda.log" - packaging_log = "/tmp/packaging.log" - combined_log = joinpaths(uuid_dir, "logs", "combined.log") - if status["queue_status"] != "RUNNING" or not os.path.isfile(anaconda_log): - return combined_log - if not os.path.isfile(packaging_log): - return anaconda_log - try: - anaconda_mtime = os.stat(anaconda_log).st_mtime - packaging_mtime = os.stat(packaging_log).st_mtime - # If the packaging log exists and its last message is at least 15 - # seconds newer than the anaconda log, return the packaging log. - if packaging_mtime > anaconda_mtime + 15: - return packaging_log - return anaconda_log - except OSError: - # Return the combined log if anaconda_log or packaging_log disappear - return combined_log - try: - tail = read_tail(get_log_path(), size) - except OSError as e: - raise RuntimeError("No log available.") from e - return tail
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/recipes.html b/docs/html/_modules/pylorax/api/recipes.html deleted file mode 100644 index cdd543fd..00000000 --- a/docs/html/_modules/pylorax/api/recipes.html +++ /dev/null @@ -1,1476 +0,0 @@ - - - - - - - - - - - pylorax.api.recipes — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.recipes

    -#
    -# Copyright (C) 2017-2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -import gi
    -gi.require_version("Ggit", "1.0")
    -from gi.repository import Ggit as Git
    -from gi.repository import Gio
    -from gi.repository import GLib
    -
    -import os
    -import semantic_version as semver
    -
    -from pylorax.api.projects import dep_evra
    -from pylorax.base import DataHolder
    -from pylorax.sysutils import joinpaths
    -import pylorax.api.toml as toml
    -
    -
    -
    [docs]class CommitTimeValError(Exception): - pass
    - -
    [docs]class RecipeFileError(Exception): - pass
    - -
    [docs]class RecipeError(Exception): - pass
    - - -
    [docs]class Recipe(dict): - """A Recipe of package and modules - - This is a subclass of dict that enforces the constructor arguments - and adds a .filename property to return the recipe's filename, - and a .toml() function to return the recipe as a TOML string. - """ - def __init__(self, name, description, version, modules, packages, groups, customizations=None, gitrepos=None): - # Check that version is empty or semver compatible - if version: - semver.Version(version) - - # Make sure modules, packages, and groups are listed by their case-insensitive names - if modules is not None: - modules = sorted(modules, key=lambda m: m["name"].lower()) - if packages is not None: - packages = sorted(packages, key=lambda p: p["name"].lower()) - if groups is not None: - groups = sorted(groups, key=lambda g: g["name"].lower()) - - # Only support [[repos.git]] for now - if gitrepos is not None: - repos = {"git": sorted(gitrepos, key=lambda g: g["repo"].lower())} - else: - repos = None - dict.__init__(self, name=name, - description=description, - version=version, - modules=modules, - packages=packages, - groups=groups, - customizations=customizations, - repos=repos) - - # We don't want customizations=None to show up in the TOML so remove it - if customizations is None: - del self["customizations"] - - # Don't include empty repos or repos.git - if repos is None or not repos["git"]: - del self["repos"] - - @property - def package_names(self): - """Return the names of the packages""" - return [p["name"] for p in self["packages"] or []] - - @property - def package_nver(self): - """Return the names and version globs of the packages""" - return [(p["name"], p["version"]) for p in self["packages"] or []] - - @property - def module_names(self): - """Return the names of the modules""" - return [m["name"] for m in self["modules"] or []] - - @property - def module_nver(self): - """Return the names and version globs of the modules""" - return [(m["name"], m["version"]) for m in self["modules"] or []] - - @property - def group_names(self): - """Return the names of the groups. Groups do not have versions.""" - return map(lambda g: g["name"], self["groups"] or []) - - @property - def filename(self): - """Return the Recipe's filename - - Replaces spaces in the name with '-' and appends .toml - """ - return recipe_filename(self.get("name")) - -
    [docs] def toml(self): - """Return the Recipe in TOML format""" - return toml.dumps(self)
    - -
    [docs] def bump_version(self, old_version=None): - """semver recipe version number bump - - :param old_version: An optional old version number - :type old_version: str - :returns: The new version number or None - :rtype: str - :raises: ValueError - - If neither have a version, 0.0.1 is returned - If there is no old version the new version is checked and returned - If there is no new version, but there is a old one, bump its patch level - If the old and new versions are the same, bump the patch level - If they are different, check and return the new version - """ - new_version = self.get("version") - if not new_version and not old_version: - self["version"] = "0.0.1" - - elif new_version and not old_version: - semver.Version(new_version) - self["version"] = new_version - - elif not new_version or new_version == old_version: - new_version = str(semver.Version(old_version).next_patch()) - self["version"] = new_version - - else: - semver.Version(new_version) - self["version"] = new_version - - # Return the new version - return str(semver.Version(self["version"]))
    - -
    [docs] def freeze(self, deps): - """ Return a new Recipe with full module and package NEVRA - - :param deps: A list of dependency NEVRA to use to fill in the modules and packages - :type deps: list( - :returns: A new Recipe object - :rtype: Recipe - """ - module_names = self.module_names - package_names = self.package_names - group_names = self.group_names - - new_modules = [] - new_packages = [] - new_groups = [] - for dep in deps: - if dep["name"] in package_names: - new_packages.append(RecipePackage(dep["name"], dep_evra(dep))) - elif dep["name"] in module_names: - new_modules.append(RecipeModule(dep["name"], dep_evra(dep))) - elif dep["name"] in group_names: - new_groups.append(RecipeGroup(dep["name"])) - if "customizations" in self: - customizations = self["customizations"] - else: - customizations = None - if "repos" in self and "git" in self["repos"]: - gitrepos = self["repos"]["git"] - else: - gitrepos = None - - return Recipe(self["name"], self["description"], self["version"], - new_modules, new_packages, new_groups, customizations, gitrepos)
    - -
    [docs]class RecipeModule(dict): - def __init__(self, name, version): - dict.__init__(self, name=name, version=version)
    - -
    [docs]class RecipePackage(RecipeModule): - pass
    - -
    [docs]class RecipeGroup(dict): - def __init__(self, name): - dict.__init__(self, name=name)
    - -
    [docs]def NewRecipeGit(toml_dict): - """Create a RecipeGit object from fields in a TOML dict - - :param rpmname: Name of the rpm to create, also used as the prefix name in the tar archive - :type rpmname: str - :param rpmversion: Version of the rpm, eg. "1.0.0" - :type rpmversion: str - :param rpmrelease: Release of the rpm, eg. "1" - :type rpmrelease: str - :param summary: Summary string for the rpm - :type summary: str - :param repo: URL of the get repo to clone and create the archive from - :type repo: str - :param ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash - :type ref: str - :param destination: Path to install the / of the git repo at when installing the rpm - :type destination: str - :returns: A populated RecipeGit object - :rtype: RecipeGit - - The TOML should look like this:: - - [[repos.git]] - rpmname="server-config" - rpmversion="1.0" - rpmrelease="1" - summary="Setup files for server deployment" - repo="PATH OF GIT REPO TO CLONE" - ref="v1.0" - destination="/opt/server/" - - Note that the repo path supports anything that git supports, file://, https://, http:// - - Currently there is no support for authentication - """ - return RecipeGit(toml_dict.get("rpmname"), - toml_dict.get("rpmversion"), - toml_dict.get("rpmrelease"), - toml_dict.get("summary", ""), - toml_dict.get("repo"), - toml_dict.get("ref"), - toml_dict.get("destination"))
    - -
    [docs]class RecipeGit(dict): - def __init__(self, rpmname, rpmversion, rpmrelease, summary, repo, ref, destination): - dict.__init__(self, rpmname=rpmname, rpmversion=rpmversion, rpmrelease=rpmrelease, - summary=summary, repo=repo, ref=ref, destination=destination)
    - -
    [docs]def recipe_from_file(recipe_path): - """Return a recipe file as a Recipe object - - :param recipe_path: Path to the recipe fila - :type recipe_path: str - :returns: A Recipe object - :rtype: Recipe - """ - with open(recipe_path, 'rb') as f: - return recipe_from_toml(f.read())
    - -
    [docs]def recipe_from_toml(recipe_str): - """Create a Recipe object from a toml string. - - :param recipe_str: The Recipe TOML string - :type recipe_str: str - :returns: A Recipe object - :rtype: Recipe - :raises: TomlError - """ - recipe_dict = toml.loads(recipe_str) - return recipe_from_dict(recipe_dict)
    - -
    [docs]def check_required_list(lst, fields): - """Check a list of dicts for required fields - - :param lst: A list of dicts with fields - :type lst: list of dict - :param fields: A list of field name strings - :type fields: list of str - :returns: A list of error strings - :rtype: list of str - """ - errors = [] - for i, m in enumerate(lst): - m_errs = [] - errors.extend(check_list_case(fields, m.keys(), prefix="%d " % (i+1))) - for f in fields: - if f not in m: - m_errs.append("'%s'" % f) - if m_errs: - errors.append("%d is missing %s" % (i+1, ", ".join(m_errs))) - return errors
    - -
    [docs]def check_list_case(expected_keys, recipe_keys, prefix=""): - """Check the case of the recipe keys - - :param expected_keys: A list of expected key strings - :type expected_keys: list of str - :param recipe_keys: A list of the recipe's key strings - :type recipe_keys: list of str - :returns: list of errors - :rtype: list of str - """ - errors = [] - for k in recipe_keys: - if k in expected_keys: - continue - if k.lower() in expected_keys: - errors.append(prefix + "%s should be %s" % (k, k.lower())) - return errors
    - -
    [docs]def check_recipe_dict(recipe_dict): - """Check a dict before using it to create a new Recipe - - :param recipe_dict: A plain dict of the recipe - :type recipe_dict: dict - :returns: True if dict is ok - :rtype: bool - :raises: RecipeError - - This checks a dict to make sure required fields are present, - that optional fields are correct, and that other optional fields - are of the correct format, when included. - - This collects all of the errors and returns a single RecipeError with - a string that can be presented to users. - """ - errors = [] - - # Check for wrong case of top level keys - top_keys = ["name", "description", "version", "modules", "packages", "groups", "repos", "customizations"] - errors.extend(check_list_case(recipe_dict.keys(), top_keys)) - - if "name" not in recipe_dict: - errors.append("Missing 'name'") - if "description" not in recipe_dict: - errors.append("Missing 'description'") - if "version" in recipe_dict: - try: - semver.Version(recipe_dict["version"]) - except ValueError: - errors.append("Invalid 'version', must use Semantic Versioning") - - # Examine all the modules - if recipe_dict.get("modules"): - module_errors = check_required_list(recipe_dict["modules"], ["name", "version"]) - if module_errors: - errors.append("'modules' errors:\n%s" % "\n".join(module_errors)) - - # Examine all the packages - if recipe_dict.get("packages"): - package_errors = check_required_list(recipe_dict["packages"], ["name", "version"]) - if package_errors: - errors.append("'packages' errors:\n%s" % "\n".join(package_errors)) - - if recipe_dict.get("groups"): - groups_errors = check_required_list(recipe_dict["groups"], ["name"]) - if groups_errors: - errors.append("'groups' errors:\n%s" % "\n".join(groups_errors)) - - if recipe_dict.get("repos") and recipe_dict.get("repos").get("git"): - repos_errors = check_required_list(recipe_dict.get("repos").get("git"), - ["rpmname", "rpmversion", "rpmrelease", "summary", "repo", "ref", "destination"]) - if repos_errors: - errors.append("'repos.git' errors:\n%s" % "\n".join(repos_errors)) - - # No customizations to check, exit now - c = recipe_dict.get("customizations") - if not c: - return errors - - # Make sure to catch empty sections by testing for keywords, not just looking at .get() result. - if "kernel" in c: - errors.extend(check_list_case(["append"], c["kernel"].keys(), prefix="kernel ")) - if "append" not in c.get("kernel", []): - errors.append("'customizations.kernel': missing append field.") - - if "sshkey" in c: - sshkey_errors = check_required_list(c.get("sshkey"), ["user", "key"]) - if sshkey_errors: - errors.append("'customizations.sshkey' errors:\n%s" % "\n".join(sshkey_errors)) - - if "user" in c: - user_errors = check_required_list(c.get("user"), ["name"]) - if user_errors: - errors.append("'customizations.user' errors:\n%s" % "\n".join(user_errors)) - - if "group" in c: - group_errors = check_required_list(c.get("group"), ["name"]) - if group_errors: - errors.append("'customizations.group' errors:\n%s" % "\n".join(group_errors)) - - if "timezone" in c: - errors.extend(check_list_case(["timezone", "ntpservers"], c["timezone"].keys(), prefix="timezone ")) - if not c.get("timezone"): - errors.append("'customizations.timezone': missing timezone or ntpservers fields.") - - if "locale" in c: - errors.extend(check_list_case(["languages", "keyboard"], c["locale"].keys(), prefix="locale ")) - if not c.get("locale"): - errors.append("'customizations.locale': missing languages or keyboard fields.") - - if "firewall" in c: - errors.extend(check_list_case(["ports"], c["firewall"].keys(), prefix="firewall ")) - if not c.get("firewall"): - errors.append("'customizations.firewall': missing ports field or services section.") - - if "services" in c.get("firewall", []): - errors.extend(check_list_case(["enabled", "disabled"], c["firewall"]["services"].keys(), prefix="firewall.services ")) - if not c.get("firewall").get("services"): - errors.append("'customizations.firewall.services': missing enabled or disabled fields.") - - if "services" in c: - errors.extend(check_list_case(["enabled", "disabled"], c["services"].keys(), prefix="services ")) - if not c.get("services"): - errors.append("'customizations.services': missing enabled or disabled fields.") - - return errors
    - -
    [docs]def recipe_from_dict(recipe_dict): - """Create a Recipe object from a plain dict. - - :param recipe_dict: A plain dict of the recipe - :type recipe_dict: dict - :returns: A Recipe object - :rtype: Recipe - :raises: RecipeError - """ - errors = check_recipe_dict(recipe_dict) - if errors: - msg = "\n".join(errors) - raise RecipeError(msg) - - # Make RecipeModule objects from the toml - # The TOML may not have modules or packages in it. Set them to None in this case - try: - if recipe_dict.get("modules"): - modules = [RecipeModule(m.get("name"), m.get("version")) for m in recipe_dict["modules"]] - else: - modules = [] - if recipe_dict.get("packages"): - packages = [RecipePackage(p.get("name"), p.get("version")) for p in recipe_dict["packages"]] - else: - packages = [] - if recipe_dict.get("groups"): - groups = [RecipeGroup(g.get("name")) for g in recipe_dict["groups"]] - else: - groups = [] - if recipe_dict.get("repos") and recipe_dict.get("repos").get("git"): - gitrepos = [NewRecipeGit(r) for r in recipe_dict["repos"]["git"]] - else: - gitrepos = [] - name = recipe_dict["name"] - description = recipe_dict["description"] - version = recipe_dict.get("version", None) - customizations = recipe_dict.get("customizations", None) - - # [customizations] was incorrectly documented at first, so we have to support using it - # as [[customizations]] by grabbing the first element. - if isinstance(customizations, list): - customizations = customizations[0] - - except KeyError as e: - raise RecipeError("There was a problem parsing the recipe: %s" % str(e)) - - return Recipe(name, description, version, modules, packages, groups, customizations, gitrepos)
    - -
    [docs]def gfile(path): - """Convert a string path to GFile for use with Git""" - return Gio.file_new_for_path(path)
    - -
    [docs]def recipe_filename(name): - """Return the toml filename for a recipe - - Replaces spaces with '-' and appends '.toml' - """ - # XXX Raise and error if this is empty? - return name.replace(" ", "-") + ".toml"
    - -
    [docs]def head_commit(repo, branch): - """Get the branch's HEAD Commit Object - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :returns: Branch's head commit - :rtype: Git.Commit - :raises: Can raise errors from Ggit - """ - branch_obj = repo.lookup_branch(branch, Git.BranchType.LOCAL) - commit_id = branch_obj.get_target() - return repo.lookup(commit_id, Git.Commit)
    - -
    [docs]def prepare_commit(repo, branch, builder): - """Prepare for a commit - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param builder: instance of TreeBuilder - :type builder: TreeBuilder - :returns: (Tree, Sig, Ref) - :rtype: tuple - :raises: Can raise errors from Ggit - """ - tree_id = builder.write() - tree = repo.lookup(tree_id, Git.Tree) - sig = Git.Signature.new_now("bdcs-api-server", "user-email") - ref = "refs/heads/%s" % branch - return (tree, sig, ref)
    - -
    [docs]def open_or_create_repo(path): - """Open an existing repo, or create a new one - - :param path: path to recipe directory - :type path: string - :returns: A repository object - :rtype: Git.Repository - :raises: Can raise errors from Ggit - - A bare git repo will be created in the git directory of the specified path. - If a repo already exists it will be opened and returned instead of - creating a new one. - """ - Git.init() - git_path = joinpaths(path, "git") - if os.path.exists(joinpaths(git_path, "HEAD")): - return Git.Repository.open(gfile(git_path)) - - repo = Git.Repository.init_repository(gfile(git_path), True) - - # Make an initial empty commit - sig = Git.Signature.new_now("bdcs-api-server", "user-email") - tree_id = repo.get_index().write_tree() - tree = repo.lookup(tree_id, Git.Tree) - repo.create_commit("HEAD", sig, sig, "UTF-8", "Initial Recipe repository commit", tree, []) - return repo
    - -
    [docs]def write_commit(repo, branch, filename, message, content): - """Make a new commit to a repository's branch - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: full path of the file to add - :type filename: str - :param message: The commit message - :type message: str - :param content: The data to write - :type content: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - try: - parent_commit = head_commit(repo, branch) - except GLib.GError: - # Branch doesn't exist, make a new one based on master - master_head = head_commit(repo, "master") - repo.create_branch(branch, master_head, 0) - parent_commit = head_commit(repo, branch) - - parent_commit = head_commit(repo, branch) - blob_id = repo.create_blob_from_buffer(content.encode("UTF-8")) - - # Use treebuilder to make a new entry for this filename and blob - parent_tree = parent_commit.get_tree() - builder = repo.create_tree_builder_from_tree(parent_tree) - builder.insert(filename, blob_id, Git.FileMode.BLOB) - (tree, sig, ref) = prepare_commit(repo, branch, builder) - return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit])
    - -
    [docs]def read_commit_spec(repo, spec): - """Return the raw content of the blob specified by the spec - - :param repo: Open repository - :type repo: Git.Repository - :param spec: Git revparse spec - :type spec: str - :returns: Contents of the commit - :rtype: str - :raises: Can raise errors from Ggit - - eg. To read the README file from master the spec is "master:README" - """ - commit_id = repo.revparse(spec).get_id() - blob = repo.lookup(commit_id, Git.Blob) - return blob.get_raw_content()
    - -
    [docs]def read_commit(repo, branch, filename, commit=None): - """Return the contents of a file on a specific branch or commit. - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: filename to read - :type filename: str - :param commit: Optional commit hash - :type commit: str - :returns: The commit id, and the contents of the commit - :rtype: tuple(str, str) - :raises: Can raise errors from Ggit - - If no commit is passed the master:filename is returned, otherwise it will be - commit:filename - """ - if not commit: - # Find the most recent commit for filename on the selected branch - commits = list_commits(repo, branch, filename, 1) - if not commits: - raise RecipeError("No commits for %s on the %s branch." % (filename, branch)) - commit = commits[0].commit - return (commit, read_commit_spec(repo, "%s:%s" % (commit, filename)))
    - -
    [docs]def read_recipe_commit(repo, branch, recipe_name, commit=None): - """Read a recipe commit from git and return a Recipe object - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to read - :type recipe_name: str - :param commit: Optional commit hash - :type commit: str - :returns: A Recipe object - :rtype: Recipe - :raises: Can raise errors from Ggit - - If no commit is passed the master:filename is returned, otherwise it will be - commit:filename - """ - if not repo_file_exists(repo, branch, recipe_filename(recipe_name)): - raise RecipeFileError("Unknown blueprint") - - (_, recipe_toml) = read_commit(repo, branch, recipe_filename(recipe_name), commit) - return recipe_from_toml(recipe_toml)
    - -
    [docs]def read_recipe_and_id(repo, branch, recipe_name, commit=None): - """Read a recipe commit and its id from git - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to read - :type recipe_name: str - :param commit: Optional commit hash - :type commit: str - :returns: The commit id, and a Recipe object - :rtype: tuple(str, Recipe) - :raises: Can raise errors from Ggit - - If no commit is passed the master:filename is returned, otherwise it will be - commit:filename - """ - (commit_id, recipe_toml) = read_commit(repo, branch, recipe_filename(recipe_name), commit) - return (commit_id, recipe_from_toml(recipe_toml))
    - -
    [docs]def list_branch_files(repo, branch): - """Return a sorted list of the files on the branch HEAD - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :returns: A sorted list of the filenames - :rtype: list(str) - :raises: Can raise errors from Ggit - """ - commit = head_commit(repo, branch).get_id().to_string() - return list_commit_files(repo, commit)
    - -
    [docs]def list_commit_files(repo, commit): - """Return a sorted list of the files on a commit - - :param repo: Open repository - :type repo: Git.Repository - :param commit: The commit hash to list - :type commit: str - :returns: A sorted list of the filenames - :rtype: list(str) - :raises: Can raise errors from Ggit - """ - commit_id = Git.OId.new_from_string(commit) - commit_obj = repo.lookup(commit_id, Git.Commit) - tree = commit_obj.get_tree() - return sorted([tree.get(i).get_name() for i in range(0, tree.size())])
    - -
    [docs]def delete_recipe(repo, branch, recipe_name): - """Delete a recipe from a branch. - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to delete - :type recipe_name: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - return delete_file(repo, branch, recipe_filename(recipe_name))
    - -
    [docs]def delete_file(repo, branch, filename): - """Delete a file from a branch. - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: filename to delete - :type filename: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - parent_commit = head_commit(repo, branch) - parent_tree = parent_commit.get_tree() - builder = repo.create_tree_builder_from_tree(parent_tree) - builder.remove(filename) - (tree, sig, ref) = prepare_commit(repo, branch, builder) - message = "Recipe %s deleted" % filename - return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit])
    - -
    [docs]def revert_recipe(repo, branch, recipe_name, commit): - """Revert the contents of a recipe to that of a previous commit - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to revert - :type recipe_name: str - :param commit: Commit hash - :type commit: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - return revert_file(repo, branch, recipe_filename(recipe_name), commit)
    - -
    [docs]def revert_file(repo, branch, filename, commit): - """Revert the contents of a file to that of a previous commit - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: filename to revert - :type filename: str - :param commit: Commit hash - :type commit: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - commit_id = Git.OId.new_from_string(commit) - commit_obj = repo.lookup(commit_id, Git.Commit) - revert_tree = commit_obj.get_tree() - entry = revert_tree.get_by_name(filename) - blob_id = entry.get_id() - parent_commit = head_commit(repo, branch) - - # Use treebuilder to modify the tree - parent_tree = parent_commit.get_tree() - builder = repo.create_tree_builder_from_tree(parent_tree) - builder.insert(filename, blob_id, Git.FileMode.BLOB) - (tree, sig, ref) = prepare_commit(repo, branch, builder) - commit_hash = commit_id.to_string() - message = "%s reverted to commit %s" % (filename, commit_hash) - return repo.create_commit(ref, sig, sig, "UTF-8", message, tree, [parent_commit])
    - -
    [docs]def commit_recipe(repo, branch, recipe): - """Commit a recipe to a branch - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe: Recipe to commit - :type recipe: Recipe - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit - """ - try: - old_recipe = read_recipe_commit(repo, branch, recipe["name"]) - old_version = old_recipe["version"] - except Exception: - old_version = None - - recipe.bump_version(old_version) - recipe_toml = recipe.toml() - message = "Recipe %s, version %s saved." % (recipe["name"], recipe["version"]) - return write_commit(repo, branch, recipe.filename, message, recipe_toml)
    - -
    [docs]def commit_recipe_file(repo, branch, filename): - """Commit a recipe file to a branch - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: Path to the recipe file to commit - :type filename: str - :returns: OId of the new commit - :rtype: Git.OId - :raises: Can raise errors from Ggit or RecipeFileError - """ - try: - recipe = recipe_from_file(filename) - except IOError: - raise RecipeFileError - - return commit_recipe(repo, branch, recipe)
    - -
    [docs]def commit_recipe_directory(repo, branch, directory): - r"""Commit all \*.toml files from a directory, if they aren't already in git. - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param directory: The directory of \*.toml recipes to commit - :type directory: str - :returns: None - :raises: Can raise errors from Ggit or RecipeFileError - - Files with Toml or RecipeFileErrors will be skipped, and the remainder will - be tried. - """ - dir_files = set([e for e in os.listdir(directory) if e.endswith(".toml")]) - branch_files = set(list_branch_files(repo, branch)) - new_files = dir_files.difference(branch_files) - - for f in new_files: - # Skip files with errors, but try the others - try: - commit_recipe_file(repo, branch, joinpaths(directory, f)) - except (RecipeError, RecipeFileError, toml.TomlError): - pass
    - -
    [docs]def tag_recipe_commit(repo, branch, recipe_name): - """Tag a file's most recent commit - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to tag - :type recipe_name: str - :returns: Tag id or None if it failed. - :rtype: Git.OId - :raises: Can raise errors from Ggit - - Uses tag_file_commit() - """ - if not repo_file_exists(repo, branch, recipe_filename(recipe_name)): - raise RecipeFileError("Unknown blueprint") - - return tag_file_commit(repo, branch, recipe_filename(recipe_name))
    - -
    [docs]def tag_file_commit(repo, branch, filename): - """Tag a file's most recent commit - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: Filename to tag - :type filename: str - :returns: Tag id or None if it failed. - :rtype: Git.OId - :raises: Can raise errors from Ggit - - This uses git tags, of the form `refs/tags/<branch>/<filename>/r<revision>` - Only the most recent recipe commit can be tagged to prevent out of order tagging. - Revisions start at 1 and increment for each new commit that is tagged. - If the commit has already been tagged it will return false. - """ - file_commits = list_commits(repo, branch, filename) - if not file_commits: - return None - - # Find the most recently tagged version (may not be one) and add 1 to it. - for details in file_commits: - if details.revision is not None: - new_revision = details.revision + 1 - break - else: - new_revision = 1 - - name = "%s/%s/r%d" % (branch, filename, new_revision) - sig = Git.Signature.new_now("bdcs-api-server", "user-email") - commit_id = Git.OId.new_from_string(file_commits[0].commit) - commit = repo.lookup(commit_id, Git.Commit) - return repo.create_tag(name, commit, sig, name, Git.CreateFlags.NONE)
    - -
    [docs]def find_commit_tag(repo, branch, filename, commit_id): - """Find the tag that matches the commit_id - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: filename to revert - :type filename: str - :param commit_id: The commit id to check - :type commit_id: Git.OId - :returns: The tag or None if there isn't one - :rtype: str or None - - There should be only 1 tag pointing to a commit, but there may not - be a tag at all. - - The tag will look like: 'refs/tags/<branch>/<filename>/r<revision>' - """ - pattern = "%s/%s/r*" % (branch, filename) - tags = [t for t in repo.list_tags_match(pattern) if is_commit_tag(repo, commit_id, t)] - if len(tags) != 1: - return None - else: - return tags[0]
    - -
    [docs]def is_commit_tag(repo, commit_id, tag): - """Check to see if a tag points to a specific commit. - - :param repo: Open repository - :type repo: Git.Repository - :param commit_id: The commit id to check - :type commit_id: Git.OId - :param tag: The tag to check - :type tag: str - :returns: True if the tag points to the commit, False otherwise - :rtype: bool - """ - ref = repo.lookup_reference("refs/tags/" + tag) - tag_id = ref.get_target() - tag = repo.lookup(tag_id, Git.Tag) - target_id = tag.get_target_id() - return commit_id.compare(target_id) == 0
    - -
    [docs]def get_revision_from_tag(tag): - """Return the revision number from a tag - - :param tag: The tag to exract the revision from - :type tag: str - :returns: The integer revision or None - :rtype: int or None - - The revision is the part after the r in 'branch/filename/rXXX' - """ - if tag is None: - return None - try: - return int(tag.rsplit('r', 2)[-1]) - except (ValueError, IndexError): - return None
    - -
    [docs]class CommitDetails(DataHolder): - def __init__(self, commit, timestamp, message, revision=None): - DataHolder.__init__(self, - commit = commit, - timestamp = timestamp, - message = message, - revision = revision)
    - -
    [docs]def list_commits(repo, branch, filename, limit=0): - """List the commit history of a file on a branch. - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: filename to revert - :type filename: str - :param limit: Number of commits to return (0=all) - :type limit: int - :returns: A list of commit details - :rtype: list(CommitDetails) - :raises: Can raise errors from Ggit - """ - revwalk = Git.RevisionWalker.new(repo) - branch_ref = "refs/heads/%s" % branch - revwalk.push_ref(branch_ref) - - commits = [] - while True: - commit_id = revwalk.next() - if not commit_id: - break - commit = repo.lookup(commit_id, Git.Commit) - - parents = commit.get_parents() - # No parents? Must be the first commit. - if parents.get_size() == 0: - continue - - tree = commit.get_tree() - # Is the filename in this tree? If not, move on. - if not tree.get_by_name(filename): - continue - - # Is filename different in all of the parent commits? - parent_commits = list(map(parents.get, range(0, parents.get_size()))) - is_diff = all([is_parent_diff(repo, filename, tree, pc) for pc in parent_commits]) - # No changes from parents, skip it. - if not is_diff: - continue - - tag = find_commit_tag(repo, branch, filename, commit.get_id()) - try: - commits.append(get_commit_details(commit, get_revision_from_tag(tag))) - if limit and len(commits) > limit: - break - except CommitTimeValError: - # Skip any commits that have trouble converting the time - # TODO - log details about this failure - pass - - # These will be in reverse time sort order thanks to revwalk - return commits
    - -
    [docs]def get_commit_details(commit, revision=None): - """Return the details about a specific commit. - - :param commit: The commit to get details from - :type commit: Git.Commit - :param revision: Optional commit revision - :type revision: int - :returns: Details about the commit - :rtype: CommitDetails - :raises: CommitTimeValError or Ggit exceptions - - """ - message = commit.get_message() - commit_str = commit.get_id().to_string() - sig = commit.get_committer() - - datetime = sig.get_time() - # XXX What do we do with timezone? - _timezone = sig.get_time_zone() - time_str = datetime.format_iso8601() - if not time_str: - raise CommitTimeValError - - return CommitDetails(commit_str, time_str, message, revision)
    - -
    [docs]def is_parent_diff(repo, filename, tree, parent): - """Check to see if the commit is different from its parents - - :param repo: Open repository - :type repo: Git.Repository - :param filename: filename to revert - :type filename: str - :param tree: The commit's tree - :type tree: Git.Tree - :param parent: The commit's parent commit - :type parent: Git.Commit - :retuns: True if filename in the commit is different from its parents - :rtype: bool - """ - diff_opts = Git.DiffOptions.new() - diff_opts.set_pathspec([filename]) - diff = Git.Diff.new_tree_to_tree(repo, parent.get_tree(), tree, diff_opts) - return diff.get_num_deltas() > 0
    - -
    [docs]def find_field_value(field, value, lst): - """Find a field matching value in the list of dicts. - - :param field: field to search for - :type field: str - :param value: value to match in the field - :type value: str - :param lst: List of dict's with field - :type lst: list of dict - :returns: First dict with matching field:value, or None - :rtype: dict or None - - Used to return a specific entry from a list that looks like this: - - [{"name": "one", "attr": "green"}, ...] - - find_field_value("name", "one", lst) will return the matching dict. - """ - for d in lst: - if d.get(field) and d.get(field) == value: - return d - return None
    - -
    [docs]def find_name(name, lst): - """Find the dict matching the name in a list and return it. - - :param name: Name to search for - :type name: str - :param lst: List of dict's with "name" field - :type lst: list of dict - :returns: First dict with matching name, or None - :rtype: dict or None - - This is just a wrapper for find_field_value with field set to "name" - """ - return find_field_value("name", name, lst)
    - -
    [docs]def find_recipe_obj(path, recipe, default=None): - """Find a recipe object - - :param path: A list of dict field names - :type path: list of str - :param recipe: The recipe to search - :type recipe: Recipe - :param default: The value to return if it is not found - :type default: Any - - Return the object found by applying the path to the dicts in the recipe, or - return the default if it doesn't exist. - - eg. {"customizations": {"hostname": "foo", "users": [...]}} - - find_recipe_obj(["customizations", "hostname"], recipe, "") - """ - o = recipe - try: - for p in path: - if not o.get(p): - return default - o = o.get(p) - except AttributeError: - return default - - return o
    - -
    [docs]def diff_lists(title, field, old_items, new_items): - """Return the differences between two lists of dicts. - - :param title: Title of the entry - :type title: str - :param field: Field to use as the key for comparisons - :type field: str - :param old_items: List of item dicts with "name" field - :type old_items: list(dict) - :param new_items: List of item dicts with "name" field - :type new_items: list(dict) - :returns: List of diff dicts with old/new entries - :rtype: list(dict) - """ - diffs = [] - old_fields= set(m[field] for m in old_items) - new_fields= set(m[field] for m in new_items) - - added_items = new_fields.difference(old_fields) - added_items = sorted(added_items, key=lambda n: n.lower()) - - removed_items = old_fields.difference(new_fields) - removed_items = sorted(removed_items, key=lambda n: n.lower()) - - same_items = old_fields.intersection(new_fields) - same_items = sorted(same_items, key=lambda n: n.lower()) - - for v in added_items: - diffs.append({"old":None, - "new":{title:find_field_value(field, v, new_items)}}) - - for v in removed_items: - diffs.append({"old":{title:find_field_value(field, v, old_items)}, - "new":None}) - - for v in same_items: - old_item = find_field_value(field, v, old_items) - new_item = find_field_value(field, v, new_items) - if old_item != new_item: - diffs.append({"old":{title:old_item}, - "new":{title:new_item}}) - - return diffs
    - -
    [docs]def customizations_diff(old_recipe, new_recipe): - """Diff the customizations sections from two versions of a recipe - """ - diffs = [] - old_keys = set(old_recipe.get("customizations", {}).keys()) - new_keys = set(new_recipe.get("customizations", {}).keys()) - - added_keys = new_keys.difference(old_keys) - added_keys = sorted(added_keys, key=lambda n: n.lower()) - - removed_keys = old_keys.difference(new_keys) - removed_keys = sorted(removed_keys, key=lambda n: n.lower()) - - same_keys = old_keys.intersection(new_keys) - same_keys = sorted(same_keys, key=lambda n: n.lower()) - - for v in added_keys: - diffs.append({"old": None, - "new": {"Customizations."+v: new_recipe["customizations"][v]}}) - - for v in removed_keys: - diffs.append({"old": {"Customizations."+v: old_recipe["customizations"][v]}, - "new": None}) - - for v in same_keys: - if new_recipe["customizations"][v] == old_recipe["customizations"][v]: - continue - - if type(new_recipe["customizations"][v]) == type([]): - # Lists of dicts need to use diff_lists - # sshkey uses 'user', user and group use 'name' - if "user" in new_recipe["customizations"][v][0]: - field_name = "user" - elif "name" in new_recipe["customizations"][v][0]: - field_name = "name" - else: - raise RuntimeError("%s list has unrecognized key, not 'name' or 'user'" % "customizations."+v) - - diffs.extend(diff_lists("Customizations."+v, field_name, old_recipe["customizations"][v], new_recipe["customizations"][v])) - else: - diffs.append({"old": {"Customizations."+v: old_recipe["customizations"][v]}, - "new": {"Customizations."+v: new_recipe["customizations"][v]}}) - - return diffs
    - - -
    [docs]def recipe_diff(old_recipe, new_recipe): - """Diff two versions of a recipe - - :param old_recipe: The old version of the recipe - :type old_recipe: Recipe - :param new_recipe: The new version of the recipe - :type new_recipe: Recipe - :returns: A list of diff dict entries with old/new - :rtype: list(dict) - """ - - diffs = [] - # These cannot be added or removed, just different - for element in ["name", "description", "version"]: - if old_recipe[element] != new_recipe[element]: - diffs.append({"old":{element.title():old_recipe[element]}, - "new":{element.title():new_recipe[element]}}) - - # These lists always exist - diffs.extend(diff_lists("Module", "name", old_recipe["modules"], new_recipe["modules"])) - diffs.extend(diff_lists("Package", "name", old_recipe["packages"], new_recipe["packages"])) - diffs.extend(diff_lists("Group", "name", old_recipe["groups"], new_recipe["groups"])) - - # The customizations section can contain a number of different types - diffs.extend(customizations_diff(old_recipe, new_recipe)) - - # repos contains keys that are lists (eg. [[repos.git]]) - diffs.extend(diff_lists("Repos.git", "rpmname", - find_recipe_obj(["repos", "git"], old_recipe, []), - find_recipe_obj(["repos", "git"], new_recipe, []))) - - return diffs
    - -
    [docs]def repo_file_exists(repo, branch, filename): - """Return True if the filename exists on the branch - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param filename: Filename to check - :type filename: str - :returns: True if the filename exists on the HEAD of the branch, False otherwise. - :rtype: bool - """ - commit = head_commit(repo, branch).get_id().to_string() - commit_id = Git.OId.new_from_string(commit) - commit_obj = repo.lookup(commit_id, Git.Commit) - tree = commit_obj.get_tree() - return tree.get_by_name(filename) is not None
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/server.html b/docs/html/_modules/pylorax/api/server.html deleted file mode 100644 index 20debaa8..00000000 --- a/docs/html/_modules/pylorax/api/server.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - pylorax.api.server — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.server

    -#
    -# Copyright (C) 2017-2019 Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -from collections import namedtuple
    -from flask import Flask, jsonify, redirect, send_from_directory
    -from glob import glob
    -import os
    -import werkzeug
    -
    -from pylorax import vernum
    -from pylorax.api.errors import HTTP_ERROR
    -from pylorax.api.v0 import v0_api
    -from pylorax.api.v1 import v1_api
    -from pylorax.sysutils import joinpaths
    -
    -GitLock = namedtuple("GitLock", ["repo", "lock", "dir"])
    -
    -server = Flask(__name__)
    -
    -__all__ = ["server", "GitLock"]
    -
    -@server.route('/')
    -def server_root():
    -    redirect("/api/docs/")
    -
    -@server.route("/api/docs/")
    -@server.route("/api/docs/<path:path>")
    -def api_docs(path=None):
    -    # Find the html docs
    -    try:
    -        # This assumes it is running from the source tree
    -        docs_path = os.path.abspath(joinpaths(os.path.dirname(__file__), "../../../docs/html"))
    -    except IndexError:
    -        docs_path = glob("/usr/share/doc/lorax-*/html/")[0]
    -
    -    if not path:
    -        path="index.html"
    -    return send_from_directory(docs_path, path)
    -
    -@server.route("/api/status")
    -def api_status():
    -    """
    -    `/api/status`
    -    ^^^^^^^^^^^^^^^^
    -    Return the status of the API Server::
    -
    -          { "api": "0",
    -            "build": "devel",
    -            "db_supported": true,
    -            "db_version": "0",
    -            "schema_version": "0",
    -            "backend": "lorax-composer",
    -            "msgs": []}
    -
    -    The 'msgs' field can be a list of strings describing startup problems or status that
    -    should be displayed to the user. eg. if the compose templates are not depsolving properly
    -    the errors will be in 'msgs'.
    -    """
    -    return jsonify(backend="lorax-composer",
    -                   build=vernum,
    -                   api="1",
    -                   db_version="0",
    -                   schema_version="0",
    -                   db_supported=True,
    -                   msgs=server.config["TEMPLATE_ERRORS"])
    -
    -@server.errorhandler(werkzeug.exceptions.HTTPException)
    -def bad_request(error):
    -    return jsonify(status=False, errors=[{ "id": HTTP_ERROR, "code": error.code, "msg": error.name }]), error.code
    -
    -# Register the v0 API on /api/v0/
    -server.register_blueprint(v0_api, url_prefix="/api/v0/")
    -
    -# Register the v1 API on /api/v1/
    -# Use v0 routes by default
    -skip_rules = [
    -    "/compose",
    -    "/compose/queue",
    -    "/compose/finished",
    -    "/compose/failed",
    -    "/compose/status/<uuids>",
    -    "/compose/info/<uuid>",
    -    "/projects/source/info/<source_names>",
    -    "/projects/source/new",
    -]
    -server.register_blueprint(v0_api, url_prefix="/api/v1/", skip_rules=skip_rules)
    -server.register_blueprint(v1_api, url_prefix="/api/v1/")
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/timestamp.html b/docs/html/_modules/pylorax/api/timestamp.html deleted file mode 100644 index 068de384..00000000 --- a/docs/html/_modules/pylorax/api/timestamp.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - - - - pylorax.api.timestamp — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.timestamp

    -#
    -# Copyright (C) 2018  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -import time
    -
    -from pylorax.sysutils import joinpaths
    -import pylorax.api.toml as toml
    -
    -TS_CREATED  = "created"
    -TS_STARTED  = "started"
    -TS_FINISHED = "finished"
    -
    -
    [docs]def write_timestamp(destdir, ty): - path = joinpaths(destdir, "times.toml") - - try: - contents = toml.loads(open(path, "r").read()) - except IOError: - contents = toml.loads("") - - if ty == TS_CREATED: - contents[TS_CREATED] = time.time() - elif ty == TS_STARTED: - contents[TS_STARTED] = time.time() - elif ty == TS_FINISHED: - contents[TS_FINISHED] = time.time() - - with open(path, "w") as f: - f.write(toml.dumps(contents))
    - -
    [docs]def timestamp_dict(destdir): - path = joinpaths(destdir, "times.toml") - - try: - return toml.loads(open(path, "r").read()) - except IOError: - return toml.loads("")
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/toml.html b/docs/html/_modules/pylorax/api/toml.html deleted file mode 100644 index 2fcb6931..00000000 --- a/docs/html/_modules/pylorax/api/toml.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - pylorax.api.toml — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.toml

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -
    -import toml
    -
    -
    [docs]class TomlError(toml.TomlDecodeError): - pass
    - -
    [docs]def loads(s): - if isinstance(s, bytes): - s = s.decode('utf-8') - try: - return toml.loads(s) - except toml.TomlDecodeError as e: - raise TomlError(e.msg, e.doc, e.pos)
    - -
    [docs]def dumps(o): - # strip the result, because `toml.dumps` adds a lot of newlines - return toml.dumps(o, encoder=toml.TomlEncoder(dict)).strip()
    - -
    [docs]def load(file): - try: - return toml.load(file) - except toml.TomlDecodeError as e: - raise TomlError(e.msg, e.doc, e.pos)
    - -
    [docs]def dump(o, file): - return toml.dump(o, file)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/utils.html b/docs/html/_modules/pylorax/api/utils.html deleted file mode 100644 index 4653e5d6..00000000 --- a/docs/html/_modules/pylorax/api/utils.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - pylorax.api.utils — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.utils

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -""" API utility functions
    -"""
    -from pylorax.api.recipes import RecipeError, RecipeFileError, read_recipe_commit
    -
    -
    [docs]def take_limits(iterable, offset, limit): - """ Apply offset and limit to an iterable object - - :param iterable: The object to limit - :type iterable: iter - :param offset: The number of items to skip - :type offset: int - :param limit: The total number of items to return - :type limit: int - :returns: A subset of the iterable - """ - return iterable[offset:][:limit]
    - -
    [docs]def blueprint_exists(api, branch, blueprint_name): - """Return True if the blueprint exists - - :param api: flask object - :type api: Flask - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to read - :type recipe_name: str - """ - try: - with api.config["GITLOCK"].lock: - read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - - return True - except (RecipeError, RecipeFileError): - return False
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/v0.html b/docs/html/_modules/pylorax/api/v0.html deleted file mode 100644 index 9360665a..00000000 --- a/docs/html/_modules/pylorax/api/v0.html +++ /dev/null @@ -1,2197 +0,0 @@ - - - - - - - - - - - pylorax.api.v0 — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.v0

    -#
    -# Copyright (C) 2017-2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Setup v0 of the API server
    -
    -v0_api() must be called to setup the API routes for Flask
    -
    -Status Responses
    -----------------
    -
    -Some requests only return a status/error response.
    -
    -  The response will be a status response with `status` set to true, or an
    -  error response with it set to false and an error message included.
    -
    -  Example response::
    -
    -      {
    -        "status": true
    -      }
    -
    -  Error response::
    -
    -      {
    -        "errors": ["ggit-error: Failed to remove entry. File isn't in the tree - jboss.toml (-1)"]
    -        "status": false
    -      }
    -
    -API Routes
    -----------
    -
    -All of the blueprints routes support the optional `branch` argument. If it is not
    -used then the API will use the `master` branch for blueprints. If you want to create
    -a new branch use the `new` or `workspace` routes with ?branch=<branch-name> to
    -store the new blueprint on the new branch.
    -"""
    -
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -import os
    -from flask import jsonify, request, Response, send_file
    -from flask import current_app as api
    -
    -from pylorax.sysutils import joinpaths
    -from pylorax.api.checkparams import checkparams
    -from pylorax.api.compose import start_build, compose_types
    -from pylorax.api.errors import *                               # pylint: disable=wildcard-import,unused-wildcard-import
    -from pylorax.api.flask_blueprint import BlueprintSkip
    -from pylorax.api.projects import projects_list, projects_info, projects_depsolve
    -from pylorax.api.projects import modules_list, modules_info, ProjectsError, repo_to_source
    -from pylorax.api.projects import get_repo_sources, delete_repo_source, new_repo_source
    -from pylorax.api.queue import queue_status, build_status, uuid_delete, uuid_status, uuid_info
    -from pylorax.api.queue import uuid_tar, uuid_image, uuid_cancel, uuid_log
    -from pylorax.api.recipes import list_branch_files, read_recipe_commit, recipe_filename, list_commits
    -from pylorax.api.recipes import recipe_from_dict, recipe_from_toml, commit_recipe, delete_recipe, revert_recipe
    -from pylorax.api.recipes import tag_recipe_commit, recipe_diff, RecipeFileError
    -from pylorax.api.regexes import VALID_API_STRING, VALID_BLUEPRINT_NAME
    -import pylorax.api.toml as toml
    -from pylorax.api.utils import take_limits, blueprint_exists
    -from pylorax.api.workspace import workspace_read, workspace_write, workspace_delete, workspace_exists
    -
    -# The API functions don't actually get called by any code here
    -# pylint: disable=unused-variable
    -
    -# Create the v0 routes Blueprint with skip_routes support
    -v0_api = BlueprintSkip("v0_routes", __name__)
    -
    -
    [docs]@v0_api.route("/blueprints/list") -def v0_blueprints_list(): - """List the available blueprints on a branch. - - **/api/v0/blueprints/list** - - List the available blueprints:: - - { "limit": 20, - "offset": 0, - "blueprints": [ - "atlas", - "development", - "glusterfs", - "http-server", - "jboss", - "kubernetes" ], - "total": 6 } - """ - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - limit = int(request.args.get("limit", "20")) - offset = int(request.args.get("offset", "0")) - except ValueError as e: - return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400 - - with api.config["GITLOCK"].lock: - blueprints = [f[:-5] for f in list_branch_files(api.config["GITLOCK"].repo, branch)] - limited_blueprints = take_limits(blueprints, offset, limit) - return jsonify(blueprints=limited_blueprints, limit=limit, offset=offset, total=len(blueprints))
    - -
    [docs]@v0_api.route("/blueprints/info", defaults={'blueprint_names': ""}) -@v0_api.route("/blueprints/info/<blueprint_names>") -@checkparams([("blueprint_names", "", "no blueprint names given")]) -def v0_blueprints_info(blueprint_names): - """Return the contents of the blueprint, or a list of blueprints - - **/api/v0/blueprints/info/<blueprint_names>[?format=<json|toml>]** - - Return the JSON representation of the blueprint. This includes 3 top level - objects. `changes` which lists whether or not the workspace is different from - the most recent commit. `blueprints` which lists the JSON representation of the - blueprint, and `errors` which will list any errors, like non-existant blueprints. - - By default the response is JSON, but if `?format=toml` is included in the URL's - arguments it will return the response as the blueprint's raw TOML content. - *Unless* there is an error which will only return a 400 and a standard error - `Status Responses`_. - - If there is an error when JSON is requested the successful blueprints and the - errors will both be returned. - - Example of json response:: - - { - "changes": [ - { - "changed": false, - "name": "glusterfs" - } - ], - "errors": [], - "blueprints": [ - { - "description": "An example GlusterFS server with samba", - "modules": [ - { - "name": "glusterfs", - "version": "3.7.*" - }, - { - "name": "glusterfs-cli", - "version": "3.7.*" - } - ], - "name": "glusterfs", - "packages": [ - { - "name": "2ping", - "version": "3.2.1" - }, - { - "name": "samba", - "version": "4.2.*" - } - ], - "version": "0.0.6" - } - ] - } - - Error example:: - - { - "changes": [], - "errors": ["ggit-error: the path 'missing.toml' does not exist in the given tree (-3)"] - "blueprints": [] - } - """ - if any(VALID_BLUEPRINT_NAME.match(blueprint_name) is None for blueprint_name in blueprint_names.split(',')): - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - out_fmt = request.args.get("format", "json") - if VALID_API_STRING.match(out_fmt) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in format argument"}]), 400 - - blueprints = [] - changes = [] - errors = [] - for blueprint_name in [n.strip() for n in blueprint_names.split(",")]: - exceptions = [] - # Get the workspace version (if it exists) - try: - with api.config["GITLOCK"].lock: - ws_blueprint = workspace_read(api.config["GITLOCK"].repo, branch, blueprint_name) - except Exception as e: - ws_blueprint = None - exceptions.append(str(e)) - log.error("(v0_blueprints_info) %s", str(e)) - - # Get the git version (if it exists) - try: - with api.config["GITLOCK"].lock: - git_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - except RecipeFileError as e: - # Adding an exception would be redundant, skip it - git_blueprint = None - log.error("(v0_blueprints_info) %s", str(e)) - except Exception as e: - git_blueprint = None - exceptions.append(str(e)) - log.error("(v0_blueprints_info) %s", str(e)) - - if not ws_blueprint and not git_blueprint: - # Neither blueprint, return an error - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "%s: %s" % (blueprint_name, ", ".join(exceptions))}) - elif ws_blueprint and not git_blueprint: - # No git blueprint, return the workspace blueprint - changes.append({"name":blueprint_name, "changed":True}) - blueprints.append(ws_blueprint) - elif not ws_blueprint and git_blueprint: - # No workspace blueprint, no change, return the git blueprint - changes.append({"name":blueprint_name, "changed":False}) - blueprints.append(git_blueprint) - else: - # Both exist, maybe changed, return the workspace blueprint - changes.append({"name":blueprint_name, "changed":ws_blueprint != git_blueprint}) - blueprints.append(ws_blueprint) - - # Sort all the results by case-insensitive blueprint name - changes = sorted(changes, key=lambda c: c["name"].lower()) - blueprints = sorted(blueprints, key=lambda r: r["name"].lower()) - - if out_fmt == "toml": - if errors: - # If there are errors they need to be reported, use JSON and 400 for this - return jsonify(status=False, errors=errors), 400 - else: - # With TOML output we just want to dump the raw blueprint, skipping the rest. - return "\n\n".join([r.toml() for r in blueprints]) - else: - return jsonify(changes=changes, blueprints=blueprints, errors=errors)
    - -
    [docs]@v0_api.route("/blueprints/changes", defaults={'blueprint_names': ""}) -@v0_api.route("/blueprints/changes/<blueprint_names>") -@checkparams([("blueprint_names", "", "no blueprint names given")]) -def v0_blueprints_changes(blueprint_names): - """Return the changes to a blueprint or list of blueprints - - **/api/v0/blueprints/changes/<blueprint_names>[?offset=0&limit=20]** - - Return the commits to a blueprint. By default it returns the first 20 commits, this - can be changed by passing `offset` and/or `limit`. The response will include the - commit hash, summary, timestamp, and optionally the revision number. The commit - hash can be passed to `/api/v0/blueprints/diff/` to retrieve the exact changes. - - Example:: - - { - "errors": [], - "limit": 20, - "offset": 0, - "blueprints": [ - { - "changes": [ - { - "commit": "e083921a7ed1cf2eec91ad12b9ad1e70ef3470be", - "message": "blueprint glusterfs, version 0.0.6 saved.", - "revision": null, - "timestamp": "2017-11-23T00:18:13Z" - }, - { - "commit": "cee5f4c20fc33ea4d54bfecf56f4ad41ad15f4f3", - "message": "blueprint glusterfs, version 0.0.5 saved.", - "revision": null, - "timestamp": "2017-11-11T01:00:28Z" - }, - { - "commit": "29b492f26ed35d80800b536623bafc51e2f0eff2", - "message": "blueprint glusterfs, version 0.0.4 saved.", - "revision": null, - "timestamp": "2017-11-11T00:28:30Z" - }, - { - "commit": "03374adbf080fe34f5c6c29f2e49cc2b86958bf2", - "message": "blueprint glusterfs, version 0.0.3 saved.", - "revision": null, - "timestamp": "2017-11-10T23:15:52Z" - }, - { - "commit": "0e08ecbb708675bfabc82952599a1712a843779d", - "message": "blueprint glusterfs, version 0.0.2 saved.", - "revision": null, - "timestamp": "2017-11-10T23:14:56Z" - }, - { - "commit": "3e11eb87a63d289662cba4b1804a0947a6843379", - "message": "blueprint glusterfs, version 0.0.1 saved.", - "revision": null, - "timestamp": "2017-11-08T00:02:47Z" - } - ], - "name": "glusterfs", - "total": 6 - } - ] - } - """ - if any(VALID_BLUEPRINT_NAME.match(blueprint_name) is None for blueprint_name in blueprint_names.split(',')): - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - limit = int(request.args.get("limit", "20")) - offset = int(request.args.get("offset", "0")) - except ValueError as e: - return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400 - - blueprints = [] - errors = [] - for blueprint_name in [n.strip() for n in blueprint_names.split(",")]: - filename = recipe_filename(blueprint_name) - try: - with api.config["GITLOCK"].lock: - commits = list_commits(api.config["GITLOCK"].repo, branch, filename) - except Exception as e: - errors.append({"id": BLUEPRINTS_ERROR, "msg": "%s: %s" % (blueprint_name, str(e))}) - log.error("(v0_blueprints_changes) %s", str(e)) - else: - if commits: - limited_commits = take_limits(commits, offset, limit) - blueprints.append({"name":blueprint_name, "changes":limited_commits, "total":len(commits)}) - else: - # no commits means there is no blueprint in the branch - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "%s" % blueprint_name}) - - blueprints = sorted(blueprints, key=lambda r: r["name"].lower()) - - return jsonify(blueprints=blueprints, errors=errors, offset=offset, limit=limit)
    - -
    [docs]@v0_api.route("/blueprints/new", methods=["POST"]) -def v0_blueprints_new(): - """Commit a new blueprint - - **POST /api/v0/blueprints/new** - - Create a new blueprint, or update an existing blueprint. This supports both JSON and TOML - for the blueprint format. The blueprint should be in the body of the request with the - `Content-Type` header set to either `application/json` or `text/x-toml`. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - if request.headers['Content-Type'] == "text/x-toml": - blueprint = recipe_from_toml(request.data) - else: - blueprint = recipe_from_dict(request.get_json(cache=False)) - - if VALID_BLUEPRINT_NAME.match(blueprint["name"]) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - with api.config["GITLOCK"].lock: - commit_recipe(api.config["GITLOCK"].repo, branch, blueprint) - - # Read the blueprint with new version and write it to the workspace - blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint["name"]) - workspace_write(api.config["GITLOCK"].repo, branch, blueprint) - except Exception as e: - log.error("(v0_blueprints_new) %s", str(e)) - return jsonify(status=False, errors=[{"id": BLUEPRINTS_ERROR, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/delete", defaults={'blueprint_name': ""}, methods=["DELETE"]) -@v0_api.route("/blueprints/delete/<blueprint_name>", methods=["DELETE"]) -@checkparams([("blueprint_name", "", "no blueprint name given")]) -def v0_blueprints_delete(blueprint_name): - """Delete a blueprint from git - - **DELETE /api/v0/blueprints/delete/<blueprint_name>** - - Delete a blueprint. The blueprint is deleted from the branch, and will no longer - be listed by the `list` route. A blueprint can be undeleted using the `undo` route - to revert to a previous commit. This will also delete the workspace copy of the - blueprint. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - with api.config["GITLOCK"].lock: - workspace_delete(api.config["GITLOCK"].repo, branch, blueprint_name) - delete_recipe(api.config["GITLOCK"].repo, branch, blueprint_name) - except Exception as e: - log.error("(v0_blueprints_delete) %s", str(e)) - return jsonify(status=False, errors=[{"id": BLUEPRINTS_ERROR, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/workspace", methods=["POST"]) -def v0_blueprints_workspace(): - """Write a blueprint to the workspace - - **POST /api/v0/blueprints/workspace** - - Write a blueprint to the temporary workspace. This works exactly the same as `new` except - that it does not create a commit. JSON and TOML bodies are supported. - - The workspace is meant to be used as a temporary blueprint storage for clients. - It will be read by the `info` and `diff` routes if it is different from the - most recent commit. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - if request.headers['Content-Type'] == "text/x-toml": - blueprint = recipe_from_toml(request.data) - else: - blueprint = recipe_from_dict(request.get_json(cache=False)) - - if VALID_BLUEPRINT_NAME.match(blueprint["name"]) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - with api.config["GITLOCK"].lock: - workspace_write(api.config["GITLOCK"].repo, branch, blueprint) - except Exception as e: - log.error("(v0_blueprints_workspace) %s", str(e)) - return jsonify(status=False, errors=[{"id": BLUEPRINTS_ERROR, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/workspace", defaults={'blueprint_name': ""}, methods=["DELETE"]) -@v0_api.route("/blueprints/workspace/<blueprint_name>", methods=["DELETE"]) -@checkparams([("blueprint_name", "", "no blueprint name given")]) -def v0_blueprints_delete_workspace(blueprint_name): - """Delete a blueprint from the workspace - - **DELETE /api/v0/blueprints/workspace/<blueprint_name>** - - Remove the temporary workspace copy of a blueprint. The `info` route will now - return the most recent commit of the blueprint. Any changes that were in the - workspace will be lost. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - with api.config["GITLOCK"].lock: - if not workspace_exists(api.config["GITLOCK"].repo, branch, blueprint_name): - raise Exception("Unknown blueprint: %s" % blueprint_name) - - workspace_delete(api.config["GITLOCK"].repo, branch, blueprint_name) - except Exception as e: - log.error("(v0_blueprints_delete_workspace) %s", str(e)) - return jsonify(status=False, errors=[{"id": BLUEPRINTS_ERROR, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/undo", defaults={'blueprint_name': "", 'commit': ""}, methods=["POST"]) -@v0_api.route("/blueprints/undo/<blueprint_name>", defaults={'commit': ""}, methods=["POST"]) -@v0_api.route("/blueprints/undo/<blueprint_name>/<commit>", methods=["POST"]) -@checkparams([("blueprint_name", "", "no blueprint name given"), - ("commit", "", "no commit ID given")]) -def v0_blueprints_undo(blueprint_name, commit): - """Undo changes to a blueprint by reverting to a previous commit. - - **POST /api/v0/blueprints/undo/<blueprint_name>/<commit>** - - This will revert the blueprint to a previous commit. The commit hash from the `changes` - route can be used in this request. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - if VALID_BLUEPRINT_NAME.match(commit) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - with api.config["GITLOCK"].lock: - revert_recipe(api.config["GITLOCK"].repo, branch, blueprint_name, commit) - - # Read the new recipe and write it to the workspace - blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - workspace_write(api.config["GITLOCK"].repo, branch, blueprint) - except Exception as e: - log.error("(v0_blueprints_undo) %s", str(e)) - return jsonify(status=False, errors=[{"id": UNKNOWN_COMMIT, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/tag", defaults={'blueprint_name': ""}, methods=["POST"]) -@v0_api.route("/blueprints/tag/<blueprint_name>", methods=["POST"]) -@checkparams([("blueprint_name", "", "no blueprint name given")]) -def v0_blueprints_tag(blueprint_name): - """Tag a blueprint's latest blueprint commit as a 'revision' - - **POST /api/v0/blueprints/tag/<blueprint_name>** - - Tag a blueprint as a new release. This uses git tags with a special format. - `refs/tags/<branch>/<filename>/r<revision>`. Only the most recent blueprint commit - can be tagged. Revisions start at 1 and increment for each new tag - (per-blueprint). If the commit has already been tagged it will return false. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - try: - with api.config["GITLOCK"].lock: - tag_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - except RecipeFileError as e: - log.error("(v0_blueprints_tag) %s", str(e)) - return jsonify(status=False, errors=[{"id": UNKNOWN_BLUEPRINT, "msg": str(e)}]), 400 - except Exception as e: - log.error("(v0_blueprints_tag) %s", str(e)) - return jsonify(status=False, errors=[{"id": BLUEPRINTS_ERROR, "msg": str(e)}]), 400 - else: - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/blueprints/diff", defaults={'blueprint_name': "", 'from_commit': "", 'to_commit': ""}) -@v0_api.route("/blueprints/diff/<blueprint_name>", defaults={'from_commit': "", 'to_commit': ""}) -@v0_api.route("/blueprints/diff/<blueprint_name>/<from_commit>", defaults={'to_commit': ""}) -@v0_api.route("/blueprints/diff/<blueprint_name>/<from_commit>/<to_commit>") -@checkparams([("blueprint_name", "", "no blueprint name given"), - ("from_commit", "", "no from commit ID given"), - ("to_commit", "", "no to commit ID given")]) -def v0_blueprints_diff(blueprint_name, from_commit, to_commit): - """Return the differences between two commits of a blueprint - - **/api/v0/blueprints/diff/<blueprint_name>/<from_commit>/<to_commit>** - - Return the differences between two commits, or the workspace. The commit hash - from the `changes` response can be used here, or several special strings: - - - NEWEST will select the newest git commit. This works for `from_commit` or `to_commit` - - WORKSPACE will select the workspace copy. This can only be used in `to_commit` - - eg. `/api/v0/blueprints/diff/glusterfs/NEWEST/WORKSPACE` will return the differences - between the most recent git commit and the contents of the workspace. - - Each entry in the response's diff object contains the old blueprint value and the new one. - If old is null and new is set, then it was added. - If new is null and old is set, then it was removed. - If both are set, then it was changed. - - The old/new entries will have the name of the blueprint field that was changed. This - can be one of: Name, Description, Version, Module, or Package. - The contents for these will be the old/new values for them. - - In the example below the version was changed and the ping package was added. - - Example:: - - { - "diff": [ - { - "new": { - "Version": "0.0.6" - }, - "old": { - "Version": "0.0.5" - } - }, - { - "new": { - "Package": { - "name": "ping", - "version": "3.2.1" - } - }, - "old": null - } - ] - } - """ - for s in [blueprint_name, from_commit, to_commit]: - if VALID_API_STRING.match(s) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - if not blueprint_exists(api, branch, blueprint_name): - return jsonify(status=False, errors=[{"id": UNKNOWN_BLUEPRINT, "msg": "Unknown blueprint name: %s" % blueprint_name}]) - - try: - if from_commit == "NEWEST": - with api.config["GITLOCK"].lock: - old_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - else: - with api.config["GITLOCK"].lock: - old_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name, from_commit) - except Exception as e: - log.error("(v0_blueprints_diff) %s", str(e)) - return jsonify(status=False, errors=[{"id": UNKNOWN_COMMIT, "msg": str(e)}]), 400 - - try: - if to_commit == "WORKSPACE": - with api.config["GITLOCK"].lock: - new_blueprint = workspace_read(api.config["GITLOCK"].repo, branch, blueprint_name) - # If there is no workspace, use the newest commit instead - if not new_blueprint: - with api.config["GITLOCK"].lock: - new_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - elif to_commit == "NEWEST": - with api.config["GITLOCK"].lock: - new_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - else: - with api.config["GITLOCK"].lock: - new_blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name, to_commit) - except Exception as e: - log.error("(v0_blueprints_diff) %s", str(e)) - return jsonify(status=False, errors=[{"id": UNKNOWN_COMMIT, "msg": str(e)}]), 400 - - diff = recipe_diff(old_blueprint, new_blueprint) - return jsonify(diff=diff)
    - -
    [docs]@v0_api.route("/blueprints/freeze", defaults={'blueprint_names': ""}) -@v0_api.route("/blueprints/freeze/<blueprint_names>") -@checkparams([("blueprint_names", "", "no blueprint names given")]) -def v0_blueprints_freeze(blueprint_names): - """Return the blueprint with the exact modules and packages selected by depsolve - - **/api/v0/blueprints/freeze/<blueprint_names>** - - Return a JSON representation of the blueprint with the package and module versions set - to the exact versions chosen by depsolving the blueprint. - - Example:: - - { - "errors": [], - "blueprints": [ - { - "blueprint": { - "description": "An example GlusterFS server with samba", - "modules": [ - { - "name": "glusterfs", - "version": "3.8.4-18.4.el7.x86_64" - }, - { - "name": "glusterfs-cli", - "version": "3.8.4-18.4.el7.x86_64" - } - ], - "name": "glusterfs", - "packages": [ - { - "name": "ping", - "version": "2:3.2.1-2.el7.noarch" - }, - { - "name": "samba", - "version": "4.6.2-8.el7.x86_64" - } - ], - "version": "0.0.6" - } - } - ] - } - """ - if any(VALID_BLUEPRINT_NAME.match(blueprint_name) is None for blueprint_name in blueprint_names.split(',')): - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - out_fmt = request.args.get("format", "json") - if VALID_API_STRING.match(out_fmt) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in format argument"}]), 400 - - blueprints = [] - errors = [] - for blueprint_name in [n.strip() for n in sorted(blueprint_names.split(","), key=lambda n: n.lower())]: - # get the blueprint - # Get the workspace version (if it exists) - blueprint = None - try: - with api.config["GITLOCK"].lock: - blueprint = workspace_read(api.config["GITLOCK"].repo, branch, blueprint_name) - except Exception: - pass - - if not blueprint: - # No workspace version, get the git version (if it exists) - try: - with api.config["GITLOCK"].lock: - blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - except RecipeFileError as e: - # adding an error here would be redundant, skip it - log.error("(v0_blueprints_freeze) %s", str(e)) - except Exception as e: - errors.append({"id": BLUEPRINTS_ERROR, "msg": "%s: %s" % (blueprint_name, str(e))}) - log.error("(v0_blueprints_freeze) %s", str(e)) - - # No blueprint found, skip it. - if not blueprint: - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "%s: blueprint_not_found" % blueprint_name}) - continue - - # Combine modules and packages and depsolve the list - # TODO include the version/glob in the depsolving - module_nver = blueprint.module_nver - package_nver = blueprint.package_nver - projects = sorted(set(module_nver+package_nver), key=lambda p: p[0].lower()) - deps = [] - try: - with api.config["DNFLOCK"].lock: - deps = projects_depsolve(api.config["DNFLOCK"].dbo, projects, blueprint.group_names) - except ProjectsError as e: - errors.append({"id": BLUEPRINTS_ERROR, "msg": "%s: %s" % (blueprint_name, str(e))}) - log.error("(v0_blueprints_freeze) %s", str(e)) - - blueprints.append({"blueprint": blueprint.freeze(deps)}) - - if out_fmt == "toml": - # With TOML output we just want to dump the raw blueprint, skipping the rest. - return "\n\n".join([e["blueprint"].toml() for e in blueprints]) - else: - return jsonify(blueprints=blueprints, errors=errors)
    - -
    [docs]@v0_api.route("/blueprints/depsolve", defaults={'blueprint_names': ""}) -@v0_api.route("/blueprints/depsolve/<blueprint_names>") -@checkparams([("blueprint_names", "", "no blueprint names given")]) -def v0_blueprints_depsolve(blueprint_names): - """Return the dependencies for a blueprint - - **/api/v0/blueprints/depsolve/<blueprint_names>** - - Depsolve the blueprint using yum, return the blueprint used, and the NEVRAs of the packages - chosen to satisfy the blueprint's requirements. The response will include a list of results, - with the full dependency list in `dependencies`, the NEVRAs for the blueprint's direct modules - and packages in `modules`, and any error will be in `errors`. - - Example:: - - { - "errors": [], - "blueprints": [ - { - "dependencies": [ - { - "arch": "noarch", - "epoch": "0", - "name": "2ping", - "release": "2.el7", - "version": "3.2.1" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "acl", - "release": "12.el7", - "version": "2.2.51" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "audit-libs", - "release": "3.el7", - "version": "2.7.6" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "avahi-libs", - "release": "17.el7", - "version": "0.6.31" - }, - ... - ], - "modules": [ - { - "arch": "noarch", - "epoch": "0", - "name": "2ping", - "release": "2.el7", - "version": "3.2.1" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "glusterfs", - "release": "18.4.el7", - "version": "3.8.4" - }, - ... - ], - "blueprint": { - "description": "An example GlusterFS server with samba", - "modules": [ - { - "name": "glusterfs", - "version": "3.7.*" - }, - ... - } - } - ] - } - """ - if any(VALID_BLUEPRINT_NAME.match(blueprint_name) is None for blueprint_name in blueprint_names.split(',')): - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - branch = request.args.get("branch", "master") - if VALID_API_STRING.match(branch) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - - blueprints = [] - errors = [] - for blueprint_name in [n.strip() for n in sorted(blueprint_names.split(","), key=lambda n: n.lower())]: - # get the blueprint - # Get the workspace version (if it exists) - blueprint = None - try: - with api.config["GITLOCK"].lock: - blueprint = workspace_read(api.config["GITLOCK"].repo, branch, blueprint_name) - except Exception: - pass - - if not blueprint: - # No workspace version, get the git version (if it exists) - try: - with api.config["GITLOCK"].lock: - blueprint = read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - except RecipeFileError as e: - # adding an error here would be redundant, skip it - log.error("(v0_blueprints_depsolve) %s", str(e)) - except Exception as e: - errors.append({"id": BLUEPRINTS_ERROR, "msg": "%s: %s" % (blueprint_name, str(e))}) - log.error("(v0_blueprints_depsolve) %s", str(e)) - - # No blueprint found, skip it. - if not blueprint: - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "%s: blueprint not found" % blueprint_name}) - continue - - # Combine modules and packages and depsolve the list - # TODO include the version/glob in the depsolving - module_nver = blueprint.module_nver - package_nver = blueprint.package_nver - projects = sorted(set(module_nver+package_nver), key=lambda p: p[0].lower()) - deps = [] - try: - with api.config["DNFLOCK"].lock: - deps = projects_depsolve(api.config["DNFLOCK"].dbo, projects, blueprint.group_names) - except ProjectsError as e: - errors.append({"id": BLUEPRINTS_ERROR, "msg": "%s: %s" % (blueprint_name, str(e))}) - log.error("(v0_blueprints_depsolve) %s", str(e)) - - # Get the NEVRA's of the modules and projects, add as "modules" - modules = [] - for dep in deps: - if dep["name"] in projects: - modules.append(dep) - modules = sorted(modules, key=lambda m: m["name"].lower()) - - blueprints.append({"blueprint":blueprint, "dependencies":deps, "modules":modules}) - - return jsonify(blueprints=blueprints, errors=errors)
    - -
    [docs]@v0_api.route("/projects/list") -def v0_projects_list(): - """List all of the available projects/packages - - **/api/v0/projects/list[?offset=0&limit=20]** - - List all of the available projects. By default this returns the first 20 items, - but this can be changed by setting the `offset` and `limit` arguments. - - Example:: - - { - "limit": 20, - "offset": 0, - "projects": [ - { - "description": "0 A.D. (pronounced \"zero ey-dee\") is a ...", - "homepage": "http://play0ad.com", - "name": "0ad", - "summary": "Cross-Platform RTS Game of Ancient Warfare", - "upstream_vcs": "UPSTREAM_VCS" - }, - ... - ], - "total": 21770 - } - """ - try: - limit = int(request.args.get("limit", "20")) - offset = int(request.args.get("offset", "0")) - except ValueError as e: - return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400 - - try: - with api.config["DNFLOCK"].lock: - available = projects_list(api.config["DNFLOCK"].dbo) - except ProjectsError as e: - log.error("(v0_projects_list) %s", str(e)) - return jsonify(status=False, errors=[{"id": PROJECTS_ERROR, "msg": str(e)}]), 400 - - projects = take_limits(available, offset, limit) - return jsonify(projects=projects, offset=offset, limit=limit, total=len(available))
    - -
    [docs]@v0_api.route("/projects/info", defaults={'project_names': ""}) -@v0_api.route("/projects/info/<project_names>") -@checkparams([("project_names", "", "no project names given")]) -def v0_projects_info(project_names): - """Return detailed information about the listed projects - - **/api/v0/projects/info/<project_names>** - - Return information about the comma-separated list of projects. It includes the description - of the package along with the list of available builds. - - Example:: - - { - "projects": [ - { - "builds": [ - { - "arch": "x86_64", - "build_config_ref": "BUILD_CONFIG_REF", - "build_env_ref": "BUILD_ENV_REF", - "build_time": "2017-03-01T08:39:23", - "changelog": "- restore incremental backups correctly, files ...", - "epoch": "2", - "metadata": {}, - "release": "32.el7", - "source": { - "license": "GPLv3+", - "metadata": {}, - "source_ref": "SOURCE_REF", - "version": "1.26" - } - } - ], - "description": "The GNU tar program saves many ...", - "homepage": "http://www.gnu.org/software/tar/", - "name": "tar", - "summary": "A GNU file archiving program", - "upstream_vcs": "UPSTREAM_VCS" - } - ] - } - """ - if VALID_API_STRING.match(project_names) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - with api.config["DNFLOCK"].lock: - projects = projects_info(api.config["DNFLOCK"].dbo, project_names.split(",")) - except ProjectsError as e: - log.error("(v0_projects_info) %s", str(e)) - return jsonify(status=False, errors=[{"id": PROJECTS_ERROR, "msg": str(e)}]), 400 - - if not projects: - msg = "one of the requested projects does not exist: %s" % project_names - log.error("(v0_projects_info) %s", msg) - return jsonify(status=False, errors=[{"id": UNKNOWN_PROJECT, "msg": msg}]), 400 - - return jsonify(projects=projects)
    - -
    [docs]@v0_api.route("/projects/depsolve", defaults={'project_names': ""}) -@v0_api.route("/projects/depsolve/<project_names>") -@checkparams([("project_names", "", "no project names given")]) -def v0_projects_depsolve(project_names): - """Return detailed information about the listed projects - - **/api/v0/projects/depsolve/<project_names>** - - Depsolve the comma-separated list of projects and return the list of NEVRAs needed - to satisfy the request. - - Example:: - - { - "projects": [ - { - "arch": "noarch", - "epoch": "0", - "name": "basesystem", - "release": "7.el7", - "version": "10.0" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "bash", - "release": "28.el7", - "version": "4.2.46" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "filesystem", - "release": "21.el7", - "version": "3.2" - }, - ... - ] - } - """ - if VALID_API_STRING.match(project_names) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - with api.config["DNFLOCK"].lock: - deps = projects_depsolve(api.config["DNFLOCK"].dbo, [(n, "*") for n in project_names.split(",")], []) - except ProjectsError as e: - log.error("(v0_projects_depsolve) %s", str(e)) - return jsonify(status=False, errors=[{"id": PROJECTS_ERROR, "msg": str(e)}]), 400 - - if not deps: - msg = "one of the requested projects does not exist: %s" % project_names - log.error("(v0_projects_depsolve) %s", msg) - return jsonify(status=False, errors=[{"id": UNKNOWN_PROJECT, "msg": msg}]), 400 - - return jsonify(projects=deps)
    - -
    [docs]@v0_api.route("/projects/source/list") -def v0_projects_source_list(): - """Return the list of source names - - **/api/v0/projects/source/list** - - Return the list of repositories used for depsolving and installing packages. - - Example:: - - { - "sources": [ - "fedora", - "fedora-cisco-openh264", - "fedora-updates-testing", - "fedora-updates" - ] - } - """ - with api.config["DNFLOCK"].lock: - repos = list(api.config["DNFLOCK"].dbo.repos.iter_enabled()) - sources = sorted([r.id for r in repos]) - return jsonify(sources=sources)
    - -
    [docs]@v0_api.route("/projects/source/info", defaults={'source_names': ""}) -@v0_api.route("/projects/source/info/<source_names>") -@checkparams([("source_names", "", "no source names given")]) -def v0_projects_source_info(source_names): - """Return detailed info about the list of sources - - **/api/v0/projects/source/info/<source-names>** - - Return information about the comma-separated list of source names. Or all of the - sources if '*' is passed. Note that general globbing is not supported, only '*'. - - immutable system sources will have the "system" field set to true. User added sources - will have it set to false. System sources cannot be changed or deleted. - - Example:: - - { - "errors": [], - "sources": { - "fedora": { - "check_gpg": true, - "check_ssl": true, - "gpgkey_urls": [ - "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64" - ], - "name": "fedora", - "proxy": "http://proxy.brianlane.com:8123", - "system": true, - "type": "yum-metalink", - "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64" - } - } - } - """ - if VALID_API_STRING.match(source_names) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - out_fmt = request.args.get("format", "json") - if VALID_API_STRING.match(out_fmt) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in format argument"}]), 400 - - # Return info on all of the sources - if source_names == "*": - with api.config["DNFLOCK"].lock: - source_names = ",".join(r.id for r in api.config["DNFLOCK"].dbo.repos.iter_enabled()) - - sources = {} - errors = [] - system_sources = get_repo_sources("/etc/yum.repos.d/*.repo") - for source in source_names.split(","): - with api.config["DNFLOCK"].lock: - repo = api.config["DNFLOCK"].dbo.repos.get(source, None) - if not repo: - errors.append({"id": UNKNOWN_SOURCE, "msg": "%s is not a valid source" % source}) - continue - sources[repo.id] = repo_to_source(repo, repo.id in system_sources, api=0) - - if out_fmt == "toml" and not errors: - # With TOML output we just want to dump the raw sources, skipping the errors - return toml.dumps(sources) - elif out_fmt == "toml" and errors: - # TOML requested, but there was an error - return jsonify(status=False, errors=errors), 400 - else: - return jsonify(sources=sources, errors=errors)
    - -
    [docs]@v0_api.route("/projects/source/new", methods=["POST"]) -def v0_projects_source_new(): - """Add a new package source. Or change an existing one - - **POST /api/v0/projects/source/new** - - Add (or change) a source for use when depsolving blueprints and composing images. - - The ``proxy`` and ``gpgkey_urls`` entries are optional. All of the others are required. The supported - types for the urls are: - - * ``yum-baseurl`` is a URL to a yum repository. - * ``yum-mirrorlist`` is a URL for a mirrorlist. - * ``yum-metalink`` is a URL for a metalink. - - If ``check_ssl`` is true the https certificates must be valid. If they are self-signed you can either set - this to false, or add your Certificate Authority to the host system. - - If ``check_gpg`` is true the GPG key must either be installed on the host system, or ``gpgkey_urls`` - should point to it. - - You can edit an existing source (other than system sources), by doing a POST - of the new version of the source. It will overwrite the previous one. - - Example:: - - { - "name": "custom-source-1", - "url": "https://url/path/to/repository/", - "type": "yum-baseurl", - "check_ssl": true, - "check_gpg": true, - "gpgkey_urls": [ - "https://url/path/to/gpg-key" - ] - } - - - """ - if request.headers['Content-Type'] == "text/x-toml": - source = toml.loads(request.data) - else: - source = request.get_json(cache=False) - - system_sources = get_repo_sources("/etc/yum.repos.d/*.repo") - if source["name"] in system_sources: - return jsonify(status=False, errors=[{"id": SYSTEM_SOURCE, "msg": "%s is a system source, it cannot be changed." % source["name"]}]), 400 - - try: - # Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API) - with api.config["DNFLOCK"].lock: - repo_dir = api.config["COMPOSER_CFG"].get("composer", "repo_dir") - new_repo_source(api.config["DNFLOCK"].dbo, source["name"], source, repo_dir) - except Exception as e: - return jsonify(status=False, errors=[{"id": PROJECTS_ERROR, "msg": str(e)}]), 400 - - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/projects/source/delete", defaults={'source_name': ""}, methods=["DELETE"]) -@v0_api.route("/projects/source/delete/<source_name>", methods=["DELETE"]) -@checkparams([("source_name", "", "no source name given")]) -def v0_projects_source_delete(source_name): - """Delete the named source and return a status response - - **DELETE /api/v0/projects/source/delete/<source-name>** - - Delete a user added source. This will fail if a system source is passed to - it. - - The response will be a status response with `status` set to true, or an - error response with it set to false and an error message included. - """ - if VALID_API_STRING.match(source_name) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - system_sources = get_repo_sources("/etc/yum.repos.d/*.repo") - if source_name in system_sources: - return jsonify(status=False, errors=[{"id": SYSTEM_SOURCE, "msg": "%s is a system source, it cannot be deleted." % source_name}]), 400 - share_dir = api.config["COMPOSER_CFG"].get("composer", "repo_dir") - try: - # Remove the file entry for the source - delete_repo_source(joinpaths(share_dir, "*.repo"), source_name) - - # Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API) - with api.config["DNFLOCK"].lock: - if source_name in api.config["DNFLOCK"].dbo.repos: - del api.config["DNFLOCK"].dbo.repos[source_name] - log.info("Updating repository metadata after removing %s", source_name) - api.config["DNFLOCK"].dbo.fill_sack(load_system_repo=False) - api.config["DNFLOCK"].dbo.read_comps() - - except ProjectsError as e: - log.error("(v0_projects_source_delete) %s", str(e)) - return jsonify(status=False, errors=[{"id": UNKNOWN_SOURCE, "msg": str(e)}]), 400 - - return jsonify(status=True)
    - -
    [docs]@v0_api.route("/modules/list") -@v0_api.route("/modules/list/<module_names>") -def v0_modules_list(module_names=None): - """List available modules, filtering by module_names - - **/api/v0/modules/list[?offset=0&limit=20]** - - Return a list of all of the available modules. This includes the name and the - group_type, which is always "rpm" for lorax-composer. By default this returns - the first 20 items. This can be changed by setting the `offset` and `limit` - arguments. - - Example:: - - { - "limit": 20, - "modules": [ - { - "group_type": "rpm", - "name": "0ad" - }, - { - "group_type": "rpm", - "name": "0ad-data" - }, - { - "group_type": "rpm", - "name": "0install" - }, - { - "group_type": "rpm", - "name": "2048-cli" - }, - ... - ] - "total": 21770 - } - - **/api/v0/modules/list/<module_names>[?offset=0&limit=20]** - - Return the list of comma-separated modules. Output is the same as `/modules/list` - - Example:: - - { - "limit": 20, - "modules": [ - { - "group_type": "rpm", - "name": "tar" - } - ], - "offset": 0, - "total": 1 - } - """ - if module_names and VALID_API_STRING.match(module_names) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - limit = int(request.args.get("limit", "20")) - offset = int(request.args.get("offset", "0")) - except ValueError as e: - return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400 - - if module_names: - module_names = module_names.split(",") - - try: - with api.config["DNFLOCK"].lock: - available = modules_list(api.config["DNFLOCK"].dbo, module_names) - except ProjectsError as e: - log.error("(v0_modules_list) %s", str(e)) - return jsonify(status=False, errors=[{"id": MODULES_ERROR, "msg": str(e)}]), 400 - - if module_names and not available: - msg = "one of the requested modules does not exist: %s" % module_names - log.error("(v0_modules_list) %s", msg) - return jsonify(status=False, errors=[{"id": UNKNOWN_MODULE, "msg": msg}]), 400 - - modules = take_limits(available, offset, limit) - return jsonify(modules=modules, offset=offset, limit=limit, total=len(available))
    - -
    [docs]@v0_api.route("/modules/info", defaults={'module_names': ""}) -@v0_api.route("/modules/info/<module_names>") -@checkparams([("module_names", "", "no module names given")]) -def v0_modules_info(module_names): - """Return detailed information about the listed modules - - **/api/v0/modules/info/<module_names>** - - Return the module's dependencies, and the information about the module. - - Example:: - - { - "modules": [ - { - "dependencies": [ - { - "arch": "noarch", - "epoch": "0", - "name": "basesystem", - "release": "7.el7", - "version": "10.0" - }, - { - "arch": "x86_64", - "epoch": "0", - "name": "bash", - "release": "28.el7", - "version": "4.2.46" - }, - ... - ], - "description": "The GNU tar program saves ...", - "homepage": "http://www.gnu.org/software/tar/", - "name": "tar", - "summary": "A GNU file archiving program", - "upstream_vcs": "UPSTREAM_VCS" - } - ] - } - """ - if VALID_API_STRING.match(module_names) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - try: - with api.config["DNFLOCK"].lock: - modules = modules_info(api.config["DNFLOCK"].dbo, module_names.split(",")) - except ProjectsError as e: - log.error("(v0_modules_info) %s", str(e)) - return jsonify(status=False, errors=[{"id": MODULES_ERROR, "msg": str(e)}]), 400 - - if not modules: - msg = "one of the requested modules does not exist: %s" % module_names - log.error("(v0_modules_info) %s", msg) - return jsonify(status=False, errors=[{"id": UNKNOWN_MODULE, "msg": msg}]), 400 - - return jsonify(modules=modules)
    - -
    [docs]@v0_api.route("/compose", methods=["POST"]) -def v0_compose_start(): - """Start a compose - - The body of the post should have these fields: - blueprint_name - The blueprint name from /blueprints/list/ - compose_type - The type of output to create, from /compose/types - branch - Optional, defaults to master, selects the git branch to use for the blueprint. - - **POST /api/v0/compose** - - Start a compose. The content type should be 'application/json' and the body of the POST - should look like this - - Example:: - - { - "blueprint_name": "http-server", - "compose_type": "tar", - "branch": "master" - } - - Pass it the name of the blueprint, the type of output (from '/api/v0/compose/types'), and the - blueprint branch to use. 'branch' is optional and will default to master. It will create a new - build and add it to the queue. It returns the build uuid and a status if it succeeds - - Example:: - - { - "build_id": "e6fa6db4-9c81-4b70-870f-a697ca405cdf", - "status": true - } - """ - # Passing ?test=1 will generate a fake FAILED compose. - # Passing ?test=2 will generate a fake FINISHED compose. - try: - test_mode = int(request.args.get("test", "0")) - except ValueError: - test_mode = 0 - - compose = request.get_json(cache=False) - - errors = [] - if not compose: - return jsonify(status=False, errors=[{"id": MISSING_POST, "msg": "Missing POST body"}]), 400 - - if "blueprint_name" not in compose: - errors.append({"id": UNKNOWN_BLUEPRINT,"msg": "No 'blueprint_name' in the JSON request"}) - else: - blueprint_name = compose["blueprint_name"] - - if "branch" not in compose or not compose["branch"]: - branch = "master" - else: - branch = compose["branch"] - - if "compose_type" not in compose: - errors.append({"id": BAD_COMPOSE_TYPE, "msg": "No 'compose_type' in the JSON request"}) - else: - compose_type = compose["compose_type"] - - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - errors.append({"id": INVALID_CHARS, "msg": "Invalid characters in API path"}) - - if not blueprint_exists(api, branch, blueprint_name): - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "Unknown blueprint name: %s" % blueprint_name}) - - if errors: - return jsonify(status=False, errors=errors), 400 - - try: - build_id = start_build(api.config["COMPOSER_CFG"], api.config["DNFLOCK"], api.config["GITLOCK"], - branch, blueprint_name, compose_type, test_mode) - except Exception as e: - if "Invalid compose type" in str(e): - return jsonify(status=False, errors=[{"id": BAD_COMPOSE_TYPE, "msg": str(e)}]), 400 - else: - return jsonify(status=False, errors=[{"id": BUILD_FAILED, "msg": str(e)}]), 400 - - return jsonify(status=True, build_id=build_id)
    - -
    [docs]@v0_api.route("/compose/types") -def v0_compose_types(): - """Return the list of enabled output types - - (only enabled types are returned) - - **/api/v0/compose/types** - - Returns the list of supported output types that are valid for use with 'POST /api/v0/compose' - - Example:: - - { - "types": [ - { - "enabled": true, - "name": "tar" - } - ] - } - """ - share_dir = api.config["COMPOSER_CFG"].get("composer", "share_dir") - return jsonify(types=[{"name": t, "enabled": e} for t, e in compose_types(share_dir)])
    - -
    [docs]@v0_api.route("/compose/queue") -def v0_compose_queue(): - """Return the status of the new and running queues - - **/api/v0/compose/queue** - - Return the status of the build queue. It includes information about the builds waiting, - and the build that is running. - - Example:: - - { - "new": [ - { - "id": "45502a6d-06e8-48a5-a215-2b4174b3614b", - "blueprint": "glusterfs", - "queue_status": "WAITING", - "job_created": 1517362647.4570868, - "version": "0.0.6" - }, - { - "id": "6d292bd0-bec7-4825-8d7d-41ef9c3e4b73", - "blueprint": "kubernetes", - "queue_status": "WAITING", - "job_created": 1517362659.0034983, - "version": "0.0.1" - } - ], - "run": [ - { - "id": "745712b2-96db-44c0-8014-fe925c35e795", - "blueprint": "glusterfs", - "queue_status": "RUNNING", - "job_created": 1517362633.7965999, - "job_started": 1517362633.8001345, - "version": "0.0.6" - } - ] - } - """ - return jsonify(queue_status(api.config["COMPOSER_CFG"], api=0))
    - -
    [docs]@v0_api.route("/compose/finished") -def v0_compose_finished(): - """Return the list of finished composes - - **/api/v0/compose/finished** - - Return the details on all of the finished composes on the system. - - Example:: - - { - "finished": [ - { - "id": "70b84195-9817-4b8a-af92-45e380f39894", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517351003.8210032, - "job_started": 1517351003.8230415, - "job_finished": 1517359234.1003145, - "version": "0.0.6" - }, - { - "id": "e695affd-397f-4af9-9022-add2636e7459", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517362289.7193348, - "job_started": 1517362289.9751132, - "job_finished": 1517363500.1234567, - "version": "0.0.6" - } - ] - } - """ - return jsonify(finished=build_status(api.config["COMPOSER_CFG"], "FINISHED", api=0))
    - -
    [docs]@v0_api.route("/compose/failed") -def v0_compose_failed(): - """Return the list of failed composes - - **/api/v0/compose/failed** - - Return the details on all of the failed composes on the system. - - Example:: - - { - "failed": [ - { - "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a", - "blueprint": "http-server", - "queue_status": "FAILED", - "job_created": 1517523249.9301329, - "job_started": 1517523249.9314211, - "job_finished": 1517523255.5623411, - "version": "0.0.2" - } - ] - } - """ - return jsonify(failed=build_status(api.config["COMPOSER_CFG"], "FAILED", api=0))
    - -
    [docs]@v0_api.route("/compose/status", defaults={'uuids': ""}) -@v0_api.route("/compose/status/<uuids>") -@checkparams([("uuids", "", "no UUIDs given")]) -def v0_compose_status(uuids): - """Return the status of the listed uuids - - **/api/v0/compose/status/<uuids>[?blueprint=<blueprint_name>&status=<compose_status>&type=<compose_type>]** - - Return the details for each of the comma-separated list of uuids. A uuid of '*' will return - details for all composes. - - Example:: - - { - "uuids": [ - { - "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a", - "blueprint": "http-server", - "queue_status": "FINISHED", - "job_created": 1517523644.2384307, - "job_started": 1517523644.2551234, - "job_finished": 1517523689.9864314, - "version": "0.0.2" - }, - { - "id": "45502a6d-06e8-48a5-a215-2b4174b3614b", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517363442.188399, - "job_started": 1517363442.325324, - "job_finished": 1517363451.653621, - "version": "0.0.6" - } - ] - } - """ - if VALID_API_STRING.match(uuids) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - blueprint = request.args.get("blueprint", None) - status = request.args.get("status", None) - compose_type = request.args.get("type", None) - - # Check the arguments for invalid characters - for a in [blueprint, status, compose_type]: - if a is not None and VALID_API_STRING.match(a) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - results = [] - errors = [] - - if uuids.strip() == '*': - queue_status_dict = queue_status(api.config["COMPOSER_CFG"], api=0) - queue_new = queue_status_dict["new"] - queue_running = queue_status_dict["run"] - candidates = queue_new + queue_running + build_status(api.config["COMPOSER_CFG"], api=0) - else: - candidates = [] - for uuid in [n.strip().lower() for n in uuids.split(",")]: - details = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if details is None: - errors.append({"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}) - else: - candidates.append(details) - - for details in candidates: - if blueprint is not None and details['blueprint'] != blueprint: - continue - - if status is not None and details['queue_status'] != status: - continue - - if compose_type is not None and details['compose_type'] != compose_type: - continue - - results.append(details) - - return jsonify(uuids=results, errors=errors)
    - -
    [docs]@v0_api.route("/compose/cancel", defaults={'uuid': ""}, methods=["DELETE"]) -@v0_api.route("/compose/cancel/<uuid>", methods=["DELETE"]) -@checkparams([("uuid", "", "no UUID given")]) -def v0_compose_cancel(uuid): - """Cancel a running compose and delete its results directory - - **DELETE /api/v0/compose/cancel/<uuid>** - - Cancel the build, if it is not finished, and delete the results. It will return a - status of True if it is successful. - - Example:: - - { - "status": true, - "uuid": "03397f8d-acff-4cdb-bd31-f629b7a948f5" - } - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - - if status["queue_status"] not in ["WAITING", "RUNNING"]: - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s is not in WAITING or RUNNING." % uuid}]) - - try: - uuid_cancel(api.config["COMPOSER_CFG"], uuid) - except Exception as e: - return jsonify(status=False, errors=[{"id": COMPOSE_ERROR, "msg": "%s: %s" % (uuid, str(e))}]),400 - else: - return jsonify(status=True, uuid=uuid)
    - -
    [docs]@v0_api.route("/compose/delete", defaults={'uuids': ""}, methods=["DELETE"]) -@v0_api.route("/compose/delete/<uuids>", methods=["DELETE"]) -@checkparams([("uuids", "", "no UUIDs given")]) -def v0_compose_delete(uuids): - """Delete the compose results for the listed uuids - - **DELETE /api/v0/compose/delete/<uuids>** - - Delete the list of comma-separated uuids from the compose results. - - Example:: - - { - "errors": [], - "uuids": [ - { - "status": true, - "uuid": "ae1bf7e3-7f16-4c9f-b36e-3726a1093fd0" - } - ] - } - """ - if VALID_API_STRING.match(uuids) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - results = [] - errors = [] - for uuid in [n.strip().lower() for n in uuids.split(",")]: - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - errors.append({"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}) - elif status["queue_status"] not in ["FINISHED", "FAILED"]: - errors.append({"id": BUILD_IN_WRONG_STATE, "msg": "Build %s is not in FINISHED or FAILED." % uuid}) - else: - try: - uuid_delete(api.config["COMPOSER_CFG"], uuid) - except Exception as e: - errors.append({"id": COMPOSE_ERROR, "msg": "%s: %s" % (uuid, str(e))}) - else: - results.append({"uuid":uuid, "status":True}) - return jsonify(uuids=results, errors=errors)
    - -
    [docs]@v0_api.route("/compose/info", defaults={'uuid': ""}) -@v0_api.route("/compose/info/<uuid>") -@checkparams([("uuid", "", "no UUID given")]) -def v0_compose_info(uuid): - """Return detailed info about a compose - - **/api/v0/compose/info/<uuid>** - - Get detailed information about the compose. The returned JSON string will - contain the following information: - - * id - The uuid of the comoposition - * config - containing the configuration settings used to run Anaconda - * blueprint - The depsolved blueprint used to generate the kickstart - * commit - The (local) git commit hash for the blueprint used - * deps - The NEVRA of all of the dependencies used in the composition - * compose_type - The type of output generated (tar, iso, etc.) - * queue_status - The final status of the composition (FINISHED or FAILED) - - Example:: - - { - "commit": "7078e521a54b12eae31c3fd028680da7a0815a4d", - "compose_type": "tar", - "config": { - "anaconda_args": "", - "armplatform": "", - "compress_args": [], - "compression": "xz", - "image_name": "root.tar.xz", - ... - }, - "deps": { - "packages": [ - { - "arch": "x86_64", - "epoch": "0", - "name": "acl", - "release": "14.el7", - "version": "2.2.51" - } - ] - }, - "id": "c30b7d80-523b-4a23-ad52-61b799739ce8", - "queue_status": "FINISHED", - "blueprint": { - "description": "An example kubernetes master", - ... - } - } - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - info = uuid_info(api.config["COMPOSER_CFG"], uuid, api=0) - except Exception as e: - return jsonify(status=False, errors=[{"id": COMPOSE_ERROR, "msg": str(e)}]), 400 - - if info is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - else: - return jsonify(**info)
    - -
    [docs]@v0_api.route("/compose/metadata", defaults={'uuid': ""}) -@v0_api.route("/compose/metadata/<uuid>") -@checkparams([("uuid","", "no UUID given")]) -def v0_compose_metadata(uuid): - """Return a tar of the metadata for the build - - **/api/v0/compose/metadata/<uuid>** - - Returns a .tar of the metadata used for the build. This includes all the - information needed to reproduce the build, including the final kickstart - populated with repository and package NEVRA. - - The mime type is set to 'application/x-tar' and the filename is set to - UUID-metadata.tar - - The .tar is uncompressed, but is not large. - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - if status["queue_status"] not in ["FINISHED", "FAILED"]: - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s not in FINISHED or FAILED state." % uuid}]), 400 - else: - return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=False, logs=False), - mimetype="application/x-tar", - headers=[("Content-Disposition", "attachment; filename=%s-metadata.tar;" % uuid)], - direct_passthrough=True)
    - -
    [docs]@v0_api.route("/compose/results", defaults={'uuid': ""}) -@v0_api.route("/compose/results/<uuid>") -@checkparams([("uuid","", "no UUID given")]) -def v0_compose_results(uuid): - """Return a tar of the metadata and the results for the build - - **/api/v0/compose/results/<uuid>** - - Returns a .tar of the metadata, logs, and output image of the build. This - includes all the information needed to reproduce the build, including the - final kickstart populated with repository and package NEVRA. The output image - is already in compressed form so the returned tar is not compressed. - - The mime type is set to 'application/x-tar' and the filename is set to - UUID.tar - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - elif status["queue_status"] not in ["FINISHED", "FAILED"]: - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s not in FINISHED or FAILED state." % uuid}]), 400 - else: - return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=True, logs=True), - mimetype="application/x-tar", - headers=[("Content-Disposition", "attachment; filename=%s.tar;" % uuid)], - direct_passthrough=True)
    - -
    [docs]@v0_api.route("/compose/logs", defaults={'uuid': ""}) -@v0_api.route("/compose/logs/<uuid>") -@checkparams([("uuid","", "no UUID given")]) -def v0_compose_logs(uuid): - """Return a tar of the metadata for the build - - **/api/v0/compose/logs/<uuid>** - - Returns a .tar of the anaconda build logs. The tar is not compressed, but is - not large. - - The mime type is set to 'application/x-tar' and the filename is set to - UUID-logs.tar - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - elif status["queue_status"] not in ["FINISHED", "FAILED"]: - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s not in FINISHED or FAILED state." % uuid}]), 400 - else: - return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=False, image=False, logs=True), - mimetype="application/x-tar", - headers=[("Content-Disposition", "attachment; filename=%s-logs.tar;" % uuid)], - direct_passthrough=True)
    - -
    [docs]@v0_api.route("/compose/image", defaults={'uuid': ""}) -@v0_api.route("/compose/image/<uuid>") -@checkparams([("uuid","", "no UUID given")]) -def v0_compose_image(uuid): - """Return the output image for the build - - **/api/v0/compose/image/<uuid>** - - Returns the output image from the build. The filename is set to the filename - from the build with the UUID as a prefix. eg. UUID-root.tar.xz or UUID-boot.iso. - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - elif status["queue_status"] not in ["FINISHED", "FAILED"]: - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s not in FINISHED or FAILED state." % uuid}]), 400 - else: - image_name, image_path = uuid_image(api.config["COMPOSER_CFG"], uuid) - - # Make sure it really exists - if not os.path.exists(image_path): - return jsonify(status=False, errors=[{"id": BUILD_MISSING_FILE, "msg": "Build %s is missing image file %s" % (uuid, image_name)}]), 400 - - # Make the image name unique - image_name = uuid + "-" + image_name - # XXX - Will mime type guessing work for all our output? - return send_file(image_path, as_attachment=True, attachment_filename=image_name, add_etags=False)
    - -
    [docs]@v0_api.route("/compose/log", defaults={'uuid': ""}) -@v0_api.route("/compose/log/<uuid>") -@checkparams([("uuid","", "no UUID given")]) -def v0_compose_log_tail(uuid): - """Return the tail of the most currently relevant log - - **/api/v0/compose/log/<uuid>[?size=KiB]** - - Returns the end of either the anaconda log, the packaging log, or the - composer logs, depending on the progress of the compose. The size - parameter is optional and defaults to 1 MiB if it is not included. The - returned data is raw text from the end of the log file, starting on a - line boundary. - - Example:: - - 12:59:24,222 INFO anaconda: Running Thread: AnaConfigurationThread (140629395244800) - 12:59:24,223 INFO anaconda: Configuring installed system - 12:59:24,912 INFO anaconda: Configuring installed system - 12:59:24,912 INFO anaconda: Creating users - 12:59:24,913 INFO anaconda: Clearing libuser.conf at /tmp/libuser.Dyy8Gj - 12:59:25,154 INFO anaconda: Creating users - 12:59:25,155 INFO anaconda: Configuring addons - 12:59:25,155 INFO anaconda: Configuring addons - 12:59:25,155 INFO anaconda: Generating initramfs - 12:59:49,467 INFO anaconda: Generating initramfs - 12:59:49,467 INFO anaconda: Running post-installation scripts - 12:59:49,467 INFO anaconda: Running kickstart %%post script(s) - 12:59:50,782 INFO anaconda: All kickstart %%post script(s) have been run - 12:59:50,782 INFO anaconda: Running post-installation scripts - 12:59:50,784 INFO anaconda: Thread Done: AnaConfigurationThread (140629395244800) - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - size = int(request.args.get("size", "1024")) - except ValueError as e: - return jsonify(status=False, errors=[{"id": COMPOSE_ERROR, "msg": str(e)}]), 400 - - status = uuid_status(api.config["COMPOSER_CFG"], uuid, api=0) - if status is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - elif status["queue_status"] == "WAITING": - return jsonify(status=False, errors=[{"id": BUILD_IN_WRONG_STATE, "msg": "Build %s has not started yet. No logs to view" % uuid}]) - try: - return Response(uuid_log(api.config["COMPOSER_CFG"], uuid, size), direct_passthrough=True) - except RuntimeError as e: - return jsonify(status=False, errors=[{"id": COMPOSE_ERROR, "msg": str(e)}]), 400
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/v1.html b/docs/html/_modules/pylorax/api/v1.html deleted file mode 100644 index c8bf8eb0..00000000 --- a/docs/html/_modules/pylorax/api/v1.html +++ /dev/null @@ -1,1242 +0,0 @@ - - - - - - - - - - - pylorax.api.v1 — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.v1

    -#
    -# Copyright (C) 2019  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -""" Setup v1 of the API server
    -
    -"""
    -import logging
    -log = logging.getLogger("lorax-composer")
    -
    -from flask import jsonify, request
    -from flask import current_app as api
    -
    -from lifted.queue import get_upload, reset_upload, cancel_upload, delete_upload
    -from lifted.providers import list_providers, resolve_provider, load_profiles, validate_settings, save_settings
    -from lifted.providers import load_settings, delete_profile
    -from pylorax.api.checkparams import checkparams
    -from pylorax.api.compose import start_build
    -from pylorax.api.errors import BAD_COMPOSE_TYPE, BUILD_FAILED, INVALID_CHARS, MISSING_POST, PROJECTS_ERROR
    -from pylorax.api.errors import SYSTEM_SOURCE, UNKNOWN_BLUEPRINT, UNKNOWN_SOURCE, UNKNOWN_UUID, UPLOAD_ERROR
    -from pylorax.api.errors import COMPOSE_ERROR
    -from pylorax.api.flask_blueprint import BlueprintSkip
    -from pylorax.api.queue import queue_status, build_status, uuid_status, uuid_schedule_upload, uuid_remove_upload
    -from pylorax.api.queue import uuid_info
    -from pylorax.api.projects import get_repo_sources, repo_to_source
    -from pylorax.api.projects import new_repo_source
    -from pylorax.api.regexes import VALID_API_STRING, VALID_BLUEPRINT_NAME
    -import pylorax.api.toml as toml
    -from pylorax.api.utils import blueprint_exists
    -
    -
    -# Create the v1 routes Blueprint with skip_routes support
    -v1_api = BlueprintSkip("v1_routes", __name__)
    -
    -
    [docs]@v1_api.route("/projects/source/info", defaults={'source_ids': ""}) -@v1_api.route("/projects/source/info/<source_ids>") -@checkparams([("source_ids", "", "no source names given")]) -def v1_projects_source_info(source_ids): - """Return detailed info about the list of sources - - **/api/v1/projects/source/info/<source-ids>** - - Return information about the comma-separated list of source ids. Or all of the - sources if '*' is passed. Note that general globbing is not supported, only '*'. - - Immutable system sources will have the "system" field set to true. User added sources - will have it set to false. System sources cannot be changed or deleted. - - Example:: - - { - "errors": [], - "sources": { - "fedora": { - "check_gpg": true, - "check_ssl": true, - "gpgkey_urls": [ - "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64" - ], - "id": "fedora", - "name": "Fedora $releasever - $basearch", - "proxy": "http://proxy.brianlane.com:8123", - "system": true, - "type": "yum-metalink", - "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64" - } - } - } - - In v0 the ``name`` field was used for the id (a short name for the repo). In v1 ``name`` changed - to ``id`` and ``name`` is now used for the longer descriptive name of the repository. - """ - if VALID_API_STRING.match(source_ids) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - out_fmt = request.args.get("format", "json") - if VALID_API_STRING.match(out_fmt) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in format argument"}]), 400 - - # Return info on all of the sources - if source_ids == "*": - with api.config["DNFLOCK"].lock: - source_ids = ",".join(r.id for r in api.config["DNFLOCK"].dbo.repos.iter_enabled()) - - sources = {} - errors = [] - system_sources = get_repo_sources("/etc/yum.repos.d/*.repo") - for source in source_ids.split(","): - with api.config["DNFLOCK"].lock: - repo = api.config["DNFLOCK"].dbo.repos.get(source, None) - if not repo: - errors.append({"id": UNKNOWN_SOURCE, "msg": "%s is not a valid source" % source}) - continue - sources[repo.id] = repo_to_source(repo, repo.id in system_sources, api=1) - - if out_fmt == "toml" and not errors: - # With TOML output we just want to dump the raw sources, skipping the errors - return toml.dumps(sources) - elif out_fmt == "toml" and errors: - # TOML requested, but there was an error - return jsonify(status=False, errors=errors), 400 - else: - return jsonify(sources=sources, errors=errors)
    - -
    [docs]@v1_api.route("/projects/source/new", methods=["POST"]) -def v1_projects_source_new(): - """Add a new package source. Or change an existing one - - **POST /api/v1/projects/source/new** - - Add (or change) a source for use when depsolving blueprints and composing images. - - The ``proxy`` and ``gpgkey_urls`` entries are optional. All of the others are required. The supported - types for the urls are: - - * ``yum-baseurl`` is a URL to a yum repository. - * ``yum-mirrorlist`` is a URL for a mirrorlist. - * ``yum-metalink`` is a URL for a metalink. - - If ``check_ssl`` is true the https certificates must be valid. If they are self-signed you can either set - this to false, or add your Certificate Authority to the host system. - - If ``check_gpg`` is true the GPG key must either be installed on the host system, or ``gpgkey_urls`` - should point to it. - - You can edit an existing source (other than system sources), by doing a POST - of the new version of the source. It will overwrite the previous one. - - Example:: - - { - "id": "custom-source-1", - "name": "Custom Package Source #1", - "url": "https://url/path/to/repository/", - "type": "yum-baseurl", - "check_ssl": true, - "check_gpg": true, - "gpgkey_urls": [ - "https://url/path/to/gpg-key" - ] - } - - In v0 the ``name`` field was used for the id (a short name for the repo). In v1 ``name`` changed - to ``id`` and ``name`` is now used for the longer descriptive name of the repository. - """ - if request.headers['Content-Type'] == "text/x-toml": - source = toml.loads(request.data) - else: - source = request.get_json(cache=False) - - # Check for id in source, return error if not - if "id" not in source: - return jsonify(status=False, errors=[{"id": UNKNOWN_SOURCE, "msg": "'id' field is missing from API v1 request."}]), 400 - - system_sources = get_repo_sources("/etc/yum.repos.d/*.repo") - if source["id"] in system_sources: - return jsonify(status=False, errors=[{"id": SYSTEM_SOURCE, "msg": "%s is a system source, it cannot be changed." % source["id"]}]), 400 - - try: - # Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API) - with api.config["DNFLOCK"].lock: - repo_dir = api.config["COMPOSER_CFG"].get("composer", "repo_dir") - new_repo_source(api.config["DNFLOCK"].dbo, source["id"], source, repo_dir) - except Exception as e: - return jsonify(status=False, errors=[{"id": PROJECTS_ERROR, "msg": str(e)}]), 400 - - return jsonify(status=True)
    - -
    [docs]@v1_api.route("/compose", methods=["POST"]) -def v1_compose_start(): - """Start a compose - - The body of the post should have these fields: - blueprint_name - The blueprint name from /blueprints/list/ - compose_type - The type of output to create, from /compose/types - branch - Optional, defaults to master, selects the git branch to use for the blueprint. - - **POST /api/v1/compose** - - Start a compose. The content type should be 'application/json' and the body of the POST - should look like this. The "upload" object is optional. - - The upload object can specify either a pre-existing profile to use (as returned by - `/uploads/providers`) or one-time use settings for the provider. - - Example with upload profile:: - - { - "blueprint_name": "http-server", - "compose_type": "tar", - "branch": "master", - "upload": { - "image_name": "My Image", - "provider": "azure", - "profile": "production-azure-settings" - } - } - - Example with upload settings:: - - { - "blueprint_name": "http-server", - "compose_type": "tar", - "branch": "master", - "upload": { - "image_name": "My Image", - "provider": "azure", - "settings": { - "resource_group": "SOMEBODY", - "storage_account_name": "ONCE", - "storage_container": "TOLD", - "location": "ME", - "subscription_id": "THE", - "client_id": "WORLD", - "secret": "IS", - "tenant": "GONNA" - } - } - } - - Pass it the name of the blueprint, the type of output (from - '/api/v1/compose/types'), and the blueprint branch to use. 'branch' is - optional and will default to master. It will create a new build and add - it to the queue. It returns the build uuid and a status if it succeeds. - If an "upload" is given, it will schedule an upload to run when the build - finishes. - - Example response:: - - { - "build_id": "e6fa6db4-9c81-4b70-870f-a697ca405cdf", - "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb", - "status": true - } - """ - # Passing ?test=1 will generate a fake FAILED compose. - # Passing ?test=2 will generate a fake FINISHED compose. - try: - test_mode = int(request.args.get("test", "0")) - except ValueError: - test_mode = 0 - - compose = request.get_json(cache=False) - - errors = [] - if not compose: - return jsonify(status=False, errors=[{"id": MISSING_POST, "msg": "Missing POST body"}]), 400 - - if "blueprint_name" not in compose: - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "No 'blueprint_name' in the JSON request"}) - else: - blueprint_name = compose["blueprint_name"] - - if "branch" not in compose or not compose["branch"]: - branch = "master" - else: - branch = compose["branch"] - - if "compose_type" not in compose: - errors.append({"id": BAD_COMPOSE_TYPE, "msg": "No 'compose_type' in the JSON request"}) - else: - compose_type = compose["compose_type"] - - if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: - errors.append({"id": INVALID_CHARS, "msg": "Invalid characters in API path"}) - - if not blueprint_exists(api, branch, blueprint_name): - errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "Unknown blueprint name: %s" % blueprint_name}) - - if "upload" in compose: - try: - image_name = compose["upload"]["image_name"] - - if "profile" in compose["upload"]: - # Load a specific profile for this provider - profile = compose["upload"]["profile"] - provider_name = compose["upload"]["provider"] - settings = load_settings(api.config["COMPOSER_CFG"]["upload"], provider_name, profile) - else: - provider_name = compose["upload"]["provider"] - settings = compose["upload"]["settings"] - except KeyError as e: - errors.append({"id": UPLOAD_ERROR, "msg": f'Missing parameter {str(e)}!'}) - try: - provider = resolve_provider(api.config["COMPOSER_CFG"]["upload"], provider_name) - if "supported_types" in provider and compose_type not in provider["supported_types"]: - raise RuntimeError(f'Type "{compose_type}" is not supported by provider "{provider_name}"!') - validate_settings(api.config["COMPOSER_CFG"]["upload"], provider_name, settings, image_name) - except Exception as e: - errors.append({"id": UPLOAD_ERROR, "msg": str(e)}) - - if errors: - return jsonify(status=False, errors=errors), 400 - - try: - build_id = start_build(api.config["COMPOSER_CFG"], api.config["DNFLOCK"], api.config["GITLOCK"], - branch, blueprint_name, compose_type, test_mode) - except Exception as e: - if "Invalid compose type" in str(e): - return jsonify(status=False, errors=[{"id": BAD_COMPOSE_TYPE, "msg": str(e)}]), 400 - else: - return jsonify(status=False, errors=[{"id": BUILD_FAILED, "msg": str(e)}]), 400 - - if "upload" in compose: - upload_id = uuid_schedule_upload( - api.config["COMPOSER_CFG"], - build_id, - provider_name, - image_name, - settings - ) - else: - upload_id = "" - - return jsonify(status=True, build_id=build_id, upload_id=upload_id)
    - -
    [docs]@v1_api.route("/compose/queue") -def v1_compose_queue(): - """Return the status of the new and running queues - - **/api/v1/compose/queue** - - Return the status of the build queue. It includes information about the builds waiting, - and the build that is running. - - Example:: - - { - "new": [ - { - "id": "45502a6d-06e8-48a5-a215-2b4174b3614b", - "blueprint": "glusterfs", - "queue_status": "WAITING", - "job_created": 1517362647.4570868, - "version": "0.0.6" - }, - { - "id": "6d292bd0-bec7-4825-8d7d-41ef9c3e4b73", - "blueprint": "kubernetes", - "queue_status": "WAITING", - "job_created": 1517362659.0034983, - "version": "0.0.1" - } - ], - "run": [ - { - "id": "745712b2-96db-44c0-8014-fe925c35e795", - "blueprint": "glusterfs", - "queue_status": "RUNNING", - "job_created": 1517362633.7965999, - "job_started": 1517362633.8001345, - "version": "0.0.6", - "uploads": [ - { - "creation_time": 1568150660.524401, - "image_name": "glusterfs server", - "image_path": null, - "provider_name": "azure", - "settings": { - "client_id": "need", - "location": "need", - "resource_group": "group", - "secret": "need", - "storage_account_name": "need", - "storage_container": "need", - "subscription_id": "need", - "tenant": "need" - }, - "status": "WAITING", - "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65" - } - ] - } - ] - } - """ - return jsonify(queue_status(api.config["COMPOSER_CFG"], api=1))
    - -
    [docs]@v1_api.route("/compose/finished") -def v1_compose_finished(): - """Return the list of finished composes - - **/api/v1/compose/finished** - - Return the details on all of the finished composes on the system. - - Example:: - - { - "finished": [ - { - "id": "70b84195-9817-4b8a-af92-45e380f39894", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517351003.8210032, - "job_started": 1517351003.8230415, - "job_finished": 1517359234.1003145, - "version": "0.0.6" - }, - { - "id": "e695affd-397f-4af9-9022-add2636e7459", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517362289.7193348, - "job_started": 1517362289.9751132, - "job_finished": 1517363500.1234567, - "version": "0.0.6", - "uploads": [ - { - "creation_time": 1568150660.524401, - "image_name": "glusterfs server", - "image_path": "/var/lib/lorax/composer/results/e695affd-397f-4af9-9022-add2636e7459/disk.vhd", - "provider_name": "azure", - "settings": { - "client_id": "need", - "location": "need", - "resource_group": "group", - "secret": "need", - "storage_account_name": "need", - "storage_container": "need", - "subscription_id": "need", - "tenant": "need" - }, - "status": "WAITING", - "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65" - } - ] - } - ] - } - """ - return jsonify(finished=build_status(api.config["COMPOSER_CFG"], "FINISHED", api=1))
    - -
    [docs]@v1_api.route("/compose/failed") -def v1_compose_failed(): - """Return the list of failed composes - - **/api/v1/compose/failed** - - Return the details on all of the failed composes on the system. - - Example:: - - { - "failed": [ - { - "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a", - "blueprint": "http-server", - "queue_status": "FAILED", - "job_created": 1517523249.9301329, - "job_started": 1517523249.9314211, - "job_finished": 1517523255.5623411, - "version": "0.0.2", - "uploads": [ - { - "creation_time": 1568150660.524401, - "image_name": "http-server", - "image_path": null, - "provider_name": "azure", - "settings": { - "client_id": "need", - "location": "need", - "resource_group": "group", - "secret": "need", - "storage_account_name": "need", - "storage_container": "need", - "subscription_id": "need", - "tenant": "need" - }, - "status": "WAITING", - "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65" - } - ] - } - ] - } - """ - return jsonify(failed=build_status(api.config["COMPOSER_CFG"], "FAILED", api=1))
    - -
    [docs]@v1_api.route("/compose/status", defaults={'uuids': ""}) -@v1_api.route("/compose/status/<uuids>") -@checkparams([("uuids", "", "no UUIDs given")]) -def v1_compose_status(uuids): - """Return the status of the listed uuids - - **/api/v1/compose/status/<uuids>[?blueprint=<blueprint_name>&status=<compose_status>&type=<compose_type>]** - - Return the details for each of the comma-separated list of uuids. A uuid of '*' will return - details for all composes. - - Example:: - - { - "uuids": [ - { - "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a", - "blueprint": "http-server", - "queue_status": "FINISHED", - "job_created": 1517523644.2384307, - "job_started": 1517523644.2551234, - "job_finished": 1517523689.9864314, - "version": "0.0.2" - }, - { - "id": "45502a6d-06e8-48a5-a215-2b4174b3614b", - "blueprint": "glusterfs", - "queue_status": "FINISHED", - "job_created": 1517363442.188399, - "job_started": 1517363442.325324, - "job_finished": 1517363451.653621, - "version": "0.0.6", - "uploads": [ - { - "creation_time": 1568150660.524401, - "image_name": "glusterfs server", - "image_path": null, - "provider_name": "azure", - "settings": { - "client_id": "need", - "location": "need", - "resource_group": "group", - "secret": "need", - "storage_account_name": "need", - "storage_container": "need", - "subscription_id": "need", - "tenant": "need" - }, - "status": "WAITING", - "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65" - } - ] - } - ] - } - """ - if VALID_API_STRING.match(uuids) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - blueprint = request.args.get("blueprint", None) - status = request.args.get("status", None) - compose_type = request.args.get("type", None) - - results = [] - errors = [] - - if uuids.strip() == '*': - queue_status_dict = queue_status(api.config["COMPOSER_CFG"], api=1) - queue_new = queue_status_dict["new"] - queue_running = queue_status_dict["run"] - candidates = queue_new + queue_running + build_status(api.config["COMPOSER_CFG"], api=1) - else: - candidates = [] - for uuid in [n.strip().lower() for n in uuids.split(",")]: - details = uuid_status(api.config["COMPOSER_CFG"], uuid, api=1) - if details is None: - errors.append({"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}) - else: - candidates.append(details) - - for details in candidates: - if blueprint is not None and details['blueprint'] != blueprint: - continue - - if status is not None and details['queue_status'] != status: - continue - - if compose_type is not None and details['compose_type'] != compose_type: - continue - - results.append(details) - - return jsonify(uuids=results, errors=errors)
    - -
    [docs]@v1_api.route("/compose/info", defaults={'uuid': ""}) -@v1_api.route("/compose/info/<uuid>") -@checkparams([("uuid", "", "no UUID given")]) -def v1_compose_info(uuid): - """Return detailed info about a compose - - **/api/v1/compose/info/<uuid>** - - Get detailed information about the compose. The returned JSON string will - contain the following information: - - * id - The uuid of the comoposition - * config - containing the configuration settings used to run Anaconda - * blueprint - The depsolved blueprint used to generate the kickstart - * commit - The (local) git commit hash for the blueprint used - * deps - The NEVRA of all of the dependencies used in the composition - * compose_type - The type of output generated (tar, iso, etc.) - * queue_status - The final status of the composition (FINISHED or FAILED) - - Example:: - - { - "commit": "7078e521a54b12eae31c3fd028680da7a0815a4d", - "compose_type": "tar", - "config": { - "anaconda_args": "", - "armplatform": "", - "compress_args": [], - "compression": "xz", - "image_name": "root.tar.xz", - ... - }, - "deps": { - "packages": [ - { - "arch": "x86_64", - "epoch": "0", - "name": "acl", - "release": "14.el7", - "version": "2.2.51" - } - ] - }, - "id": "c30b7d80-523b-4a23-ad52-61b799739ce8", - "queue_status": "FINISHED", - "blueprint": { - "description": "An example kubernetes master", - ... - }, - "uploads": [ - { - "creation_time": 1568150660.524401, - "image_name": "glusterfs server", - "image_path": "/var/lib/lorax/composer/results/c30b7d80-523b-4a23-ad52-61b799739ce8/disk.vhd", - "provider_name": "azure", - "settings": { - "client_id": "need", - "location": "need", - "resource_group": "group", - "secret": "need", - "storage_account_name": "need", - "storage_container": "need", - "subscription_id": "need", - "tenant": "need" - }, - "status": "FAILED", - "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65" - } - ] - } - """ - if VALID_API_STRING.match(uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - info = uuid_info(api.config["COMPOSER_CFG"], uuid, api=1) - except Exception as e: - return jsonify(status=False, errors=[{"id": COMPOSE_ERROR, "msg": str(e)}]), 400 - - if info is None: - return jsonify(status=False, errors=[{"id": UNKNOWN_UUID, "msg": "%s is not a valid build uuid" % uuid}]), 400 - else: - return jsonify(**info)
    - -
    [docs]@v1_api.route("/compose/uploads/schedule", defaults={'compose_uuid': ""}, methods=["POST"]) -@v1_api.route("/compose/uploads/schedule/<compose_uuid>", methods=["POST"]) -@checkparams([("compose_uuid", "", "no compose UUID given")]) -def v1_compose_uploads_schedule(compose_uuid): - """Schedule an upload of a compose to a given cloud provider - - **POST /api/v1/uploads/schedule/<compose_uuid>** - - The body can specify either a pre-existing profile to use (as returned by - `/uploads/providers`) or one-time use settings for the provider. - - Example with upload profile:: - - { - "image_name": "My Image", - "provider": "azure", - "profile": "production-azure-settings" - } - - Example with upload settings:: - - { - "image_name": "My Image", - "provider": "azure", - "settings": { - "resource_group": "SOMEBODY", - "storage_account_name": "ONCE", - "storage_container": "TOLD", - "location": "ME", - "subscription_id": "THE", - "client_id": "WORLD", - "secret": "IS", - "tenant": "GONNA" - } - } - - Example response:: - - { - "status": true, - "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb" - } - """ - if VALID_API_STRING.match(compose_uuid) is None: - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - parsed = request.get_json(cache=False) - if not parsed: - return jsonify(status=False, errors=[{"id": MISSING_POST, "msg": "Missing POST body"}]), 400 - - try: - image_name = parsed["image_name"] - provider_name = parsed["provider"] - if "profile" in parsed: - # Load a specific profile for this provider - profile = parsed["profile"] - settings = load_settings(api.config["COMPOSER_CFG"]["upload"], provider_name, profile) - else: - settings = parsed["settings"] - except KeyError as e: - error = {"id": UPLOAD_ERROR, "msg": f'Missing parameter {str(e)}!'} - return jsonify(status=False, errors=[error]), 400 - try: - compose_type = uuid_status(api.config["COMPOSER_CFG"], compose_uuid)["compose_type"] - provider = resolve_provider(api.config["COMPOSER_CFG"]["upload"], provider_name) - if "supported_types" in provider and compose_type not in provider["supported_types"]: - raise RuntimeError( - f'Type "{compose_type}" is not supported by provider "{provider_name}"!' - ) - except Exception as e: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(e)}]), 400 - - try: - upload_id = uuid_schedule_upload( - api.config["COMPOSER_CFG"], - compose_uuid, - provider_name, - image_name, - settings - ) - except RuntimeError as e: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(e)}]), 400 - return jsonify(status=True, upload_id=upload_id)
    - -
    [docs]@v1_api.route("/upload/delete", defaults={"upload_uuid": ""}, methods=["DELETE"]) -@v1_api.route("/upload/delete/<upload_uuid>", methods=["DELETE"]) -@checkparams([("upload_uuid", "", "no upload UUID given")]) -def v1_compose_uploads_delete(upload_uuid): - """Delete an upload and disassociate it from its compose - - **DELETE /api/v1/upload/delete/<upload_uuid>** - - Example response:: - - { - "status": true, - "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb" - } - """ - if VALID_API_STRING.match(upload_uuid) is None: - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - try: - uuid_remove_upload(api.config["COMPOSER_CFG"], upload_uuid) - delete_upload(api.config["COMPOSER_CFG"]["upload"], upload_uuid) - except RuntimeError as error: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(error)}]) - return jsonify(status=True, upload_id=upload_uuid)
    - -
    [docs]@v1_api.route("/upload/info", defaults={"upload_uuid": ""}) -@v1_api.route("/upload/info/<upload_uuid>") -@checkparams([("upload_uuid", "", "no UUID given")]) -def v1_upload_info(upload_uuid): - """Returns information about a given upload - - **GET /api/v1/upload/info/<upload_uuid>** - - Example response:: - - { - "status": true, - "upload": { - "creation_time": 1565620940.069004, - "image_name": "My Image", - "image_path": "/var/lib/lorax/composer/results/b6218e8f-0fa2-48ec-9394-f5c2918544c4/disk.vhd", - "provider_name": "azure", - "settings": { - "resource_group": "SOMEBODY", - "storage_account_name": "ONCE", - "storage_container": "TOLD", - "location": "ME", - "subscription_id": "THE", - "client_id": "WORLD", - "secret": "IS", - "tenant": "GONNA" - }, - "status": "FAILED", - "uuid": "b637c411-9d9d-4279-b067-6c8d38e3b211" - } - } - """ - if VALID_API_STRING.match(upload_uuid) is None: - return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in API path"}]), 400 - - try: - upload = get_upload(api.config["COMPOSER_CFG"]["upload"], upload_uuid).summary() - except RuntimeError as error: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(error)}]) - return jsonify(status=True, upload=upload)
    - -
    [docs]@v1_api.route("/upload/log", defaults={"upload_uuid": ""}) -@v1_api.route("/upload/log/<upload_uuid>") -@checkparams([("upload_uuid", "", "no UUID given")]) -def v1_upload_log(upload_uuid): - """Returns an upload's log - - **GET /api/v1/upload/log/<upload_uuid>** - - Example response:: - - { - "status": true, - "upload_id": "b637c411-9d9d-4279-b067-6c8d38e3b211", - "log": "< PLAY [localhost] >..." - } - """ - if VALID_API_STRING.match(upload_uuid) is None: - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - try: - upload = get_upload(api.config["COMPOSER_CFG"]["upload"], upload_uuid) - except RuntimeError as error: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(error)}]) - return jsonify(status=True, upload_id=upload_uuid, log=upload.upload_log)
    - -
    [docs]@v1_api.route("/upload/reset", defaults={"upload_uuid": ""}, methods=["POST"]) -@v1_api.route("/upload/reset/<upload_uuid>", methods=["POST"]) -@checkparams([("upload_uuid", "", "no UUID given")]) -def v1_upload_reset(upload_uuid): - """Reset an upload so it can be attempted again - - **POST /api/v1/upload/reset/<upload_uuid>** - - Optionally pass in a new image name and/or new settings. - - Example request:: - - { - "image_name": "My renamed image", - "settings": { - "resource_group": "ROLL", - "storage_account_name": "ME", - "storage_container": "I", - "location": "AIN'T", - "subscription_id": "THE", - "client_id": "SHARPEST", - "secret": "TOOL", - "tenant": "IN" - } - } - - Example response:: - - { - "status": true, - "upload_id": "c75d5d62-9d26-42fc-a8ef-18bb14679fc7" - } - """ - if VALID_API_STRING.match(upload_uuid) is None: - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - parsed = request.get_json(cache=False) - image_name = parsed.get("image_name") if parsed else None - settings = parsed.get("settings") if parsed else None - - try: - reset_upload(api.config["COMPOSER_CFG"]["upload"], upload_uuid, image_name, settings) - except RuntimeError as error: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(error)}]) - return jsonify(status=True, upload_id=upload_uuid)
    - -
    [docs]@v1_api.route("/upload/cancel", defaults={"upload_uuid": ""}, methods=["DELETE"]) -@v1_api.route("/upload/cancel/<upload_uuid>", methods=["DELETE"]) -@checkparams([("upload_uuid", "", "no UUID given")]) -def v1_upload_cancel(upload_uuid): - """Cancel an upload that is either queued or in progress - - **DELETE /api/v1/upload/cancel/<upload_uuid>** - - Example response:: - - { - "status": true, - "upload_id": "037a3d56-b421-43e9-9935-c98350c89996" - } - """ - if VALID_API_STRING.match(upload_uuid) is None: - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - try: - cancel_upload(api.config["COMPOSER_CFG"]["upload"], upload_uuid) - except RuntimeError as error: - return jsonify(status=False, errors=[{"id": UPLOAD_ERROR, "msg": str(error)}]) - return jsonify(status=True, upload_id=upload_uuid)
    - -
    [docs]@v1_api.route("/upload/providers") -def v1_upload_providers(): - """Return the information about all upload providers, including their - display names, expected settings, and saved profiles. Refer to the - `resolve_provider` function. - - **GET /api/v1/upload/providers** - - Example response:: - - { - "providers": { - "azure": { - "display": "Azure", - "profiles": { - "default": { - "client_id": "example", - ... - } - }, - "settings-info": { - "client_id": { - "display": "Client ID", - "placeholder": "", - "regex": "", - "type": "string" - }, - ... - }, - "supported_types": ["vhd"] - }, - ... - } - } - """ - - ucfg = api.config["COMPOSER_CFG"]["upload"] - - provider_names = list_providers(ucfg) - - def get_provider_info(provider_name): - provider = resolve_provider(ucfg, provider_name) - provider["profiles"] = load_profiles(ucfg, provider_name) - return provider - - providers = {provider_name: get_provider_info(provider_name) - for provider_name in provider_names} - return jsonify(status=True, providers=providers)
    - -
    [docs]@v1_api.route("/upload/providers/save", methods=["POST"]) -def v1_providers_save(): - """Save provider settings as a profile for later use - - **POST /api/v1/upload/providers/save** - - Example request:: - - { - "provider": "azure", - "profile": "my-profile", - "settings": { - "resource_group": "SOMEBODY", - "storage_account_name": "ONCE", - "storage_container": "TOLD", - "location": "ME", - "subscription_id": "THE", - "client_id": "WORLD", - "secret": "IS", - "tenant": "GONNA" - } - } - - Saving to an existing profile will overwrite it. - - Example response:: - - { - "status": true - } - """ - parsed = request.get_json(cache=False) - - if parsed is None: - return jsonify(status=False, errors=[{"id": MISSING_POST, "msg": "Missing POST body"}]), 400 - - try: - provider_name = parsed["provider"] - profile = parsed["profile"] - settings = parsed["settings"] - except KeyError as e: - error = {"id": UPLOAD_ERROR, "msg": f'Missing parameter {str(e)}!'} - return jsonify(status=False, errors=[error]), 400 - try: - save_settings(api.config["COMPOSER_CFG"]["upload"], provider_name, profile, settings) - except Exception as e: - error = {"id": UPLOAD_ERROR, "msg": str(e)} - return jsonify(status=False, errors=[error]) - return jsonify(status=True)
    - -
    [docs]@v1_api.route("/upload/providers/delete", defaults={"provider_name": "", "profile": ""}, methods=["DELETE"]) -@v1_api.route("/upload/providers/delete/<provider_name>/<profile>", methods=["DELETE"]) -@checkparams([("provider_name", "", "no provider name given"), ("profile", "", "no profile given")]) -def v1_providers_delete(provider_name, profile): - """Delete a provider's profile settings - - **DELETE /api/v1/upload/providers/delete/<provider_name>/<profile>** - - Example response:: - - { - "status": true - } - """ - if None in (VALID_API_STRING.match(provider_name), VALID_API_STRING.match(profile)): - error = {"id": INVALID_CHARS, "msg": "Invalid characters in API path"} - return jsonify(status=False, errors=[error]), 400 - - try: - delete_profile(api.config["COMPOSER_CFG"]["upload"], provider_name, profile) - except Exception as e: - error = {"id": UPLOAD_ERROR, "msg": str(e)} - return jsonify(status=False, errors=[error]) - return jsonify(status=True)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/api/workspace.html b/docs/html/_modules/pylorax/api/workspace.html deleted file mode 100644 index 45a81757..00000000 --- a/docs/html/_modules/pylorax/api/workspace.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - pylorax.api.workspace — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -

    Source code for pylorax.api.workspace

    -#
    -# Copyright (C) 2017  Red Hat, Inc.
    -#
    -# This program is free software; you can redistribute it and/or modify
    -# it under the terms of the GNU General Public License as published by
    -# the Free Software Foundation; either version 2 of the License, or
    -# (at your option) any later version.
    -#
    -# This program is distributed in the hope that it will be useful,
    -# but WITHOUT ANY WARRANTY; without even the implied warranty of
    -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -# GNU General Public License for more details.
    -#
    -# You should have received a copy of the GNU General Public License
    -# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    -#
    -import os
    -
    -from pylorax.api.recipes import recipe_filename, recipe_from_toml, RecipeFileError
    -from pylorax.sysutils import joinpaths
    -
    -
    -
    [docs]def workspace_dir(repo, branch): - """Create the workspace's path from a Repository and branch - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :returns: The path to the branch's workspace directory - :rtype: str - - """ - repo_path = repo.get_location().get_path() - return joinpaths(repo_path, "workspace", branch)
    - - -
    [docs]def workspace_read(repo, branch, recipe_name): - """Read a Recipe from the branch's workspace - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: The name of the recipe - :type recipe_name: str - :returns: The workspace copy of the recipe, or None if it doesn't exist - :rtype: Recipe or None - :raises: RecipeFileError - """ - ws_dir = workspace_dir(repo, branch) - if not os.path.isdir(ws_dir): - os.makedirs(ws_dir) - filename = joinpaths(ws_dir, recipe_filename(recipe_name)) - if not os.path.exists(filename): - return None - try: - f = open(filename, 'rb') - recipe = recipe_from_toml(f.read().decode("UTF-8")) - except IOError: - raise RecipeFileError - return recipe
    - - -
    [docs]def workspace_write(repo, branch, recipe): - """Write a recipe to the workspace - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe: The recipe to write to the workspace - :type recipe: Recipe - :returns: None - :raises: IO related errors - """ - ws_dir = workspace_dir(repo, branch) - if not os.path.isdir(ws_dir): - os.makedirs(ws_dir) - filename = joinpaths(ws_dir, recipe.filename) - open(filename, 'wb').write(recipe.toml().encode("UTF-8"))
    - - -
    [docs]def workspace_filename(repo, branch, recipe_name): - """Return the path and filename of the workspace recipe - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: The name of the recipe - :type recipe_name: str - :returns: workspace recipe path and filename - :rtype: str - """ - ws_dir = workspace_dir(repo, branch) - return joinpaths(ws_dir, recipe_filename(recipe_name))
    - - -
    [docs]def workspace_exists(repo, branch, recipe_name): - """Return true of the workspace recipe exists - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: The name of the recipe - :type recipe_name: str - :returns: True if the file exists - :rtype: bool - """ - return os.path.exists(workspace_filename(repo, branch, recipe_name))
    - - -
    [docs]def workspace_delete(repo, branch, recipe_name): - """Delete the recipe from the workspace - - :param repo: Open repository - :type repo: Git.Repository - :param branch: Branch name - :type branch: str - :param recipe_name: The name of the recipe - :type recipe_name: str - :returns: None - :raises: IO related errors - """ - filename = workspace_filename(repo, branch, recipe_name) - if os.path.exists(filename): - os.unlink(filename)
    -
    - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_modules/pylorax/base.html b/docs/html/_modules/pylorax/base.html index 664607c6..9e846c70 100644 --- a/docs/html/_modules/pylorax/base.html +++ b/docs/html/_modules/pylorax/base.html @@ -1,38 +1,38 @@ - - + - + - + + + pylorax.base — Lorax 34.10 documentation + + + + + + - pylorax.base — Lorax 34.3 documentation - + - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -251,7 +259,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -250,7 +258,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -464,7 +467,7 @@ parser.add_argument("--project", default="Linux", help="substituted for @PROJECT@ in bootloader config files") - parser.add_argument("--releasever", default="32", + parser.add_argument("--releasever", default="34", help="substituted for @VERSION@ in bootloader config files") parser.add_argument("--volid", default=None, help="volume id") parser.add_argument("--squashfs-only", action="store_true", default=False, @@ -483,20 +486,25 @@
    - @@ -505,7 +513,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -307,7 +310,7 @@
      [docs]def make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, vcpus=1, arch=None, title="Linux", project="Linux", - releasever="32"): + releasever="34"): """ Generate an appliance description file @@ -321,7 +324,7 @@ :param str arch: CPU architecture. Default is 'x86_64' :param str title: Title, passed to template. Default is 'Linux' :param str project: Project, passed to template. Default is 'Linux' - :param str releasever: Release version, passed to template. Default is 32 + :param str releasever: Release version, passed to template. Default is 34 """ if not (disk_img and template and outfile): return None @@ -918,20 +921,25 @@
      -
    @@ -940,7 +948,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -214,7 +222,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -229,7 +237,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -183,7 +186,7 @@
      [docs]def get_dnf_base_object(installroot, sources, mirrorlists=None, repos=None, enablerepos=None, disablerepos=None, - tempdir="/var/tmp", proxy=None, releasever="32", + tempdir="/var/tmp", proxy=None, releasever="34", cachedir=None, logdir=None, sslverify=True, dnfplugins=None): """ Create a dnf Base object and setup the repositories and installroot @@ -349,20 +352,25 @@
      -
    @@ -371,7 +379,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -294,7 +302,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -177,9 +180,11 @@ # import os +import select import subprocess from subprocess import TimeoutExpired import signal +import time import logging log = logging.getLogger("pylorax") @@ -446,6 +451,7 @@ self._proc = proc self._argv = argv self._callback = callback + self._data = "" def __iter__(self): return self @@ -460,22 +466,43 @@ pass def __next__(self): - # Read the next line, blocking if a line is not yet available - line = self._proc.stdout.readline().decode("utf-8") - if line == '' or not self._callback(self._proc): - # Output finished, wait for the process to end - self._proc.communicate() + # Return lines from stdout while also calling _callback + while True: + # Check for input without blocking + if select.select([self._proc.stdout], [], [], 0)[0]: + size = len(self._proc.stdout.peek(1)) + if size > 0: + self._data += self._proc.stdout.read(size).decode("utf-8") - # Check for successful exit - if self._proc.returncode < 0: - raise OSError("process '%s' was killed by signal %s" % - (self._argv, -self._proc.returncode)) - elif self._proc.returncode > 0: - raise OSError("process '%s' exited with status %s" % - (self._argv, self._proc.returncode)) - raise StopIteration + if self._data.find("\n") >= 0: + line = self._data.split("\n", 1) + self._data = line[1] + return line[0] - return line.strip() + if self._proc.poll() is not None or not self._callback(self._proc): + # Output finished, wait 60s for the process to end + try: + self._proc.communicate(timeout=60) + except subprocess.TimeoutExpired: + # Did not exit in 60s, kill it and wait 30s more + self._proc.kill() + try: + self._proc.communicate(timeout=30) + except subprocess.TimeoutExpired: + pass + + if self._proc.returncode is None: + raise OSError("process '%s' failed to be killed" % self._argv) + elif self._proc.returncode < 0: + raise OSError("process '%s' was killed by signal %s" % + (self._argv, -self._proc.returncode)) + elif self._proc.returncode > 0: + raise OSError("process '%s' exited with status %s" % + (self._argv, self._proc.returncode)) + raise StopIteration + + # Don't loop too fast with no input to read + time.sleep(0.5) argv = [command] + argv @@ -511,20 +538,25 @@
    - @@ -533,7 +565,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -235,9 +238,20 @@ archive.stdin.write(os.path.basename(root).encode("utf-8") + b"\0") archive.stdin.close() - comp = Popen([compression] + compressargs, - stdin=archive.stdout, stdout=open(outfile, "wb")) - comp.wait() + with open(outfile, "wb") as fout: + comp = Popen([compression] + compressargs, + stdin=archive.stdout, stdout=fout) + comp.wait() + + # Clean up the open fds and processes + if find: + find.wait() + find.stdout.close() + archive.wait() + if archive.stdin: + archive.stdin.close() + if archive.stdout: + archive.stdout.close() return comp.returncode except OSError as e: logger.error(e) @@ -287,8 +301,8 @@
      [docs]def mksparse(outfile, size): '''use os.ftruncate to create a sparse file of the given size.''' - fobj = open(outfile, "w") - os.ftruncate(fobj.fileno(), size)
      + with open(outfile, "w") as fobj: + os.ftruncate(fobj.fileno(), size)
    [docs]def mkqcow2(outfile, size, options=None): '''use qemu-img to create a file of the given size. @@ -716,20 +730,25 @@
    - @@ -738,7 +757,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -449,7 +452,12 @@ """ for f in cancel_funcs: if f(): - proc.terminate() + # Anaconda runs from unshare, anaconda doesn't exit correctly so try to + # send TERM to all of them directly + import psutil + for p in psutil.Process(proc.pid).children(recursive=True): + p.terminate() + psutil.Process(proc.pid).terminate() return True return False
    @@ -473,7 +481,7 @@ # Make sure the process is really finished (it should be, since it was started from a subprocess call) # and then remove the pid file. if os.path.exists("/var/run/anaconda.pid"): - # lorax-composer runs anaconda using unshare so the pid is always 1 + # anaconda may be started using unshare so the pid is always 1 if open("/var/run/anaconda.pid").read().strip() == "1": os.unlink("/var/run/anaconda.pid") @@ -513,7 +521,7 @@ if os.path.isdir(path): shutil.rmtree(path) - args = ["--kickstart", opts.ks[0], "--cmdline", "--loglevel", "debug"] + args = ["--kickstart", opts.ks[0], "--cmdline"] if opts.anaconda_args: for arg in opts.anaconda_args: args += arg.split(" ", 1) @@ -556,14 +564,12 @@ cancel_funcs.append(cancel_func) # Make sure anaconda has the right product and release - # Preload libgomp.so.1 to workaround rhbz#1722181 log.info("Running anaconda.") try: - unshare_args = [ "--pid", "--kill-child", "--mount", "--propagation", "unchanged", "anaconda" ] + args + unshare_args = ["--pid", "--kill-child", "--mount", "--propagation", "unchanged", "anaconda"] + args for line in execReadlines("unshare", unshare_args, reset_lang=False, env_add={"ANACONDA_PRODUCTNAME": opts.project, - "ANACONDA_PRODUCTVERSION": opts.releasever, - "LD_PRELOAD": "libgomp.so.1"}, + "ANACONDA_PRODUCTVERSION": opts.releasever}, callback=lambda p: not novirt_cancel_check(cancel_funcs, p)): log.info(line) @@ -840,20 +846,25 @@ - @@ -862,7 +873,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -875,7 +878,7 @@ to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB* so that it will match anywhere in the path. - This only removes files from under /lib/modules/\*/kernel/ + This only removes files from under /lib/modules/\\*/kernel/ Examples: removekmod sound drivers/media drivers/hwmon drivers/video @@ -1046,20 +1049,25 @@
    - @@ -1068,7 +1076,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -204,7 +207,8 @@ "crashed on signal", "packaging: Missed: NoSuchPackage", "packaging: Installation failed", - "The following error occurred while installing. This is a fatal error" + "The following error occurred while installing. This is a fatal error", + "Error in POSTIN scriptlet in rpm package" ] re_tests = [ @@ -365,20 +369,25 @@
    - @@ -387,7 +396,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -288,7 +296,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Module code »
    • @@ -203,8 +206,8 @@
      [docs]def touch(fname): - # python closes the file when it goes out of scope - open(fname, "w").write("")
      + with open(fname, "w") as f: + f.write("")
    [docs]def replace(fname, find, sub): @@ -322,20 +325,25 @@
    - @@ -344,7 +352,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -607,7 +615,6 @@ - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    - @@ -247,7 +255,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    composer-cli

    -
    -
    Authors
    -

    Brian C. Lane <bcl@redhat.com>

    -
    -
    -

    composer-cli is an interactive tool for use with a WELDR API server, -managing blueprints, exploring available packages, and building new images. As -of Fedora 34, osbuild-composer <https://osbuild.org> is the recommended -server.

    -

    It requires the server to be installed on the local system, and the user -running it needs to be a member of the weldr group.

    -
    -

    composer-cli cmdline arguments

    -

    Lorax Composer commandline tool

    -

    -
    usage: composer-cli [-h] [-j] [-s SOCKET] [--log LOG] [-a APIVER] [--test TESTMODE] [-V] ...
    -
    -
    -
    -

    Positional Arguments

    -
    -
    args
    -
    -
    -
    -
    -

    Named Arguments

    -
    -
    -j, --json
    -

    Output the raw JSON response instead of the normal output.

    -

    Default: False

    -
    -
    -s, --socket
    -

    Path to the socket file to listen on

    -

    Default: "/run/weldr/api.socket"

    -
    -
    --log
    -

    Path to logfile (./composer-cli.log)

    -
    -
    -a, --api
    -

    API Version to use

    -

    Default: "1"

    -
    -
    --test
    -

    Pass test mode to compose. 1=Mock compose with fail. 2=Mock compose with finished.

    -

    Default: 0

    -
    -
    -V
    -

    show program's version number and exit

    -

    Default: False

    -
    -
    -
    -

    -
    compose start [--size XXXX] <BLUEPRINT> <TYPE> [<IMAGE-NAME> <PROVIDER> <PROFILE> | <IMAGE-NAME> <PROFILE.TOML>]

    Start a compose using the selected blueprint and output type. Optionally start an upload. ---size is supported by osbuild-composer, and is in MiB.

    -
    -
    compose start-ostree [--size XXXX] [--parent PARENT] [--ref REF] <BLUEPRINT> <TYPE> [<IMAGE-NAME> <PROFILE.TOML>]

    Start an ostree compose using the selected blueprint and output type. Optionally start an upload. This command -is only supported by osbuild-composer. --size is in MiB.

    -
    -
    compose types

    List the supported output types.

    -
    -
    compose status

    List the status of all running and finished composes.

    -
    -
    compose list [waiting|running|finished|failed]

    List basic information about composes.

    -
    -
    compose log <UUID> [<SIZE>]

    Show the last SIZE kB of the compose log.

    -
    -
    compose cancel <UUID>

    Cancel a running compose and delete any intermediate results.

    -
    -
    compose delete <UUID,...>

    Delete the listed compose results.

    -
    -
    compose info <UUID>

    Show detailed information on the compose.

    -
    -
    compose metadata <UUID>

    Download the metadata use to create the compose to <uuid>-metadata.tar

    -
    -
    compose logs <UUID>

    Download the compose logs to <uuid>-logs.tar

    -
    -
    compose results <UUID>

    Download all of the compose results; metadata, logs, and image to <uuid>.tar

    -
    -
    compose image <UUID>

    Download the output image from the compose. Filename depends on the type.

    -
    -
    blueprints list

    List the names of the available blueprints.

    -
    -
    blueprints show <BLUEPRINT,...>

    Display the blueprint in TOML format.

    -
    -
    blueprints changes <BLUEPRINT,...>

    Display the changes for each blueprint.

    -
    -
    blueprints diff <BLUEPRINT> <FROM-COMMIT> <TO-COMMIT>

    Display the differences between 2 versions of a blueprint. -FROM-COMMIT can be a commit hash or NEWEST -TO-COMMIT can be a commit hash, NEWEST, or WORKSPACE

    -
    -
    blueprints save <BLUEPRINT,...>

    Save the blueprint to a file, <BLUEPRINT>.toml

    -
    -
    blueprints delete <BLUEPRINT>

    Delete a blueprint from the server

    -
    -
    blueprints depsolve <BLUEPRINT,...>

    Display the packages needed to install the blueprint.

    -
    -
    blueprints push <BLUEPRINT>

    Push a blueprint TOML file to the server.

    -
    -
    blueprints freeze <BLUEPRINT,...>

    Display the frozen blueprint's modules and packages.

    -
    -
    blueprints freeze show <BLUEPRINT,...>

    Display the frozen blueprint in TOML format.

    -
    -
    blueprints freeze save <BLUEPRINT,...>

    Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.

    -
    -
    blueprints tag <BLUEPRINT>

    Tag the most recent blueprint commit as a release.

    -
    -
    blueprints undo <BLUEPRINT> <COMMIT>

    Undo changes to a blueprint by reverting to the selected commit.

    -
    -
    blueprints workspace <BLUEPRINT>

    Push the blueprint TOML to the temporary workspace storage.

    -
    -
    modules list

    List the available modules.

    -
    -
    projects list

    List the available projects.

    -
    -
    projects info <PROJECT,...>

    Show details about the listed projects.

    -
    -
    sources list

    List the available sources

    -
    -
    sources info <SOURCE-NAME,...>

    Details about the source.

    -
    -
    sources add <SOURCE.TOML>

    Add a package source to the server.

    -
    -
    sources change <SOURCE.TOML>

    Change an existing source

    -
    -
    sources delete <SOURCE-NAME>

    Delete a package source.

    -
    -
    -

    status show Show API server status.

    -
    -
    upload info <UPLOAD-UUID>

    Details about an upload

    -
    -
    upload start <BUILD-UUID> <IMAGE-NAME> [<PROVIDER> <PROFILE>|<PROFILE.TOML>]

    Upload a build image to the selected provider.

    -
    -
    upload log <UPLOAD-UUID>

    Show the upload log

    -
    -
    upload cancel <UPLOAD-UUID>

    Cancel an upload with that is queued or in progress

    -
    -
    upload delete <UPLOAD-UUID>

    Delete the upload and remove it from the build

    -
    -
    upload reset <UPLOAD-UUID>

    Reset the upload so that it can be tried again

    -
    -
    providers list <PROVIDER>

    List the available providers, or list the <provider's> available profiles

    -
    -
    providers show <PROVIDER> <PROFILE>

    show the details of a specific provider's profile

    -
    -
    providers push <PROFILE.TOML>

    Add a new profile, or overwrite an existing one

    -
    -
    providers save <PROVIDER> <PROFILE>

    Save the profile's details to a TOML file named <PROFILE>.toml

    -
    -
    providers delete <PROVIDER> <PROFILE>

    Delete a profile from a provider

    -
    -
    -

    -
    -
    -

    Edit a Blueprint

    -

    Start out by listing the available blueprints using composer-cli blueprints -list, pick one and save it to the local directory by running composer-cli -blueprints save http-server.

    -

    Edit the file (it will be saved with a .toml extension) and change the -description, add a package or module to it. Send it back to the server by -running composer-cli blueprints push http-server.toml. You can verify that it was -saved by viewing the changelog - composer-cli blueprints changes http-server.

    -

    See the Example Blueprint for an example.

    -
    -
    -

    Build an image

    -

    Build a qcow2 disk image from this blueprint by running composer-cli -compose start http-server qcow2. It will print a UUID that you can use to -keep track of the build. You can also cancel the build if needed.

    -

    The available types of images is displayed by composer-cli compose types. -Currently this consists of: alibaba, ami, ext4-filesystem, google, hyper-v, -live-iso, openstack, partitioned-disk, qcow2, tar, vhd, vmdk

    -

    You can optionally start an upload of the finished image, see Image Uploads for -more information.

    -
    -
    -

    Monitor the build status

    -

    Monitor it using composer-cli compose status, which will show the status of -all the builds on the system. You can view the end of the anaconda build logs -once it is in the RUNNING state using composer-cli compose log UUID -where UUID is the UUID returned by the start command.

    -

    Once the build is in the FINISHED state you can download the image.

    -
    -
    -

    Download the image

    -

    Downloading the final image is done with composer-cli compose image UUID and it will -save the qcow2 image as UUID-disk.qcow2 which you can then use to boot a VM like this:

    -
    qemu-kvm --name test-image -m 1024 -hda ./UUID-disk.qcow2
    -
    -
    -
    -
    -

    Image Uploads

    -

    composer-cli can upload the images to a number of services, including AWS, -OpenStack, and vSphere. The upload can be started when the build is finished, -by using composer-cli compose start ... or an existing image can be uploaded -with composer-cli upload start .... In order to access the service you need -to pass authentication details to composer-cli using a TOML file, or reference -a previously saved profile.

    -
    -

    Note

    -

    With osbuild-composer you can only specify upload targets during -the compose process.

    -
    -
    -
    -

    Providers

    -

    Providers are the services providers with Ansible playbook support under -/usr/share/lorax/lifted/providers/, you will need to gather some provider -specific information in order to authenticate with it. You can view the -required fields using composer-cli providers template <PROVIDER>, eg. for AWS -you would run:

    -
    composer-cli upload template aws
    -
    -
    -

    The output looks like this:

    -
    provider = "aws"
    -
    -[settings]
    -aws_access_key = "AWS Access Key"
    -aws_bucket = "AWS Bucket"
    -aws_region = "AWS Region"
    -aws_secret_key = "AWS Secret Key"
    -
    -
    -

    Save this into an aws-credentials.toml file and use it when running start.

    -
    -

    AWS

    -

    The access key and secret key can be created by going to the -IAM->Users->Security Credentials section and creating a new access key. The -secret key will only be shown when it is first created so make sure to record -it in a secure place. The region should be the region that you want to use the -AMI in, and the bucket can be an existing bucket, or a new one, following the -normal AWS bucket naming rules. It will be created if it doesn't already exist.

    -

    When uploading the image it is first uploaded to the s3 bucket, and then -converted to an AMI. If the conversion is successful the s3 object will be -deleted. If it fails, re-trying after correcting the problem will re-use the -object if you have not deleted it in the meantime, speeding up the process.

    -
    -
    -
    -

    Profiles

    -

    Profiles store the authentication settings associated with a specific provider. -Providers can have multiple profiles, as long as their names are unique. For -example, you may have one profile for testing and another for production -uploads.

    -

    Profiles are created by pushing the provider settings template to the server using -composer-cli providers push <PROFILE.TOML> where PROFILE.TOML is the same as the -provider template, but with the addition of a profile field. For example, an AWS -profile named test-uploads would look like this:

    -
    provider = "aws"
    -profile = "test-uploads"
    -
    -[settings]
    -aws_access_key = "AWS Access Key"
    -aws_bucket = "AWS Bucket"
    -aws_region = "AWS Region"
    -aws_secret_key = "AWS Secret Key"
    -
    -
    -

    You can view the profile by using composer-cli providers aws test-uploads.

    -
    -
    -

    Build an image and upload results

    -

    If you have a profile named test-uploads:

    -
    composer-cli compose start example-http-server ami "http image" aws test-uploads
    -
    -
    -

    Or if you have the settings stored in a TOML file:

    -
    composer-cli compose start example-http-server ami "http image" aws-settings.toml
    -
    -
    -

    It will return the UUID of the image build, and the UUID of the upload. Once -the build has finished successfully it will start the upload process, which you -can monitor with composer-cli upload info <UPLOAD-UUID>

    -

    You can also view the upload logs from the Ansible playbook with:

    -
    ``composer-cli upload log <UPLOAD-UUID>``
    -
    -
    -

    The type of the image must match the type supported by the provider.

    -
    -
    -

    Upload an existing image

    -

    You can upload previously built images, as long as they are in the FINISHED state, using composer-cli upload start ...`. If you have a profile named test-uploads:

    -
    composer-cli upload start <UUID> "http-image" aws test-uploads
    -
    -
    -

    Or if you have the settings stored in a TOML file:

    -
    composer-cli upload start <UUID> "http-image" aws-settings.toml
    -
    -
    -

    This will output the UUID of the upload, which can then be used to monitor the status in the same way -described above.

    -
    -
    -

    Debugging

    -

    There are a couple of arguments that can be helpful when debugging problems. -These are only meant for debugging and should not be used to script access to -the API. If you need to do that you can communicate with it directly in the -language of your choice.

    -

    --json will return the server's response as a nicely formatted json output -instead of printing what the command would usually print.

    -

    --test=1 will cause a compose start to start creating an image, and then -end with a failed state.

    -

    --test=2 will cause a compose to start and then end with a finished state, -without actually composing anything.

    -
    -
    -

    Blueprint Reference

    -

    Blueprints are simple text files in TOML format that describe -which packages, and what versions, to install into the image. They can also define a limited set -of customizations to make to the final image.

    -

    A basic blueprint looks like this:

    -
    name = "base"
    -description = "A base system with bash"
    -version = "0.0.1"
    -
    -[[packages]]
    -name = "bash"
    -version = "4.4.*"
    -
    -
    -

    The name field is the name of the blueprint. It can contain spaces, but they will be converted to - -when it is written to disk. It should be short and descriptive.

    -

    description can be a longer description of the blueprint, it is only used for display purposes.

    -

    version is a semver compatible version number. If -a new blueprint is uploaded with the same version the server will -automatically bump the PATCH level of the version. If the version -doesn't match it will be used as is. eg. Uploading a blueprint with version -set to 0.1.0 when the existing blueprint version is 0.0.1 will -result in the new blueprint being stored as version 0.1.0.

    -
    -

    [[packages]] and [[modules]]

    -

    These entries describe the package names and matching version glob to be installed into the image.

    -

    The names must match the names exactly, and the versions can be an exact match -or a filesystem-like glob of the version using * wildcards and ? -character matching.

    -
    -

    Note

    -

    Currently there are no differences between packages and modules -in osbuild-composer. Both are treated like an rpm package dependency.

    -
    -

    For example, to install tmux-2.9a and openssh-server-8.*, you would add -this to your blueprint:

    -
    [[packages]]
    -name = "tmux"
    -version = "2.9a"
    -
    -[[packages]]
    -name = "openssh-server"
    -version = "8.*"
    -
    -
    -
    -
    -

    [[groups]]

    -

    The groups entries describe a group of packages to be installed into the image. Package groups are -defined in the repository metadata. Each group has a descriptive name used primarily for display -in user interfaces and an ID more commonly used in kickstart files. Here, the ID is the expected -way of listing a group.

    -

    Groups have three different ways of categorizing their packages: mandatory, default, and optional. -For purposes of blueprints, mandatory and default packages will be installed. There is no mechanism -for selecting optional packages.

    -

    For example, if you want to install the anaconda-tools group you would add this to your -blueprint:

    -
    [[groups]]
    -name="anaconda-tools"
    -
    -
    -

    groups is a TOML list, so each group needs to be listed separately, like packages but with -no version number.

    -
    -
    -

    Customizations

    -

    The [customizations] section can be used to configure the hostname of the final image. eg.:

    -
    [customizations]
    -hostname = "baseimage"
    -
    -
    -

    This is optional and may be left out to use the defaults.

    -
    -

    [customizations.kernel]

    -

    This allows you to append arguments to the bootloader's kernel commandline. This will not have any -effect on tar or ext4-filesystem images since they do not include a bootloader.

    -

    For example:

    -
    [customizations.kernel]
    -append = "nosmt=force"
    -
    -
    -
    -
    -

    [[customizations.sshkey]]

    -

    Set an existing user's ssh key in the final image:

    -
    [[customizations.sshkey]]
    -user = "root"
    -key = "PUBLIC SSH KEY"
    -
    -
    -

    The key will be added to the user's authorized_keys file.

    -
    -

    Warning

    -

    key expects the entire content of ~/.ssh/id_rsa.pub

    -
    -
    -
    -

    [[customizations.user]]

    -

    Add a user to the image, and/or set their ssh key. -All fields for this section are optional except for the name, here is a complete example:

    -
    [[customizations.user]]
    -name = "admin"
    -description = "Administrator account"
    -password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..."
    -key = "PUBLIC SSH KEY"
    -home = "/srv/widget/"
    -shell = "/usr/bin/bash"
    -groups = ["widget", "users", "wheel"]
    -uid = 1200
    -gid = 1200
    -
    -
    -

    If the password starts with $6$, $5$, or $2b$ it will be stored as -an encrypted password. Otherwise it will be treated as a plain text password.

    -
    -

    Warning

    -

    key expects the entire content of ~/.ssh/id_rsa.pub

    -
    -
    -
    -

    [[customizations.group]]

    -

    Add a group to the image. name is required and gid is optional:

    -
    [[customizations.group]]
    -name = "widget"
    -gid = 1130
    -
    -
    -
    -
    -

    [customizations.timezone]

    -

    Customizing the timezone and the NTP servers to use for the system:

    -
    [customizations.timezone]
    -timezone = "US/Eastern"
    -ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]
    -
    -
    -

    The values supported by timezone can be listed by running timedatectl list-timezones.

    -

    If no timezone is setup the system will default to using UTC. The ntp servers are also -optional and will default to using the distribution defaults which are fine for most uses.

    -

    In some image types there are already NTP servers setup, eg. Google cloud image, and they -cannot be overridden because they are required to boot in the selected environment. But the -timezone will be updated to the one selected in the blueprint.

    -
    -
    -

    [customizations.locale]

    -

    Customize the locale settings for the system:

    -
    [customizations.locale]
    -languages = ["en_US.UTF-8"]
    -keyboard = "us"
    -
    -
    -

    The values supported by languages can be listed by running localectl list-locales from -the command line.

    -

    The values supported by keyboard can be listed by running localectl list-keymaps from -the command line.

    -

    Multiple languages can be added. The first one becomes the -primary, and the others are added as secondary. One or the other of languages -or keyboard must be included (or both) in the section.

    -
    -
    -

    [customizations.firewall]

    -

    By default the firewall blocks all access except for services that enable their ports explicitly, -like sshd. This command can be used to open other ports or services. Ports are configured using -the port:protocol format:

    -
    [customizations.firewall]
    -ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp"]
    -
    -
    -

    Numeric ports, or their names from /etc/services can be used in the ports enabled/disabled lists.

    -

    The blueprint settings extend any existing settings in the image templates, so if sshd is -already enabled it will extend the list of ports with the ones listed by the blueprint.

    -

    If the distribution uses firewalld you can specify services listed by firewall-cmd --get-services -in a customizations.firewall.services section:

    -
    [customizations.firewall.services]
    -enabled = ["ftp", "ntp", "dhcp"]
    -disabled = ["telnet"]
    -
    -
    -

    Remember that the firewall.services are different from the names in /etc/services.

    -

    Both are optional, if they are not used leave them out or set them to an empty list []. If you -only want the default firewall setup this section can be omitted from the blueprint.

    -

    NOTE: The Google and OpenStack templates explicitly disable the firewall for their environment. -This cannot be overridden by the blueprint.

    -
    -
    -

    [customizations.services]

    -

    This section can be used to control which services are enabled at boot time. -Some image types already have services enabled or disabled in order for the -image to work correctly, and cannot be overridden. eg. ami requires -sshd, chronyd, and cloud-init. Without them the image will not -boot. Blueprint services are added to, not replacing, the list already in the -templates, if any.

    -

    The service names are systemd service units. You may specify any systemd unit -file accepted by systemctl enable eg. cockpit.socket:

    -
    [customizations.services]
    -enabled = ["sshd", "cockpit.socket", "httpd"]
    -disabled = ["postfix", "telnetd"]
    -
    -
    -
    -
    [[repos.git]]
    -
    -

    Note

    -

    Currently osbuild-composer does not support repos.git

    -
    -

    The [[repos.git]] entries are used to add files from a git repository -repository to the created image. The repository is cloned, the specified ref is checked out -and an rpm is created to install the files to a destination path. The rpm includes a summary -with the details of the repository and reference used to create it. The rpm is also included in the -image build metadata.

    -

    To create an rpm named server-config-1.0-1.noarch.rpm you would add this to your blueprint:

    -
    [[repos.git]]
    -rpmname="server-config"
    -rpmversion="1.0"
    -rpmrelease="1"
    -summary="Setup files for server deployment"
    -repo="PATH OF GIT REPO TO CLONE"
    -ref="v1.0"
    -destination="/opt/server/"
    -
    -
    -
      -
    • rpmname: Name of the rpm to create, also used as the prefix name in the tar archive

    • -
    • rpmversion: Version of the rpm, eg. "1.0.0"

    • -
    • rpmrelease: Release of the rpm, eg. "1"

    • -
    • summary: Summary string for the rpm

    • -
    • repo: URL of the get repo to clone and create the archive from

    • -
    • ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash

    • -
    • destination: Path to install the / of the git repo at when installing the rpm

    • -
    -

    An rpm will be created with the contents of the git repository referenced, with the files -being installed under /opt/server/ in this case.

    -

    ref can be any valid git reference for use with git archive. eg. to use the head -of a branch set it to origin/branch-name, a tag name, or a commit hash.

    -

    Note that the repository is cloned in full each time a build is started, so pointing to a -repository with a large amount of history may take a while to clone and use a significant -amount of disk space. The clone is temporary and is removed once the rpm is created.

    -
    -
    -
    -
    -
    -

    Example Blueprint

    -

    This example blueprint will install the tmux, git, and vim-enhanced -packages. It will set the root ssh key, add the widget and admin -users as well as a students group:

    -
    name = "example-custom-base"
    -description = "A base system with customizations"
    -version = "0.0.1"
    -
    -[[packages]]
    -name = "tmux"
    -version = "*"
    -
    -[[packages]]
    -name = "git"
    -version = "*"
    -
    -[[packages]]
    -name = "vim-enhanced"
    -version = "*"
    -
    -[customizations]
    -hostname = "custombase"
    -
    -[[customizations.sshkey]]
    -user = "root"
    -key = "A SSH KEY FOR ROOT"
    -
    -[[customizations.user]]
    -name = "widget"
    -description = "Widget process user account"
    -home = "/srv/widget/"
    -shell = "/usr/bin/false"
    -groups = ["dialout", "users"]
    -
    -[[customizations.user]]
    -name = "admin"
    -description = "Widget admin account"
    -password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31LeOUleVK/R/aeWVHVZDi26zAH.o0ywBKH9Tc0/wm7sW/q39uyd1"
    -home = "/srv/widget/"
    -shell = "/usr/bin/bash"
    -groups = ["widget", "users", "students"]
    -uid = 1200
    -
    -[[customizations.user]]
    -name = "plain"
    -password = "simple plain password"
    -
    -[[customizations.user]]
    -name = "bart"
    -key = "SSH KEY FOR BART"
    -groups = ["students"]
    -
    -[[customizations.group]]
    -name = "widget"
    -
    -[[customizations.group]]
    -name = "students"
    -
    -
    -
    -
    - - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/composer.cli.html b/docs/html/composer.cli.html deleted file mode 100644 index aa542a7f..00000000 --- a/docs/html/composer.cli.html +++ /dev/null @@ -1,1503 +0,0 @@ - - - - - - - - - - - composer.cli package — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    composer.cli package

    -
    -

    Submodules

    -
    -
    -

    composer.cli.blueprints module

    -
    -
    -composer.cli.blueprints.blueprints_changes(socket_path, api_version, args, show_json=False)[source]
    -

    Display the changes for each of the blueprints

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints changes <blueprint,...> Display the changes for each blueprint.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_cmd(opts)[source]
    -

    Process blueprints commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -

    This dispatches the blueprints commands to a function

    -
    - -
    -
    -composer.cli.blueprints.blueprints_delete(socket_path, api_version, args, show_json=False)[source]
    -

    Delete a blueprint from the server

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    delete <blueprint> Delete a blueprint from the server

    -
    - -
    -
    -composer.cli.blueprints.blueprints_depsolve(socket_path, api_version, args, show_json=False)[source]
    -

    Display the packages needed to install the blueprint

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints depsolve <blueprint,...> Display the packages needed to install the blueprint.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_diff(socket_path, api_version, args, show_json=False)[source]
    -

    Display the differences between 2 versions of a blueprint

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -
    -
    blueprints diff <blueprint-name> Display the differences between 2 versions of a blueprint.

    <from-commit> Commit hash or NEWEST -<to-commit> Commit hash, NEWEST, or WORKSPACE

    -
    -
    -
    - -
    -
    -composer.cli.blueprints.blueprints_freeze(socket_path, api_version, args, show_json=False)[source]
    -

    Handle the blueprints freeze commands

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints freeze <blueprint,...> Display the frozen blueprint's modules and packages. -blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format. -blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_freeze_save(socket_path, api_version, args, show_json=False)[source]
    -

    Save the frozen blueprint to a TOML file

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_freeze_show(socket_path, api_version, args, show_json=False)[source]
    -

    Show the frozen blueprint in TOML format

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_list(socket_path, api_version, args, show_json=False)[source]
    -

    Output the list of available blueprints

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints list

    -
    - -
    -
    -composer.cli.blueprints.blueprints_push(socket_path, api_version, args, show_json=False)[source]
    -

    Push a blueprint TOML file to the server, updating the blueprint

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    push <blueprint> Push a blueprint TOML file to the server.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_save(socket_path, api_version, args, show_json=False)[source]
    -

    Save the blueprint to a TOML file

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints save <blueprint,...> Save the blueprint to a file, <blueprint-name>.toml

    -
    - -
    -
    -composer.cli.blueprints.blueprints_show(socket_path, api_version, args, show_json=False)[source]
    -

    Show the blueprints, in TOML format

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints show <blueprint,...> Display the blueprint in TOML format.

    -

    Multiple blueprints will be separated by

    -
    - -
    -
    -composer.cli.blueprints.blueprints_tag(socket_path, api_version, args, show_json=False)[source]
    -

    Tag the most recent blueprint commit as a release

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints tag <blueprint> Tag the most recent blueprint commit as a release.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_undo(socket_path, api_version, args, show_json=False)[source]
    -

    Undo changes to a blueprint

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints undo <blueprint> <commit> Undo changes to a blueprint by reverting to the selected commit.

    -
    - -
    -
    -composer.cli.blueprints.blueprints_workspace(socket_path, api_version, args, show_json=False)[source]
    -

    Push the blueprint TOML to the temporary workspace storage

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    blueprints workspace <blueprint> Push the blueprint TOML to the temporary workspace storage.

    -
    - -
    -
    -composer.cli.blueprints.dict_names(lst)[source]
    -

    Return comma-separated list of the dict's name/user fields

    -
    -
    Parameters
    -

    d (dict) -- key/values

    -
    -
    Returns
    -

    String of the dict's keys and values

    -
    -
    Return type
    -

    str

    -
    -
    -

    root, norm

    -
    - -
    -
    -composer.cli.blueprints.prettyCommitDetails(change, indent=4)[source]
    -

    Print the blueprint's change in a nice way

    -
    -
    Parameters
    -
      -
    • change (dict) -- The individual blueprint change dict

    • -
    • indent (int) -- Number of spaces to indent

    • -
    -
    -
    -
    - -
    -
    -composer.cli.blueprints.pretty_dict(d)[source]
    -

    Return the dict as a human readable single line

    -
    -
    Parameters
    -

    d (dict) -- key/values

    -
    -
    Returns
    -

    String of the dict's keys and values

    -
    -
    Return type
    -

    str

    -
    -
    -

    key="str", key="str1,str2", ...

    -
    - -
    -
    -composer.cli.blueprints.pretty_diff_entry(diff)[source]
    -

    Generate nice diff entry string.

    -
    -
    Parameters
    -

    diff (dict) -- Difference entry dict

    -
    -
    Returns
    -

    Nice string

    -
    -
    -
    - -
    -
    -

    composer.cli.cmdline module

    -
    -
    -composer.cli.cmdline.composer_cli_parser()[source]
    -

    Return the ArgumentParser for composer-cli

    -
    - -
    -
    -

    composer.cli.compose module

    -
    -
    -composer.cli.compose.compose_cancel(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Cancel a running compose

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose cancel <uuid>

    -

    This will cancel a running compose. It does nothing if the compose has finished.

    -
    - -
    -
    -composer.cli.compose.compose_cmd(opts)[source]
    -

    Process compose commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -

    This dispatches the compose commands to a function

    -

    compose_cmd expects api to be passed. eg.

    -
    -

    {"version": 1, "backend": "lorax-composer"}

    -
    -
    - -
    -
    -composer.cli.compose.compose_delete(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Delete a finished compose's results

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose delete <uuid,...>

    -

    Delete the listed compose results. It will only delete results for composes that have finished -or failed, not a running compose.

    -
    - -
    -
    -composer.cli.compose.compose_image(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Download the compose's output image

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose image <uuid>

    -

    This downloads only the result image, saving it as the image name, which depends on the type -of compose that was selected.

    -
    - -
    -
    -composer.cli.compose.compose_info(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Return detailed information about the compose

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose info <uuid>

    -

    This returns information about the compose, including the blueprint and the dependencies.

    -
    - -
    -
    -composer.cli.compose.compose_list(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Return a simple list of compose identifiers

    -
    - -
    -
    -composer.cli.compose.compose_log(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Show the last part of the compose log

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose log <uuid> [<size>kB]

    -

    This will display the last 1kB of the compose's log file. Can be used to follow progress -during the build.

    -
    - -
    -
    -composer.cli.compose.compose_logs(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Download a tar of the compose's logs

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose logs <uuid>

    -

    Saves the logs as uuid-logs.tar

    -
    - -
    -
    -composer.cli.compose.compose_metadata(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Download a tar file of the compose's metadata

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose metadata <uuid>

    -

    Saves the metadata as uuid-metadata.tar

    -
    - -
    -
    -composer.cli.compose.compose_ostree(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Start a new ostree compose using the selected blueprint and type

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.

    • -
    • api (dict) -- Details about the API server, "version" and "backend"

    • -
    -
    -
    -

    compose start-ostree [--size XXXX] [--parent PARENT] [--ref REF] <BLUEPRINT> <TYPE> [<IMAGE-NAME> <PROFILE.TOML>]

    -
    - -
    -
    -composer.cli.compose.compose_results(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Download a tar file of the compose's results

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    compose results <uuid>

    -

    The results includes the metadata, output image, and logs. -It is saved as uuid.tar

    -
    - -
    -
    -composer.cli.compose.compose_start(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Start a new compose using the selected blueprint and type

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.

    • -
    • api (dict) -- Details about the API server, "version" and "backend"

    • -
    -
    -
    -

    compose start [--size XXX] <blueprint-name> <compose-type> [<image-name> <provider> <profile> | <image-name> <profile.toml>]

    -
    - -
    -
    -composer.cli.compose.compose_status(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Return the status of all known composes

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    This doesn't map directly to an API command, it combines the results from queue, finished, -and failed so raw JSON output is not available.

    -
    - -
    -
    -composer.cli.compose.compose_types(socket_path, api_version, args, show_json=False, testmode=0, api=None)[source]
    -

    Return information about the supported compose types

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    Add additional details to types that are known to composer-cli. Raw JSON output does not -include this extra information.

    -
    - -
    -
    -composer.cli.compose.get_parent(args)[source]
    -

    Return optional --parent argument, and remaining args

    -
    -
    Parameters
    -

    args (list of strings) -- list of arguments

    -
    -
    Returns
    -

    (args, parent)

    -
    -
    Return type
    -

    tuple

    -
    -
    -
    - -
    -
    -composer.cli.compose.get_ref(args)[source]
    -

    Return optional --ref argument, and remaining args

    -
    -
    Parameters
    -

    args (list of strings) -- list of arguments

    -
    -
    Returns
    -

    (args, parent)

    -
    -
    Return type
    -

    tuple

    -
    -
    -
    - -
    -
    -composer.cli.compose.get_size(args)[source]
    -

    Return optional --size argument, and remaining args

    -
    -
    Parameters
    -

    args (list of strings) -- list of arguments

    -
    -
    Returns
    -

    (args, size)

    -
    -
    Return type
    -

    tuple

    -
    -
    -
      -
    • check size argument for int

    • -
    • check other args for --size in wrong place

    • -
    • raise error? Or just return 0?

    • -
    • no size returns 0 in size

    • -
    • multiply by 1024**2 to make it easier on users to specify large sizes

    • -
    -
    - -
    -
    -

    composer.cli.help module

    -
    -
    -

    composer.cli.modules module

    -
    -
    -composer.cli.modules.modules_cmd(opts)[source]
    -

    Process modules commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -
    - -
    -
    -

    composer.cli.projects module

    -
    -
    -composer.cli.projects.projects_cmd(opts)[source]
    -

    Process projects commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -
    - -
    -
    -composer.cli.projects.projects_info(socket_path, api_version, args, show_json=False)[source]
    -

    Output info on a list of projects

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    projects info <project,...>

    -
    - -
    -
    -composer.cli.projects.projects_list(socket_path, api_version, args, show_json=False)[source]
    -

    Output the list of available projects

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    projects list

    -
    - -
    -
    -

    composer.cli.providers module

    -
    -
    -composer.cli.providers.providers_cmd(opts)[source]
    -

    Process providers commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -

    This dispatches the providers commands to a function

    -
    - -
    -
    -composer.cli.providers.providers_delete(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Delete a profile from a provider

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers delete <provider> <profile>

    -
    - -
    -
    -composer.cli.providers.providers_info(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Show information about each provider

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers info <PROVIDER>

    -
    - -
    -
    -composer.cli.providers.providers_list(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return the list of providers

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers list

    -
    - -
    -
    -composer.cli.providers.providers_push(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Add a new provider profile or overwrite an existing one

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers push <profile.toml>

    -
    - -
    -
    -composer.cli.providers.providers_save(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Save a provider's profile to a TOML file

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers save <provider> <profile>

    -
    - -
    -
    -composer.cli.providers.providers_show(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return details about a provider

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers show <provider> <profile>

    -
    - -
    -
    -composer.cli.providers.providers_template(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return a TOML template for setting the provider's fields

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    providers template <provider>

    -
    - -
    -
    -

    composer.cli.sources module

    -
    -
    -composer.cli.sources.sources_add(socket_path, api_version, args, show_json=False)[source]
    -

    Add or change a source

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    sources add <source.toml>

    -
    - -
    -
    -composer.cli.sources.sources_cmd(opts)[source]
    -

    Process sources commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -
    - -
    -
    -composer.cli.sources.sources_delete(socket_path, api_version, args, show_json=False)[source]
    -

    Delete a source

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    sources delete <source-name>

    -
    - -
    -
    -composer.cli.sources.sources_info(socket_path, api_version, args, show_json=False)[source]
    -

    Output info on a list of projects

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    sources info <source-name>

    -
    - -
    -
    -composer.cli.sources.sources_list(socket_path, api_version, args, show_json=False)[source]
    -

    Output the list of available sources

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    -
    -
    -

    sources list

    -
    - -
    -
    -

    composer.cli.status module

    -
    -
    -composer.cli.status.status_cmd(opts)[source]
    -

    Process status commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -
    - -
    -
    -

    composer.cli.upload module

    -
    -
    -composer.cli.upload.upload_cancel(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Cancel the queued or running upload

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload cancel <build-uuid>

    -
    - -
    -
    -composer.cli.upload.upload_cmd(opts)[source]
    -

    Process upload commands

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    Returns
    -

    Value to return from sys.exit()

    -
    -
    Return type
    -

    int

    -
    -
    -

    This dispatches the upload commands to a function

    -
    - -
    -
    -composer.cli.upload.upload_delete(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Delete an upload and remove it from the build

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload delete <build-uuid>

    -
    - -
    -
    -composer.cli.upload.upload_info(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return detailed information about the upload

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload info <uuid>

    -

    This returns information about the upload, including uuid, name, status, service, and image.

    -
    - -
    -
    -composer.cli.upload.upload_list(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return the composes and their associated upload uuids and status

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload list

    -
    - -
    -
    -composer.cli.upload.upload_log(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Return the upload log

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload log <build-uuid>

    -
    - -
    -
    -composer.cli.upload.upload_reset(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Reset the upload and execute it again

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload reset <build-uuid>

    -
    - -
    -
    -composer.cli.upload.upload_start(socket_path, api_version, args, show_json=False, testmode=0)[source]
    -

    Start upload up a build uuid image

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • api_version (str) -- Version of the API to talk to. eg. "0"

    • -
    • args (list of str) -- List of remaining arguments from the cmdline

    • -
    • show_json (bool) -- Set to True to show the JSON output instead of the human readable output

    • -
    • testmode (int) -- unused in this function

    • -
    -
    -
    -

    upload start <build-uuid> <image-name> [<provider> <profile> | <profile.toml>]

    -
    - -
    -
    -

    composer.cli.utilities module

    -
    -
    -composer.cli.utilities.argify(args)[source]
    -

    Take a list of human args and return a list with each item

    -
    -
    Parameters
    -

    args (list of str) -- list of strings with possible commas and spaces

    -
    -
    Returns
    -

    List of all the items

    -
    -
    Return type
    -

    list of str

    -
    -
    -

    Examples:

    -

    ["one,two", "three", ",four", ",five,"] returns ["one", "two", "three", "four", "five"]

    -
    - -
    -
    -composer.cli.utilities.frozen_toml_filename(blueprint_name)[source]
    -

    Convert a blueprint name into a filename.toml

    -
    -
    Parameters
    -

    blueprint_name (str) -- The blueprint's name

    -
    -
    Returns
    -

    The blueprint name with ' ' converted to - and .toml appended

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.cli.utilities.get_arg(args, name, argtype=None)[source]
    -

    Return optional value from args, and remaining args

    -
    -
    Parameters
    -
      -
    • args (list of strings) -- list of arguments

    • -
    • name (string) -- The argument to remove from the args list

    • -
    • argtype (type) -- Type to use for checking the argument value

    • -
    -
    -
    Returns
    -

    (args, value)

    -
    -
    Return type
    -

    tuple

    -
    -
    -

    This removes the optional argument and value from the argument list, returns the new list, -and the value of the argument.

    -
    - -
    -
    -composer.cli.utilities.handle_api_result(result, show_json=False)[source]
    -

    Log any errors, return the correct value

    -
    -
    Parameters
    -

    result (dict) -- JSON result from the http query

    -
    -
    Return type
    -

    tuple

    -
    -
    Returns
    -

    (rc, should_exit_now)

    -
    -
    -

    Return the correct rc for the program (0 or 1), and whether or -not to continue processing the results.

    -
    - -
    -
    -composer.cli.utilities.packageNEVRA(pkg)[source]
    -

    Return the package info as a NEVRA

    -
    -
    Parameters
    -

    pkg (dict) -- The package details

    -
    -
    Returns
    -

    name-[epoch:]version-release-arch

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.cli.utilities.toml_filename(blueprint_name)[source]
    -

    Convert a blueprint name into a filename.toml

    -
    -
    Parameters
    -

    blueprint_name (str) -- The blueprint's name

    -
    -
    Returns
    -

    The blueprint name with ' ' converted to - and .toml appended

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -

    Module contents

    -
    -
    -composer.cli.main(opts)[source]
    -

    Main program execution

    -
    -
    Parameters
    -

    opts (argparse.Namespace) -- Cmdline arguments

    -
    -
    -
    - -
    -
    - - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/composer.html b/docs/html/composer.html deleted file mode 100644 index 7499cbfe..00000000 --- a/docs/html/composer.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - composer package — Lorax 34.3 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    -
    -
    - -
    -

    composer package

    - -
    -

    Submodules

    -
    -
    -

    composer.http_client module

    -
    -
    -composer.http_client.api_url(api_version, url)[source]
    -

    Return the versioned path to the API route

    -
    -
    Parameters
    -
      -
    • api_version (str) -- The version of the API to talk to. eg. "0"

    • -
    • url (str) -- The API route to talk to

    • -
    -
    -
    Returns
    -

    The full url to use for the route and API version

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.http_client.append_query(url, query)[source]
    -

    Add a query argument to a URL

    -

    The query should be of the form "param1=what&param2=ever", i.e., no -leading '?'. The new query data will be appended to any existing -query string.

    -
    -
    Parameters
    -
      -
    • url (str) -- The original URL

    • -
    • query (str) -- The query to append

    • -
    -
    -
    Returns
    -

    The new URL with the query argument included

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.http_client.delete_url_json(socket_path, url)[source]
    -

    Send a DELETE request to the url and return JSON response

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to send DELETE to

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -composer.http_client.download_file(socket_path, url, progress=True)[source]
    -

    Download a file, saving it to the CWD with the included filename

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to send POST to

    • -
    -
    -
    -
    - -
    -
    -composer.http_client.get_filename(headers)[source]
    -

    Get the filename from the response header

    -
    -
    Parameters
    -

    response (Response) -- The urllib3 response object

    -
    -
    Raises
    -

    RuntimeError if it cannot find a filename in the header

    -
    -
    Returns
    -

    Filename from content-disposition header

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.http_client.get_url_json(socket_path, url)[source]
    -

    Return the JSON results of a GET request

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to request

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -composer.http_client.get_url_json_unlimited(socket_path, url, total_fn=None)[source]
    -

    Return the JSON results of a GET request

    -

    For URLs that use offset/limit arguments, this command will -fetch all results for the given request.

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to request

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -composer.http_client.get_url_raw(socket_path, url)[source]
    -

    Return the raw results of a GET request

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to request

    • -
    -
    -
    Returns
    -

    The raw response from the server

    -
    -
    Return type
    -

    str

    -
    -
    -
    - -
    -
    -composer.http_client.post_url(socket_path, url, body)[source]
    -

    POST raw data to the URL

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to send POST to

    • -
    • body (str) -- The data for the body of the POST

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -composer.http_client.post_url_json(socket_path, url, body)[source]
    -

    POST some JSON data to the URL

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to send POST to

    • -
    • body (str) -- The data for the body of the POST

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -composer.http_client.post_url_toml(socket_path, url, body)[source]
    -

    POST a TOML string to the URL

    -
    -
    Parameters
    -
      -
    • socket_path (str) -- Path to the Unix socket to use for API communication

    • -
    • url (str) -- URL to send POST to

    • -
    • body (str) -- The data for the body of the POST

    • -
    -
    -
    Returns
    -

    The json response from the server

    -
    -
    Return type
    -

    dict

    -
    -
    -
    - -
    -
    -

    composer.unix_socket module

    -
    -
    -class composer.unix_socket.UnixHTTPConnection(socket_path, timeout=300)[source]
    -

    Bases: http.client.HTTPConnection, object

    -
    -
    -connect()[source]
    -

    Connect to the host and port specified in __init__.

    -
    - -
    - -
    -
    -class composer.unix_socket.UnixHTTPConnectionPool(socket_path, timeout=300)[source]
    -

    Bases: urllib3.connectionpool.HTTPConnectionPool

    -
    - -
    -
    -

    Module contents

    -
    -
    - - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/genindex.html b/docs/html/genindex.html index 56c0b078..6fb07adc 100644 --- a/docs/html/genindex.html +++ b/docs/html/genindex.html @@ -1,38 +1,38 @@ - - + - + - + + + Index — Lorax 34.10 documentation + + + + + + - Index — Lorax 34.3 documentation - + - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -130,18 +131,20 @@ + +
    - + + - @@ -559,8 +365,6 @@ @@ -679,8 +483,6 @@

    M

    -
  1. composer-cli
  2. -
  3. Blueprint Reference
  4. -
  5. Example Blueprint
  6. mkksiso
  7. Product and Updates Images
  8. src
  9. @@ -136,6 +134,7 @@ + @@ -170,18 +169,20 @@ + +
      -
    • Docs »
    • +
    • »
    • livemedia-creator
    • - + View page source @@ -229,20 +230,25 @@ you have the anaconda-tui package installed.

      usage: livemedia-creator [-h]
                                (--make-iso | --make-disk | --make-fsimage | --make-appliance | --make-ami | --make-tar | --make-tar-disk | --make-pxe-live | --make-ostree-live | --make-oci | --make-vagrant)
      -                         [--iso ISO] [--iso-only] [--iso-name ISO_NAME] [--ks KS] [--image-only] [--no-virt]
      -                         [--proxy PROXY] [--anaconda-arg ANACONDA_ARGS] [--armplatform ARMPLATFORM]
      -                         [--location LOCATION] [--logfile LOGFILE] [--lorax-templates LORAX_TEMPLATES] [--tmp TMP]
      -                         [--resultdir RESULT_DIR] [--macboot] [--nomacboot] [--extra-boot-args EXTRA_BOOT_ARGS]
      -                         [--disk-image DISK_IMAGE] [--keep-image] [--fs-image FS_IMAGE] [--image-name IMAGE_NAME]
      -                         [--tar-disk-name TAR_DISK_NAME] [--fs-label FS_LABEL] [--image-size-align IMAGE_SIZE_ALIGN]
      -                         [--image-type IMAGE_TYPE] [--qemu-arg QEMU_ARGS] [--qcow2] [--qcow2-arg QEMU_ARGS]
      -                         [--compression COMPRESSION] [--compress-arg COMPRESS_ARGS] [--app-name APP_NAME]
      -                         [--app-template APP_TEMPLATE] [--app-file APP_FILE] [--ram MEMORY] [--vcpus VCPUS]
      -                         [--vnc VNC] [--arch ARCH] [--kernel-args KERNEL_ARGS] [--ovmf-path OVMF_PATH] [--virt-uefi]
      -                         [--no-kvm] [--with-rng WITH_RNG] [--dracut-conf DRACUT_CONF] [--dracut-arg DRACUT_ARGS]
      -                         [--live-rootfs-size LIVE_ROOTFS_SIZE] [--live-rootfs-keep-size] [--oci-config OCI_CONFIG]
      -                         [--oci-runtime OCI_RUNTIME] [--vagrant-metadata VAGRANT_METADATA]
      -                         [--vagrantfile VAGRANTFILE] [--project PROJECT] [--releasever RELEASEVER] [--volid VOLID]
      +                         [--iso ISO] [--iso-only] [--iso-name ISO_NAME] [--ks KS] [--image-only]
      +                         [--no-virt] [--proxy PROXY] [--anaconda-arg ANACONDA_ARGS]
      +                         [--armplatform ARMPLATFORM] [--location LOCATION] [--logfile LOGFILE]
      +                         [--lorax-templates LORAX_TEMPLATES] [--tmp TMP] [--resultdir RESULT_DIR]
      +                         [--macboot] [--nomacboot] [--extra-boot-args EXTRA_BOOT_ARGS]
      +                         [--disk-image DISK_IMAGE] [--keep-image] [--fs-image FS_IMAGE]
      +                         [--image-name IMAGE_NAME] [--tar-disk-name TAR_DISK_NAME]
      +                         [--fs-label FS_LABEL] [--image-size-align IMAGE_SIZE_ALIGN]
      +                         [--image-type IMAGE_TYPE] [--qemu-arg QEMU_ARGS] [--qcow2]
      +                         [--qcow2-arg QEMU_ARGS] [--compression COMPRESSION]
      +                         [--compress-arg COMPRESS_ARGS] [--app-name APP_NAME]
      +                         [--app-template APP_TEMPLATE] [--app-file APP_FILE] [--ram MEMORY]
      +                         [--vcpus VCPUS] [--vnc VNC] [--arch ARCH] [--kernel-args KERNEL_ARGS]
      +                         [--ovmf-path OVMF_PATH] [--virt-uefi] [--no-kvm] [--with-rng WITH_RNG]
      +                         [--dracut-conf DRACUT_CONF] [--dracut-arg DRACUT_ARGS]
      +                         [--live-rootfs-size LIVE_ROOTFS_SIZE] [--live-rootfs-keep-size]
      +                         [--oci-config OCI_CONFIG] [--oci-runtime OCI_RUNTIME]
      +                         [--vagrant-metadata VAGRANT_METADATA] [--vagrantfile VAGRANTFILE]
      +                         [--project PROJECT] [--releasever RELEASEVER] [--volid VOLID]
                                [--squashfs-only] [--timeout TIMEOUT] [-V]
       
      @@ -358,7 +364,7 @@ you have the anaconda-tui package installed.

      --releasever

      substituted for @VERSION@ in bootloader config files

      -

      Default: "32"

      +

      Default: "34"

      --volid

      volume id

      @@ -1056,29 +1062,29 @@ report bugs against the lorax component.

    - @@ -1087,7 +1093,6 @@ report bugs against the lorax component.

    - - - - - - @@ -58,7 +58,7 @@
    - 34.3 + 34.10
    @@ -75,6 +75,7 @@ + + @@ -132,18 +131,20 @@ + +
    - @@ -192,7 +198,6 @@ can still use compo - - - - - - @@ -60,7 +60,7 @@
    - 34.3 + 34.10
    @@ -77,6 +77,7 @@ + + @@ -160,18 +159,20 @@ + +
      -
    • Docs »
    • +
    • »
    • Lorax
    • - + View page source @@ -205,15 +206,15 @@ repositories.

      lorax cmdline arguments

      Create the Anaconda boot.iso

      -
      usage: lorax [-h] -p PRODUCT -v VERSION -r RELEASE [-s REPOSITORY] [--repo REPOSITORY] [-m REPOSITORY] [-t VARIANT]
      -             [-b URL] [--isfinal] [-c CONFIGFILE] [--proxy HOST] [-i PACKAGE] [-e PACKAGE] [--buildarch ARCH]
      -             [--volid VOLID] [--macboot] [--nomacboot] [--noupgrade] [--logfile LOGFILE] [--tmp TMP]
      -             [--cachedir CACHEDIR] [--workdir WORKDIR] [--force] [--add-template ADD_TEMPLATES]
      -             [--add-template-var ADD_TEMPLATE_VARS] [--add-arch-template ADD_ARCH_TEMPLATES]
      -             [--add-arch-template-var ADD_ARCH_TEMPLATE_VARS] [--noverify] [--sharedir SHAREDIR]
      -             [--enablerepo [repo]] [--disablerepo [repo]] [--rootfs-size ROOTFS_SIZE] [--noverifyssl]
      -             [--dnfplugin DNFPLUGINS] [--squashfs-only] [--skip-branding] [--dracut-conf DRACUT_CONF]
      -             [--dracut-arg DRACUT_ARGS] [-V]
      +
      usage: lorax [-h] -p PRODUCT -v VERSION -r RELEASE [-s REPOSITORY] [--repo REPOSITORY] [-m REPOSITORY]
      +             [-t VARIANT] [-b URL] [--isfinal] [-c CONFIGFILE] [--proxy HOST] [-i PACKAGE] [-e PACKAGE]
      +             [--buildarch ARCH] [--volid VOLID] [--macboot] [--nomacboot] [--noupgrade]
      +             [--logfile LOGFILE] [--tmp TMP] [--cachedir CACHEDIR] [--workdir WORKDIR] [--force]
      +             [--add-template ADD_TEMPLATES] [--add-template-var ADD_TEMPLATE_VARS]
      +             [--add-arch-template ADD_ARCH_TEMPLATES] [--add-arch-template-var ADD_ARCH_TEMPLATE_VARS]
      +             [--noverify] [--sharedir SHAREDIR] [--enablerepo [repo]] [--disablerepo [repo]]
      +             [--rootfs-size ROOTFS_SIZE] [--noverifyssl] [--dnfplugin DNFPLUGINS] [--squashfs-only]
      +             [--skip-branding] [--dracut-conf DRACUT_CONF] [--dracut-arg DRACUT_ARGS] [-V]
                    OUTPUTDIR
       
      @@ -535,29 +536,29 @@ should) select the specific template directory by passing - - - - - - + +
      -

      - © Copyright 2018, Red Hat, Inc. + © Copyright 2018, Red Hat, Inc..

      - Built with Sphinx using a theme provided by Read the Docs. + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. -
    @@ -566,7 +567,6 @@ should) select the specific template directory by passing jQuery(function () { SphinxRtdTheme.Navigation.enable(true); diff --git a/docs/html/mkksiso.html b/docs/html/mkksiso.html index 95f9ad33..646d180e 100644 --- a/docs/html/mkksiso.html +++ b/docs/html/mkksiso.html @@ -1,42 +1,42 @@ - - + - + - + + + mkksiso — Lorax 34.10 documentation + + + + + + - mkksiso — Lorax 34.3 documentation - + - - - - - - - + @@ -60,7 +60,7 @@
    - 34.3 + 34.10
    @@ -77,6 +77,7 @@ + + @@ -145,18 +144,20 @@ + +
    - @@ -341,7 +342,6 @@ will pass.

    - - - - - - - + @@ -60,7 +60,7 @@
    - 34.3 + 34.10
    @@ -77,6 +77,7 @@ + + @@ -136,18 +136,20 @@ + +
    @@ -254,7 +230,6 @@ - - - - - - @@ -60,7 +60,7 @@
    - 34.3 + 34.10
    @@ -77,6 +77,7 @@ + + @@ -134,18 +133,20 @@ + +
    -

    - © Copyright 2018, Red Hat, Inc. + © Copyright 2018, Red Hat, Inc..

    - Built with Sphinx using a theme provided by Read the Docs. + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. - @@ -219,7 +220,6 @@ command or the installpkgs paramater of jQuery(function () { SphinxRtdTheme.Navigation.enable(true); diff --git a/docs/html/py-modindex.html b/docs/html/py-modindex.html index a9e50993..8906623e 100644 --- a/docs/html/py-modindex.html +++ b/docs/html/py-modindex.html @@ -1,38 +1,38 @@ - - + - + - + + + Python Module Index — Lorax 34.10 documentation + + + + + + - Python Module Index — Lorax 34.3 documentation - + - - - - - - @@ -61,7 +61,7 @@
    - 34.3 + 34.10
    @@ -78,6 +78,7 @@ +
    + @@ -133,11 +134,13 @@ + +
      -
    • Docs »
    • +
    • »
    • Python Module Index
    • @@ -158,185 +161,105 @@

      Python Module Index

      - c | p
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + id="toggle-1" style="display: none" alt="-" /> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
       
      - c
      - composer -
          - composer.cli -
          - composer.cli.blueprints -
          - composer.cli.cmdline -
          - composer.cli.compose -
          - composer.cli.help -
          - composer.cli.modules -
          - composer.cli.projects -
          - composer.cli.providers -
          - composer.cli.sources -
          - composer.cli.status -
          - composer.cli.upload -
          - composer.cli.utilities -
          - composer.http_client -
          - composer.unix_socket -
       
      p
      pylorax
          pylorax.base
          pylorax.buildstamp
          pylorax.cmdline
          pylorax.creator
          pylorax.decorators
          pylorax.discinfo
          pylorax.dnfbase
          pylorax.dnfhelper
          pylorax.executils
          pylorax.imgutils
          pylorax.installer
          pylorax.ltmpl
          pylorax.monitor
          pylorax.mount
          pylorax.output
          pylorax.sysutils
          pylorax.treebuilder
          pylorax.treeinfo @@ -348,20 +271,25 @@ - @@ -370,7 +298,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
      - - - -
      - - - - - -
      - -
      - - - - - - - - - - - - - - - - - -
      - - - - -
      -
      -
      -
      - -
      -

      pylorax.api package

      -
      -

      Submodules

      -
      -
      -

      pylorax.api.bisect module

      -
      -
      -pylorax.api.bisect.insort_left(a, x, key=None, lo=0, hi=None)[source]
      -

      Insert item x in list a, and keep it sorted assuming a is sorted.

      -
      -
      Parameters
      -
        -
      • a (list) -- sorted list

      • -
      • x (object) -- item to insert into the list

      • -
      • key (function) -- Function to use to compare items in the list

      • -
      -
      -
      Returns
      -

      index where the item was inserted

      -
      -
      Return type
      -

      int

      -
      -
      -

      If x is already in a, insert it to the left of the leftmost x. -Optional args lo (default 0) and hi (default len(a)) bound the -slice of a to be searched.

      -

      This is a modified version of bisect.insort_left that can use a -function for the compare, and returns the index position where it -was inserted.

      -
      - -
      -
      -

      pylorax.api.checkparams module

      -
      -
      -pylorax.api.checkparams.checkparams(tuples)[source]
      -
      - -
      -
      -

      pylorax.api.cmdline module

      -
      -
      -pylorax.api.cmdline.lorax_composer_parser()[source]
      -

      Return the ArgumentParser for lorax-composer

      -
      - -
      -
      -

      pylorax.api.compose module

      -

      Setup for composing an image

      -
      -

      Adding New Output Types

      -

      The new output type must add a kickstart template to ./share/composer/ where the -name of the kickstart (without the trailing .ks) matches the entry in compose_args.

      -

      The kickstart should not have any url or repo entries, these will be added at build -time. The %packages section should be the last thing, and while it can contain mandatory -packages required by the output type, it should not have the trailing %end because the -package NEVRAs will be appended to it at build time.

      -

      compose_args should have a name matching the kickstart, and it should set the novirt_install -parameters needed to generate the desired output. Other types should be set to False.

      -
      -
      -pylorax.api.compose.add_customizations(f, recipe)[source]
      -

      Add customizations to the kickstart file

      -
      -
      Parameters
      -
        -
      • f (open file object) -- kickstart file object

      • -
      • recipe (Recipe object) --

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      RuntimeError if there was a problem writing to the kickstart

      -
      -
      -
      - -
      -
      -pylorax.api.compose.bootloader_append(line, kernel_append)[source]
      -

      Insert the kernel_append string into the --append argument

      -
      -
      Parameters
      -
        -
      • line (str) -- The bootloader ... line

      • -
      • kernel_append (str) -- The arguments to append to the --append section

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.compose_args(compose_type)[source]
      -

      Returns the settings to pass to novirt_install for the compose type

      -
      -
      Parameters
      -

      compose_type (str) -- The type of compose to create, from compose_types()

      -
      -
      -

      This will return a dict of options that match the ArgumentParser options for livemedia-creator. -These are the ones the define the type of output, it's filename, etc. -Other options will be filled in by make_compose()

      -
      - -
      -
      -pylorax.api.compose.compose_types(share_dir)[source]
      -

      Returns a list of tuples of the supported output types, and their state

      -

      The output types come from the kickstart names in /usr/share/lorax/composer/*ks

      -

      If they are disabled on the current arch their state is False. If enabled, it is True. -eg. [("alibaba", False), ("ext4-filesystem", True), ...]

      -
      - -
      -
      -pylorax.api.compose.customize_ks_template(ks_template, recipe)[source]
      -

      Customize the kickstart template and return it

      -
      -
      Parameters
      -
        -
      • ks_template (str) -- The kickstart template

      • -
      • recipe (Recipe object) --

      • -
      -
      -
      -

      Apply customizations to existing template commands, or add defaults for ones that are -missing and required.

      -

      Apply customizations.kernel.append to the bootloader argument in the template. -Add bootloader line if it is missing.

      -

      Add default timezone if needed. It does NOT replace an existing timezone entry

      -
      - -
      -
      -pylorax.api.compose.firewall_cmd(line, settings)[source]
      -

      Update the firewall line with the new ports and services

      -
      -
      Parameters
      -
        -
      • line (str) -- The firewall ... line

      • -
      • settings (dict) -- A dict with the list of services and ports to enable and disable

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.get_default_services(recipe)[source]
      -

      Get the default string for services, based on recipe -:param recipe: The recipe

      -
      -
      Returns
      -

      string with "services" or ""

      -
      -
      Return type
      -

      str

      -
      -
      -

      When no services have been selected we don't need to add anything to the kickstart -so return an empty string. Otherwise return "services" which will be updated with -the settings.

      -
      - -
      -
      -pylorax.api.compose.get_extra_pkgs(dbo, share_dir, compose_type)[source]
      -

      Return extra packages needed for the output type

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • share_dir (str) -- Path to the top level share directory

      • -
      • compose_type (str) -- The type of output to create from the recipe

      • -
      -
      -
      Returns
      -

      List of package names (name only, not NEVRA)

      -
      -
      Return type
      -

      list

      -
      -
      -

      Currently this is only needed by live-iso, it reads ./live/live-install.tmpl and -processes only the installpkg lines. It lists the packages needed to complete creation of the -iso using the templates such as x86.tmpl

      -

      Keep in mind that the live-install.tmpl is shared between livemedia-creator and lorax-composer, -even though the results are applied differently.

      -
      - -
      -
      -pylorax.api.compose.get_firewall_settings(recipe)[source]
      -

      Return the customizations.firewall settings

      -
      -
      Parameters
      -

      recipe (Recipe object) -- The recipe

      -
      -
      Returns
      -

      A dict of settings

      -
      -
      Return type
      -

      dict

      -
      -
      -
      - -
      -
      -pylorax.api.compose.get_kernel_append(recipe)[source]
      -

      Return the customizations.kernel append value

      -
      -
      Parameters
      -

      recipe (Recipe object) --

      -
      -
      Returns
      -

      append value or empty string

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.compose.get_keyboard_layout(recipe)[source]
      -

      Return the customizations.locale.keyboard list

      -
      -
      Parameters
      -

      recipe (Recipe object) -- The recipe

      -
      -
      Returns
      -

      The keyboard layout string

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.compose.get_languages(recipe)[source]
      -

      Return the customizations.locale.languages list

      -
      -
      Parameters
      -

      recipe (Recipe object) -- The recipe

      -
      -
      Returns
      -

      list of language strings

      -
      -
      Return type
      -

      list

      -
      -
      -
      - -
      -
      -pylorax.api.compose.get_services(recipe)[source]
      -

      Return the customizations.services settings

      -
      -
      Parameters
      -

      recipe (Recipe object) -- The recipe

      -
      -
      Returns
      -

      A dict of settings

      -
      -
      Return type
      -

      dict

      -
      -
      -
      - -
      -
      -pylorax.api.compose.get_timezone_settings(recipe)[source]
      -

      Return the customizations.timezone dict

      -
      -
      Parameters
      -

      recipe (Recipe object) --

      -
      -
      Returns
      -

      append value or empty string

      -
      -
      Return type
      -

      dict

      -
      -
      -
      - -
      -
      -pylorax.api.compose.keyboard_cmd(line, layout)[source]
      -

      Update the keyboard line with the layout

      -
      -
      Parameters
      -
        -
      • line (str) -- The keyboard ... line

      • -
      • settings (str) -- The keyboard layout

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.lang_cmd(line, languages)[source]
      -

      Update the lang line with the languages

      -
      -
      Parameters
      -
        -
      • line (str) -- The lang ... line

      • -
      • settings (list) -- The list of languages

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.move_compose_results(cfg, results_dir)[source]
      -

      Move the final image to the results_dir and cleanup the unneeded compose files

      -
      -
      Parameters
      -
        -
      • cfg (DataHolder) -- Build configuration

      • -
      • results_dir (str) -- Directory to put the results into

      • -
      -
      -
      -
      - -
      -
      -pylorax.api.compose.repo_to_ks(r, url='url')[source]
      -

      Return a kickstart line with the correct args. -:param r: DNF repository information -:type r: dnf.Repo -:param url: "url" or "baseurl" to use for the baseurl parameter -:type url: str -:returns: kickstart command arguments for url/repo command -:rtype: str

      -

      Set url to "baseurl" if it is a repo, leave it as "url" for the installation url.

      -
      - -
      -
      -pylorax.api.compose.services_cmd(line, settings)[source]
      -

      Update the services line with additional services to enable/disable

      -
      -
      Parameters
      -
        -
      • line (str) -- The services ... line

      • -
      • settings (dict) -- A dict with the list of services to enable and disable

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.start_build(cfg, dnflock, gitlock, branch, recipe_name, compose_type, test_mode=0)[source]
      -

      Start the build

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration object

      • -
      • dnflock (YumLock) -- Lock and YumBase for depsolving

      • -
      • recipe (str) -- The recipe to build

      • -
      • compose_type (str) -- The type of output to create from the recipe

      • -
      -
      -
      Returns
      -

      Unique ID for the build that can be used to track its status

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.compose.test_templates(dbo, share_dir)[source]
      -

      Try depsolving each of the the templates and report any errors

      -
      -
      Parameters
      -

      dbo (dnf.Base) -- dnf base object

      -
      -
      Returns
      -

      List of template types and errors

      -
      -
      Return type
      -

      List of errors

      -
      -
      -

      Return a list of templates and errors encountered or an empty list

      -
      - -
      -
      -pylorax.api.compose.timezone_cmd(line, settings)[source]
      -

      Update the timezone line with the settings

      -
      -
      Parameters
      -
        -
      • line (str) -- The timezone ... line

      • -
      • settings (dict) -- A dict with timezone and/or ntpservers list

      • -
      -
      -
      -

      Using pykickstart to process the line is the best way to make sure it -is parsed correctly, and re-assembled for inclusion into the final kickstart

      -
      - -
      -
      -pylorax.api.compose.write_ks_group(f, group)[source]
      -

      Write kickstart group entry

      -
      -
      Parameters
      -
        -
      • f (open file object) -- kickstart file object

      • -
      • group -- A blueprint group dictionary

      • -
      -
      -
      -

      gid is optional

      -
      - -
      -
      -pylorax.api.compose.write_ks_root(f, user)[source]
      -

      Write kickstart root password and sshkey entry

      -
      -
      Parameters
      -
        -
      • f (open file object) -- kickstart file object

      • -
      • user (dict) -- A blueprint user dictionary

      • -
      -
      -
      Returns
      -

      True if it wrote a rootpw command to the kickstart

      -
      -
      Return type
      -

      bool

      -
      -
      -

      If the entry contains a ssh key, use sshkey to write it -If it contains password, use rootpw to set it

      -

      root cannot be used with the user command. So only key and password are supported -for root.

      -
      - -
      -
      -pylorax.api.compose.write_ks_user(f, user)[source]
      -

      Write kickstart user and sshkey entry

      -
      -
      Parameters
      -
        -
      • f (open file object) -- kickstart file object

      • -
      • user (dict) -- A blueprint user dictionary

      • -
      -
      -
      -

      If the entry contains a ssh key, use sshkey to write it -All of the user fields are optional, except name, write out a kickstart user entry -with whatever options are relevant.

      -
      - -
      -
      -
      -

      pylorax.api.config module

      -
      -
      -class pylorax.api.config.ComposerConfig(defaults=None, dict_type=<class 'dict'>, allow_no_value=False, *, delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section='DEFAULT', interpolation=<object object>, converters=<object object>)[source]
      -

      Bases: configparser.ConfigParser

      -
      -
      -get_default(section, option, default)[source]
      -
      - -
      - -
      -
      -pylorax.api.config.configure(conf_file='/etc/lorax/composer.conf', root_dir='/', test_config=False)[source]
      -

      lorax-composer configuration

      -
      -
      Parameters
      -
        -
      • conf_file (str) -- Path to the config file overriding the default settings

      • -
      • root_dir (str) -- Directory to prepend to paths, defaults to /

      • -
      • test_config (bool) -- Set to True to skip reading conf_file

      • -
      -
      -
      Returns
      -

      Configuration

      -
      -
      Return type
      -

      ComposerConfig

      -
      -
      -
      - -
      -
      -pylorax.api.config.make_dnf_dirs(conf, uid, gid)[source]
      -

      Make any missing dnf directories owned by user:group

      -
      -
      Parameters
      -
        -
      • conf (ComposerConfig) -- The configuration to use

      • -
      • uid (int) -- uid of owner

      • -
      • gid (int) -- gid of owner

      • -
      -
      -
      Returns
      -

      list of errors

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -pylorax.api.config.make_owned_dir(p_dir, uid, gid)[source]
      -

      Make a directory and its parents, setting owner and group

      -
      -
      Parameters
      -
        -
      • p_dir (string) -- path to directory to create

      • -
      • uid (int) -- uid of owner

      • -
      • gid (int) -- gid of owner

      • -
      -
      -
      Returns
      -

      list of errors

      -
      -
      Return type
      -

      list of str

      -
      -
      -

      Check to make sure it does not have o+rw permissions and that it is owned by uid:gid

      -
      - -
      -
      -pylorax.api.config.make_queue_dirs(conf, gid)[source]
      -

      Make any missing queue directories

      -
      -
      Parameters
      -
        -
      • conf (ComposerConfig) -- The configuration to use

      • -
      • gid (int) -- Group ID that has access to the queue directories

      • -
      -
      -
      Returns
      -

      list of errors

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -

      pylorax.api.dnfbase module

      -
      -
      -class pylorax.api.dnfbase.DNFLock(conf, expire_secs=21600)[source]
      -

      Bases: object

      -

      Hold the dnf.Base object and a Lock to control access to it.

      -

      self.dbo is a property that returns the dnf.Base object, but it may change -from one call to the next if the upstream repositories have changed.

      -
      -
      -property lock
      -

      Check for repo updates (using expiration time) and return the lock

      -

      If the repository has been updated, tear down the old dnf.Base and -create a new one. This is the only way to force dnf to use the new -metadata.

      -
      - -
      -
      -property lock_check
      -

      Force a check for repo updates and return the lock

      -

      Use this method sparingly, it removes the repodata and downloads a new copy every time.

      -
      - -
      - -
      -
      -pylorax.api.dnfbase.get_base_object(conf)[source]
      -

      Get the DNF object with settings from the config file

      -
      -
      Parameters
      -

      conf (ComposerParser) -- configuration object

      -
      -
      Returns
      -

      A DNF Base object

      -
      -
      Return type
      -

      dnf.Base

      -
      -
      -
      - -
      -
      -

      pylorax.api.errors module

      -
      -
      -

      pylorax.api.flask_blueprint module

      -

      Flask Blueprints that support skipping routes

      -

      When using Blueprints for API versioning you will usually want to fall back -to the previous version's rules for routes that have no new behavior. To do -this we add a 'skip_rule' list to the Blueprint's options dictionary. It lists -all of the routes that you do not want to register.

      -
      -
      For example:

      from pylorax.api.v0 import v0 -from pylorax.api.v1 import v1

      -

      server.register_blueprint(v0, url_prefix="/api/v0/") -server.register_blueprint(v0, url_prefix="/api/v1/", skip_rules=["/blueprints/list"] -server.register_blueprint(v1, url_prefix="/api/v1/")

      -
      -
      -

      This will register all of v0's routes under /api/v0, and all but /blueprints/list under /api/v1, -and then register v1's version of /blueprints/list under /api/v1

      -
      -
      -class pylorax.api.flask_blueprint.BlueprintSetupStateSkip(blueprint, app, options, first_registration, skip_rules)[source]
      -

      Bases: flask.blueprints.BlueprintSetupState

      -
      -
      -add_url_rule(rule, endpoint=None, view_func=None, **options)[source]
      -

      A helper method to register a rule (and optionally a view function) -to the application. The endpoint is automatically prefixed with the -blueprint's name.

      -
      - -
      - -
      -
      -class pylorax.api.flask_blueprint.BlueprintSkip(*args, **kwargs)[source]
      -

      Bases: flask.blueprints.Blueprint

      -
      -
      -make_setup_state(app, options, first_registration=False)[source]
      -

      Creates an instance of BlueprintSetupState() -object that is later passed to the register callback functions. -Subclasses can override this to return a subclass of the setup state.

      -
      - -
      - -
      -
      -

      pylorax.api.gitrpm module

      -

      Clone a git repository and package it as an rpm

      -

      This module contains functions for cloning a git repo, creating a tar archive of -the selected commit, branch, or tag, and packaging the files into an rpm that will -be installed by anaconda when creating the image.

      -
      -
      -class pylorax.api.gitrpm.GitArchiveTarball(gitRepo)[source]
      -

      Bases: object

      -

      Create a git archive of the selected git repo and reference

      -
      -
      -write_file(sourcesDir)[source]
      -

      Create the tar archive

      -
      -
      Parameters
      -

      sourcesDir (str) -- Path to use for creating the archive

      -
      -
      -

      This clones the git repository and creates a git archive from the specified reference. -The result is in RPMNAME.tar.xz under the sourcesDir

      -
      - -
      - -
      -
      -class pylorax.api.gitrpm.GitRpmBuild(*args, **kwargs)[source]
      -

      Bases: rpmfluff.rpmbuild.SimpleRpmBuild

      -

      Build an rpm containing files from a git repository

      -
      -
      -add_git_tarball(gitRepo)[source]
      -

      Add a tar archive of a git repository to the rpm

      -
      -
      Parameters
      -

      gitRepo (dict) -- A dict with the repository details

      -
      -
      -

      This populates the rpm with the URL of the git repository, the summary -describing the repo, the description of the repository and reference used, -and sets up the rpm to install the archive contents into the destination -path.

      -
      - -
      -
      -check()[source]
      -
      - -
      -
      -clean()[source]
      -

      Remove the base directory from inside the tmpdir

      -
      - -
      -
      -cleanup_tmpdir()[source]
      -

      Remove the temporary directory and all of its contents

      -
      - -
      -
      -get_base_dir()[source]
      -

      Place all the files under a temporary directory + rpmbuild/

      -
      - -
      - -
      -
      -pylorax.api.gitrpm.create_gitrpm_repo(results_dir, recipe)[source]
      -

      Create a dnf repository with the rpms from the recipe

      -
      -
      Parameters
      -
        -
      • results_dir (str) -- Path to create the repository under

      • -
      • recipe (Recipe) -- The recipe to get the repos.git entries from

      • -
      -
      -
      Returns
      -

      Path to the dnf repository or ""

      -
      -
      Return type
      -

      str

      -
      -
      -

      This function creates a dnf repository directory at results_dir+"repo/", -creates rpms for all of the repos.git entries in the recipe, runs createrepo_c -on the dnf repository so that Anaconda can use it, and returns the path to the -repository to the caller.

      -
      - -
      -
      -pylorax.api.gitrpm.get_repo_description(gitRepo)[source]
      -

      Return a description including the git repo and reference

      -
      -
      Parameters
      -

      gitRepo (dict) -- A dict with the repository details

      -
      -
      Returns
      -

      A string with the git repo url and reference

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.gitrpm.make_git_rpm(gitRepo, dest)[source]
      -

      Create an rpm from the specified git repo

      -
      -
      Parameters
      -

      gitRepo (dict) -- A dict with the repository details

      -
      -
      -

      This will clone the git repository, create an archive of the selected reference, -and build an rpm that will install the files from the repository under the destination -directory. The gitRepo dict should have the following fields:

      -
      rpmname: "server-config"
      -rpmversion: "1.0"
      -rpmrelease: "1"
      -summary: "Setup files for server deployment"
      -repo: "PATH OF GIT REPO TO CLONE"
      -ref: "v1.0"
      -destination: "/opt/server/"
      -
      -
      -
        -
      • rpmname: Name of the rpm to create, also used as the prefix name in the tar archive

      • -
      • rpmversion: Version of the rpm, eg. "1.0.0"

      • -
      • rpmrelease: Release of the rpm, eg. "1"

      • -
      • summary: Summary string for the rpm

      • -
      • repo: URL of the get repo to clone and create the archive from

      • -
      • ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash

      • -
      • destination: Path to install the / of the git repo at when installing the rpm

      • -
      -
      - -
      -
      -

      pylorax.api.projects module

      -
      -
      -exception pylorax.api.projects.ProjectsError[source]
      -

      Bases: Exception

      -
      - -
      -
      -pylorax.api.projects.api_changelog(changelog)[source]
      -

      Convert the changelog to a string

      -
      -
      Parameters
      -

      changelog (tuple) -- A list of time, author, string tuples.

      -
      -
      Returns
      -

      The most recent changelog text or ""

      -
      -
      Return type
      -

      str

      -
      -
      -

      This returns only the most recent changelog entry.

      -
      - -
      -
      -pylorax.api.projects.api_time(t)[source]
      -

      Convert time since epoch to a string

      -
      -
      Parameters
      -

      t (int) -- Seconds since epoch

      -
      -
      Returns
      -

      Time string

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.projects.delete_repo_source(source_glob, source_id)[source]
      -

      Delete a source from a repo file

      -
      -
      Parameters
      -
        -
      • source_glob (str) -- A glob of the repo sources to search

      • -
      • source_id (str) -- The repo id to delete

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      ProjectsError if there was a problem

      -
      -
      -

      A repo file may have multiple sources in it, delete only the selected source. -If it is the last one in the file, delete the file.

      -

      WARNING: This will delete ANY source, the caller needs to ensure that a system -source_id isn't passed to it.

      -
      - -
      -
      -pylorax.api.projects.dep_evra(dep)[source]
      -

      Return the epoch:version-release.arch for the dep

      -
      -
      Parameters
      -

      dep (dict) -- dependency dict

      -
      -
      Returns
      -

      epoch:version-release.arch

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.projects.dep_nevra(dep)[source]
      -

      Return the name-epoch:version-release.arch

      -
      - -
      -
      -pylorax.api.projects.dnf_repo_to_file_repo(repo)[source]
      -

      Return a string representation of a DNF Repo object suitable for writing to a .repo file

      -
      -
      Parameters
      -

      repo (dnf.RepoDict) -- DNF Repository

      -
      -
      Returns
      -

      A string

      -
      -
      Return type
      -

      str

      -
      -
      -

      The DNF Repo.dump() function does not produce a string that can be used as a dnf .repo file, -it ouputs baseurl and gpgkey as python lists which DNF cannot read. So do this manually with -only the attributes we care about.

      -
      - -
      -
      -pylorax.api.projects.estimate_size(packages, block_size=6144)[source]
      -

      Estimate the installed size of a package list

      -
      -
      Parameters
      -
        -
      • packages (list of hawkey.Package objects) -- The packages to be installed

      • -
      • block_size (int) -- The block size to use for rounding up file sizes.

      • -
      -
      -
      Returns
      -

      The estimated size of installed packages

      -
      -
      Return type
      -

      int

      -
      -
      -

      Estimating actual requirements is difficult without the actual file sizes, which -dnf doesn't provide access to. So use the file count and block size to estimate -a minimum size for each package.

      -
      - -
      -
      -pylorax.api.projects.get_repo_sources(source_glob)[source]
      -

      Return a list of sources from a directory of yum repositories

      -
      -
      Parameters
      -

      source_glob (str) -- A glob to use to match the source files, including full path

      -
      -
      Returns
      -

      A list of the source ids in all of the matching files

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -pylorax.api.projects.get_source_ids(source_path)[source]
      -

      Return a list of the source ids in a file

      -
      -
      Parameters
      -

      source_path (str) -- Full path and filename of the source (yum repo) file

      -
      -
      Returns
      -

      A list of source id strings

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -pylorax.api.projects.modules_info(dbo, module_names)[source]
      -

      Return details about a module, including dependencies

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • module_names (str) -- Names of the modules to get info about

      • -
      -
      -
      Returns
      -

      List of dicts with module details and dependencies.

      -
      -
      Return type
      -

      list of dicts

      -
      -
      -
      - -
      -
      -pylorax.api.projects.modules_list(dbo, module_names)[source]
      -

      Return a list of modules

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • offset -- Number of modules to skip

      • -
      • limit (int) -- Maximum number of modules to return

      • -
      -
      -
      Returns
      -

      List of module information and total count

      -
      -
      Return type
      -

      tuple of a list of dicts and an Int

      -
      -
      -

      Modules don't exist in RHEL7 so this only returns projects -and sets the type to "rpm"

      -
      - -
      -
      -pylorax.api.projects.new_repo_source(dbo, repoid, source, repo_dir)[source]
      -

      Add a new repo source from a Weldr source dict

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • id (str) -- The repo id (API v0 uses the name, v1 uses the id)

      • -
      • source (dict) -- A Weldr source dict

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      ...

      -
      -
      -

      Make sure access to the dbo has been locked before calling this. -The id parameter will the the 'name' field for API v0, and the 'id' field for API v1

      -

      DNF variables will be substituted at load time, and on restart.

      -
      - -
      -
      -pylorax.api.projects.pkg_to_build(pkg)[source]
      -

      Extract the build details from a hawkey.Package object

      -
      -
      Parameters
      -

      pkg (hawkey.Package) -- hawkey.Package object with package details

      -
      -
      Returns
      -

      A dict with the build details, epoch, release, arch, build_time, changelog, ...

      -
      -
      Return type
      -

      dict

      -
      -
      -

      metadata entries are hard-coded to {}

      -

      Note that this only returns the build dict, it does not include the name, description, etc.

      -
      - -
      -
      -pylorax.api.projects.pkg_to_dep(pkg)[source]
      -

      Extract the info from a hawkey.Package object

      -
      -
      Parameters
      -

      pkg (hawkey.Package) -- A hawkey.Package object

      -
      -
      Returns
      -

      A dict with name, epoch, version, release, arch

      -
      -
      Return type
      -

      dict

      -
      -
      -
      - -
      -
      -pylorax.api.projects.pkg_to_project(pkg)[source]
      -

      Extract the details from a hawkey.Package object

      -
      -
      Parameters
      -

      pkgs (hawkey.Package) -- hawkey.Package object with package details

      -
      -
      Returns
      -

      A dict with the name, summary, description, and url.

      -
      -
      Return type
      -

      dict

      -
      -
      -

      upstream_vcs is hard-coded to UPSTREAM_VCS

      -
      - -
      -
      -pylorax.api.projects.pkg_to_project_info(pkg)[source]
      -

      Extract the details from a hawkey.Package object

      -
      -
      Parameters
      -

      pkg (hawkey.Package) -- hawkey.Package object with package details

      -
      -
      Returns
      -

      A dict with the project details, as well as epoch, release, arch, build_time, changelog, ...

      -
      -
      Return type
      -

      dict

      -
      -
      -

      metadata entries are hard-coded to {}

      -
      - -
      -
      -pylorax.api.projects.proj_to_module(proj)[source]
      -

      Extract the name from a project_info dict

      -
      -
      Parameters
      -

      pkg (dict) -- dict with package details

      -
      -
      Returns
      -

      A dict with name, and group_type

      -
      -
      Return type
      -

      dict

      -
      -
      -

      group_type is hard-coded to "rpm"

      -
      - -
      -
      -pylorax.api.projects.projects_depsolve(dbo, projects, groups)[source]
      -

      Return the dependencies for a list of projects

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • projects (List of Strings) -- The projects to find the dependencies for

      • -
      • groups (List of str) -- The groups to include in dependency solving

      • -
      -
      -
      Returns
      -

      NEVRA's of the project and its dependencies

      -
      -
      Return type
      -

      list of dicts

      -
      -
      Raises
      -

      ProjectsError if there was a problem installing something

      -
      -
      -
      - -
      -
      -pylorax.api.projects.projects_depsolve_with_size(dbo, projects, groups, with_core=True)[source]
      -

      Return the dependencies and installed size for a list of projects

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • project_names (List of Strings) -- The projects to find the dependencies for

      • -
      • groups (List of str) -- The groups to include in dependency solving

      • -
      -
      -
      Returns
      -

      installed size and a list of NEVRA's of the project and its dependencies

      -
      -
      Return type
      -

      tuple of (int, list of dicts)

      -
      -
      Raises
      -

      ProjectsError if there was a problem installing something

      -
      -
      -
      - -
      -
      -pylorax.api.projects.projects_info(dbo, project_names)[source]
      -

      Return details about specific projects

      -
      -
      Parameters
      -
        -
      • dbo (dnf.Base) -- dnf base object

      • -
      • project_names (str) -- List of names of projects to get info about

      • -
      -
      -
      Returns
      -

      List of project info dicts with pkg_to_project as well as epoch, version, release, etc.

      -
      -
      Return type
      -

      list of dicts

      -
      -
      -

      If project_names is None it will return the full list of available packages

      -
      - -
      -
      -pylorax.api.projects.projects_list(dbo)[source]
      -

      Return a list of projects

      -
      -
      Parameters
      -

      dbo (dnf.Base) -- dnf base object

      -
      -
      Returns
      -

      List of project info dicts with name, summary, description, homepage, upstream_vcs

      -
      -
      Return type
      -

      list of dicts

      -
      -
      -
      - -
      -
      -pylorax.api.projects.repo_to_source(repo, system_source, api=1)[source]
      -

      Return a Weldr Source dict created from the DNF Repository

      -
      -
      Parameters
      -
        -
      • repo (dnf.RepoDict) -- DNF Repository

      • -
      • system_source (bool) -- True if this source is an immutable system source

      • -
      • api (int) -- Select which api version of the dict to return (default 1)

      • -
      -
      -
      Returns
      -

      A dict with Weldr Source fields filled in

      -
      -
      Return type
      -

      dict

      -
      -
      -

      Example:

      -
      {
      -  "check_gpg": true,
      -  "check_ssl": true,
      -  "gpgkey_url": [
      -    "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
      -  ],
      -  "id": "fedora",
      -  "name": "Fedora $releasever - $basearch",
      -  "proxy": "http://proxy.brianlane.com:8123",
      -  "system": true
      -  "type": "yum-metalink",
      -  "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      -}
      -
      -
      -

      The name field has changed in v1 of the API. -In v0 of the API name is the repo.id, in v1 it is the repo.name and a new field, -id has been added for the repo.id

      -
      - -
      -
      -pylorax.api.projects.source_to_repo(source, dnf_conf)[source]
      -

      Return a dnf Repo object created from a source dict

      -
      -
      Parameters
      -
        -
      • source (dict) -- A Weldr source dict

      • -
      • dnf_conf (dnf.conf) -- The dnf Config object

      • -
      -
      -
      Returns
      -

      A dnf Repo object

      -
      -
      Return type
      -

      dnf.Repo

      -
      -
      -

      Example:

      -
      {
      -  "check_gpg": True,
      -  "check_ssl": True,
      -  "gpgkey_urls": [
      -    "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
      -  ],
      -  "id": "fedora",
      -  "name": "Fedora $releasever - $basearch",
      -  "proxy": "http://proxy.brianlane.com:8123",
      -  "system": True
      -  "type": "yum-metalink",
      -  "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      -}
      -
      -
      -

      If the id field is included it is used for the repo id, otherwise name is used. -v0 of the API only used name, v1 added the distinction between id and name.

      -
      - -
      -
      -pylorax.api.projects.source_to_repodict(source)[source]
      -

      Return a tuple suitable for use with dnf.add_new_repo

      -
      -
      Parameters
      -

      source (dict) -- A Weldr source dict

      -
      -
      Returns
      -

      A tuple of dnf.Repo attributes

      -
      -
      Return type
      -

      (str, list, dict)

      -
      -
      -

      Return a tuple with (id, baseurl|(), kwargs) that can be used -with dnf.repos.add_new_repo

      -
      - -
      -
      -

      pylorax.api.queue module

      -

      Functions to monitor compose queue and run anaconda

      -
      -
      -pylorax.api.queue.build_status(cfg, status_filter=None, api=1)[source]
      -

      Return the details of finished or failed builds

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • status_filter (str) -- What builds to return. None == all, "FINISHED", or "FAILED"

      • -
      • api (int) -- Select which api version of the dict to return (default 1)

      • -
      -
      -
      Returns
      -

      A list of the build details (from compose_detail)

      -
      -
      Return type
      -

      list of dicts

      -
      -
      -

      This returns a list of build details for each of the matching builds on the -system. It does not return the status of builds that have not been finished. -Use queue_status() for those.

      -
      - -
      -
      -pylorax.api.queue.check_queues(cfg)[source]
      -

      Check to make sure the new and run queue symlinks are correct

      -
      -
      Parameters
      -

      cfg (DataHolder) -- Configuration settings

      -
      -
      -

      Also check all of the existing results and make sure any with WAITING -set in STATUS have a symlink in queue/new/

      -
      - -
      -
      -pylorax.api.queue.compose_detail(cfg, results_dir, api=1)[source]
      -

      Return details about the build.

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings (required for api=1)

      • -
      • results_dir (str) -- The directory containing the metadata and results for the build

      • -
      • api (int) -- Select which api version of the dict to return (default 1)

      • -
      -
      -
      Returns
      -

      A dictionary with details about the compose

      -
      -
      Return type
      -

      dict

      -
      -
      Raises
      -

      IOError if it cannot read the directory, STATUS, or blueprint file.

      -
      -
      -

      The following details are included in the dict:

      -
        -
      • id - The uuid of the comoposition

      • -
      • queue_status - The final status of the composition (FINISHED or FAILED)

      • -
      • compose_type - The type of output generated (tar, iso, etc.)

      • -
      • blueprint - Blueprint name

      • -
      • version - Blueprint version

      • -
      • image_size - Size of the image, if finished. 0 otherwise.

      • -
      • uploads - For API v1 details about uploading the image are included

      • -
      -

      Various timestamps are also included in the dict. These are all Unix UTC timestamps. -It is possible for these timestamps to not always exist, in which case they will be -None in Python (or null in JSON). The following timestamps are included:

      -
        -
      • job_created - When the user submitted the compose

      • -
      • job_started - Anaconda started running

      • -
      • job_finished - Job entered FINISHED or FAILED state

      • -
      -
      - -
      -
      -pylorax.api.queue.get_compose_type(results_dir)[source]
      -

      Return the type of composition.

      -
      -
      Parameters
      -

      results_dir (str) -- The directory containing the metadata and results for the build

      -
      -
      Returns
      -

      The type of compose (eg. 'tar')

      -
      -
      Return type
      -

      str

      -
      -
      Raises
      -

      RuntimeError if no kickstart template can be found.

      -
      -
      -
      - -
      -
      -pylorax.api.queue.get_image_name(uuid_dir)[source]
      -

      Return the filename and full path of the build's image file

      -
      -
      Parameters
      -

      uuid (str) -- The UUID of the build

      -
      -
      Returns
      -

      The image filename and full path

      -
      -
      Return type
      -

      tuple of strings

      -
      -
      Raises
      -

      RuntimeError if there was a problem (eg. invalid uuid, missing config file)

      -
      -
      -
      - -
      -
      -pylorax.api.queue.make_compose(cfg, results_dir)[source]
      -

      Run anaconda with the final-kickstart.ks from results_dir

      -
      -
      Parameters
      -
        -
      • cfg (DataHolder) -- Configuration settings

      • -
      • results_dir (str) -- The directory containing the metadata and results for the build

      • -
      -
      -
      Returns
      -

      Nothing

      -
      -
      Raises
      -

      May raise various exceptions

      -
      -
      -

      This takes the final-kickstart.ks, and the settings in config.toml and runs Anaconda -in no-virt mode (directly on the host operating system). Exceptions should be caught -at the higer level.

      -

      If there is a failure, the build artifacts will be cleaned up, and any logs will be -moved into logs/anaconda/ and their ownership will be set to the user from the cfg -object.

      -
      - -
      -
      -pylorax.api.queue.monitor(cfg)[source]
      -

      Monitor the queue for new compose requests

      -
      -
      Parameters
      -

      cfg (DataHolder) -- Configuration settings

      -
      -
      Returns
      -

      Does not return

      -
      -
      -

      The queue has 2 subdirectories, new and run. When a compose is ready to be run -a symlink to the uniquely named results directory should be placed in ./queue/new/

      -

      When the it is ready to be run (it is checked every 30 seconds or after a previous -compose is finished) the symlink will be moved into ./queue/run/ and a STATUS file -will be created in the results directory.

      -

      STATUS can contain one of: WAITING, RUNNING, FINISHED, FAILED

      -

      If the system is restarted while a compose is running it will move any old symlinks -from ./queue/run/ to ./queue/new/ and rerun them.

      -
      - -
      -
      -pylorax.api.queue.queue_status(cfg, api=1)[source]
      -

      Return details about what is in the queue.

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • api (int) -- Select which api version of the dict to return (default 1)

      • -
      -
      -
      Returns
      -

      A list of the new composes, and a list of the running composes

      -
      -
      Return type
      -

      dict

      -
      -
      -

      This returns a dict with 2 lists. "new" is the list of uuids that are waiting to be built, -and "run" has the uuids that are being built (currently limited to 1 at a time).

      -
      - -
      -
      -pylorax.api.queue.start_queue_monitor(cfg, uid, gid)[source]
      -

      Start the queue monitor as a mp process

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uid (int) -- User ID that owns the queue

      • -
      • gid (int) -- Group ID that owns the queue

      • -
      -
      -
      Returns
      -

      None

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_add_upload(cfg, uuid, upload_uuid)[source]
      -

      Add an upload UUID to a build

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • upload_uuid (str) -- The UUID of the upload

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Return type
      -

      None

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_cancel(cfg, uuid)[source]
      -

      Cancel a build and delete its results

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      -
      -
      Returns
      -

      True if it was canceled and deleted

      -
      -
      Return type
      -

      bool

      -
      -
      -

      Only call this if the build status is WAITING or RUNNING

      -
      - -
      -
      -pylorax.api.queue.uuid_delete(cfg, uuid)[source]
      -

      Delete all of the results from a compose

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      -
      -
      Returns
      -

      True if it was deleted

      -
      -
      Return type
      -

      bool

      -
      -
      Raises
      -

      This will raise an error if the delete failed

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_get_uploads(cfg, uuid)[source]
      -

      Return the list of uploads for a build uuid

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      -
      -
      Returns
      -

      The upload UUIDs associated with the build UUID

      -
      -
      Return type
      -

      frozenset

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_image(cfg, uuid)[source]
      -

      Return the filename and full path of the build's image file

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      -
      -
      Returns
      -

      The image filename and full path

      -
      -
      Return type
      -

      tuple of strings

      -
      -
      Raises
      -

      RuntimeError if there was a problem (eg. invalid uuid, missing config file)

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_info(cfg, uuid, api=1)[source]
      -

      Return information about the composition

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      -
      -
      Returns
      -

      dictionary of information about the composition or None

      -
      -
      Return type
      -

      dict

      -
      -
      Raises
      -

      RuntimeError if there was a problem

      -
      -
      -

      This will return a dict with the following fields populated:

      -
        -
      • id - The uuid of the comoposition

      • -
      • config - containing the configuration settings used to run Anaconda

      • -
      • blueprint - The depsolved blueprint used to generate the kickstart

      • -
      • commit - The (local) git commit hash for the blueprint used

      • -
      • deps - The NEVRA of all of the dependencies used in the composition

      • -
      • compose_type - The type of output generated (tar, iso, etc.)

      • -
      • queue_status - The final status of the composition (FINISHED or FAILED)

      • -
      -
      - -
      -
      -pylorax.api.queue.uuid_log(cfg, uuid, size=1024)[source]
      -

      Return size KiB from the end of the most currently relevant log for a -given compose

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • size (int) -- Number of KiB to read. Default is 1024

      • -
      -
      -
      Returns
      -

      Up to size KiB from the end of the log

      -
      -
      Return type
      -

      str

      -
      -
      Raises
      -

      RuntimeError if there was a problem (eg. no log file available)

      -
      -
      -

      This function will return the end of either the anaconda log, the packaging -log, or the combined composer logs, depending on the progress of the -compose. It tries to return lines from the end of the log, it will attempt -to start on a line boundary, and it may return less than size kbytes.

      -
      - -
      -
      -pylorax.api.queue.uuid_ready_upload(cfg, uuid, upload_uuid)[source]
      -

      Set an upload to READY if the build is in FINISHED state

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • upload_uuid (str) -- The UUID of the upload

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Return type
      -

      None

      -
      -
      Raises
      -

      RuntimeError if the build uuid is invalid or not in FINISHED state.

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_remove_upload(cfg, upload_uuid)[source]
      -

      Remove an upload UUID from the build

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • upload_uuid (str) -- The UUID of the upload

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Return type
      -

      None

      -
      -
      Raises
      -

      RuntimeError if the upload_uuid is not found

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_schedule_upload(cfg, uuid, provider_name, image_name, settings)[source]
      -

      Schedule an upload of an image

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • provider_name (str) -- The name of the cloud provider, e.g. "azure"

      • -
      • image_name (str) -- Path of the image to upload

      • -
      • settings (dict) -- Settings to use for the selected provider

      • -
      -
      -
      Returns
      -

      uuid of the upload

      -
      -
      Return type
      -

      str

      -
      -
      Raises
      -

      RuntimeError if the uuid is not a valid build uuid

      -
      -
      -
      - -
      -
      -pylorax.api.queue.uuid_status(cfg, uuid, api=1)[source]
      -

      Return the details of a specific UUID compose

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • api (int) -- Select which api version of the dict to return (default 1)

      • -
      -
      -
      Returns
      -

      Details about the build

      -
      -
      Return type
      -

      dict or None

      -
      -
      -

      Returns the same dict as compose_detail()

      -
      - -
      -
      -pylorax.api.queue.uuid_tar(cfg, uuid, metadata=False, image=False, logs=False)[source]
      -

      Return a tar of the build data

      -
      -
      Parameters
      -
        -
      • cfg (ComposerConfig) -- Configuration settings

      • -
      • uuid (str) -- The UUID of the build

      • -
      • metadata (bool) -- Set to true to include all the metadata needed to reproduce the build

      • -
      • image (bool) -- Set to true to include the output image

      • -
      • logs (bool) -- Set to true to include the logs from the build

      • -
      -
      -
      Returns
      -

      A stream of bytes from tar

      -
      -
      Return type
      -

      A generator

      -
      -
      Raises
      -

      RuntimeError if there was a problem (eg. missing config file)

      -
      -
      -

      This yields an uncompressed tar's data to the caller. It includes -the selected data to the caller by returning the Popen stdout from the tar process.

      -
      - -
      -
      -

      pylorax.api.recipes module

      -
      -
      -class pylorax.api.recipes.CommitDetails(commit, timestamp, message, revision=None)[source]
      -

      Bases: pylorax.base.DataHolder

      -
      - -
      -
      -exception pylorax.api.recipes.CommitTimeValError[source]
      -

      Bases: Exception

      -
      - -
      -
      -pylorax.api.recipes.NewRecipeGit(toml_dict)[source]
      -

      Create a RecipeGit object from fields in a TOML dict

      -
      -
      Parameters
      -
        -
      • rpmname (str) -- Name of the rpm to create, also used as the prefix name in the tar archive

      • -
      • rpmversion (str) -- Version of the rpm, eg. "1.0.0"

      • -
      • rpmrelease (str) -- Release of the rpm, eg. "1"

      • -
      • summary (str) -- Summary string for the rpm

      • -
      • repo (str) -- URL of the get repo to clone and create the archive from

      • -
      • ref (str) -- Git reference to check out. eg. origin/branch-name, git tag, or git commit hash

      • -
      • destination (str) -- Path to install the / of the git repo at when installing the rpm

      • -
      -
      -
      Returns
      -

      A populated RecipeGit object

      -
      -
      Return type
      -

      RecipeGit

      -
      -
      -

      The TOML should look like this:

      -
      [[repos.git]]
      -rpmname="server-config"
      -rpmversion="1.0"
      -rpmrelease="1"
      -summary="Setup files for server deployment"
      -repo="PATH OF GIT REPO TO CLONE"
      -ref="v1.0"
      -destination="/opt/server/"
      -
      -
      -

      Note that the repo path supports anything that git supports, file://, https://, http://

      -

      Currently there is no support for authentication

      -
      - -
      -
      -class pylorax.api.recipes.Recipe(name, description, version, modules, packages, groups, customizations=None, gitrepos=None)[source]
      -

      Bases: dict

      -

      A Recipe of package and modules

      -

      This is a subclass of dict that enforces the constructor arguments -and adds a .filename property to return the recipe's filename, -and a .toml() function to return the recipe as a TOML string.

      -
      -
      -bump_version(old_version=None)[source]
      -

      semver recipe version number bump

      -
      -
      Parameters
      -

      old_version (str) -- An optional old version number

      -
      -
      Returns
      -

      The new version number or None

      -
      -
      Return type
      -

      str

      -
      -
      Raises
      -

      ValueError

      -
      -
      -

      If neither have a version, 0.0.1 is returned -If there is no old version the new version is checked and returned -If there is no new version, but there is a old one, bump its patch level -If the old and new versions are the same, bump the patch level -If they are different, check and return the new version

      -
      - -
      -
      -property filename
      -

      Return the Recipe's filename

      -

      Replaces spaces in the name with '-' and appends .toml

      -
      - -
      -
      -freeze(deps)[source]
      -

      Return a new Recipe with full module and package NEVRA

      -
      -
      Parameters
      -

      deps (list() -- A list of dependency NEVRA to use to fill in the modules and packages

      -
      -
      Returns
      -

      A new Recipe object

      -
      -
      Return type
      -

      Recipe

      -
      -
      -
      - -
      -
      -property group_names
      -

      Return the names of the groups. Groups do not have versions.

      -
      - -
      -
      -property module_names
      -

      Return the names of the modules

      -
      - -
      -
      -property module_nver
      -

      Return the names and version globs of the modules

      -
      - -
      -
      -property package_names
      -

      Return the names of the packages

      -
      - -
      -
      -property package_nver
      -

      Return the names and version globs of the packages

      -
      - -
      -
      -toml()[source]
      -

      Return the Recipe in TOML format

      -
      - -
      - -
      -
      -exception pylorax.api.recipes.RecipeError[source]
      -

      Bases: Exception

      -
      - -
      -
      -exception pylorax.api.recipes.RecipeFileError[source]
      -

      Bases: Exception

      -
      - -
      -
      -class pylorax.api.recipes.RecipeGit(rpmname, rpmversion, rpmrelease, summary, repo, ref, destination)[source]
      -

      Bases: dict

      -
      - -
      -
      -class pylorax.api.recipes.RecipeGroup(name)[source]
      -

      Bases: dict

      -
      - -
      -
      -class pylorax.api.recipes.RecipeModule(name, version)[source]
      -

      Bases: dict

      -
      - -
      -
      -class pylorax.api.recipes.RecipePackage(name, version)[source]
      -

      Bases: pylorax.api.recipes.RecipeModule

      -
      - -
      -
      -pylorax.api.recipes.check_list_case(expected_keys, recipe_keys, prefix='')[source]
      -

      Check the case of the recipe keys

      -
      -
      Parameters
      -
        -
      • expected_keys (list of str) -- A list of expected key strings

      • -
      • recipe_keys (list of str) -- A list of the recipe's key strings

      • -
      -
      -
      Returns
      -

      list of errors

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.check_recipe_dict(recipe_dict)[source]
      -

      Check a dict before using it to create a new Recipe

      -
      -
      Parameters
      -

      recipe_dict (dict) -- A plain dict of the recipe

      -
      -
      Returns
      -

      True if dict is ok

      -
      -
      Return type
      -

      bool

      -
      -
      Raises
      -

      RecipeError

      -
      -
      -

      This checks a dict to make sure required fields are present, -that optional fields are correct, and that other optional fields -are of the correct format, when included.

      -

      This collects all of the errors and returns a single RecipeError with -a string that can be presented to users.

      -
      - -
      -
      -pylorax.api.recipes.check_required_list(lst, fields)[source]
      -

      Check a list of dicts for required fields

      -
      -
      Parameters
      -
        -
      • lst (list of dict) -- A list of dicts with fields

      • -
      • fields (list of str) -- A list of field name strings

      • -
      -
      -
      Returns
      -

      A list of error strings

      -
      -
      Return type
      -

      list of str

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.commit_recipe(repo, branch, recipe)[source]
      -

      Commit a recipe to a branch

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe (Recipe) -- Recipe to commit

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.commit_recipe_directory(repo, branch, directory)[source]
      -

      Commit all *.toml files from a directory, if they aren't already in git.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • directory (str) -- The directory of *.toml recipes to commit

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      Can raise errors from Ggit or RecipeFileError

      -
      -
      -

      Files with Toml or RecipeFileErrors will be skipped, and the remainder will -be tried.

      -
      - -
      -
      -pylorax.api.recipes.commit_recipe_file(repo, branch, filename)[source]
      -

      Commit a recipe file to a branch

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- Path to the recipe file to commit

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit or RecipeFileError

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.customizations_diff(old_recipe, new_recipe)[source]
      -

      Diff the customizations sections from two versions of a recipe

      -
      - -
      -
      -pylorax.api.recipes.delete_file(repo, branch, filename)[source]
      -

      Delete a file from a branch.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- filename to delete

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.delete_recipe(repo, branch, recipe_name)[source]
      -

      Delete a recipe from a branch.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to delete

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.diff_lists(title, field, old_items, new_items)[source]
      -

      Return the differences between two lists of dicts.

      -
      -
      Parameters
      -
        -
      • title (str) -- Title of the entry

      • -
      • field (str) -- Field to use as the key for comparisons

      • -
      • old_items (list(dict)) -- List of item dicts with "name" field

      • -
      • new_items (list(dict)) -- List of item dicts with "name" field

      • -
      -
      -
      Returns
      -

      List of diff dicts with old/new entries

      -
      -
      Return type
      -

      list(dict)

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.find_commit_tag(repo, branch, filename, commit_id)[source]
      -

      Find the tag that matches the commit_id

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- filename to revert

      • -
      • commit_id (Git.OId) -- The commit id to check

      • -
      -
      -
      Returns
      -

      The tag or None if there isn't one

      -
      -
      Return type
      -

      str or None

      -
      -
      -

      There should be only 1 tag pointing to a commit, but there may not -be a tag at all.

      -

      The tag will look like: 'refs/tags/<branch>/<filename>/r<revision>'

      -
      - -
      -
      -pylorax.api.recipes.find_field_value(field, value, lst)[source]
      -

      Find a field matching value in the list of dicts.

      -
      -
      Parameters
      -
        -
      • field (str) -- field to search for

      • -
      • value (str) -- value to match in the field

      • -
      • lst (list of dict) -- List of dict's with field

      • -
      -
      -
      Returns
      -

      First dict with matching field:value, or None

      -
      -
      Return type
      -

      dict or None

      -
      -
      -

      Used to return a specific entry from a list that looks like this:

      -

      [{"name": "one", "attr": "green"}, ...]

      -

      find_field_value("name", "one", lst) will return the matching dict.

      -
      - -
      -
      -pylorax.api.recipes.find_name(name, lst)[source]
      -

      Find the dict matching the name in a list and return it.

      -
      -
      Parameters
      -
        -
      • name (str) -- Name to search for

      • -
      • lst (list of dict) -- List of dict's with "name" field

      • -
      -
      -
      Returns
      -

      First dict with matching name, or None

      -
      -
      Return type
      -

      dict or None

      -
      -
      -

      This is just a wrapper for find_field_value with field set to "name"

      -
      - -
      -
      -pylorax.api.recipes.find_recipe_obj(path, recipe, default=None)[source]
      -

      Find a recipe object

      -
      -
      Parameters
      -
        -
      • path (list of str) -- A list of dict field names

      • -
      • recipe (Recipe) -- The recipe to search

      • -
      • default (Any) -- The value to return if it is not found

      • -
      -
      -
      -

      Return the object found by applying the path to the dicts in the recipe, or -return the default if it doesn't exist.

      -

      eg. {"customizations": {"hostname": "foo", "users": [...]}}

      -

      find_recipe_obj(["customizations", "hostname"], recipe, "")

      -
      - -
      -
      -pylorax.api.recipes.get_commit_details(commit, revision=None)[source]
      -

      Return the details about a specific commit.

      -
      -
      Parameters
      -
        -
      • commit (Git.Commit) -- The commit to get details from

      • -
      • revision (int) -- Optional commit revision

      • -
      -
      -
      Returns
      -

      Details about the commit

      -
      -
      Return type
      -

      CommitDetails

      -
      -
      Raises
      -

      CommitTimeValError or Ggit exceptions

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.get_revision_from_tag(tag)[source]
      -

      Return the revision number from a tag

      -
      -
      Parameters
      -

      tag (str) -- The tag to exract the revision from

      -
      -
      Returns
      -

      The integer revision or None

      -
      -
      Return type
      -

      int or None

      -
      -
      -

      The revision is the part after the r in 'branch/filename/rXXX'

      -
      - -
      -
      -pylorax.api.recipes.gfile(path)[source]
      -

      Convert a string path to GFile for use with Git

      -
      - -
      -
      -pylorax.api.recipes.head_commit(repo, branch)[source]
      -

      Get the branch's HEAD Commit Object

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      -
      -
      Returns
      -

      Branch's head commit

      -
      -
      Return type
      -

      Git.Commit

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.is_commit_tag(repo, commit_id, tag)[source]
      -

      Check to see if a tag points to a specific commit.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • commit_id (Git.OId) -- The commit id to check

      • -
      • tag (str) -- The tag to check

      • -
      -
      -
      Returns
      -

      True if the tag points to the commit, False otherwise

      -
      -
      Return type
      -

      bool

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.is_parent_diff(repo, filename, tree, parent)[source]
      -

      Check to see if the commit is different from its parents

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • filename (str) -- filename to revert

      • -
      • tree (Git.Tree) -- The commit's tree

      • -
      • parent (Git.Commit) -- The commit's parent commit

      • -
      -
      -
      Retuns
      -

      True if filename in the commit is different from its parents

      -
      -
      Return type
      -

      bool

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.list_branch_files(repo, branch)[source]
      -

      Return a sorted list of the files on the branch HEAD

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      -
      -
      Returns
      -

      A sorted list of the filenames

      -
      -
      Return type
      -

      list(str)

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.list_commit_files(repo, commit)[source]
      -

      Return a sorted list of the files on a commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • commit (str) -- The commit hash to list

      • -
      -
      -
      Returns
      -

      A sorted list of the filenames

      -
      -
      Return type
      -

      list(str)

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.list_commits(repo, branch, filename, limit=0)[source]
      -

      List the commit history of a file on a branch.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- filename to revert

      • -
      • limit (int) -- Number of commits to return (0=all)

      • -
      -
      -
      Returns
      -

      A list of commit details

      -
      -
      Return type
      -

      list(CommitDetails)

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.open_or_create_repo(path)[source]
      -

      Open an existing repo, or create a new one

      -
      -
      Parameters
      -

      path (string) -- path to recipe directory

      -
      -
      Returns
      -

      A repository object

      -
      -
      Return type
      -

      Git.Repository

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      A bare git repo will be created in the git directory of the specified path. -If a repo already exists it will be opened and returned instead of -creating a new one.

      -
      - -
      -
      -pylorax.api.recipes.prepare_commit(repo, branch, builder)[source]
      -

      Prepare for a commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • builder (TreeBuilder) -- instance of TreeBuilder

      • -
      -
      -
      Returns
      -

      (Tree, Sig, Ref)

      -
      -
      Return type
      -

      tuple

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.read_commit(repo, branch, filename, commit=None)[source]
      -

      Return the contents of a file on a specific branch or commit.

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- filename to read

      • -
      • commit (str) -- Optional commit hash

      • -
      -
      -
      Returns
      -

      The commit id, and the contents of the commit

      -
      -
      Return type
      -

      tuple(str, str)

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      If no commit is passed the master:filename is returned, otherwise it will be -commit:filename

      -
      - -
      -
      -pylorax.api.recipes.read_commit_spec(repo, spec)[source]
      -

      Return the raw content of the blob specified by the spec

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • spec (str) -- Git revparse spec

      • -
      -
      -
      Returns
      -

      Contents of the commit

      -
      -
      Return type
      -

      str

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      eg. To read the README file from master the spec is "master:README"

      -
      - -
      -
      -pylorax.api.recipes.read_recipe_and_id(repo, branch, recipe_name, commit=None)[source]
      -

      Read a recipe commit and its id from git

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to read

      • -
      • commit (str) -- Optional commit hash

      • -
      -
      -
      Returns
      -

      The commit id, and a Recipe object

      -
      -
      Return type
      -

      tuple(str, Recipe)

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      If no commit is passed the master:filename is returned, otherwise it will be -commit:filename

      -
      - -
      -
      -pylorax.api.recipes.read_recipe_commit(repo, branch, recipe_name, commit=None)[source]
      -

      Read a recipe commit from git and return a Recipe object

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to read

      • -
      • commit (str) -- Optional commit hash

      • -
      -
      -
      Returns
      -

      A Recipe object

      -
      -
      Return type
      -

      Recipe

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      If no commit is passed the master:filename is returned, otherwise it will be -commit:filename

      -
      - -
      -
      -pylorax.api.recipes.recipe_diff(old_recipe, new_recipe)[source]
      -

      Diff two versions of a recipe

      -
      -
      Parameters
      -
        -
      • old_recipe (Recipe) -- The old version of the recipe

      • -
      • new_recipe (Recipe) -- The new version of the recipe

      • -
      -
      -
      Returns
      -

      A list of diff dict entries with old/new

      -
      -
      Return type
      -

      list(dict)

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.recipe_filename(name)[source]
      -

      Return the toml filename for a recipe

      -

      Replaces spaces with '-' and appends '.toml'

      -
      - -
      -
      -pylorax.api.recipes.recipe_from_dict(recipe_dict)[source]
      -

      Create a Recipe object from a plain dict.

      -
      -
      Parameters
      -

      recipe_dict (dict) -- A plain dict of the recipe

      -
      -
      Returns
      -

      A Recipe object

      -
      -
      Return type
      -

      Recipe

      -
      -
      Raises
      -

      RecipeError

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.recipe_from_file(recipe_path)[source]
      -

      Return a recipe file as a Recipe object

      -
      -
      Parameters
      -

      recipe_path (str) -- Path to the recipe fila

      -
      -
      Returns
      -

      A Recipe object

      -
      -
      Return type
      -

      Recipe

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.recipe_from_toml(recipe_str)[source]
      -

      Create a Recipe object from a toml string.

      -
      -
      Parameters
      -

      recipe_str (str) -- The Recipe TOML string

      -
      -
      Returns
      -

      A Recipe object

      -
      -
      Return type
      -

      Recipe

      -
      -
      Raises
      -

      TomlError

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.repo_file_exists(repo, branch, filename)[source]
      -

      Return True if the filename exists on the branch

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- Filename to check

      • -
      -
      -
      Returns
      -

      True if the filename exists on the HEAD of the branch, False otherwise.

      -
      -
      Return type
      -

      bool

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.revert_file(repo, branch, filename, commit)[source]
      -

      Revert the contents of a file to that of a previous commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- filename to revert

      • -
      • commit (str) -- Commit hash

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.revert_recipe(repo, branch, recipe_name, commit)[source]
      -

      Revert the contents of a recipe to that of a previous commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to revert

      • -
      • commit (str) -- Commit hash

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -pylorax.api.recipes.tag_file_commit(repo, branch, filename)[source]
      -

      Tag a file's most recent commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- Filename to tag

      • -
      -
      -
      Returns
      -

      Tag id or None if it failed.

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      This uses git tags, of the form refs/tags/<branch>/<filename>/r<revision> -Only the most recent recipe commit can be tagged to prevent out of order tagging. -Revisions start at 1 and increment for each new commit that is tagged. -If the commit has already been tagged it will return false.

      -
      - -
      -
      -pylorax.api.recipes.tag_recipe_commit(repo, branch, recipe_name)[source]
      -

      Tag a file's most recent commit

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to tag

      • -
      -
      -
      Returns
      -

      Tag id or None if it failed.

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -

      Uses tag_file_commit()

      -
      - -
      -
      -pylorax.api.recipes.write_commit(repo, branch, filename, message, content)[source]
      -

      Make a new commit to a repository's branch

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • filename (str) -- full path of the file to add

      • -
      • message (str) -- The commit message

      • -
      • content (str) -- The data to write

      • -
      -
      -
      Returns
      -

      OId of the new commit

      -
      -
      Return type
      -

      Git.OId

      -
      -
      Raises
      -

      Can raise errors from Ggit

      -
      -
      -
      - -
      -
      -

      pylorax.api.regexes module

      -
      -
      -

      pylorax.api.server module

      -
      -
      -class pylorax.api.server.GitLock(repo, lock, dir)
      -

      Bases: tuple

      -
      -
      -dir
      -

      Alias for field number 2

      -
      - -
      -
      -lock
      -

      Alias for field number 1

      -
      - -
      -
      -repo
      -

      Alias for field number 0

      -
      - -
      - -
      -
      -

      pylorax.api.timestamp module

      -
      -
      -pylorax.api.timestamp.timestamp_dict(destdir)[source]
      -
      - -
      -
      -pylorax.api.timestamp.write_timestamp(destdir, ty)[source]
      -
      - -
      -
      -

      pylorax.api.toml module

      -
      -
      -exception pylorax.api.toml.TomlError(msg, doc, pos)[source]
      -

      Bases: toml.decoder.TomlDecodeError

      -
      - -
      -
      -pylorax.api.toml.dump(o, file)[source]
      -
      - -
      -
      -pylorax.api.toml.dumps(o)[source]
      -
      - -
      -
      -pylorax.api.toml.load(file)[source]
      -
      - -
      -
      -pylorax.api.toml.loads(s)[source]
      -
      - -
      -
      -

      pylorax.api.utils module

      -

      API utility functions

      -
      -
      -pylorax.api.utils.blueprint_exists(api, branch, blueprint_name)[source]
      -

      Return True if the blueprint exists

      -
      -
      Parameters
      -
        -
      • api (Flask) -- flask object

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- Recipe name to read

      • -
      -
      -
      -
      - -
      -
      -pylorax.api.utils.take_limits(iterable, offset, limit)[source]
      -

      Apply offset and limit to an iterable object

      -
      -
      Parameters
      -
        -
      • iterable (iter) -- The object to limit

      • -
      • offset (int) -- The number of items to skip

      • -
      • limit (int) -- The total number of items to return

      • -
      -
      -
      Returns
      -

      A subset of the iterable

      -
      -
      -
      - -
      -
      -

      pylorax.api.v0 module

      -

      Setup v0 of the API server

      -

      v0_api() must be called to setup the API routes for Flask

      -
      -

      Status Responses

      -

      Some requests only return a status/error response.

      -
      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -

      Example response:

      -
      {
      -  "status": true
      -}
      -
      -
      -

      Error response:

      -
      {
      -  "errors": ["ggit-error: Failed to remove entry. File isn't in the tree - jboss.toml (-1)"]
      -  "status": false
      -}
      -
      -
      -
      -
      -
      -

      API Routes

      -

      All of the blueprints routes support the optional branch argument. If it is not -used then the API will use the master branch for blueprints. If you want to create -a new branch use the new or workspace routes with ?branch=<branch-name> to -store the new blueprint on the new branch.

      -
      -
      -pylorax.api.v0.v0_blueprints_changes(blueprint_names)[source]
      -

      Return the changes to a blueprint or list of blueprints

      -

      /api/v0/blueprints/changes/<blueprint_names>[?offset=0&limit=20]

      -
      -

      Return the commits to a blueprint. By default it returns the first 20 commits, this -can be changed by passing offset and/or limit. The response will include the -commit hash, summary, timestamp, and optionally the revision number. The commit -hash can be passed to /api/v0/blueprints/diff/ to retrieve the exact changes.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "limit": 20,
      -  "offset": 0,
      -  "blueprints": [
      -    {
      -      "changes": [
      -        {
      -          "commit": "e083921a7ed1cf2eec91ad12b9ad1e70ef3470be",
      -          "message": "blueprint glusterfs, version 0.0.6 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-23T00:18:13Z"
      -        },
      -        {
      -          "commit": "cee5f4c20fc33ea4d54bfecf56f4ad41ad15f4f3",
      -          "message": "blueprint glusterfs, version 0.0.5 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-11T01:00:28Z"
      -        },
      -        {
      -          "commit": "29b492f26ed35d80800b536623bafc51e2f0eff2",
      -          "message": "blueprint glusterfs, version 0.0.4 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-11T00:28:30Z"
      -        },
      -        {
      -          "commit": "03374adbf080fe34f5c6c29f2e49cc2b86958bf2",
      -          "message": "blueprint glusterfs, version 0.0.3 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-10T23:15:52Z"
      -        },
      -        {
      -          "commit": "0e08ecbb708675bfabc82952599a1712a843779d",
      -          "message": "blueprint glusterfs, version 0.0.2 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-10T23:14:56Z"
      -        },
      -        {
      -          "commit": "3e11eb87a63d289662cba4b1804a0947a6843379",
      -          "message": "blueprint glusterfs, version 0.0.1 saved.",
      -          "revision": null,
      -          "timestamp": "2017-11-08T00:02:47Z"
      -        }
      -      ],
      -      "name": "glusterfs",
      -      "total": 6
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_delete(blueprint_name)[source]
      -

      Delete a blueprint from git

      -

      DELETE /api/v0/blueprints/delete/<blueprint_name>

      -
      -

      Delete a blueprint. The blueprint is deleted from the branch, and will no longer -be listed by the list route. A blueprint can be undeleted using the undo route -to revert to a previous commit. This will also delete the workspace copy of the -blueprint.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_delete_workspace(blueprint_name)[source]
      -

      Delete a blueprint from the workspace

      -

      DELETE /api/v0/blueprints/workspace/<blueprint_name>

      -
      -

      Remove the temporary workspace copy of a blueprint. The info route will now -return the most recent commit of the blueprint. Any changes that were in the -workspace will be lost.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_depsolve(blueprint_names)[source]
      -

      Return the dependencies for a blueprint

      -

      /api/v0/blueprints/depsolve/<blueprint_names>

      -
      -

      Depsolve the blueprint using yum, return the blueprint used, and the NEVRAs of the packages -chosen to satisfy the blueprint's requirements. The response will include a list of results, -with the full dependency list in dependencies, the NEVRAs for the blueprint's direct modules -and packages in modules, and any error will be in errors.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "blueprints": [
      -    {
      -      "dependencies": [
      -        {
      -          "arch": "noarch",
      -          "epoch": "0",
      -          "name": "2ping",
      -          "release": "2.el7",
      -          "version": "3.2.1"
      -        },
      -        {
      -          "arch": "x86_64",
      -          "epoch": "0",
      -          "name": "acl",
      -          "release": "12.el7",
      -          "version": "2.2.51"
      -        },
      -        {
      -          "arch": "x86_64",
      -          "epoch": "0",
      -          "name": "audit-libs",
      -          "release": "3.el7",
      -          "version": "2.7.6"
      -        },
      -        {
      -          "arch": "x86_64",
      -          "epoch": "0",
      -          "name": "avahi-libs",
      -          "release": "17.el7",
      -          "version": "0.6.31"
      -        },
      -        ...
      -      ],
      -      "modules": [
      -        {
      -          "arch": "noarch",
      -          "epoch": "0",
      -          "name": "2ping",
      -          "release": "2.el7",
      -          "version": "3.2.1"
      -        },
      -        {
      -          "arch": "x86_64",
      -          "epoch": "0",
      -          "name": "glusterfs",
      -          "release": "18.4.el7",
      -          "version": "3.8.4"
      -        },
      -        ...
      -      ],
      -      "blueprint": {
      -        "description": "An example GlusterFS server with samba",
      -        "modules": [
      -          {
      -            "name": "glusterfs",
      -            "version": "3.7.*"
      -          },
      -       ...
      -      }
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_diff(blueprint_name, from_commit, to_commit)[source]
      -

      Return the differences between two commits of a blueprint

      -

      /api/v0/blueprints/diff/<blueprint_name>/<from_commit>/<to_commit>

      -
      -

      Return the differences between two commits, or the workspace. The commit hash -from the changes response can be used here, or several special strings:

      -
        -
      • NEWEST will select the newest git commit. This works for from_commit or to_commit

      • -
      • WORKSPACE will select the workspace copy. This can only be used in to_commit

      • -
      -

      eg. /api/v0/blueprints/diff/glusterfs/NEWEST/WORKSPACE will return the differences -between the most recent git commit and the contents of the workspace.

      -

      Each entry in the response's diff object contains the old blueprint value and the new one. -If old is null and new is set, then it was added. -If new is null and old is set, then it was removed. -If both are set, then it was changed.

      -

      The old/new entries will have the name of the blueprint field that was changed. This -can be one of: Name, Description, Version, Module, or Package. -The contents for these will be the old/new values for them.

      -

      In the example below the version was changed and the ping package was added.

      -

      Example:

      -
      {
      -  "diff": [
      -    {
      -      "new": {
      -        "Version": "0.0.6"
      -      },
      -      "old": {
      -        "Version": "0.0.5"
      -      }
      -    },
      -    {
      -      "new": {
      -        "Package": {
      -          "name": "ping",
      -          "version": "3.2.1"
      -        }
      -      },
      -      "old": null
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_freeze(blueprint_names)[source]
      -

      Return the blueprint with the exact modules and packages selected by depsolve

      -

      /api/v0/blueprints/freeze/<blueprint_names>

      -
      -

      Return a JSON representation of the blueprint with the package and module versions set -to the exact versions chosen by depsolving the blueprint.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "blueprints": [
      -    {
      -      "blueprint": {
      -        "description": "An example GlusterFS server with samba",
      -        "modules": [
      -          {
      -            "name": "glusterfs",
      -            "version": "3.8.4-18.4.el7.x86_64"
      -          },
      -          {
      -            "name": "glusterfs-cli",
      -            "version": "3.8.4-18.4.el7.x86_64"
      -          }
      -        ],
      -        "name": "glusterfs",
      -        "packages": [
      -          {
      -            "name": "ping",
      -            "version": "2:3.2.1-2.el7.noarch"
      -          },
      -          {
      -            "name": "samba",
      -            "version": "4.6.2-8.el7.x86_64"
      -          }
      -        ],
      -        "version": "0.0.6"
      -      }
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_info(blueprint_names)[source]
      -

      Return the contents of the blueprint, or a list of blueprints

      -

      /api/v0/blueprints/info/<blueprint_names>[?format=<json|toml>]

      -
      -

      Return the JSON representation of the blueprint. This includes 3 top level -objects. changes which lists whether or not the workspace is different from -the most recent commit. blueprints which lists the JSON representation of the -blueprint, and errors which will list any errors, like non-existant blueprints.

      -

      By default the response is JSON, but if ?format=toml is included in the URL's -arguments it will return the response as the blueprint's raw TOML content. -Unless there is an error which will only return a 400 and a standard error -Status Responses.

      -

      If there is an error when JSON is requested the successful blueprints and the -errors will both be returned.

      -

      Example of json response:

      -
      {
      -  "changes": [
      -    {
      -      "changed": false,
      -      "name": "glusterfs"
      -    }
      -  ],
      -  "errors": [],
      -  "blueprints": [
      -    {
      -      "description": "An example GlusterFS server with samba",
      -      "modules": [
      -        {
      -          "name": "glusterfs",
      -          "version": "3.7.*"
      -        },
      -        {
      -          "name": "glusterfs-cli",
      -          "version": "3.7.*"
      -        }
      -      ],
      -      "name": "glusterfs",
      -      "packages": [
      -        {
      -          "name": "2ping",
      -          "version": "3.2.1"
      -        },
      -        {
      -          "name": "samba",
      -          "version": "4.2.*"
      -        }
      -      ],
      -      "version": "0.0.6"
      -    }
      -  ]
      -}
      -
      -
      -

      Error example:

      -
      {
      -  "changes": [],
      -  "errors": ["ggit-error: the path 'missing.toml' does not exist in the given tree (-3)"]
      -  "blueprints": []
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_list()[source]
      -

      List the available blueprints on a branch.

      -

      /api/v0/blueprints/list

      -
      -

      List the available blueprints:

      -
      { "limit": 20,
      -  "offset": 0,
      -  "blueprints": [
      -    "atlas",
      -    "development",
      -    "glusterfs",
      -    "http-server",
      -    "jboss",
      -    "kubernetes" ],
      -  "total": 6 }
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_new()[source]
      -

      Commit a new blueprint

      -

      POST /api/v0/blueprints/new

      -
      -

      Create a new blueprint, or update an existing blueprint. This supports both JSON and TOML -for the blueprint format. The blueprint should be in the body of the request with the -Content-Type header set to either application/json or text/x-toml.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_tag(blueprint_name)[source]
      -

      Tag a blueprint's latest blueprint commit as a 'revision'

      -

      POST /api/v0/blueprints/tag/<blueprint_name>

      -
      -

      Tag a blueprint as a new release. This uses git tags with a special format. -refs/tags/<branch>/<filename>/r<revision>. Only the most recent blueprint commit -can be tagged. Revisions start at 1 and increment for each new tag -(per-blueprint). If the commit has already been tagged it will return false.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_undo(blueprint_name, commit)[source]
      -

      Undo changes to a blueprint by reverting to a previous commit.

      -

      POST /api/v0/blueprints/undo/<blueprint_name>/<commit>

      -
      -

      This will revert the blueprint to a previous commit. The commit hash from the changes -route can be used in this request.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_blueprints_workspace()[source]
      -

      Write a blueprint to the workspace

      -

      POST /api/v0/blueprints/workspace

      -
      -

      Write a blueprint to the temporary workspace. This works exactly the same as new except -that it does not create a commit. JSON and TOML bodies are supported.

      -

      The workspace is meant to be used as a temporary blueprint storage for clients. -It will be read by the info and diff routes if it is different from the -most recent commit.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_cancel(uuid)[source]
      -

      Cancel a running compose and delete its results directory

      -

      DELETE /api/v0/compose/cancel/<uuid>

      -
      -

      Cancel the build, if it is not finished, and delete the results. It will return a -status of True if it is successful.

      -

      Example:

      -
      {
      -  "status": true,
      -  "uuid": "03397f8d-acff-4cdb-bd31-f629b7a948f5"
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_delete(uuids)[source]
      -

      Delete the compose results for the listed uuids

      -

      DELETE /api/v0/compose/delete/<uuids>

      -
      -

      Delete the list of comma-separated uuids from the compose results.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "uuids": [
      -    {
      -      "status": true,
      -      "uuid": "ae1bf7e3-7f16-4c9f-b36e-3726a1093fd0"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_failed()[source]
      -

      Return the list of failed composes

      -

      /api/v0/compose/failed

      -
      -

      Return the details on all of the failed composes on the system.

      -

      Example:

      -
      {
      -  "failed": [
      -     {
      -      "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
      -      "blueprint": "http-server",
      -      "queue_status": "FAILED",
      -      "job_created": 1517523249.9301329,
      -      "job_started": 1517523249.9314211,
      -      "job_finished": 1517523255.5623411,
      -      "version": "0.0.2"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_finished()[source]
      -

      Return the list of finished composes

      -

      /api/v0/compose/finished

      -
      -

      Return the details on all of the finished composes on the system.

      -

      Example:

      -
      {
      -  "finished": [
      -    {
      -      "id": "70b84195-9817-4b8a-af92-45e380f39894",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517351003.8210032,
      -      "job_started": 1517351003.8230415,
      -      "job_finished": 1517359234.1003145,
      -      "version": "0.0.6"
      -    },
      -    {
      -      "id": "e695affd-397f-4af9-9022-add2636e7459",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517362289.7193348,
      -      "job_started": 1517362289.9751132,
      -      "job_finished": 1517363500.1234567,
      -      "version": "0.0.6"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_image(uuid)[source]
      -

      Return the output image for the build

      -

      /api/v0/compose/image/<uuid>

      -
      -

      Returns the output image from the build. The filename is set to the filename -from the build with the UUID as a prefix. eg. UUID-root.tar.xz or UUID-boot.iso.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_info(uuid)[source]
      -

      Return detailed info about a compose

      -

      /api/v0/compose/info/<uuid>

      -
      -

      Get detailed information about the compose. The returned JSON string will -contain the following information:

      -
      -
        -
      • id - The uuid of the comoposition

      • -
      • config - containing the configuration settings used to run Anaconda

      • -
      • blueprint - The depsolved blueprint used to generate the kickstart

      • -
      • commit - The (local) git commit hash for the blueprint used

      • -
      • deps - The NEVRA of all of the dependencies used in the composition

      • -
      • compose_type - The type of output generated (tar, iso, etc.)

      • -
      • queue_status - The final status of the composition (FINISHED or FAILED)

      • -
      -
      -

      Example:

      -
      {
      -  "commit": "7078e521a54b12eae31c3fd028680da7a0815a4d",
      -  "compose_type": "tar",
      -  "config": {
      -    "anaconda_args": "",
      -    "armplatform": "",
      -    "compress_args": [],
      -    "compression": "xz",
      -    "image_name": "root.tar.xz",
      -    ...
      -  },
      -  "deps": {
      -    "packages": [
      -      {
      -        "arch": "x86_64",
      -        "epoch": "0",
      -        "name": "acl",
      -        "release": "14.el7",
      -        "version": "2.2.51"
      -      }
      -    ]
      -  },
      -  "id": "c30b7d80-523b-4a23-ad52-61b799739ce8",
      -  "queue_status": "FINISHED",
      -  "blueprint": {
      -    "description": "An example kubernetes master",
      -    ...
      -  }
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_log_tail(uuid)[source]
      -

      Return the tail of the most currently relevant log

      -

      /api/v0/compose/log/<uuid>[?size=KiB]

      -
      -

      Returns the end of either the anaconda log, the packaging log, or the -composer logs, depending on the progress of the compose. The size -parameter is optional and defaults to 1 MiB if it is not included. The -returned data is raw text from the end of the log file, starting on a -line boundary.

      -

      Example:

      -
      12:59:24,222 INFO anaconda: Running Thread: AnaConfigurationThread (140629395244800)
      -12:59:24,223 INFO anaconda: Configuring installed system
      -12:59:24,912 INFO anaconda: Configuring installed system
      -12:59:24,912 INFO anaconda: Creating users
      -12:59:24,913 INFO anaconda: Clearing libuser.conf at /tmp/libuser.Dyy8Gj
      -12:59:25,154 INFO anaconda: Creating users
      -12:59:25,155 INFO anaconda: Configuring addons
      -12:59:25,155 INFO anaconda: Configuring addons
      -12:59:25,155 INFO anaconda: Generating initramfs
      -12:59:49,467 INFO anaconda: Generating initramfs
      -12:59:49,467 INFO anaconda: Running post-installation scripts
      -12:59:49,467 INFO anaconda: Running kickstart %%post script(s)
      -12:59:50,782 INFO anaconda: All kickstart %%post script(s) have been run
      -12:59:50,782 INFO anaconda: Running post-installation scripts
      -12:59:50,784 INFO anaconda: Thread Done: AnaConfigurationThread (140629395244800)
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_logs(uuid)[source]
      -

      Return a tar of the metadata for the build

      -

      /api/v0/compose/logs/<uuid>

      -
      -

      Returns a .tar of the anaconda build logs. The tar is not compressed, but is -not large.

      -

      The mime type is set to 'application/x-tar' and the filename is set to -UUID-logs.tar

      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_metadata(uuid)[source]
      -

      Return a tar of the metadata for the build

      -

      /api/v0/compose/metadata/<uuid>

      -
      -

      Returns a .tar of the metadata used for the build. This includes all the -information needed to reproduce the build, including the final kickstart -populated with repository and package NEVRA.

      -

      The mime type is set to 'application/x-tar' and the filename is set to -UUID-metadata.tar

      -

      The .tar is uncompressed, but is not large.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_queue()[source]
      -

      Return the status of the new and running queues

      -

      /api/v0/compose/queue

      -
      -

      Return the status of the build queue. It includes information about the builds waiting, -and the build that is running.

      -

      Example:

      -
      {
      -  "new": [
      -    {
      -      "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
      -      "blueprint": "glusterfs",
      -      "queue_status": "WAITING",
      -      "job_created": 1517362647.4570868,
      -      "version": "0.0.6"
      -    },
      -    {
      -      "id": "6d292bd0-bec7-4825-8d7d-41ef9c3e4b73",
      -      "blueprint": "kubernetes",
      -      "queue_status": "WAITING",
      -      "job_created": 1517362659.0034983,
      -      "version": "0.0.1"
      -    }
      -  ],
      -  "run": [
      -    {
      -      "id": "745712b2-96db-44c0-8014-fe925c35e795",
      -      "blueprint": "glusterfs",
      -      "queue_status": "RUNNING",
      -      "job_created": 1517362633.7965999,
      -      "job_started": 1517362633.8001345,
      -      "version": "0.0.6"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_results(uuid)[source]
      -

      Return a tar of the metadata and the results for the build

      -

      /api/v0/compose/results/<uuid>

      -
      -

      Returns a .tar of the metadata, logs, and output image of the build. This -includes all the information needed to reproduce the build, including the -final kickstart populated with repository and package NEVRA. The output image -is already in compressed form so the returned tar is not compressed.

      -

      The mime type is set to 'application/x-tar' and the filename is set to -UUID.tar

      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_start()[source]
      -

      Start a compose

      -
      -
      The body of the post should have these fields:

      blueprint_name - The blueprint name from /blueprints/list/ -compose_type - The type of output to create, from /compose/types -branch - Optional, defaults to master, selects the git branch to use for the blueprint.

      -
      -
      -

      POST /api/v0/compose

      -
      -

      Start a compose. The content type should be 'application/json' and the body of the POST -should look like this

      -

      Example:

      -
      {
      -  "blueprint_name": "http-server",
      -  "compose_type": "tar",
      -  "branch": "master"
      -}
      -
      -
      -

      Pass it the name of the blueprint, the type of output (from '/api/v0/compose/types'), and the -blueprint branch to use. 'branch' is optional and will default to master. It will create a new -build and add it to the queue. It returns the build uuid and a status if it succeeds

      -

      Example:

      -
      {
      -  "build_id": "e6fa6db4-9c81-4b70-870f-a697ca405cdf",
      -  "status": true
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_status(uuids)[source]
      -

      Return the status of the listed uuids

      -

      /api/v0/compose/status/<uuids>[?blueprint=<blueprint_name>&status=<compose_status>&type=<compose_type>]

      -
      -

      Return the details for each of the comma-separated list of uuids. A uuid of '*' will return -details for all composes.

      -

      Example:

      -
      {
      -  "uuids": [
      -    {
      -      "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
      -      "blueprint": "http-server",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517523644.2384307,
      -      "job_started": 1517523644.2551234,
      -      "job_finished": 1517523689.9864314,
      -      "version": "0.0.2"
      -    },
      -    {
      -      "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517363442.188399,
      -      "job_started": 1517363442.325324,
      -      "job_finished": 1517363451.653621,
      -      "version": "0.0.6"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_compose_types()[source]
      -

      Return the list of enabled output types

      -

      (only enabled types are returned)

      -

      /api/v0/compose/types

      -
      -

      Returns the list of supported output types that are valid for use with 'POST /api/v0/compose'

      -

      Example:

      -
      {
      -  "types": [
      -    {
      -      "enabled": true,
      -      "name": "tar"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_modules_info(module_names)[source]
      -

      Return detailed information about the listed modules

      -

      /api/v0/modules/info/<module_names>

      -
      -

      Return the module's dependencies, and the information about the module.

      -

      Example:

      -
      {
      -  "modules": [
      -    {
      -      "dependencies": [
      -        {
      -          "arch": "noarch",
      -          "epoch": "0",
      -          "name": "basesystem",
      -          "release": "7.el7",
      -          "version": "10.0"
      -        },
      -        {
      -          "arch": "x86_64",
      -          "epoch": "0",
      -          "name": "bash",
      -          "release": "28.el7",
      -          "version": "4.2.46"
      -        },
      -        ...
      -      ],
      -      "description": "The GNU tar program saves ...",
      -      "homepage": "http://www.gnu.org/software/tar/",
      -      "name": "tar",
      -      "summary": "A GNU file archiving program",
      -      "upstream_vcs": "UPSTREAM_VCS"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_modules_list(module_names=None)[source]
      -

      List available modules, filtering by module_names

      -

      /api/v0/modules/list[?offset=0&limit=20]

      -
      -

      Return a list of all of the available modules. This includes the name and the -group_type, which is always "rpm" for lorax-composer. By default this returns -the first 20 items. This can be changed by setting the offset and limit -arguments.

      -

      Example:

      -
      {
      -  "limit": 20,
      -  "modules": [
      -    {
      -      "group_type": "rpm",
      -      "name": "0ad"
      -    },
      -    {
      -      "group_type": "rpm",
      -      "name": "0ad-data"
      -    },
      -    {
      -      "group_type": "rpm",
      -      "name": "0install"
      -    },
      -    {
      -      "group_type": "rpm",
      -      "name": "2048-cli"
      -    },
      -    ...
      -  ]
      -  "total": 21770
      -}
      -
      -
      -
      -

      /api/v0/modules/list/<module_names>[?offset=0&limit=20]

      -
      -

      Return the list of comma-separated modules. Output is the same as /modules/list

      -

      Example:

      -
      {
      -  "limit": 20,
      -  "modules": [
      -    {
      -      "group_type": "rpm",
      -      "name": "tar"
      -    }
      -  ],
      -  "offset": 0,
      -  "total": 1
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_depsolve(project_names)[source]
      -

      Return detailed information about the listed projects

      -

      /api/v0/projects/depsolve/<project_names>

      -
      -

      Depsolve the comma-separated list of projects and return the list of NEVRAs needed -to satisfy the request.

      -

      Example:

      -
      {
      -  "projects": [
      -    {
      -      "arch": "noarch",
      -      "epoch": "0",
      -      "name": "basesystem",
      -      "release": "7.el7",
      -      "version": "10.0"
      -    },
      -    {
      -      "arch": "x86_64",
      -      "epoch": "0",
      -      "name": "bash",
      -      "release": "28.el7",
      -      "version": "4.2.46"
      -    },
      -    {
      -      "arch": "x86_64",
      -      "epoch": "0",
      -      "name": "filesystem",
      -      "release": "21.el7",
      -      "version": "3.2"
      -    },
      -    ...
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_info(project_names)[source]
      -

      Return detailed information about the listed projects

      -

      /api/v0/projects/info/<project_names>

      -
      -

      Return information about the comma-separated list of projects. It includes the description -of the package along with the list of available builds.

      -

      Example:

      -
      {
      -  "projects": [
      -    {
      -      "builds": [
      -        {
      -          "arch": "x86_64",
      -          "build_config_ref": "BUILD_CONFIG_REF",
      -          "build_env_ref": "BUILD_ENV_REF",
      -          "build_time": "2017-03-01T08:39:23",
      -          "changelog": "- restore incremental backups correctly, files ...",
      -          "epoch": "2",
      -          "metadata": {},
      -          "release": "32.el7",
      -          "source": {
      -            "license": "GPLv3+",
      -            "metadata": {},
      -            "source_ref": "SOURCE_REF",
      -            "version": "1.26"
      -          }
      -        }
      -      ],
      -      "description": "The GNU tar program saves many ...",
      -      "homepage": "http://www.gnu.org/software/tar/",
      -      "name": "tar",
      -      "summary": "A GNU file archiving program",
      -      "upstream_vcs": "UPSTREAM_VCS"
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_list()[source]
      -

      List all of the available projects/packages

      -

      /api/v0/projects/list[?offset=0&limit=20]

      -
      -

      List all of the available projects. By default this returns the first 20 items, -but this can be changed by setting the offset and limit arguments.

      -

      Example:

      -
      {
      -  "limit": 20,
      -  "offset": 0,
      -  "projects": [
      -    {
      -      "description": "0 A.D. (pronounced "zero ey-dee") is a ...",
      -      "homepage": "http://play0ad.com",
      -      "name": "0ad",
      -      "summary": "Cross-Platform RTS Game of Ancient Warfare",
      -      "upstream_vcs": "UPSTREAM_VCS"
      -    },
      -    ...
      -  ],
      -  "total": 21770
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_source_delete(source_name)[source]
      -

      Delete the named source and return a status response

      -

      DELETE /api/v0/projects/source/delete/<source-name>

      -
      -

      Delete a user added source. This will fail if a system source is passed to -it.

      -

      The response will be a status response with status set to true, or an -error response with it set to false and an error message included.

      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_source_info(source_names)[source]
      -

      Return detailed info about the list of sources

      -

      /api/v0/projects/source/info/<source-names>

      -
      -

      Return information about the comma-separated list of source names. Or all of the -sources if '*' is passed. Note that general globbing is not supported, only '*'.

      -

      immutable system sources will have the "system" field set to true. User added sources -will have it set to false. System sources cannot be changed or deleted.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "sources": {
      -    "fedora": {
      -      "check_gpg": true,
      -      "check_ssl": true,
      -      "gpgkey_urls": [
      -        "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
      -      ],
      -      "name": "fedora",
      -      "proxy": "http://proxy.brianlane.com:8123",
      -      "system": true,
      -      "type": "yum-metalink",
      -      "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      -    }
      -  }
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_source_list()[source]
      -

      Return the list of source names

      -

      /api/v0/projects/source/list

      -
      -

      Return the list of repositories used for depsolving and installing packages.

      -

      Example:

      -
      {
      -  "sources": [
      -    "fedora",
      -    "fedora-cisco-openh264",
      -    "fedora-updates-testing",
      -    "fedora-updates"
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v0.v0_projects_source_new()[source]
      -

      Add a new package source. Or change an existing one

      -

      POST /api/v0/projects/source/new

      -
      -

      Add (or change) a source for use when depsolving blueprints and composing images.

      -

      The proxy and gpgkey_urls entries are optional. All of the others are required. The supported -types for the urls are:

      -
        -
      • yum-baseurl is a URL to a yum repository.

      • -
      • yum-mirrorlist is a URL for a mirrorlist.

      • -
      • yum-metalink is a URL for a metalink.

      • -
      -

      If check_ssl is true the https certificates must be valid. If they are self-signed you can either set -this to false, or add your Certificate Authority to the host system.

      -

      If check_gpg is true the GPG key must either be installed on the host system, or gpgkey_urls -should point to it.

      -

      You can edit an existing source (other than system sources), by doing a POST -of the new version of the source. It will overwrite the previous one.

      -

      Example:

      -
      {
      -    "name": "custom-source-1",
      -    "url": "https://url/path/to/repository/",
      -    "type": "yum-baseurl",
      -    "check_ssl": true,
      -    "check_gpg": true,
      -    "gpgkey_urls": [
      -        "https://url/path/to/gpg-key"
      -    ]
      -}
      -
      -
      -
      -
      - -
      -
      -
      -

      pylorax.api.v1 module

      -

      Setup v1 of the API server

      -
      -
      -pylorax.api.v1.v1_compose_failed()[source]
      -

      Return the list of failed composes

      -

      /api/v1/compose/failed

      -
      -

      Return the details on all of the failed composes on the system.

      -

      Example:

      -
      {
      -  "failed": [
      -     {
      -      "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
      -      "blueprint": "http-server",
      -      "queue_status": "FAILED",
      -      "job_created": 1517523249.9301329,
      -      "job_started": 1517523249.9314211,
      -      "job_finished": 1517523255.5623411,
      -      "version": "0.0.2",
      -      "uploads": [
      -          {
      -              "creation_time": 1568150660.524401,
      -              "image_name": "http-server",
      -              "image_path": null,
      -              "provider_name": "azure",
      -              "settings": {
      -                  "client_id": "need",
      -                  "location": "need",
      -                  "resource_group": "group",
      -                  "secret": "need",
      -                  "storage_account_name": "need",
      -                  "storage_container": "need",
      -                  "subscription_id": "need",
      -                  "tenant": "need"
      -              },
      -              "status": "WAITING",
      -              "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65"
      -          }
      -      ]
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_finished()[source]
      -

      Return the list of finished composes

      -

      /api/v1/compose/finished

      -
      -

      Return the details on all of the finished composes on the system.

      -

      Example:

      -
      {
      -  "finished": [
      -    {
      -      "id": "70b84195-9817-4b8a-af92-45e380f39894",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517351003.8210032,
      -      "job_started": 1517351003.8230415,
      -      "job_finished": 1517359234.1003145,
      -      "version": "0.0.6"
      -    },
      -    {
      -      "id": "e695affd-397f-4af9-9022-add2636e7459",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517362289.7193348,
      -      "job_started": 1517362289.9751132,
      -      "job_finished": 1517363500.1234567,
      -      "version": "0.0.6",
      -      "uploads": [
      -          {
      -              "creation_time": 1568150660.524401,
      -              "image_name": "glusterfs server",
      -              "image_path": "/var/lib/lorax/composer/results/e695affd-397f-4af9-9022-add2636e7459/disk.vhd",
      -              "provider_name": "azure",
      -              "settings": {
      -                  "client_id": "need",
      -                  "location": "need",
      -                  "resource_group": "group",
      -                  "secret": "need",
      -                  "storage_account_name": "need",
      -                  "storage_container": "need",
      -                  "subscription_id": "need",
      -                  "tenant": "need"
      -              },
      -              "status": "WAITING",
      -              "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65"
      -          }
      -      ]
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_info(uuid)[source]
      -

      Return detailed info about a compose

      -

      /api/v1/compose/info/<uuid>

      -
      -

      Get detailed information about the compose. The returned JSON string will -contain the following information:

      -
      -
        -
      • id - The uuid of the comoposition

      • -
      • config - containing the configuration settings used to run Anaconda

      • -
      • blueprint - The depsolved blueprint used to generate the kickstart

      • -
      • commit - The (local) git commit hash for the blueprint used

      • -
      • deps - The NEVRA of all of the dependencies used in the composition

      • -
      • compose_type - The type of output generated (tar, iso, etc.)

      • -
      • queue_status - The final status of the composition (FINISHED or FAILED)

      • -
      -
      -

      Example:

      -
      {
      -  "commit": "7078e521a54b12eae31c3fd028680da7a0815a4d",
      -  "compose_type": "tar",
      -  "config": {
      -    "anaconda_args": "",
      -    "armplatform": "",
      -    "compress_args": [],
      -    "compression": "xz",
      -    "image_name": "root.tar.xz",
      -    ...
      -  },
      -  "deps": {
      -    "packages": [
      -      {
      -        "arch": "x86_64",
      -        "epoch": "0",
      -        "name": "acl",
      -        "release": "14.el7",
      -        "version": "2.2.51"
      -      }
      -    ]
      -  },
      -  "id": "c30b7d80-523b-4a23-ad52-61b799739ce8",
      -  "queue_status": "FINISHED",
      -  "blueprint": {
      -    "description": "An example kubernetes master",
      -    ...
      -  },
      -  "uploads": [
      -      {
      -          "creation_time": 1568150660.524401,
      -          "image_name": "glusterfs server",
      -          "image_path": "/var/lib/lorax/composer/results/c30b7d80-523b-4a23-ad52-61b799739ce8/disk.vhd",
      -          "provider_name": "azure",
      -          "settings": {
      -              "client_id": "need",
      -              "location": "need",
      -              "resource_group": "group",
      -              "secret": "need",
      -              "storage_account_name": "need",
      -              "storage_container": "need",
      -              "subscription_id": "need",
      -              "tenant": "need"
      -          },
      -          "status": "FAILED",
      -          "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65"
      -      }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_queue()[source]
      -

      Return the status of the new and running queues

      -

      /api/v1/compose/queue

      -
      -

      Return the status of the build queue. It includes information about the builds waiting, -and the build that is running.

      -

      Example:

      -
      {
      -  "new": [
      -    {
      -      "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
      -      "blueprint": "glusterfs",
      -      "queue_status": "WAITING",
      -      "job_created": 1517362647.4570868,
      -      "version": "0.0.6"
      -    },
      -    {
      -      "id": "6d292bd0-bec7-4825-8d7d-41ef9c3e4b73",
      -      "blueprint": "kubernetes",
      -      "queue_status": "WAITING",
      -      "job_created": 1517362659.0034983,
      -      "version": "0.0.1"
      -    }
      -  ],
      -  "run": [
      -    {
      -      "id": "745712b2-96db-44c0-8014-fe925c35e795",
      -      "blueprint": "glusterfs",
      -      "queue_status": "RUNNING",
      -      "job_created": 1517362633.7965999,
      -      "job_started": 1517362633.8001345,
      -      "version": "0.0.6",
      -      "uploads": [
      -          {
      -              "creation_time": 1568150660.524401,
      -              "image_name": "glusterfs server",
      -              "image_path": null,
      -              "provider_name": "azure",
      -              "settings": {
      -                  "client_id": "need",
      -                  "location": "need",
      -                  "resource_group": "group",
      -                  "secret": "need",
      -                  "storage_account_name": "need",
      -                  "storage_container": "need",
      -                  "subscription_id": "need",
      -                  "tenant": "need"
      -              },
      -              "status": "WAITING",
      -              "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65"
      -          }
      -      ]
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_start()[source]
      -

      Start a compose

      -
      -
      The body of the post should have these fields:

      blueprint_name - The blueprint name from /blueprints/list/ -compose_type - The type of output to create, from /compose/types -branch - Optional, defaults to master, selects the git branch to use for the blueprint.

      -
      -
      -

      POST /api/v1/compose

      -
      -

      Start a compose. The content type should be 'application/json' and the body of the POST -should look like this. The "upload" object is optional.

      -

      The upload object can specify either a pre-existing profile to use (as returned by -/uploads/providers) or one-time use settings for the provider.

      -

      Example with upload profile:

      -
      {
      -  "blueprint_name": "http-server",
      -  "compose_type": "tar",
      -  "branch": "master",
      -  "upload": {
      -    "image_name": "My Image",
      -    "provider": "azure",
      -    "profile": "production-azure-settings"
      -  }
      -}
      -
      -
      -

      Example with upload settings:

      -
      {
      -  "blueprint_name": "http-server",
      -  "compose_type": "tar",
      -  "branch": "master",
      -  "upload": {
      -    "image_name": "My Image",
      -    "provider": "azure",
      -    "settings": {
      -      "resource_group": "SOMEBODY",
      -      "storage_account_name": "ONCE",
      -      "storage_container": "TOLD",
      -      "location": "ME",
      -      "subscription_id": "THE",
      -      "client_id": "WORLD",
      -      "secret": "IS",
      -      "tenant": "GONNA"
      -    }
      -  }
      -}
      -
      -
      -

      Pass it the name of the blueprint, the type of output (from -'/api/v1/compose/types'), and the blueprint branch to use. 'branch' is -optional and will default to master. It will create a new build and add -it to the queue. It returns the build uuid and a status if it succeeds. -If an "upload" is given, it will schedule an upload to run when the build -finishes.

      -

      Example response:

      -
      {
      -  "build_id": "e6fa6db4-9c81-4b70-870f-a697ca405cdf",
      -  "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb",
      -  "status": true
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_status(uuids)[source]
      -

      Return the status of the listed uuids

      -

      /api/v1/compose/status/<uuids>[?blueprint=<blueprint_name>&status=<compose_status>&type=<compose_type>]

      -
      -

      Return the details for each of the comma-separated list of uuids. A uuid of '*' will return -details for all composes.

      -

      Example:

      -
      {
      -  "uuids": [
      -    {
      -      "id": "8c8435ef-d6bd-4c68-9bf1-a2ef832e6b1a",
      -      "blueprint": "http-server",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517523644.2384307,
      -      "job_started": 1517523644.2551234,
      -      "job_finished": 1517523689.9864314,
      -      "version": "0.0.2"
      -    },
      -    {
      -      "id": "45502a6d-06e8-48a5-a215-2b4174b3614b",
      -      "blueprint": "glusterfs",
      -      "queue_status": "FINISHED",
      -      "job_created": 1517363442.188399,
      -      "job_started": 1517363442.325324,
      -      "job_finished": 1517363451.653621,
      -      "version": "0.0.6",
      -      "uploads": [
      -          {
      -              "creation_time": 1568150660.524401,
      -              "image_name": "glusterfs server",
      -              "image_path": null,
      -              "provider_name": "azure",
      -              "settings": {
      -                  "client_id": "need",
      -                  "location": "need",
      -                  "resource_group": "group",
      -                  "secret": "need",
      -                  "storage_account_name": "need",
      -                  "storage_container": "need",
      -                  "subscription_id": "need",
      -                  "tenant": "need"
      -              },
      -              "status": "WAITING",
      -              "uuid": "21898dfd-9ac9-4e22-bb1d-7f12d0129e65"
      -          }
      -      ]
      -    }
      -  ]
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_uploads_delete(upload_uuid)[source]
      -

      Delete an upload and disassociate it from its compose

      -

      DELETE /api/v1/upload/delete/<upload_uuid>

      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb"
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_compose_uploads_schedule(compose_uuid)[source]
      -

      Schedule an upload of a compose to a given cloud provider

      -

      POST /api/v1/uploads/schedule/<compose_uuid>

      -
      -

      The body can specify either a pre-existing profile to use (as returned by -/uploads/providers) or one-time use settings for the provider.

      -

      Example with upload profile:

      -
      {
      -  "image_name": "My Image",
      -  "provider": "azure",
      -  "profile": "production-azure-settings"
      -}
      -
      -
      -

      Example with upload settings:

      -
      {
      -  "image_name": "My Image",
      -  "provider": "azure",
      -  "settings": {
      -    "resource_group": "SOMEBODY",
      -    "storage_account_name": "ONCE",
      -    "storage_container": "TOLD",
      -    "location": "ME",
      -    "subscription_id": "THE",
      -    "client_id": "WORLD",
      -    "secret": "IS",
      -    "tenant": "GONNA"
      -  }
      -}
      -
      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload_id": "572eb0d0-5348-4600-9666-14526ba628bb"
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_projects_source_info(source_ids)[source]
      -

      Return detailed info about the list of sources

      -

      /api/v1/projects/source/info/<source-ids>

      -
      -

      Return information about the comma-separated list of source ids. Or all of the -sources if '*' is passed. Note that general globbing is not supported, only '*'.

      -

      Immutable system sources will have the "system" field set to true. User added sources -will have it set to false. System sources cannot be changed or deleted.

      -

      Example:

      -
      {
      -  "errors": [],
      -  "sources": {
      -    "fedora": {
      -      "check_gpg": true,
      -      "check_ssl": true,
      -      "gpgkey_urls": [
      -        "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"
      -      ],
      -      "id": "fedora",
      -      "name": "Fedora $releasever - $basearch",
      -      "proxy": "http://proxy.brianlane.com:8123",
      -      "system": true,
      -      "type": "yum-metalink",
      -      "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"
      -    }
      -  }
      -}
      -
      -
      -
      -

      In v0 the name field was used for the id (a short name for the repo). In v1 name changed -to id and name is now used for the longer descriptive name of the repository.

      -
      - -
      -
      -pylorax.api.v1.v1_projects_source_new()[source]
      -

      Add a new package source. Or change an existing one

      -

      POST /api/v1/projects/source/new

      -
      -

      Add (or change) a source for use when depsolving blueprints and composing images.

      -

      The proxy and gpgkey_urls entries are optional. All of the others are required. The supported -types for the urls are:

      -
        -
      • yum-baseurl is a URL to a yum repository.

      • -
      • yum-mirrorlist is a URL for a mirrorlist.

      • -
      • yum-metalink is a URL for a metalink.

      • -
      -

      If check_ssl is true the https certificates must be valid. If they are self-signed you can either set -this to false, or add your Certificate Authority to the host system.

      -

      If check_gpg is true the GPG key must either be installed on the host system, or gpgkey_urls -should point to it.

      -

      You can edit an existing source (other than system sources), by doing a POST -of the new version of the source. It will overwrite the previous one.

      -

      Example:

      -
      {
      -    "id": "custom-source-1",
      -    "name": "Custom Package Source #1",
      -    "url": "https://url/path/to/repository/",
      -    "type": "yum-baseurl",
      -    "check_ssl": true,
      -    "check_gpg": true,
      -    "gpgkey_urls": [
      -        "https://url/path/to/gpg-key"
      -    ]
      -}
      -
      -
      -
      -

      In v0 the name field was used for the id (a short name for the repo). In v1 name changed -to id and name is now used for the longer descriptive name of the repository.

      -
      - -
      -
      -pylorax.api.v1.v1_providers_delete(provider_name, profile)[source]
      -

      Delete a provider's profile settings

      -

      DELETE /api/v1/upload/providers/delete/<provider_name>/<profile>

      -
      -

      Example response:

      -
      {
      -  "status": true
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_providers_save()[source]
      -

      Save provider settings as a profile for later use

      -

      POST /api/v1/upload/providers/save

      -
      -

      Example request:

      -
      {
      -  "provider": "azure",
      -  "profile": "my-profile",
      -  "settings": {
      -    "resource_group": "SOMEBODY",
      -    "storage_account_name": "ONCE",
      -    "storage_container": "TOLD",
      -    "location": "ME",
      -    "subscription_id": "THE",
      -    "client_id": "WORLD",
      -    "secret": "IS",
      -    "tenant": "GONNA"
      -  }
      -}
      -
      -
      -

      Saving to an existing profile will overwrite it.

      -

      Example response:

      -
      {
      -  "status": true
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_upload_cancel(upload_uuid)[source]
      -

      Cancel an upload that is either queued or in progress

      -

      DELETE /api/v1/upload/cancel/<upload_uuid>

      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload_id": "037a3d56-b421-43e9-9935-c98350c89996"
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_upload_info(upload_uuid)[source]
      -

      Returns information about a given upload

      -

      GET /api/v1/upload/info/<upload_uuid>

      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload": {
      -    "creation_time": 1565620940.069004,
      -    "image_name": "My Image",
      -    "image_path": "/var/lib/lorax/composer/results/b6218e8f-0fa2-48ec-9394-f5c2918544c4/disk.vhd",
      -    "provider_name": "azure",
      -    "settings": {
      -      "resource_group": "SOMEBODY",
      -      "storage_account_name": "ONCE",
      -      "storage_container": "TOLD",
      -      "location": "ME",
      -      "subscription_id": "THE",
      -      "client_id": "WORLD",
      -      "secret": "IS",
      -      "tenant": "GONNA"
      -    },
      -    "status": "FAILED",
      -    "uuid": "b637c411-9d9d-4279-b067-6c8d38e3b211"
      -  }
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_upload_log(upload_uuid)[source]
      -

      Returns an upload's log

      -

      GET /api/v1/upload/log/<upload_uuid>

      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload_id": "b637c411-9d9d-4279-b067-6c8d38e3b211",
      -  "log": "< PLAY [localhost] >..."
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_upload_providers()[source]
      -

      Return the information about all upload providers, including their -display names, expected settings, and saved profiles. Refer to the -resolve_provider function.

      -

      GET /api/v1/upload/providers

      -
      -

      Example response:

      -
      {
      -  "providers": {
      -    "azure": {
      -      "display": "Azure",
      -      "profiles": {
      -        "default": {
      -          "client_id": "example",
      -          ...
      -        }
      -      },
      -      "settings-info": {
      -        "client_id": {
      -          "display": "Client ID",
      -          "placeholder": "",
      -          "regex": "",
      -          "type": "string"
      -        },
      -        ...
      -      },
      -      "supported_types": ["vhd"]
      -    },
      -    ...
      -  }
      -}
      -
      -
      -
      -
      - -
      -
      -pylorax.api.v1.v1_upload_reset(upload_uuid)[source]
      -

      Reset an upload so it can be attempted again

      -

      POST /api/v1/upload/reset/<upload_uuid>

      -
      -

      Optionally pass in a new image name and/or new settings.

      -

      Example request:

      -
      {
      -  "image_name": "My renamed image",
      -  "settings": {
      -    "resource_group": "ROLL",
      -    "storage_account_name": "ME",
      -    "storage_container": "I",
      -    "location": "AIN'T",
      -    "subscription_id": "THE",
      -    "client_id": "SHARPEST",
      -    "secret": "TOOL",
      -    "tenant": "IN"
      -  }
      -}
      -
      -
      -

      Example response:

      -
      {
      -  "status": true,
      -  "upload_id": "c75d5d62-9d26-42fc-a8ef-18bb14679fc7"
      -}
      -
      -
      -
      -
      - -
      -
      -

      pylorax.api.workspace module

      -
      -
      -pylorax.api.workspace.workspace_delete(repo, branch, recipe_name)[source]
      -

      Delete the recipe from the workspace

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- The name of the recipe

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      IO related errors

      -
      -
      -
      - -
      -
      -pylorax.api.workspace.workspace_dir(repo, branch)[source]
      -

      Create the workspace's path from a Repository and branch

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      -
      -
      Returns
      -

      The path to the branch's workspace directory

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.workspace.workspace_exists(repo, branch, recipe_name)[source]
      -

      Return true of the workspace recipe exists

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- The name of the recipe

      • -
      -
      -
      Returns
      -

      True if the file exists

      -
      -
      Return type
      -

      bool

      -
      -
      -
      - -
      -
      -pylorax.api.workspace.workspace_filename(repo, branch, recipe_name)[source]
      -

      Return the path and filename of the workspace recipe

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- The name of the recipe

      • -
      -
      -
      Returns
      -

      workspace recipe path and filename

      -
      -
      Return type
      -

      str

      -
      -
      -
      - -
      -
      -pylorax.api.workspace.workspace_read(repo, branch, recipe_name)[source]
      -

      Read a Recipe from the branch's workspace

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe_name (str) -- The name of the recipe

      • -
      -
      -
      Returns
      -

      The workspace copy of the recipe, or None if it doesn't exist

      -
      -
      Return type
      -

      Recipe or None

      -
      -
      Raises
      -

      RecipeFileError

      -
      -
      -
      - -
      -
      -pylorax.api.workspace.workspace_write(repo, branch, recipe)[source]
      -

      Write a recipe to the workspace

      -
      -
      Parameters
      -
        -
      • repo (Git.Repository) -- Open repository

      • -
      • branch (str) -- Branch name

      • -
      • recipe (Recipe) -- The recipe to write to the workspace

      • -
      -
      -
      Returns
      -

      None

      -
      -
      Raises
      -

      IO related errors

      -
      -
      -
      - -
      -
      -

      Module contents

      -
      -
      - - -
      - -
      - - -
      -
      - -
      - -
      - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/pylorax.html b/docs/html/pylorax.html index 6afe8e3f..701d55bd 100644 --- a/docs/html/pylorax.html +++ b/docs/html/pylorax.html @@ -1,41 +1,41 @@ - - + - + - + + + pylorax package — Lorax 34.10 documentation + + + + + + - pylorax package — Lorax 34.3 documentation - + - - - - - - - + @@ -59,7 +59,7 @@
      - 34.3 + 34.10
      @@ -76,6 +76,7 @@ + + @@ -157,11 +157,13 @@ + +
        -
      • Docs »
      • +
      • »
      • src »
      • @@ -170,7 +172,7 @@
      • - + View page source @@ -193,42 +195,42 @@

        pylorax.base module

        -class pylorax.base.BaseLoraxClass[source]
        -

        Bases: object

        +class pylorax.base.BaseLoraxClass[source] +

        Bases: object

        -pcritical(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        +pcritical(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        -pdebug(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        +pdebug(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        -perror(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        +perror(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        -pinfo(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        +pinfo(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        -pwarning(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        +pwarning(msg, fobj=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)[source]
        -class pylorax.base.DataHolder(**kwargs)[source]
        -

        Bases: dict

        +class pylorax.base.DataHolder(**kwargs)[source] +

        Bases: dict

        -copy() → a shallow copy of D[source]
        +copy()a shallow copy of D[source]
        @@ -238,11 +240,11 @@

        pylorax.buildstamp module

        -class pylorax.buildstamp.BuildStamp(product, version, bugurl, isfinal, buildarch, variant='')[source]
        -

        Bases: object

        +class pylorax.buildstamp.BuildStamp(product, version, bugurl, isfinal, buildarch, variant='')[source] +

        Bases: object

        -write(outfile)[source]
        +write(outfile)[source]
        @@ -252,13 +254,13 @@

        pylorax.cmdline module

        -pylorax.cmdline.lmc_parser(dracut_default='')[source]
        +pylorax.cmdline.lmc_parser(dracut_default='')[source]

        Return a ArgumentParser object for live-media-creator.

        -pylorax.cmdline.lorax_parser(dracut_default='')[source]
        +pylorax.cmdline.lorax_parser(dracut_default='')[source]

        Return the ArgumentParser for lorax

        @@ -267,35 +269,35 @@

        pylorax.creator module

        -class pylorax.creator.FakeDNF(conf)[source]
        -

        Bases: object

        +class pylorax.creator.FakeDNF(conf)[source] +

        Bases: object

        A minimal DNF object suitable for passing to RuntimeBuilder

        lmc uses RuntimeBuilder to run the arch specific iso creation templates, so the the installroot config value is the important part of this. Everything else should be a nop.

        -reset()[source]
        +reset()[source]
        -pylorax.creator.calculate_disk_size(opts, ks)[source]
        +pylorax.creator.calculate_disk_size(opts, ks)[source]

        Calculate the disk size from the kickstart

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • ks (str) -- Path to the kickstart to use for the installation

        • +
        • ks (str) -- Path to the kickstart to use for the installation

        Returns

        Disk size in MiB

        Return type
        -

        int

        +

        int

        Also takes into account the use of reqpart or reqpart --add-boot

        @@ -303,7 +305,7 @@ this. Everything else should be a nop.

        -pylorax.creator.check_kickstart(ks, opts)[source]
        +pylorax.creator.check_kickstart(ks, opts)[source]

        Check the parsed kickstart object for errors

        Parameters
        @@ -316,21 +318,21 @@ this. Everything else should be a nop.

        List of error strings or empty list

        Return type
        -

        list

        +

        list

        -pylorax.creator.create_pxe_config(template, images_dir, live_image_name, add_args=None)[source]
        +pylorax.creator.create_pxe_config(template, images_dir, live_image_name, add_args=None)[source]

        Create template for pxe to live configuration

        Parameters
          -
        • images_dir (str) -- Path of directory with images to be used

        • -
        • live_image_name (str) -- Name of live rootfs image file

        • -
        • add_args (list) -- Arguments to be added to initrd= pxe config

        • +
        • images_dir (str) -- Path of directory with images to be used

        • +
        • live_image_name (str) -- Name of live rootfs image file

        • +
        • add_args (list) -- Arguments to be added to initrd= pxe config

        @@ -338,7 +340,7 @@ this. Everything else should be a nop.

        -pylorax.creator.dracut_args(opts)[source]
        +pylorax.creator.dracut_args(opts)[source]

        Return a list of the args to pass to dracut

        Return the default argument list unless one of the dracut cmdline arguments has been used.

        @@ -346,70 +348,70 @@ has been used.

        -pylorax.creator.find_ostree_root(phys_root)[source]
        +pylorax.creator.find_ostree_root(phys_root)[source]

        Find root of ostree deployment

        Parameters
        -

        phys_root (str) -- Path to physical root

        +

        phys_root (str) -- Path to physical root

        Returns

        Relative path of ostree deployment root

        Return type
        -

        str

        +

        str

        Raises
        -

        Exception -- More than one deployment roots were found

        +

        Exception -- More than one deployment roots were found

        -pylorax.creator.get_arch(mount_dir)[source]
        +pylorax.creator.get_arch(mount_dir)[source]

        Get the kernel arch

        Returns

        Arch of first kernel found at mount_dir/boot/ or i386

        Return type
        -

        str

        +

        str

        -pylorax.creator.is_image_mounted(disk_img)[source]
        +pylorax.creator.is_image_mounted(disk_img)[source]

        Check to see if the disk_img is mounted

        Returns

        True if disk_img is in /proc/mounts

        Return type
        -

        bool

        +

        bool

        -pylorax.creator.make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, vcpus=1, arch=None, title='Linux', project='Linux', releasever='32')[source]
        +pylorax.creator.make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, vcpus=1, arch=None, title='Linux', project='Linux', releasever='34')[source]

        Generate an appliance description file

        Parameters
          -
        • disk_img (str) -- Full path of the disk image

        • -
        • name (str) -- Name of the appliance, passed to the template

        • -
        • template (str) -- Full path of Mako template

        • -
        • outfile (str) -- Full path of file to write, using template

        • -
        • networks (list) -- List of networks(str) from the kickstart

        • -
        • ram (int) -- Ram, in MiB, passed to template. Default is 1024

        • -
        • vcpus (int) -- CPUs, passed to template. Default is 1

        • -
        • arch (str) -- CPU architecture. Default is 'x86_64'

        • -
        • title (str) -- Title, passed to template. Default is 'Linux'

        • -
        • project (str) -- Project, passed to template. Default is 'Linux'

        • -
        • releasever (str) -- Release version, passed to template. Default is 32

        • +
        • disk_img (str) -- Full path of the disk image

        • +
        • name (str) -- Name of the appliance, passed to the template

        • +
        • template (str) -- Full path of Mako template

        • +
        • outfile (str) -- Full path of file to write, using template

        • +
        • networks (list) -- List of networks(str) from the kickstart

        • +
        • ram (int) -- Ram, in MiB, passed to template. Default is 1024

        • +
        • vcpus (int) -- CPUs, passed to template. Default is 1

        • +
        • arch (str) -- CPU architecture. Default is 'x86_64'

        • +
        • title (str) -- Title, passed to template. Default is 'Linux'

        • +
        • project (str) -- Project, passed to template. Default is 'Linux'

        • +
        • releasever (str) -- Release version, passed to template. Default is 34

        @@ -417,13 +419,13 @@ has been used.

        -pylorax.creator.make_image(opts, ks, cancel_func=None)[source]
        +pylorax.creator.make_image(opts, ks, cancel_func=None)[source]

        Install to a disk image

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • ks (str) -- Path to the kickstart to use for the installation

        • +
        • ks (str) -- Path to the kickstart to use for the installation

        • cancel_func (function) -- Function that returns True to cancel build

        @@ -431,7 +433,7 @@ has been used.

        Path of the image created

        Return type
        -

        str

        +

        str

        Use qemu+boot.iso or anaconda to install to a disk image.

        @@ -439,21 +441,21 @@ has been used.

        -pylorax.creator.make_live_images(opts, work_dir, disk_img)[source]
        +pylorax.creator.make_live_images(opts, work_dir, disk_img)[source]

        Create live images from direcory or rootfs image

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • work_dir (str) -- Directory for storing results

        • -
        • disk_img (str) -- Path to disk image (fsimage or partitioned)

        • +
        • work_dir (str) -- Directory for storing results

        • +
        • disk_img (str) -- Path to disk image (fsimage or partitioned)

        Returns

        Path of directory with created images or None

        Return type
        -

        str

        +

        str

        fsck.ext4 is run on the rootfs_image to make sure there are no errors and to zero @@ -463,14 +465,14 @@ it will return None and log the error.

        -pylorax.creator.make_livecd(opts, mount_dir, work_dir)[source]
        +pylorax.creator.make_livecd(opts, mount_dir, work_dir)[source]

        Take the content from the disk image and make a livecd out of it

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • mount_dir (str) -- Directory tree to compress

        • -
        • work_dir (str) -- Output compressed image to work_dir+images/install.img

        • +
        • mount_dir (str) -- Directory tree to compress

        • +
        • work_dir (str) -- Output compressed image to work_dir+images/install.img

        @@ -487,29 +489,29 @@ root=live:CDLABEL=<volid> rd.live.image

      • -pylorax.creator.make_runtime(opts, mount_dir, work_dir, size=None)[source]
        +pylorax.creator.make_runtime(opts, mount_dir, work_dir, size=None)[source]

        Make the squashfs image from a directory

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • mount_dir (str) -- Directory tree to compress

        • -
        • work_dir (str) -- Output compressed image to work_dir+images/install.img

        • -
        • size (int) -- Size of disk image, in GiB

        • +
        • mount_dir (str) -- Directory tree to compress

        • +
        • work_dir (str) -- Output compressed image to work_dir+images/install.img

        • +
        • size (int) -- Size of disk image, in GiB

        Returns

        rc of squashfs creation

        Return type
        -

        int

        +

        int

        -pylorax.creator.mount_boot_part_over_root(img_mount)[source]
        +pylorax.creator.mount_boot_part_over_root(img_mount)[source]

        Mount boot partition to /boot of root fs mounted in img_mount

        Used for OSTree so it finds deployment configurations on live rootfs

        param img_mount: object with mounted disk image root partition @@ -518,14 +520,14 @@ type img_mount: imgutils.PartitionMount

        -pylorax.creator.rebuild_initrds_for_live(opts, sys_root_dir, results_dir)[source]
        +pylorax.creator.rebuild_initrds_for_live(opts, sys_root_dir, results_dir)[source]

        Rebuild intrds for pxe live image (root=live:http://)

        Parameters
        • opts (argparse options) -- options passed to livemedia-creator

        • -
        • sys_root_dir (str) -- Path to root of the system

        • -
        • results_dir (str) -- Path of directory for storing results

        • +
        • sys_root_dir (str) -- Path to root of the system

        • +
        • results_dir (str) -- Path of directory for storing results

        @@ -533,7 +535,7 @@ type img_mount: imgutils.PartitionMount

        -pylorax.creator.run_creator(opts, cancel_func=None)[source]
        +pylorax.creator.run_creator(opts, cancel_func=None)[source]

        Run the image creator process

        Parameters
        @@ -556,7 +558,7 @@ See the cmdline --help for livemedia-creator for the possible options

        -pylorax.creator.squashfs_args(opts)[source]
        +pylorax.creator.squashfs_args(opts)[source]

        Returns the compression type and args to use when making squashfs

        Parameters
        @@ -566,7 +568,7 @@ See the cmdline --help for livemedia-creator for the possible options

        tuple of compression type and args

        Return type
        -

        tuple

        +

        tuple

        @@ -576,7 +578,7 @@ See the cmdline --help for livemedia-creator for the possible options

        pylorax.decorators module

        -pylorax.decorators.singleton(cls)[source]
        +pylorax.decorators.singleton(cls)[source]
      @@ -584,11 +586,11 @@ See the cmdline --help for livemedia-creator for the possible options

      pylorax.discinfo module

      -class pylorax.discinfo.DiscInfo(release, basearch)[source]
      -

      Bases: object

      +class pylorax.discinfo.DiscInfo(release, basearch)[source] +

      Bases: object

      -write(outfile)[source]
      +write(outfile)[source]
      @@ -598,21 +600,21 @@ See the cmdline --help for livemedia-creator for the possible options

      pylorax.dnfbase module

      -pylorax.dnfbase.get_dnf_base_object(installroot, sources, mirrorlists=None, repos=None, enablerepos=None, disablerepos=None, tempdir='/var/tmp', proxy=None, releasever='32', cachedir=None, logdir=None, sslverify=True, dnfplugins=None)[source]
      +pylorax.dnfbase.get_dnf_base_object(installroot, sources, mirrorlists=None, repos=None, enablerepos=None, disablerepos=None, tempdir='/var/tmp', proxy=None, releasever='34', cachedir=None, logdir=None, sslverify=True, dnfplugins=None)[source]

      Create a dnf Base object and setup the repositories and installroot

      Parameters
      • installroot (string) -- Full path to the installroot

      • -
      • sources (list) -- List of source repo urls to use for the installation

      • -
      • enablerepos (list) -- List of repo names to enable

      • -
      • disablerepos (list) -- List of repo names to disable

      • -
      • mirrorlist (list) -- List of mirrors to use

      • +
      • sources (list) -- List of source repo urls to use for the installation

      • +
      • enablerepos (list) -- List of repo names to enable

      • +
      • disablerepos (list) -- List of repo names to disable

      • +
      • mirrorlist (list) -- List of mirrors to use

      • tempdir (string) -- Path of temporary directory

      • proxy (string) -- http proxy to use when fetching packages

      • releasever (string) -- Release version to pass to dnf

      • cachedir (string) -- Directory to use for caching packages

      • -
      • noverifyssl (bool) -- Set to True to ignore the CA of ssl certs. eg. use self-signed ssl for https repos.

      • +
      • noverifyssl (bool) -- Set to True to ignore the CA of ssl certs. eg. use self-signed ssl for https repos.

      @@ -625,37 +627,37 @@ If cachedir is None a dnf.cache directory is created inside tmpdir

      pylorax.dnfhelper module

      -class pylorax.dnfhelper.LoraxDownloadCallback[source]
      +class pylorax.dnfhelper.LoraxDownloadCallback[source]

      Bases: DownloadProgress

      -end(payload, status, msg)[source]
      +end(payload, status, msg)[source]
      -progress(payload, done)[source]
      +progress(payload, done)[source]
      -start(total_files, total_size, total_drpms=0)[source]
      +start(total_files, total_size, total_drpms=0)[source]
      -class pylorax.dnfhelper.LoraxRpmCallback[source]
      +class pylorax.dnfhelper.LoraxRpmCallback[source]

      Bases: TransactionProgress

      -error(message)[source]
      +error(message)[source]
      -progress(package, action, ti_done, ti_total, ts_done, ts_total)[source]
      +progress(package, action, ti_done, ti_total, ts_done, ts_total)[source]
      @@ -665,18 +667,18 @@ If cachedir is None a dnf.cache directory is created inside tmpdir

      pylorax.executils module

      -class pylorax.executils.ExecProduct(rc, stdout, stderr)[source]
      -

      Bases: object

      +class pylorax.executils.ExecProduct(rc, stdout, stderr)[source] +

      Bases: object

      -pylorax.executils.augmentEnv()[source]
      +pylorax.executils.augmentEnv()[source]
      -pylorax.executils.execReadlines(command, argv, stdin=None, root='/', env_prune=None, filter_stderr=False, callback=<function <lambda>>, env_add=None, reset_handlers=True, reset_lang=True)[source]
      +pylorax.executils.execReadlines(command, argv, stdin=None, root='/', env_prune=None, filter_stderr=False, callback=<function <lambda>>, env_add=None, reset_handlers=True, reset_lang=True)[source]

      Execute an external command and return the line output of the command in real-time.

      This method assumes that there is a reasonably low delay between the @@ -712,7 +714,7 @@ This returns an iterator with the lines from the command until it has finished

      -pylorax.executils.execWithCapture(command, argv, stdin=None, root='/', log_output=True, filter_stderr=False, raise_err=False, callback=None, env_add=None, reset_handlers=True, reset_lang=True)[source]
      +pylorax.executils.execWithCapture(command, argv, stdin=None, root='/', log_output=True, filter_stderr=False, raise_err=False, callback=None, env_add=None, reset_handlers=True, reset_lang=True)[source]

      Run an external program and capture standard out and err.

      Parameters
      @@ -737,7 +739,7 @@ This returns an iterator with the lines from the command until it has finished
      -pylorax.executils.execWithRedirect(command, argv, stdin=None, stdout=None, root='/', env_prune=None, log_output=True, binary_output=False, raise_err=False, callback=None, env_add=None, reset_handlers=True, reset_lang=True)[source]
      +pylorax.executils.execWithRedirect(command, argv, stdin=None, stdout=None, root='/', env_prune=None, log_output=True, binary_output=False, raise_err=False, callback=None, env_add=None, reset_handlers=True, reset_lang=True)[source]

      Run an external program and redirect the output to a file.

      Parameters
      @@ -765,19 +767,19 @@ This returns an iterator with the lines from the command until it has finished
      -pylorax.executils.runcmd(cmd, **kwargs)[source]
      +pylorax.executils.runcmd(cmd, **kwargs)[source]

      run execWithRedirect with raise_err=True

      -pylorax.executils.runcmd_output(cmd, **kwargs)[source]
      +pylorax.executils.runcmd_output(cmd, **kwargs)[source]

      run execWithCapture with raise_err=True

      -pylorax.executils.setenv(name, value)[source]
      +pylorax.executils.setenv(name, value)[source]

      Set an environment variable to be used by child processes.

      This method does not modify os.environ for the running process, which is not thread-safe. If setenv has already been called for a particular @@ -785,8 +787,8 @@ variable name, the old value is overwritten.

      Parameters
        -
      • name (str) -- The name of the environment variable

      • -
      • value (str) -- The value of the environment variable

      • +
      • name (str) -- The name of the environment variable

      • +
      • value (str) -- The value of the environment variable

      @@ -794,7 +796,7 @@ variable name, the old value is overwritten.

      -pylorax.executils.startProgram(argv, root='/', stdin=None, stdout=- 1, stderr=- 2, env_prune=None, env_add=None, reset_handlers=True, reset_lang=True, **kwargs)[source]
      +pylorax.executils.startProgram(argv, root='/', stdin=None, stdout=- 1, stderr=- 2, env_prune=None, env_add=None, reset_handlers=True, reset_lang=True, **kwargs)[source]

      Start an external program and return the Popen object.

      The root and reset_handlers arguments are handled by passing a preexec_fn argument to subprocess.Popen, but an additional preexec_fn @@ -827,32 +829,32 @@ last.

      pylorax.imgutils module

      -class pylorax.imgutils.DMDev(dev, size, name=None)[source]
      -

      Bases: object

      +class pylorax.imgutils.DMDev(dev, size, name=None)[source] +

      Bases: object

      -class pylorax.imgutils.LoopDev(filename, size=None)[source]
      -

      Bases: object

      +class pylorax.imgutils.LoopDev(filename, size=None)[source] +

      Bases: object

      -class pylorax.imgutils.Mount(dev, opts='', mnt=None)[source]
      -

      Bases: object

      +class pylorax.imgutils.Mount(dev, opts='', mnt=None)[source] +

      Bases: object

      -class pylorax.imgutils.PartitionMount(disk_img, mount_ok=None, submount=None)[source]
      -

      Bases: object

      +class pylorax.imgutils.PartitionMount(disk_img, mount_ok=None, submount=None)[source] +

      Bases: object

      Mount a partitioned image file using kpartx

      -pylorax.imgutils.compress(command, root, outfile, compression='xz', compressargs=None)[source]
      +pylorax.imgutils.compress(command, root, outfile, compression='xz', compressargs=None)[source]

      Make a compressed archive of the given rootdir or file. command is a list of the archiver commands to run compression should be "xz", "gzip", "lzma", "bzip2", or None. @@ -861,7 +863,7 @@ compressargs will be used on the compression commandline.

      -pylorax.imgutils.copytree(src, dest, preserve=True)[source]
      +pylorax.imgutils.copytree(src, dest, preserve=True)[source]

      Copy a tree of files using cp -a, thus preserving modes, timestamps, links, acls, sparse files, xattrs, selinux contexts, etc. If preserve is False, uses cp -R (useful for modeless filesystems) @@ -870,13 +872,13 @@ raises CalledProcessError if copy fails.

      -pylorax.imgutils.default_image_name(compression, basename)[source]
      +pylorax.imgutils.default_image_name(compression, basename)[source]

      Return a default image name with the correct suffix for the compression type.

      Parameters
        -
      • compression (str) -- Compression type

      • -
      • basename (str) -- Base filename

      • +
      • compression (str) -- Compression type

      • +
      • basename (str) -- Base filename

      Returns
      @@ -888,7 +890,7 @@ raises CalledProcessError if copy fails.

      -pylorax.imgutils.dm_attach(dev, size, name=None)[source]
      +pylorax.imgutils.dm_attach(dev, size, name=None)[source]

      Attach a devicemapper device to the given device, with the given size. If name is None, a random name will be chosen. Returns the device name. raises CalledProcessError if dmsetup fails.

      @@ -896,13 +898,13 @@ raises CalledProcessError if dmsetup fails.

      -pylorax.imgutils.dm_detach(dev)[source]
      +pylorax.imgutils.dm_detach(dev)[source]

      Detach the named devicemapper device. Returns False if dmsetup fails.

      -pylorax.imgutils.do_grafts(grafts, dest, preserve=True)[source]
      +pylorax.imgutils.do_grafts(grafts, dest, preserve=True)[source]

      Copy each of the items listed in grafts into dest. If the key ends with '/' it's assumed to be a directory which should be created, otherwise just the leading directories will be created.

      @@ -910,23 +912,23 @@ created, otherwise just the leading directories will be created.

      -pylorax.imgutils.estimate_size(rootdir, graft=None, fstype=None, blocksize=4096, overhead=256)[source]
      +pylorax.imgutils.estimate_size(rootdir, graft=None, fstype=None, blocksize=4096, overhead=256)[source]
      -pylorax.imgutils.get_loop_name(path)[source]
      +pylorax.imgutils.get_loop_name(path)[source]

      Return the loop device associated with the path. Raises RuntimeError if more than one loop is associated

      -pylorax.imgutils.kpartx_disk_img(disk_img)[source]
      +pylorax.imgutils.kpartx_disk_img(disk_img)[source]

      Attach a disk image's partitions to /dev/loopX using kpartx

      Parameters
      -

      disk_img (str) -- The full path to a partitioned disk image

      +

      disk_img (str) -- The full path to a partitioned disk image

      Returns

      list of (loopXpN, size)

      @@ -939,7 +941,7 @@ Raises RuntimeError if more than one loop is associated

      -pylorax.imgutils.loop_attach(outfile)[source]
      +pylorax.imgutils.loop_attach(outfile)[source]

      Attach a loop device to the given file. Return the loop device name.

      On rare occasions it appears that the device never shows up, some experiments seem to indicate that it may be a race with another process using /dev/loop* devices.

      @@ -949,13 +951,13 @@ seem to indicate that it may be a race with another process using /dev/loop* dev
      -pylorax.imgutils.loop_detach(loopdev)[source]
      +pylorax.imgutils.loop_detach(loopdev)[source]

      Detach the given loop device. Return False on failure.

      -pylorax.imgutils.loop_waitfor(loop_dev, outfile)[source]
      +pylorax.imgutils.loop_waitfor(loop_dev, outfile)[source]

      Make sure the loop device is attached to the outfile.

      It seems that on rare occasions losetup can return before the /dev/loopX is ready for use, causing problems with mkfs. This tries to make sure that the @@ -965,27 +967,27 @@ loop device really is associated with the backing file before continuing.

      -pylorax.imgutils.mkbtrfsimg(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      +pylorax.imgutils.mkbtrfsimg(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      -pylorax.imgutils.mkcpio(root, outfile, compression='xz', compressargs=None)[source]
      +pylorax.imgutils.mkcpio(root, outfile, compression='xz', compressargs=None)[source]
      -pylorax.imgutils.mkdosimg(rootdir, outfile, size=None, label='', mountargs='shortname=winnt,umask=0077', graft=None)[source]
      +pylorax.imgutils.mkdosimg(rootdir, outfile, size=None, label='', mountargs='shortname=winnt,umask=0077', graft=None)[source]
      -pylorax.imgutils.mkext4img(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      +pylorax.imgutils.mkext4img(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      -pylorax.imgutils.mkfsimage(fstype, rootdir, outfile, size=None, mkfsargs=None, mountargs='', graft=None)[source]
      +pylorax.imgutils.mkfsimage(fstype, rootdir, outfile, size=None, mkfsargs=None, mountargs='', graft=None)[source]

      Generic filesystem image creation function. fstype should be a filesystem type - "mkfs.${fstype}" must exist. graft should be a dict: {"some/path/in/image": "local/file/or/dir"}; @@ -995,17 +997,17 @@ Will raise CalledProcessError if something goes wrong.

      -pylorax.imgutils.mkfsimage_from_disk(diskimage, fsimage, img_size=None, label='Anaconda')[source]
      +pylorax.imgutils.mkfsimage_from_disk(diskimage, fsimage, img_size=None, label='Anaconda')[source]

      Copy the / partition of a partitioned disk image to an un-partitioned disk image.

      Parameters
        -
      • diskimage (str) -- The full path to partitioned disk image with a /

      • -
      • fsimage (str) -- The full path of the output fs image file

      • -
      • img_size (int) -- Optional size of the fsimage in MiB or None to make +

      • diskimage (str) -- The full path to partitioned disk image with a /

      • +
      • fsimage (str) -- The full path of the output fs image file

      • +
      • img_size (int) -- Optional size of the fsimage in MiB or None to make it as small as possible

      • -
      • label (str) -- The label to apply to the image. Defaults to "Anaconda"

      • +
      • label (str) -- The label to apply to the image. Defaults to "Anaconda"

      @@ -1013,12 +1015,12 @@ it as small as possible

      -pylorax.imgutils.mkhfsimg(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      +pylorax.imgutils.mkhfsimg(rootdir, outfile, size=None, label='', mountargs='', graft=None)[source]
      -pylorax.imgutils.mkqcow2(outfile, size, options=None)[source]
      +pylorax.imgutils.mkqcow2(outfile, size, options=None)[source]

      use qemu-img to create a file of the given size. options is a list of options passed to qemu-img

      Default format is qcow2, override by passing "-f", fmt @@ -1027,7 +1029,7 @@ in options.

      -pylorax.imgutils.mkqemu_img(outfile, size, options=None)[source]
      +pylorax.imgutils.mkqemu_img(outfile, size, options=None)[source]

      use qemu-img to create a file of the given size. options is a list of options passed to qemu-img

      Default format is qcow2, override by passing "-f", fmt @@ -1036,16 +1038,16 @@ in options.

      -pylorax.imgutils.mkrootfsimg(rootdir, outfile, label, size=2, sysroot='')[source]
      +pylorax.imgutils.mkrootfsimg(rootdir, outfile, label, size=2, sysroot='')[source]

      Make rootfs image from a directory

      Parameters
        -
      • rootdir (str) -- Root directory

      • -
      • outfile (str) -- Path of output image file

      • -
      • label (str) -- Filesystem label

      • -
      • size (int) -- Size of the image in GiB, if None computed automatically

      • -
      • sysroot (str) -- path to system (deployment) root relative to physical root

      • +
      • rootdir (str) -- Root directory

      • +
      • outfile (str) -- Path of output image file

      • +
      • label (str) -- Filesystem label

      • +
      • size (int) -- Size of the image in GiB, if None computed automatically

      • +
      • sysroot (str) -- path to system (deployment) root relative to physical root

      @@ -1053,24 +1055,24 @@ in options.

      -pylorax.imgutils.mksparse(outfile, size)[source]
      +pylorax.imgutils.mksparse(outfile, size)[source]

      use os.ftruncate to create a sparse file of the given size.

      -pylorax.imgutils.mksquashfs(rootdir, outfile, compression='default', compressargs=None)[source]
      +pylorax.imgutils.mksquashfs(rootdir, outfile, compression='default', compressargs=None)[source]

      Make a squashfs image containing the given rootdir.

      -pylorax.imgutils.mktar(root, outfile, compression='xz', compressargs=None, selinux=True)[source]
      +pylorax.imgutils.mktar(root, outfile, compression='xz', compressargs=None, selinux=True)[source]
      -pylorax.imgutils.mount(dev, opts='', mnt=None)[source]
      +pylorax.imgutils.mount(dev, opts='', mnt=None)[source]

      Mount the given device at the given mountpoint, using the given opts. opts should be a comma-separated string of mount options. if mnt is none, a temporary directory will be created and its path will be @@ -1080,13 +1082,13 @@ raises CalledProcessError if mount fails.

      -pylorax.imgutils.round_to_blocks(size, blocksize)[source]
      +pylorax.imgutils.round_to_blocks(size, blocksize)[source]

      If size isn't a multiple of blocksize, round up to the next multiple

      -pylorax.imgutils.umount(mnt, lazy=False, maxretry=3, retrysleep=1.0, delete=True)[source]
      +pylorax.imgutils.umount(mnt, lazy=False, maxretry=3, retrysleep=1.0, delete=True)[source]

      Unmount the given mountpoint. If lazy is True, do a lazy umount (-l). If the mount was a temporary dir created by mount, it will be deleted. raises CalledProcessError if umount fails.

      @@ -1097,29 +1099,29 @@ raises CalledProcessError if umount fails.

      pylorax.installer module

      -exception pylorax.installer.InstallError[source]
      -

      Bases: Exception

      +exception pylorax.installer.InstallError[source] +

      Bases: Exception

      -class pylorax.installer.QEMUInstall(opts, iso, ks_paths, disk_img, img_size=2048, kernel_args=None, memory=1024, vcpus=None, vnc=None, arch=None, cancel_func=None, virtio_host='127.0.0.1', virtio_port=6080, image_type=None, boot_uefi=False, ovmf_path=None)[source]
      -

      Bases: object

      +class pylorax.installer.QEMUInstall(opts, iso, ks_paths, disk_img, img_size=2048, kernel_args=None, memory=1024, vcpus=None, vnc=None, arch=None, cancel_func=None, virtio_host='127.0.0.1', virtio_port=6080, image_type=None, boot_uefi=False, ovmf_path=None)[source] +

      Bases: object

      Run qemu using an iso and a kickstart

      -QEMU_CMDS = {'aarch64': 'qemu-system-aarch64', 'arm': 'qemu-system-arm', 'i386': 'qemu-system-i386', 'ppc64le': 'qemu-system-ppc64', 'x86_64': 'qemu-system-x86_64'}
      +QEMU_CMDS = {'aarch64': 'qemu-system-aarch64', 'arm': 'qemu-system-arm', 'i386': 'qemu-system-i386', 'ppc64le': 'qemu-system-ppc64', 'x86_64': 'qemu-system-x86_64'}
      -pylorax.installer.anaconda_cleanup(dirinstall_path)[source]
      +pylorax.installer.anaconda_cleanup(dirinstall_path)[source]

      Cleanup any leftover mounts from anaconda

      Parameters
      -

      dirinstall_path (str) -- Path where anaconda mounts things

      +

      dirinstall_path (str) -- Path where anaconda mounts things

      Returns

      True if cleanups were successful. False if any of them failed.

      @@ -1134,20 +1136,20 @@ other mountpoints.

      -pylorax.installer.append_initrd(initrd, files)[source]
      +pylorax.installer.append_initrd(initrd, files)[source]

      Append files to an initrd.

      Parameters
        -
      • initrd (str) -- Path to initrd

      • -
      • files (list) -- list of file paths to add

      • +
      • initrd (str) -- Path to initrd

      • +
      • files (list) -- list of file paths to add

      Returns

      Path to a new initrd

      Return type
      -

      str

      +

      str

      The files are added to the initrd by creating a cpio image @@ -1159,13 +1161,13 @@ cpio archive.

      -pylorax.installer.create_vagrant_metadata(path, size=0)[source]
      +pylorax.installer.create_vagrant_metadata(path, size=0)[source]

      Create a default Vagrant metadata.json file

      Parameters
        -
      • path (str) -- Path to metadata.json file

      • -
      • size (int) -- Disk size in MiB

      • +
      • path (str) -- Path to metadata.json file

      • +
      • size (int) -- Disk size in MiB

      @@ -1173,34 +1175,34 @@ cpio archive.

      -pylorax.installer.find_free_port(start=5900, end=5999, host='127.0.0.1')[source]
      +pylorax.installer.find_free_port(start=5900, end=5999, host='127.0.0.1')[source]

      Return first free port in range.

      Parameters
        -
      • start (int) -- Starting port number

      • -
      • end (int) -- Ending port number

      • -
      • host (str) -- Host IP to search

      • +
      • start (int) -- Starting port number

      • +
      • end (int) -- Ending port number

      • +
      • host (str) -- Host IP to search

      Returns

      First free port or -1 if none found

      Return type
      -

      int

      +

      int

      -pylorax.installer.novirt_cancel_check(cancel_funcs, proc)[source]
      +pylorax.installer.novirt_cancel_check(cancel_funcs, proc)[source]

      Check to see if there has been an error in the logs

      Parameters
        -
      • cancel_funcs (list) -- list of functions to call, True from any one cancels the build

      • -
      • proc (subprocess.Popen) -- Popen object for the anaconda process

      • +
      • cancel_funcs (list) -- list of functions to call, True from any one cancels the build

      • +
      • proc (subprocess.Popen) -- Popen object for the anaconda process

      Returns
      @@ -1213,16 +1215,16 @@ When an error is detected the process is terminated and this returns True

      -pylorax.installer.novirt_install(opts, disk_img, disk_size, cancel_func=None, tar_img=None)[source]
      +pylorax.installer.novirt_install(opts, disk_img, disk_size, cancel_func=None, tar_img=None)[source]

      Use Anaconda to install to a disk image

      Parameters
      • opts (argparse options) -- options passed to livemedia-creator

      • -
      • disk_img (str) -- The full path to the disk image to be created

      • -
      • disk_size (int) -- The size of the disk_img in MiB

      • +
      • disk_img (str) -- The full path to the disk image to be created

      • +
      • disk_size (int) -- The size of the disk_img in MiB

      • cancel_func (function) -- Function that returns True to cancel build

      • -
      • tar_img (str) -- For make_tar_disk, the path to final tarball to be created

      • +
      • tar_img (str) -- For make_tar_disk, the path to final tarball to be created

      @@ -1232,13 +1234,13 @@ passed creates a qemu disk image or tarfile.

      -pylorax.installer.update_vagrant_metadata(path, size)[source]
      +pylorax.installer.update_vagrant_metadata(path, size)[source]

      Update the Vagrant metadata.json file

      Parameters
        -
      • path (str) -- Path to metadata.json file

      • -
      • size (int) -- Disk size in MiB

      • +
      • path (str) -- Path to metadata.json file

      • +
      • size (int) -- Disk size in MiB

      @@ -1248,17 +1250,17 @@ metadata file are set correctly. All other values are left untouched.

      -pylorax.installer.virt_install(opts, install_log, disk_img, disk_size, cancel_func=None, tar_img=None)[source]
      +pylorax.installer.virt_install(opts, install_log, disk_img, disk_size, cancel_func=None, tar_img=None)[source]

      Use qemu to install to a disk image

      Parameters
      • opts (argparse options) -- options passed to livemedia-creator

      • -
      • install_log (str) -- The path to write the log from qemu

      • -
      • disk_img (str) -- The full path to the disk image to be created

      • -
      • disk_size (int) -- The size of the disk_img in MiB

      • +
      • install_log (str) -- The path to write the log from qemu

      • +
      • disk_img (str) -- The full path to the disk image to be created

      • +
      • disk_size (int) -- The size of the disk_img in MiB

      • cancel_func (function) -- Function that returns True to cancel build

      • -
      • tar_img (str) -- For make_tar_disk, the path to final tarball to be created

      • +
      • tar_img (str) -- For make_tar_disk, the path to final tarball to be created

      @@ -1271,7 +1273,7 @@ image and then optionally, based on the opts passed, creates tarfile.

      pylorax.ltmpl module

      -class pylorax.ltmpl.LiveTemplateRunner(dbo, fatalerrors=True, templatedir=None, defaults=None)[source]
      +class pylorax.ltmpl.LiveTemplateRunner(dbo, fatalerrors=True, templatedir=None, defaults=None)[source]

      Bases: pylorax.ltmpl.TemplateRunner

      This class parses and executes a limited Lorax template. Sample usage:

      @@ -1283,7 +1285,7 @@ pacages needed to build the live-iso output.

      -installpkg(*pkgs)[source]
      +installpkg(*pkgs)[source]
      installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]

      Request installation of all packages matching the given globs. Note that this is just a request - nothing is actually installed @@ -1297,18 +1299,18 @@ until the 'run_pkg_transaction' command is given.

      -class pylorax.ltmpl.LoraxTemplate(directories=None)[source]
      -

      Bases: object

      +class pylorax.ltmpl.LoraxTemplate(directories=None)[source] +

      Bases: object

      -parse(template_file, variables)[source]
      +parse(template_file, variables)[source]
      -class pylorax.ltmpl.LoraxTemplateRunner(inroot, outroot, dbo=None, fatalerrors=True, templatedir=None, defaults=None)[source]
      +class pylorax.ltmpl.LoraxTemplateRunner(inroot, outroot, dbo=None, fatalerrors=True, templatedir=None, defaults=None)[source]

      Bases: pylorax.ltmpl.TemplateRunner

      This class parses and executes Lorax templates. Sample usage:

      @@ -1337,7 +1339,7 @@ on that line (after word splitting and brace expansion)

      -append(filename, data)[source]
      +append(filename, data)[source]
      append FILE STRING

      Append STRING (followed by a newline character) to FILE. Python character escape sequences ('n', 't', etc.) will be @@ -1353,7 +1355,7 @@ append /etc/resolv.conf ""

      -chmod(fileglob, mode)[source]
      +chmod(fileglob, mode)[source]
      chmod FILEGLOB OCTALMODE

      Change the mode of all the files matching FILEGLOB to OCTALMODE.

      @@ -1362,7 +1364,7 @@ append /etc/resolv.conf ""

      -copy(src, dest)[source]
      +copy(src, dest)[source]
      copy SRC DEST

      Copy SRC to DEST. If DEST is a directory, SRC will be copied inside it. @@ -1374,7 +1376,7 @@ that name, if the path leading to it exists.

      -createaddrsize(addr, src, dest)[source]
      +createaddrsize(addr, src, dest)[source]
      createaddrsize INITRD_ADDRESS INITRD ADDRSIZE

      Create the initrd.addrsize file required in LPAR boot process.

      @@ -1387,7 +1389,7 @@ that name, if the path leading to it exists.

      +hardlink(src, dest)[source]
      hardlink SRC DEST

      Create a hardlink at DEST which is linked to SRC.

      @@ -1396,7 +1398,7 @@ that name, if the path leading to it exists.

      -install(srcglob, dest)[source]
      +install(srcglob, dest)[source]
      install SRC DEST

      Copy the given file (or files, if a glob is used) from the input tree to the given destination in the output tree. @@ -1416,7 +1418,7 @@ install /usr/share/myconfig/grub.conf.in /boot/grub.conf

      -installimg(*args)[source]
      +installimg(*args)[source]
      installimg [--xz|--gzip|--bzip2|--lzma] [-ARG|--ARG=OPTION] SRCDIR DESTFILE

      Create a compressed cpio archive of the contents of SRCDIR and place it in DESTFILE.

      @@ -1436,7 +1438,7 @@ passed to it. The default is xz -9

      -installinitrd(section, src, dest)[source]
      +installinitrd(section, src, dest)[source]
      installinitrd SECTION SRC DEST

      Same as installkernel, but for "initrd".

      @@ -1445,7 +1447,7 @@ passed to it. The default is xz -9

      -installkernel(section, src, dest)[source]
      +installkernel(section, src, dest)[source]
      installkernel SECTION SRC DEST

      Install the kernel from SRC in the input tree to DEST in the output tree, and then add an item to the treeinfo data store, in the named @@ -1461,7 +1463,7 @@ treeinfo SECTION kernel DEST

      -installpkg(*pkgs)[source]
      +installpkg(*pkgs)[source]
      installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]

      Request installation of all packages matching the given globs. Note that this is just a request - nothing is actually installed @@ -1473,7 +1475,7 @@ until the 'run_pkg_transaction' command is given.

      -installupgradeinitrd(section, src, dest)[source]
      +installupgradeinitrd(section, src, dest)[source]
      installupgradeinitrd SECTION SRC DEST

      Same as installkernel, but for "upgrade".

      @@ -1482,7 +1484,7 @@ until the 'run_pkg_transaction' command is given.

      -log(msg)[source]
      +log(msg)[source]
      log MESSAGE

      Emit the given log message. Be sure to put it in quotes!

      @@ -1495,7 +1497,7 @@ until the 'run_pkg_transaction' command is given.

      -mkdir(*dirs)[source]
      +mkdir(*dirs)[source]
      mkdir DIR [DIR ...]

      Create the named DIR(s). Will create leading directories as needed.

      @@ -1508,7 +1510,7 @@ until the 'run_pkg_transaction' command is given.

      -move(src, dest)[source]
      +move(src, dest)[source]
      move SRC DEST

      Move SRC to DEST.

      @@ -1517,7 +1519,7 @@ until the 'run_pkg_transaction' command is given.

      -remove(*fileglobs)[source]
      +remove(*fileglobs)[source]
      remove FILEGLOB [FILEGLOB ...]

      Remove all the named files or directories. Will not raise exceptions if the file(s) are not found.

      @@ -1527,7 +1529,7 @@ Will not raise exceptions if the file(s) are not found.

      -removefrom(pkg, *globs)[source]
      +removefrom(pkg, *globs)[source]
      removefrom PKGGLOB [--allbut] FILEGLOB [FILEGLOB...]

      Remove all files matching the given file globs from the package (or packages) named. @@ -1544,7 +1546,7 @@ removefrom xfsprogs --allbut /sbin/*

      -removekmod(*globs)[source]
      +removekmod(*globs)[source]
      removekmod GLOB [GLOB...] [--allbut] KEEPGLOB [KEEPGLOB...]

      Remove all files and directories matching the given file globs from the kernel modules directory.

      @@ -1564,7 +1566,7 @@ removekmod drivers/char --allbut virtio_console hw_random

      -removepkg(*pkgs)[source]
      +removepkg(*pkgs)[source]
      removepkg PKGGLOB [PKGGLOB...]

      Delete the named package(s).

      @@ -1578,7 +1580,7 @@ Files are deleted, but directories are left behind.

      -replace(pat, repl, *fileglobs)[source]
      +replace(pat, repl, *fileglobs)[source]
      replace PATTERN REPLACEMENT FILEGLOB [FILEGLOB ...]

      Find-and-replace the given PATTERN (Python-style regex) with the given REPLACEMENT string for each of the files listed.

      @@ -1592,14 +1594,14 @@ REPLACEMENT string for each of the files listed.

      -run_pkg_transaction()[source]
      +run_pkg_transaction()[source]

      Actually install all the packages requested by previous 'installpkg' commands.

      -runcmd(*cmdlist)[source]
      +runcmd(*cmdlist)[source]
      runcmd CMD [ARG ...]

      Run the given command with the given arguments.

      NOTE: All paths given MUST be COMPLETE, ABSOLUTE PATHS to the file @@ -1622,7 +1624,7 @@ remove ${f}

      +symlink(target, dest)[source]
      symlink SRC DEST

      Create a symlink at DEST which points to SRC.

      @@ -1631,7 +1633,7 @@ remove ${f}
      -systemctl(cmd, *units)[source]
      +systemctl(cmd, *units)[source]
      systemctl [enable|disable|mask] UNIT [UNIT...]

      Enable, disable, or mask the given systemd units.

      @@ -1645,7 +1647,7 @@ systemctl mask fedora-storage-init.service fedora-configure.service

      -treeinfo(section, key, *valuetoks)[source]
      +treeinfo(section, key, *valuetoks)[source]
      treeinfo SECTION KEY ARG [ARG ...]

      Add an item to the treeinfo data store. The given SECTION will have a new item added where @@ -1662,8 +1664,8 @@ KEY = ARG ARG ...

      -class pylorax.ltmpl.TemplateRunner(fatalerrors=True, templatedir=None, defaults=None, builtins=None)[source]
      -

      Bases: object

      +class pylorax.ltmpl.TemplateRunner(fatalerrors=True, templatedir=None, defaults=None, builtins=None)[source] +

      Bases: object

      This class parses and executes Lorax templates. Sample usage:

      # install a bunch of packages @@ -1689,29 +1691,29 @@ of a command in an %if statement (or any other control statements)!

      -run(templatefile, **variables)[source]
      +run(templatefile, **variables)[source]
      -pylorax.ltmpl.brace_expand(s)[source]
      +pylorax.ltmpl.brace_expand(s)[source]
      -pylorax.ltmpl.rexists(pathname, root='')[source]
      +pylorax.ltmpl.rexists(pathname, root='')[source]
      -pylorax.ltmpl.rglob(pathname, root='/', fatal=False)[source]
      +pylorax.ltmpl.rglob(pathname, root='/', fatal=False)[source]
      -pylorax.ltmpl.split_and_expand(line)[source]
      +pylorax.ltmpl.split_and_expand(line)[source]
      @@ -1719,14 +1721,14 @@ of a command in an %if statement (or any other control statements)!

      pylorax.monitor module

      -class pylorax.monitor.LogMonitor(log_path=None, host='localhost', port=0, timeout=None, log_request_handler_class=<class 'pylorax.monitor.LogRequestHandler'>)[source]
      -

      Bases: object

      +class pylorax.monitor.LogMonitor(log_path=None, host='localhost', port=0, timeout=None, log_request_handler_class=<class 'pylorax.monitor.LogRequestHandler'>)[source] +

      Bases: object

      Setup a server to monitor the logs output by the installation

      This needs to be running before the virt-install runs, it expects there to be a listener on the port used for the virtio log port.

      -shutdown()[source]
      +shutdown()[source]

      Force shutdown of the monitoring thread

      @@ -1734,20 +1736,20 @@ there to be a listener on the port used for the virtio log port.

      -class pylorax.monitor.LogRequestHandler(request, client_address, server)[source]
      -

      Bases: socketserver.BaseRequestHandler

      +class pylorax.monitor.LogRequestHandler(request, client_address, server)[source] +

      Bases: socketserver.BaseRequestHandler

      Handle monitoring and saving the logfiles from the virtual install

      Incoming data is written to self.server.log_path and each line is checked for patterns that would indicate that the installation failed. self.server.log_error is set True when this happens.

      -finish()[source]
      +finish()[source]
      -handle()[source]
      +handle()[source]

      Write incoming data to a logfile and check for errors

      Split incoming data into lines and check for any Tracebacks or other errors that indicate that the install failed.

      @@ -1756,11 +1758,11 @@ errors that indicate that the install failed.

      -iserror(line)[source]
      +iserror(line)[source]

      Check a line to see if it contains an error indicating installation failure

      Parameters
      -

      line (str) -- log line to check for failure

      +

      line (str) -- log line to check for failure

      If the line contains IGNORED it will be skipped.

      @@ -1768,44 +1770,44 @@ errors that indicate that the install failed.

      -re_tests = ['packaging: base repo .* not valid', 'packaging: .* requires .*']
      +re_tests = ['packaging: base repo .* not valid', 'packaging: .* requires .*']
      -setup()[source]
      +setup()[source]

      Start writing to self.server.log_path

      -simple_tests = ['Traceback (', 'traceback script(s) have been run', 'Out of memory:', 'Call Trace:', 'insufficient disk space:', 'Not enough disk space to download the packages', 'error populating transaction after', 'crashed on signal', 'packaging: Missed: NoSuchPackage', 'packaging: Installation failed', 'The following error occurred while installing. This is a fatal error']
      +simple_tests = ['Traceback (', 'traceback script(s) have been run', 'Out of memory:', 'Call Trace:', 'insufficient disk space:', 'Not enough disk space to download the packages', 'error populating transaction after', 'crashed on signal', 'packaging: Missed: NoSuchPackage', 'packaging: Installation failed', 'The following error occurred while installing.  This is a fatal error', 'Error in POSTIN scriptlet in rpm package']
      -class pylorax.monitor.LogServer(log_path, *args, **kwargs)[source]
      -

      Bases: socketserver.TCPServer

      +class pylorax.monitor.LogServer(log_path, *args, **kwargs)[source] +

      Bases: socketserver.TCPServer

      A TCP Server that listens for log data

      -log_check()[source]
      +log_check()[source]

      Check to see if an error has been found in the log

      Returns

      True if there has been an error

      Return type
      -

      bool

      +

      bool

      -timeout = 60
      +timeout = 60
      @@ -1815,22 +1817,22 @@ errors that indicate that the install failed.

      pylorax.mount module

      -class pylorax.mount.IsoMountpoint(iso_path, initrd_path=None)[source]
      -

      Bases: object

      +class pylorax.mount.IsoMountpoint(iso_path, initrd_path=None)[source] +

      Bases: object

      Mount the iso and check to make sure the vmlinuz and initrd.img files exist

      Also check the iso for a a stage2 image and set a flag and extract the iso's label.

      stage2 can be either LiveOS/squashfs.img or images/install.img

      -get_iso_label()[source]
      +get_iso_label()[source]

      Get the iso's label using isoinfo

      Sets self.label if one is found

      -umount()[source]
      +umount()[source]

      Unmount the iso

      @@ -1844,37 +1846,37 @@ iso's label.

      pylorax.sysutils module

      -pylorax.sysutils.chmod_(path, mode, recursive=False)[source]
      +pylorax.sysutils.chmod_(path, mode, recursive=False)[source]
      -pylorax.sysutils.chown_(path, user=None, group=None, recursive=False)[source]
      +pylorax.sysutils.chown_(path, user=None, group=None, recursive=False)[source]
      -pylorax.sysutils.joinpaths(*args, **kwargs)[source]
      +pylorax.sysutils.joinpaths(*args, **kwargs)[source]
      -pylorax.sysutils.linktree(src, dst)[source]
      +pylorax.sysutils.linktree(src, dst)[source]
      -pylorax.sysutils.remove(target)[source]
      +pylorax.sysutils.remove(target)[source]
      -pylorax.sysutils.replace(fname, find, sub)[source]
      +pylorax.sysutils.replace(fname, find, sub)[source]
      -pylorax.sysutils.touch(fname)[source]
      +pylorax.sysutils.touch(fname)[source]
      @@ -1882,66 +1884,66 @@ iso's label.

      pylorax.treebuilder module

      -class pylorax.treebuilder.RuntimeBuilder(product, arch, dbo, templatedir=None, installpkgs=None, excludepkgs=None, add_templates=None, add_template_vars=None, skip_branding=False)[source]
      -

      Bases: object

      +class pylorax.treebuilder.RuntimeBuilder(product, arch, dbo, templatedir=None, installpkgs=None, excludepkgs=None, add_templates=None, add_template_vars=None, skip_branding=False)[source] +

      Bases: object

      Builds the anaconda runtime image.

      -cleanup()[source]
      +cleanup()[source]

      Remove unneeded packages and files with runtime-cleanup.tmpl

      -create_ext4_runtime(outfile='/var/tmp/squashfs.img', compression='xz', compressargs=None, size=2)[source]
      +create_ext4_runtime(outfile='/var/tmp/squashfs.img', compression='xz', compressargs=None, size=2)[source]

      Create a squashfs compressed ext4 runtime

      -create_squashfs_runtime(outfile='/var/tmp/squashfs.img', compression='xz', compressargs=None, size=2)[source]
      +create_squashfs_runtime(outfile='/var/tmp/squashfs.img', compression='xz', compressargs=None, size=2)[source]

      Create a plain squashfs runtime

      -finished()[source]
      +finished()[source]

      Done using RuntimeBuilder

      Close the dnf base object

      -generate_module_data()[source]
      +generate_module_data()[source]
      -install()[source]
      +install()[source]

      Install packages and do initial setup with runtime-install.tmpl

      -postinstall()[source]
      +postinstall()[source]

      Do some post-install setup work with runtime-postinstall.tmpl

      -verify()[source]
      +verify()[source]

      Ensure that contents of the installroot can run

      -writepkglists(pkglistdir)[source]
      +writepkglists(pkglistdir)[source]

      debugging data: write out lists of package contents

      -writepkgsizes(pkgsizefile)[source]
      +writepkgsizes(pkgsizefile)[source]

      debugging data: write a big list of pkg sizes

      @@ -1949,18 +1951,18 @@ iso's label.

      -class pylorax.treebuilder.TreeBuilder(product, arch, inroot, outroot, runtime, isolabel, domacboot=True, doupgrade=True, templatedir=None, add_templates=None, add_template_vars=None, workdir=None, extra_boot_args='')[source]
      -

      Bases: object

      +class pylorax.treebuilder.TreeBuilder(product, arch, inroot, outroot, runtime, isolabel, domacboot=True, doupgrade=True, templatedir=None, add_templates=None, add_template_vars=None, workdir=None, extra_boot_args='')[source] +

      Bases: object

      Builds the arch-specific boot images. inroot should be the installtree root (the newly-built runtime dir)

      -build()[source]
      +build()[source]
      -copy_dracut_hooks(hooks)[source]
      +copy_dracut_hooks(hooks)[source]

      Copy the hook scripts in hooks into the installroot's /tmp/ and return a list of commands to pass to dracut when creating the initramfs

      @@ -1971,7 +1973,7 @@ target dracut hook directory
      -property dracut_hooks_path
      +property dracut_hooks_path

      Return the path to the lorax dracut hooks scripts

      Use the configured share dir if it is setup, otherwise default to /usr/share/lorax/dracut_hooks

      @@ -1979,17 +1981,17 @@ otherwise default to /usr/share/lorax/dracut_hooks

      -implantisomd5()[source]
      +implantisomd5()[source]
      -property kernels
      +property kernels
      -rebuild_initrds(add_args=None, backup='', prefix='')[source]
      +rebuild_initrds(add_args=None, backup='', prefix='')[source]

      Rebuild all the initrds in the tree. If backup is specified, each initrd will be renamed with backup as a suffix before rebuilding. If backup is empty, the existing initrd files will be overwritten. @@ -2003,17 +2005,17 @@ name of the kernel.

      -pylorax.treebuilder.findkernels(root='/', kdir='boot')[source]
      +pylorax.treebuilder.findkernels(root='/', kdir='boot')[source]
      -pylorax.treebuilder.generate_module_info(moddir, outfile=None)[source]
      +pylorax.treebuilder.generate_module_info(moddir, outfile=None)[source]
      -pylorax.treebuilder.string_lower(string)[source]
      +pylorax.treebuilder.string_lower(string)[source]

      Return a lowercase string.

      Parameters
      @@ -2025,7 +2027,7 @@ name of the kernel.

      -pylorax.treebuilder.udev_escape(label)[source]
      +pylorax.treebuilder.udev_escape(label)[source]
      @@ -2033,16 +2035,16 @@ name of the kernel.

      pylorax.treeinfo module

      -class pylorax.treeinfo.TreeInfo(product, version, variant, basearch, packagedir='')[source]
      -

      Bases: object

      +class pylorax.treeinfo.TreeInfo(product, version, variant, basearch, packagedir='')[source] +

      Bases: object

      -add_section(section, data)[source]
      +add_section(section, data)[source]
      -write(outfile)[source]
      +write(outfile)[source]
      @@ -2052,47 +2054,47 @@ name of the kernel.

      Module contents

      -class pylorax.ArchData(buildarch)[source]
      +class pylorax.ArchData(buildarch)[source]

      Bases: pylorax.base.DataHolder

      -bcj_arch = {'arm': 'arm', 'armhfp': 'arm', 'i386': 'x86', 'ppc64le': 'powerpc', 'x86_64': 'x86'}
      +bcj_arch = {'arm': 'arm', 'armhfp': 'arm', 'i386': 'x86', 'ppc64le': 'powerpc', 'x86_64': 'x86'}
      -lib64_arches = ('x86_64', 'ppc64le', 's390x', 'ia64', 'aarch64')
      +lib64_arches = ('x86_64', 'ppc64le', 's390x', 'ia64', 'aarch64')
      -class pylorax.Lorax[source]
      +class pylorax.Lorax[source]

      Bases: pylorax.base.BaseLoraxClass

      -configure(conf_file='/etc/lorax/lorax.conf')[source]
      +configure(conf_file='/etc/lorax/lorax.conf')[source]
      -init_file_logging(logdir, logname='pylorax.log')[source]
      +init_file_logging(logdir, logname='pylorax.log')[source]
      -init_stream_logging()[source]
      +init_stream_logging()[source]
      -run(dbo, product, version, release, variant='', bugurl='', isfinal=False, workdir=None, outputdir=None, buildarch=None, volid=None, domacboot=True, doupgrade=True, remove_temp=False, installpkgs=None, excludepkgs=None, size=2, add_templates=None, add_template_vars=None, add_arch_templates=None, add_arch_template_vars=None, verify=True, user_dracut_args=None, squashfs_only=False, skip_branding=False)[source]
      +run(dbo, product, version, release, variant='', bugurl='', isfinal=False, workdir=None, outputdir=None, buildarch=None, volid=None, domacboot=True, doupgrade=True, remove_temp=False, installpkgs=None, excludepkgs=None, size=2, add_templates=None, add_template_vars=None, add_arch_templates=None, add_arch_template_vars=None, verify=True, user_dracut_args=None, squashfs_only=False, skip_branding=False)[source]
      -property templatedir
      +property templatedir

      Find the template directory.

      Pick the first directory under sharedir/templates.d/ if it exists. Otherwise use the sharedir

      @@ -2102,17 +2104,17 @@ Otherwise use the sharedir

      -pylorax.find_templates(templatedir='/usr/share/lorax')[source]
      +pylorax.find_templates(templatedir='/usr/share/lorax')[source]

      Find the templates to use.

      Parameters
      -

      templatedir (str) -- Top directory to search for templates

      +

      templatedir (str) -- Top directory to search for templates

      Returns

      Path to templates

      Return type
      -

      str

      +

      str

      If there is a templates.d directory under templatedir the @@ -2122,24 +2124,24 @@ lowest numbered directory entry is returned.

      -pylorax.get_buildarch(dbo)[source]
      +pylorax.get_buildarch(dbo)[source]
      -pylorax.log_selinux_state()[source]
      +pylorax.log_selinux_state()[source]

      Log the current state of selinux

      -pylorax.setup_logging(logfile, theLogger)[source]
      +pylorax.setup_logging(logfile, theLogger)[source]

      Setup the various logs

      Parameters
      • logfile (string) -- filename to write the log to

      • -
      • theLogger (logging.Logger) -- top-level logger

      • +
      • theLogger (logging.Logger) -- top-level logger

      @@ -2153,27 +2155,28 @@ lowest numbered directory entry is returned.

      - @@ -2182,7 +2185,6 @@ lowest numbered directory entry is returned.

      - - - - - - + @@ -60,7 +61,7 @@
      - 34.3 + 34.10
      @@ -77,6 +78,7 @@ + + @@ -132,19 +134,19 @@ + +
        -
      • Docs »
      • +
      • »
      • Search
      • - -
      @@ -158,8 +160,7 @@ @@ -173,20 +174,25 @@
      - @@ -195,7 +201,6 @@ -

    i*DP=yX&UKNPH~V_^C!Nm?gP=n^!?@Y4WRDM7<6 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%0D>SGf+HkCAq>JIJR%?xA|ooIAqHY1HsT;2;v*pv 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Ƚ$rm7^RNI5u^3CR49l?+ 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