From 9164f4509d464cdfa26720a6c170dc498f90acf1 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Fri, 23 Apr 2021 13:42:41 -0700 Subject: [PATCH] New lorax documentation - 35.1 --- 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 117606 -> 0 bytes docs/html/.doctrees/composer.cli.doctree | Bin 431122 -> 0 bytes docs/html/.doctrees/composer.doctree | Bin 66251 -> 0 bytes docs/html/.doctrees/environment.pickle | Bin 2492617 -> 1983479 bytes docs/html/.doctrees/index.doctree | Bin 8319 -> 7862 bytes docs/html/.doctrees/lifted.doctree | Bin 3715 -> 0 bytes docs/html/.doctrees/livemedia-creator.doctree | Bin 169610 -> 169610 bytes docs/html/.doctrees/lorax-composer.doctree | Bin 4153 -> 0 bytes docs/html/.doctrees/lorax.doctree | Bin 80990 -> 81014 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 608025 -> 577219 bytes docs/html/README | 5 - docs/html/_modules/composer/cli.html | 258 - .../_modules/composer/cli/blueprints.html | 782 -- docs/html/_modules/composer/cli/cmdline.html | 250 - docs/html/_modules/composer/cli/compose.html | 906 -- docs/html/_modules/composer/cli/modules.html | 248 - docs/html/_modules/composer/cli/projects.html | 310 - .../html/_modules/composer/cli/providers.html | 523 - docs/html/_modules/composer/cli/sources.html | 353 - 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 | 47 +- 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 | 47 +- docs/html/_modules/pylorax/creator.html | 47 +- docs/html/_modules/pylorax/decorators.html | 47 +- docs/html/_modules/pylorax/discinfo.html | 47 +- docs/html/_modules/pylorax/dnfbase.html | 47 +- docs/html/_modules/pylorax/dnfhelper.html | 47 +- docs/html/_modules/pylorax/executils.html | 47 +- docs/html/_modules/pylorax/imgutils.html | 47 +- docs/html/_modules/pylorax/installer.html | 49 +- docs/html/_modules/pylorax/ltmpl.html | 47 +- docs/html/_modules/pylorax/monitor.html | 47 +- docs/html/_modules/pylorax/mount.html | 47 +- docs/html/_modules/pylorax/sysutils.html | 47 +- 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/index.rst.txt | 4 +- docs/html/_sources/lifted.rst.txt | 46 - docs/html/_sources/lorax-composer.rst.txt | 8 - docs/html/_sources/lorax.rst.txt | 2 +- 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 | 2 +- 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 | 9 +- 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 | 8 +- docs/html/_static/searchtools.js | 28 +- 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 | 1520 --- docs/html/composer.html | 504 - docs/html/genindex.html | 372 +- docs/html/index.html | 59 +- docs/html/intro.html | 58 +- docs/html/lifted.html | 222 - docs/html/livemedia-creator.html | 76 +- docs/html/lorax-composer.html | 206 - docs/html/lorax.html | 68 +- docs/html/mkksiso.html | 60 +- docs/html/modules.html | 87 +- docs/html/objects.inv | Bin 2724 -> 2028 bytes docs/html/product-images.html | 58 +- docs/html/py-modindex.html | 165 +- docs/html/pylorax.api.html | 5206 -------- docs/html/pylorax.html | 434 +- docs/html/search.html | 53 +- docs/html/searchindex.js | 2 +- docs/index.rst | 4 +- docs/lorax-composer.rst | 8 - docs/man/.doctrees/environment.pickle | Bin 2492616 -> 1983478 bytes docs/man/.doctrees/index.doctree | Bin 8319 -> 7862 bytes docs/man/.doctrees/livemedia-creator.doctree | Bin 169610 -> 169610 bytes docs/man/.doctrees/lorax.doctree | Bin 80990 -> 81014 bytes docs/man/.doctrees/modules.doctree | Bin 2554 -> 2536 bytes docs/man/.doctrees/pylorax.doctree | Bin 608025 -> 577219 bytes docs/man/livemedia-creator.1 | 18 +- docs/man/lorax.1 | 12 +- docs/man/mkksiso.1 | 2 +- docs/modules.rst | 1 - 175 files changed, 3165 insertions(+), 55990 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/lorax-composer.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/lorax-composer.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/lorax-composer.html delete mode 100644 docs/html/pylorax.api.html delete mode 100644 docs/lorax-composer.rst 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 6aa620a8..8b438470 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: f4097b5df8f1eafb78a5c70d87386457 +config: 453cff3f00978a52ccb2e22f94955d00 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/.doctrees/composer-cli.doctree b/docs/html/.doctrees/composer-cli.doctree deleted file mode 100644 index c17e754827a42a9d8abfcd4d569c3e5bd6fe975f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117606 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 G_x}S)*mPz9 diff --git a/docs/html/.doctrees/composer.cli.doctree b/docs/html/.doctrees/composer.cli.doctree deleted file mode 100644 index 48d85225b068ad54d75d9346fd20a307c10db350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431122 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 M$g=f_&X3vu2OJ2a%K!iX diff --git a/docs/html/.doctrees/environment.pickle b/docs/html/.doctrees/environment.pickle index 50f9968f30eb111486f4b0d9a93c04b0f4640037..69e46744b87e06b40b4ec2006b83c5fdc7493fef 100644 GIT binary patch literal 1983479 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 z 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%0AbUf^mLgTSb? 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

y4?5>n3vUENj8am((pyuitoKazxR}wU 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Ƚ$rm7^RNI5u^3CR49l?+tFQ)Zu^t<+37fGM+pq&W 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Ƚ$rm7^RN($ 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 literal 2492617 zcmd4437nkSRUbOL_I;nV$32T?>C)`0ji)8GX4;ZkLd%Tp@wi-F^>tU3YMWXl_1I%G zz}Ta>f}OaW5JK?2Vq@YLcq9Y}W-(xJ@FQ`^3wb1j)!+pKfsnlL{^#!7SKlI)e{aCu z>hIqBKj)rv@44r0=YG%C@4xc0%P*tU2g6!?l%mx!;YVO07E@-mtIH?v~Eabldyzxwo&{Z#MQ7M2_BQ zculWcW*Ily8Ie+Mx0Y(lqu~a@hWz`Q13W>|UDG}rb-T4n)B_vCt9wy@!1##H_oG&? z)^7Di&w)Kvo%8)dY0z(jiP3PItRp_2twra`?MgHn?livETK%ZY{~irD83}}71C)u8 z(lP)9&!z5i0bGot;l_T{>@-UKs8{Ti`c*JATw7G%MkSPJ54z>3*c&V@)y|KG>&op$ zBP#b9`@?m|x|OIKRSwq5{ShjDVl=#}(Czg{3%%jmW~m1ji>y9Z*IJbb#aDH@?K+A> z9!E$4qv4uzyR*`*Em!ev+kN-k`^eo>C!)&KQ>FghQ}eBI0cF5Fi3`~GKUla2AG%Q^ zD)pjK^{(OO=zO^`s6@m*s0o=~Q(UCxfD)uws%K|qnHoy3*z2z}AcV!s+S z@pUu*TI}{K>Jv-v^-KL)S;=T!uUYE$pC7a#xY32-7RpnN8lB=I*lLvsYBj4LtNcb1 z@cAN`W-L%^*u*~}dBDG+B~))6u3?1=$PHnze@`70SwNpeu=bg#QRz;dib_pXqFHJU zN{vw;idutzgTG}k1gyQos~b$d)w$|xpBq)5C>_4MkH)s8Q9BDRDz(x~xf_-G?e3`h z)NtwuzD^yb&r=8ZXNRrJ(1S|3dWAnVwl z=#*8G(-Xsu>~Cag)Oyv(_@vu#^^W0ImP@wFrCNijWVo&umAd6>fwjoeaGTMAi%poQ zT5FkF#-3`w-|0QJkJ+U{X9cudg?4v&-~FS7>f*x7qj%!}dc#e+*{W7KwQtbt?rYQ* z_wi!)7arZ$tM#LqPN{r`wTzOeLb=x~D#kW4DC^S(_Ni`U+Rz#_VfKnk?QXNwXLfZ} zkJ|w>%9H$GQ@4`oM7BW}Jz&+L+H!$?y1HLlq)xZ`6#ZtO){;e=S!}e+XHfn~t=C8W zDP=IcR#?Getpy?1`lRDtzl-$V=#}9$XG@I%Bnr!3y$w3L62rh~;a#9B^fX*GXq{=b z&$UL?x8ZwrZ}pDqJ@k(|t9S7)cZ+`vuZFEGt&E13@vOr&?C;`I69$ZB9j->}SRRn= z6d%@s<5D9kVsN02HeAL3?u|;kz;0gqqAbV6%q_ysw|3j@{)>gT%Cr~X3M2fYVDpyh zt(?0XtFPivn}q3&T96gBj^Ua?e`)5CnI488o@JxR(kXS(AxS74V+PHPDnDFbiIz%( zM!(o?Ljj@=yGxZyacR(ERvfLT3&U8AdJyU>ywqmO&}>%*s3`HS5^jJRnrH*VSFVEZtkZkEvm}wF+b3AcL=j1ThLeMZLD@JZ;u< zb=9t`Ue9qh$ziIvh(VTVh}1mXa3+d6#dD=@i?tZR)0W<#)9FTN_bLT8jmc;yYRZPE zA}m|84J(RzVXQ+s16+#%tr&G`jrOvXAo~PMVtm@lM1!V^A)#MfYLuw8asnGWkXos` zf`;5I)nLT0=&T6Z>sxS0FeovPX0)(C71+$b8E(RhNFimy#4`(D9CRC!mDR0UzXRjB zGP=MrZ4`eOYs;-Ry5V!Y>@~dqN)>Gr-5FgN|0-6Z4hH|jmvdFMs~yhxCUo^`5g8US zj+Yt@S$Yfm9z72^NrND}hb)0^AgjN&-{=)FhS!!>V!1hG$uwF@1T)66JS(zP-voQc@@``Mz`tzuYfCj6j^4o& z_^{P0b3Vk!)hzd*R-tT6YMfi<9FFcVKP@9yBtMBUuN$cWgJSnXmuE9$T@w5OK&s7G`t2SSDpfYA6qNVDxw1vv~G#dvuJA8y^zQ}MlcLvG- zosupO_Xs)AW|kRM?e>NHl30X0zT6#N;3#Vt3XEDCJ&-Z6o_$#=ovoqT;$!tpwZT%W z&1#GP6Y+>9UK}{g5sc4fj^89hz+ycW^?w@>=rSS(J;n7^FkPm zAlG)Q)DZryOy0&yaidB)td-eF#ftJY8pk>jJQk?^3>v@{U-(G@&7B@o`K*|bV+Zc5 zXcZSYD?EYxydocS(Og)G?VNQQ@puA}l8HNcBAY_dcQuW=s?dkM;Ru{nVg*gU#l6H) z^<|ST^)OjhXofRnf{FwV$6CF1O9iv4nSfb7{{-P(hGXMhn2@?$T{Q{g(*>32#-0&+8eMd!V?YC$;8gda$yx= zEV^X>US1%JD}+vNT7}ySu%&gvt4hY5Mo}r}>qRxt0?8+(5>cxyr;F7A*9ND`#yI#r zH1+Mu;fujOP$V0GkD}FJ#O_z?Fi&i9J$zRB_T@^e-Yb+F?Lh^eLN_Wve)~$uNZxyI zpD4BOzQV(Whxf7RdB0Hay%zexxcZt?(d%bskDi=4dh|%~sZ&Q`8t^Y6Q8r`~MOR=O zB`d-P(%5&!oA#nlyy=cn#H*(YS86@13aqdJ@`^V-OPQXNnG_J`Mp}wZ%Mm8v=lkSD zQB#1czDj&zW8-F-P7X7h%f3<{Vnv5EwqB+UXneY$zHgP^X+|KX^kSg6RwZfcfaxQ? z(y-3$|1O!QL1qUgsnvrlVYY{R4xK)7WNKmd=-kw+=Z?e|MOu_W?G;Ra$vrljg))yG+uoji+S zx}}rAlGh2&xQ8-pqPm_EOB2H3X=0&@C5WXJ42fkZnMMwg9~~b44?42#25%%wz!PYG zBE921`g1pW9@EQyu^N@ozZD`DPGrGugz+CE&Ed-#EhD90Yhoz@?yH+{uH8LDV27`E zQ%bEe25p#3matn>5eb_A;T3Pbc~qio)dSUoEc*sp^U)gO6M$>!V-ssCQr|RJ#r(Y8 zmF;3%4^5yE@v%vcx%KZtXJlreda8Pw!EZ&gWs59+queZ$j72S0W~WRDHY&AjqnRGA zmeWbDx*Zarg~gqyU#c~*KsFE!oyzxRy~!O2JMJy)J!rB^@!p4Se>Q5MXmJ!3iLVep6e0bQdlPl3#tU4^SrO>OR z)(qC|RJPqZn?R9swc+LW>TDZzHty6a0E5n%MF<}YAhc4wmigW@Z0%X)-KNajUs_t%>1?!ON7_b{rzt0Tfo8>!y~@VdK%UcBJ2e)oH(WyQ z7j0q-my5O5zG`iNwPRhx5S7B^Wwxj?GC`M`(uCm2(3)crog2FYm_qd1ZA=BVq&K5U z*-Q6mpIDA!AE|X#AE`dddjs=US>Av@t`o_IOJ7&GvYVdA&}D89VB*i`8zOYzs&4?}RpxMA< z9j-4mI@Qu*1mA*Ytjwb9l3C?4qTyAt4A-d)a*b9S1WW^19!-xN>l!u>Xw^qrO2#g6 z(_iUC*w;hSaE&r5f)52jnP47k@ZQ-pkrCJ_nGj2RH7q1`;pTDr)fK_VCb^L&c!1~1 zjNEqh9a}f7t|>3q3csz^to1SY z3!`dgP%Z;c+e(^&k>`6_^arhVu%@z+C9%fUZZ$BL^Uu6Q1Oj?xQzY$@8-K!y5KFpD z_N?Z6+zfJ2SZDDtSWDs~T^OUY(q5!3K8>+Skx@HnqP9i?ta@~wE0y8;go~J2HJR3( z3~bKD95x#Bg+himDDd7Hj8hm_(8yp*#q?e1_d1=6rtr;LkDMbxisu;&7Ka=7WCy#4 z80*OO!_dekW8w?hmu?B2Xln26V$`|)4lFpq@1_>LU~GJD8u-(ZAuNkpiHeAJ5^T}Q6tS|r= z1+>F1wuzz3Hvx$axwkIS zXktv?cQ~c^CK{!<^l67X@VVEofZOU${BIZjxBKuF)%y-VG8k?bErJ>rS`A;#!nW~N z>pN!6SgyZ-v4_hHbD8042#1ywsntWMWUt}7(hfHEA0f93!yQ;eD4i)r5Obpl&z810 z(2HIfuJ2$MgjPA2^D&%~OAqJHoile8G0^Qp&fdNe8VyRQEgfpK>$^*30|RR$d~1@8 zp@mx1Ut&9xG?Ae4l-nx5vDUIyj;ik;ZbVyV{zmaUZ6%TvXj3TcfbGRqxvV*U#}d$wf>{(ug^U5t@@|cU!Ohp z?)t~|UqAYl`lr-i|6>0m^$)AReroi=`Umx2zw>wXPpZHEheLBR7~=Ao zh~r%65-P${V?--b@%J*R2KfOilDRM;%D@eNk7by02~h@eIkCbV@hmrmvIt|%bKDTh zG3cNpRv3{Wf?1^oXwzIY1y3o1(wAV8P%i;CzGXm5@(X)$1^yEP#sXqvvBUa zyqY(MvMgfr9ov~0)Z*!gv4%3dm$gaK-9xfUMnka3TmF{F0k>aAI2eEM* zRD?Lr6jVf|wM0Ebi28oXaIC1Yde+{j1kC00aAGO5{fd#DadU5CNk&f|XJBPqiT74| zTA%yU0rI6B2IqE!MjxmCSjtTj%W4}m#YS6WIc^T;X!mO8DO-?TQWmWo1`{zQFRR4q zAUX~K;JiRt;olg{)vJ_#_=XUUQHMZCFAGAov*6W|cNvl=;5*F`pTCsjTgJ#Z5 z{RaG-*NU-JeYt)!zMvwv;FmL7uy|K<0(LU6ekZcmAHfgsT)zvy$$6T=Z$RzizwYI~ z?&rTAWWNUWhw)o-L=IH~N86=DX(|$yYB&q$@DQk742R_8C2)8%4sC+TXsX|yVvC8l z_v~H#o9#xBB0uN-)J5`6E@=YqJLYMYNGqWjYg7eneq-`*9v3f?M{<-Ccnq9swHjt1 zo%7bYNZ!b8PvA|QbGG;q-#8C%zepZvvXH=oyJTQ7<0f*hh8M{dO9jA>NGnX)0>*-=bS9jjLXQm z{mF~umL`x1+-?#MS=i8eshqE0yg0rF!?lezHb3Yrlpd7Xc*ut=8fDllu};>U&AaPl z8`+$@P8NvGx9im3*<8C$y^hVZ>(tWO9J@|!jm@v?q;)p8u9HOB9H!3dfP;cq=vK=B zd~9F0IDj9|55Fjnz!^K46R?Jk$FQ}dRuJ z|3gLVzh$N+ApWa@_|FWY{vYrwi9@~Xh5Ij$nbhwAw>ayIv!UYD=~eKLOKiprfU9VJip9rksf3sxGAr0z6yzR2(FtbyPN%=6vY3=zXpr3{iB|6SpdNn(u#oNoo>g^O4hVAy)S>NPjxuR)xbp15v zN$qSEjMe6mr?g&XMm(i;@W{+jNxOn3@u&E_!z7@>02Kel~M;(yC^&+n;=O{B&mGo;rRiFNCX(9AlRr z{R!9}zPu0<*T}~G18gl~t$2!^?X&gaCUR|jHgjdtYGczh+mfFtwfIRx zUl*UwOxx4NC-Oo}To=2K^3xwvIHf(sBrzoph+2+Ad^WD1uVk)ZTK(+79DtoqnE{70 zTvvia&zgQYGZ&twzLXbY;+ooe5CK8xfEH6#pyz}#aP9n6=1Qg2&bH}_;EJh-bLHvf z+nMQmdiiEvh>7cE1Ka1qt{3UXnK3(QTpN3?nUs6IahfS$h9BfZAR2xSL3`6XGn4id zu`Mq|YDMhL>+Y?=E+jwvXAddHcdmigWUfQn{;+mh9YFM@|5#?Sp7bAP5V3QaOTP4d zhJm(SN05UGWq+g019R%514$OwG49)dZzMs8d+DF=G{v|5va z0TYn{eLv*7%nW$C+07tg9l7|8g1pZ0_0K*lkJdc*92;DoeO4SNcj)GY6g$9?c7(JIF&^kC%GodhN5%E_d65PS4einZPws&RmJK znpic>dGKZbmdrFg**}*TBDL&u8>fv21_(ycti8Z)?>cUmo5+>$uFSPbtAtI{Wt$rz zNj<6m{>-#JWxT{7zJu0i*Ryu53WzP#iW-g~ip|A^{>jW0Pb>7Dj?iZ~dwxgwSY{SH z*?%}Mgzg9*;Oe{7MrhBou9kYe>X~T8wMk?0aYg-l<|^h^6z9-a)URe{!Bf;P=Y^QK zqIP+TLL9ZOtESjoTuI-`T)nhP+V1uy;?7sm*E2KVspxBYAttV(-JXir*y`#iJ{wok zc0}yG6i3A)yhCR?;ac0Ov+c@IvsJI#vS2X zo0+`VO;+WFaFvonuexdQGwnGbG#B5UODwIV$|2vw=;9$Y3iGKAttUVyUU290YPPr&B^t(XYHk#A9#-2Fl-NF zPcrPx%!sG5ZFwOkt}-2wf!Zw2cCx_gL7k1y%9Zw-%oR=B$!-XCGRd&t(H_gpiKn%P z^FmBqYlu8=I35rJKUW`ATS8v0w^HV+rq$bxae5P10ff}`iu;>0v*Ic4*}M=FSDbD4 zMBM10+Q#PON_#nTHPb3BY#{}^eqa0E%#3&{dq-Y~iL2~dtFQ69Z9$EV%g7b>smzs3 ztFY^Wy)5n`-p4cZ;pyumc_F^T`VvRxsZ)9f0Q{12Cg_yYFym&*_@}ZZ? zm9t~rq`dm=Art7UWNT&yJe6$93*o9H$D+Mn_vb6cIUqC_ugN=;6zl#hFm>FzfBaH) z?uGvpQLD{1SbtXS0xV=!S=c5}jgxi(4riw2wXmlcMC>j=eHt4!q2Qw#qBH8?m#j`k z@XNgm^5Ld;B95ha@QMBz2y#uI?LblVMMYSqKirq1cm}p$(i^>V6nTL)_ttx;etkec z&e4w*`ter!@gn_r2Yy6m+|A3s193O&uYt&iyPcSu>^&$JaI^keq#s_#ja&sBW;+Hb zT7d4|yailT@1A2^#BRUky{U5B!FHJiuVTmVr|`zoR2#7$x;*au)P6jIj2G#gWBF+d zaru29v;0!_*5U04h+uF(1MX)S_cQ#>vqj0hP>7zE{%~fVyk7lJ@JYH%fHD?-_y&_KNU9&w#2R=K&o(|~(q zb*OWyL%lY$Y{H7A3MO@^S7)Z>sq#?<5$lakz|o&>)XqkT4OlD9h*!6gLT9Eb!MoL) zGfO0;^oO_jT%-x2`D|u}JQck@uZr@HAgN+Ez9VzR(n>l-?8dicChkdfB`<`wVQ0Bw zF7>IQU3lW`%)X@_578GBPgaI8{cz@Lq*cT2={P=wEVcjqfy_*J>iFTj5EEC&HhK=e zhKWyG zWTx#2|M&7jOkDUkRJtWRMykdC*wkL}8t`LNcUa!8G)(I@Tp9=0^Mi&rPLJotQ_bqk ztaz%qIxob;RkNdWp1ll6UX|8QP$h-Tl}Ot?c20-6@KkYEW)?hE?9B@?aaC+Mc3?h1 z1>c>S`Lrt7IBiq+M8A-kv?uz*c_Ah)`Ylh><7O?xLIrz3KXV1riht|0&w;0c=QES{ zRM5%`;i@3#)SFMU_>?3Egy!Nj8|-3d>UrlbYrlISp8>a8z|c(KmH0?zQKoGS>!zRA zTzIYEgPG}it>B;Kg_yYfcRtlVH#L9q*c6-F)1$BF+TAnGigR2hu9q)nu3TEZ?3%8& z&&||&ZNBmV?q)c5o{oMoGY_7Qem*ZmY8~ZX&02d{_7O)hW&&5npJuK_T4k)8KBKwt z6!6EH>3RzI0|t>}X)CYo*>f6~qItu|(--U-Z>`^E&kmZ4g~KuVxX{;coRsf;?KA~| z;mtp)AkZEzJxd-v9jwXBhNpvT@(;BoGMKn@3zmcOr5Lst6XLF zuo0h)tLmQ26-?Vd5H6HB#A6jW1AKmEhB)L3^VjreGIQZ+>dw3nuBLK$1$t|o_t_i} znu`fJ7E`mW65eL3l*F=Jt%VbqjmFg8R(s}bt=qR}!NcV2y#2f-v)I$NpPQyjf@2IlSGeCR^zz}n5EIwS zozS*VR!i4Tv!L{hM`6q4?7~;puV!Y$Q`Rr%g_yXq zww#(hF+~cCQBokCE9YC8tCUtbTc`V_?hGktOb_~cX7Zj=zLpna;!4?dgqB|UQ#5p9 z?)dBHruMhnecQan=Hd$4zG+e}|8BN%E&2_eiNjLu%p&n8WUTk`wq$0)Q`5%05EEC^ zjk6S3xIC3gTS=L@(jLiN*|fb1&Ku))hL-hH>F&YIym-31FE7Nzb$17!tQ~Ea&#+^R zGt!Bj>bJQm6dll6&&W`YYxGT-MUYmbd&P9Fi8`=DkHQU~>5J7Uq2_>J_=e0(d8&On zFT})EdyAu5w$D0VtLchxg?>-wil!6~KGum^C;KJz zQ$8SuoyquYTx%cAT*0(j+cVt;hnTvf7qZu3#&|6s%FKnQsUOJ;F>y`pz)^pMRv)XT zm^@rZzmmCXX?3)d4)TMyL>CWCrP>Vf%@x_>8wiYVp$9$jyEijKo+=A@AttWMt?Ie4DeR=+ z{!`PLC4@3?MZG?ArP3-2ulLGF&}e^$bLHvfbY}XVUQXnNn7Ce6Jq0Jsdjw8>?5b?ig`C)2 zywCo-%r#FbPNy+&EUDC(n(Z#Lo7nbPB~MrX zRp#2I74eSgAQPUA{B~vzJo$bzFNC&Ef5ugGsjuLqx&gI&%cb$bJ!3LVaRX{cX5yas zx8{YIxcIkrBOIXY;t*A7Y%h2`a}Cn=f^E|Q7Q8<2NM`z;5+2M8F>xiN>H}}i%zj!8 z?4DjI;g+bjgGC%x!?}Tb{cWpfGc)0-;q`eTCa#7YS8ra*T$!{=$$a(Z?U`BeRP)xn z5Uy%+xWU?!=Dt7<2+hTpCNox<2ivV*SLAy$9HX$1Kp3-=a6Usay|x zwoc9uE;D{+;@kJm%)~u)Y|9Jbsw2nfU<@!!qd6cn7ZVy_cAgltT69((2Z(ExXsW%0 z_?_i5)*8z&E)#De^O;4QwyW-%?sD$vcr&=0X)nz%?!1nBC^HXUOF57iBDIck4?^qd z-c_w1x@~1AafLK9*Cee%Ht;)E{kWS|^~{t#H7qlT@8E#69c_%>dX-1$3w^wbX1D)v z7B1``$Xw;L!rnox-{fqDaptxCcW36n6Z$K8A#~e+nd|LR4_dpW3~-mJFD^L*G!&nW zYw7cuE0|VGdz6+84r4U+xy)R6n)*y$h>2@Tb&_%;DzyfkfR@5pxQ4!(xngNGr2CQJ zEJi!Om6-!iJHMG1V&dA_b*dUo^`0M;dQ}7;(ns!XLl>Ki>*#MYS1+xOc26S`>5Sx$ zojB*$7W@UFzs}5rr>4Km3o&sut;hXkb-UWujh)05a^tp1dFLCZ&70J|7Ou-o+0(-A zyb!Jya`@HSHRt|D4hYS~gk1B@Vn%iEX50 zg2yz6CBB@Q4NnPQ%BzID#%SxYjyNh2-XtD|GH|JXJ9Bl@N_`v7JaevQG*?1adIbDt zX8NAE|12+rHd=qeHFl||~uBE=9G#7G(}fZ3uIGqh4$dn2QBAfn5F=4 zKZi1lK5gHg=4Y!TL}XE1vx~GWq7*LHR?b%ZSU8v&q5#)pJ#(eg>#@YRo)KL0pgMGOucXxJ>v1_VKb{^dc_AjQ$33b) z(tYDvb2&zRWAbsW{Xpg_rq$ZDy7vhl$0+OFnc47^^-5ldi7U(A&#?wpJBh30^O-A> zRwYSWJ)g@=+0(*j@&bTC^4_2ZQg;~ z5?k@ZdIasN@7N<~*E)}&iHFmTXV9+VR^@W=c#+Sbam8Fzull{b%|rC6kL2oAd1tKG zBGh1IP)3mAR%PmRr$P(1{Qk9l(y9J4s;@nsS%G)>Ao*XO+ zV`GVMXeMye^K$0ur4;3G-E>cLA!MRgZN4`%T~Dm<$P1zS$J@AOF7>L-Hqnj?i=|!^ ze4ja(gKOkdnX8pnBkJK_lRbZO_VLUNc&hnGUWkdSW{;}-pw_4$bV;)lRM41wTur}` zxr%AkgvDm|=LXv zXMdi#mTC31%hi`)(pT0uGV|am>reASOuT1l@l!-ntUHd^k)4U_Xvfa1esF#rar(ZF zwr1wR)6u595EIvtvTBv6jJv7h&xiQwU*jJRmJAwih3?{_0lS8w`=w!o4%Ufn3)MrP0!?on7Eph-K(^gV*S0i zOk7DXWv*OWC3$0$VA9vo+cWdv>FBL_AttV)-Ks0Kma0*sg9u=u(J4L~*VD%`S1_%f z_IRC1GU{vU!bl2PmZ}FB{j?uV$`bZcQl;d`5uY4Ok7Q>r-;iONv6-s z#uc??*Q8u?&-5t{d`)f4%!Q|^b$KBsuBq*EkZRDqqu>A)&cZeHVCIUY?Mge`!HF^G zYv;bq9C+H=6W7oiGFL9GhCDY<(D!xpbY>nr9i7YzF>xKK z?$K=HCg1oTWM$#{c`wVcUkz8mQh0Q3F0Q0s%3Qs)O7c89$$+n> zFJxxIQ`67og_yXSu9f|$-;EIV6x$dvKHa#CTv>mTxsqv>b)DOz3}$_O{b6Q4JbnGQ zybu%Dm+Dp|g5-5PHy78`hTW6$zrAiH8SvG#HZv2RnpWk7n7EoY9c8<2Qxsx7^5W%q zsa!4hX0A@!4z$VXK)yB#nQ434xGOJ&tBo87kMxN^em)`xgy!P8yxU^@pvz#msoyRa zTZ3j1s%MYPzBt-j{}9fH9KNRh3Ho(I{YUB7#`>q}*Om2;)2}P)pQ2wk)hX=c;ce^& z;o-~cbY0@`>N=fY!(Vh<2*2pC$>AM?;YOm=i^?Fj7CamBNl6| za$``zWmL(~bEEn_S6y~li81mVxa_UN?(2YloTDEr^y97c<3;-M4*ZB1E0k9si5mxKejC96*)YOL5cYdS-QUZw=`X7Edl?b^7g5uH5n25g(bsaW3Y!*Zj&2o9MjdZYJ@hFiFdqKfr(ZKd7B!wxtER-#G_FE6uS>$l@Xll#Zmn;)Ics94A+#arPgxPi~6h*tHhsXmeu82pR+)%f)_+N@sYKu z4e~E&cZt3XhF6w59fGWX54wH*pMzZeCH%`4Mg3)bTByI1eh$~LY9H$!>!5-g%Dd>6^&bhG#n(0%srL%xmKfHsuamkq$2XFFcA~SBC&5d z>N9j|7O5zNMP;w{oBT0OQ`nPX_2Cdrp zVvn9#3Yj1?)wC1$okp>zPMtcAXNg)E1TdmZ?Zx2I>mfLt)|gQoX6SY$ZR2~vN0J;f zi}V0yVo`p`=j?d9jfcLI>Z$w2_<9nWq{y_h*&QH8 z!%fbh!1G7UufyO(ejN=lbyof+w|oI(OJT7wh&tUGO$&xMI&f|VQ^$|!g75{{upZN4 zZ7Puaol5R@lEI6FlmcMNe!wKzjI%^GCdl2EhFr5^k$Tu5#Yd8~mAfMaHI8TzeAFV? z>9reY2m;R{W{PwP{{IW9>z78P9MK~9 zYNK{Mx!5bEmnwR_@U-G9X}~6uuD0VwG#ei+HVbLMTBJ>#HflX)83Qh$M>CC12``pd zXV9x&$_7MuvBa_{GEL10FP>Ni)ukfl>dZ83{nBz;DW)-OfQzlypjBz7rIn^$gl7?Z z%;+ep{{}iZ2_MS?u+%K~ESla4oPs#2W1r249c(l`v`u&vy?IxV! zgAv|dZ1mF7iZ#~(OpEBfJVTLqN=s}yPKpMWMdV?Xu(ZUMjN&GGwxD3OV$HONC<(?m zorEk;n)~x!Gu3oR9+EYsDRZ$?>S78#MoNMJ_|}f20j*51ftH4CK4t`_>kM0@nrz=I z*e;e!t#TCS*Bhn5v8_}AAUPI5l3C_C>9nzKlRyFm?W7x&O%w}W)gjSU(iFzmA>bk1 zBL&6Y;~l42E@jlh?$xfG7>-pBIU&H(!CW{3D zIHRe^jBm0W$Rcu|tW7uS4I2G)64T3Bp(Z7eEHbKR;L=xj+{hreFb(jXT2o%9`R(y5U3s;jAH zfndSjMIU>$vGXOZS-oiG;u3@f%=pC$-$n8Z1PRLq^gY3K20ENR8tx9QFt8*sCXR6l zcu_1%msk+$oWbd++;q`uzRpf&@{a9O%q8N;3QTGBIX#!T8CJr z^2L4@dpg*5916X7au?~Q;O_$?{ByG8c|LG#TWEzqa?x0p@E_Dki7t}L3QG2@OQjf; z0*=!CDqjj!t4i5psDdy^dD=DzC969FAyeb5?HYsOw|B?$QFLbFxv&EzL2OP-TYr?CG3JF&cyfludn%?e4V)-7>aE!?s(dnmw~1 zJ{A#$Z4AdE7x=Y3S@GROk!KK?CviqG?bM_W<+bHPH9Y_isTw@e!A=O}br0uH+4H%Q(S z8?r(l$9td^&j{WV8nJ@6U2>awuLVo+ga(`n+-$v;)W^@Y74|r(yAy4xYfSf|aWfSK zZd*TFDh$MGFA^TDe(Z!X6+8ox@MAnQI(Ut^x-<#|Jv5ze_MN*B9JsbLZV^(IL%*?S zKPsibK_rt*dyg)4+b={doVIEz5c0*cz71Mdqr5(g}J9s%%-Gdk8qlj31tzvFOPC; z_gqu4up}AQUblxPa--q4!1yD}u_kmA9nFicI~2IZ8fz#!2Z+QOM|Ri}JN0zf62IuM zC4SM12KYsXE%A%a58@Xcw!|+wY^nG373cEgJl)gRoLgVbUUl1k{I=xX%2$V3)FFaZjh*Mei<`*mA;{Qu_SGtz&W(6r4q6rc=R*PS$$Ryx7%j>24hO5#b;O+{@oop%%y_Ac}%VXgR;=~bF zjaMDSs_av3b~Pim)u@XB)Eo=CgoT93ZHL))iwB)qb9sGC4lMC@RwO3t$--rPd`guV z$Y59_JhKoReah?`d-qeBlPrK%poR(%z2gR-OhK2HoH1KbIEU`R)|tna(UqPan~%du z3aswCq!p6|F)5)}Cq~1aPQ_({RqIBx9NaZ?&`@i2`$pgtbWzC=tMZ*JglS4prDFw3 z)=3nWurc)%5s&`l6|R*V@_=4x!ai^BOkm;Hp$2wUQ<3li42$)day2TSDXRGN_88_9xXJlc zaLQZY`xqBdv2#8u;^Z7o|0lsKGpG0`v6~1MfjcVQ5+Z1jALZ;4IBY^RYW$MWMp+BA zu!Q5EjYY@P-Od;MRwoTJ(lak zdfd7I7W~~!bP{-yodzD*c8_fM;5Ry-3U+Y|dM`^0?BO~XmYos3P#3izIXMdV&SjF= zC_G^>U<1H{zeA;#os}q`Wv{szWi8M=$wA zqnoNZ-{DjSyB@e{9zwDRJ|u3~V5zy*?^b%nrFOSSl1!?T@=s(tj{~yE-GNFMMTsN| zo-T~C7U*5_wa8Q!#k1vBX$c(mMvRDWo;PBond8-+{7y&Ty$m7MrHi4*sD`4y7F2nQ zHL($=9VHdxY$*H)6{J(8m~7p05TV=VDRi6fBFO?^NQc`Kk=_cjoaBak3Z8Q$F;sp% zn5x0Z%ag__l3~I;XF(>IwY-;%FA|F6#}@gGrf{iGAvhHBW%ClCY_DhvY zRfH_HU+O2BY~IIaatFm_lmn$kV-YW{gft_O!RPHBW+4b8d1Z=v2-kl|04d9ArQMaX zL;(aWijQOGVHs``GwLZpG}(JnmY`h?M#ZB2h*}>@38M+?-XldGmM$$kckM&9GfWL9 zI?a@dRC8Q3G9ChslQIyjTHWtWapMc>3dO11pi=PXyAMgZj%hRof+iQ&UX0A1&ceM( zM=|qylTI>w)807*Xge-q@cY(H6+$0UV}bfuFbZ2zzq2%0ZsORKCLc$odN>|)!NlZML~jCByPi~k11uc%$4J07`(oWbTJkb(wI;Kwym&1D6F@?ybQN?Zy_6tl2yKFVS%`8{5i3i8AX zSvYs%7IB|FAeaJBwGT<8V3)R#*>Mm#7W&;pLV!=@cgb(;G$a*u0Xr-H`A6CBWZ@V< zUep4-w-POtaMV#uPW{WT0chngNpb}r#3Hh{(kzzx{ZiayTH=6hwNxd)6;xRdvVtS0 zc_DdO2eMs6$6IobeFh{D;8K>gAn%TPeaxJ(GU6Wx48W=mttxMox1q_?ZJ;x;dlO+} zAz>g_AKEH!K^M-@O!Pco&H_dvxSF0zf-Zsuk5xu+ow7ZsfmJ~pr30`j+e8d(pjF(( z=$$Lo`j{vuN<#S;HoKy@#qS->GmHK1QZJ2w)y!DI>cST2t<5v#PR%(AA82W6z0?4t zf)?2A%`+9eteT<$_|{7nwE*`v&qU|@52Qi#dzdQgLXrsaNM)jKLXe`Y1$kfdjQCu{ z_HdJRgG6w(FJlPQL$Sy}x>d@N+`U55x{8t(9NOpeQFDNS zA(_Ka`;>((&^w!FXsI?`z5PyVl(t|YOI%gM1){{dhh)i%T7am$TqR0`3{_qhwm@%b zo`HXti08XetegWyu1_8)DrZ3zy7)vfY>JBw#0`jwv9GCbH^V zBwkR0h3ASoK(9Af)JdivyMDd}AGy((qg`WjSmd7(#Kp>B7Tx>Zb4O2$)Q}@A5g;Nx z49JfKqp++JbBOP!gyMmt2T$rn8pXOG}x3)OwM&aD1e++QBE-vvzkgzYC@0;3m0;z}mcl+1{IZfOzKSdA z+Bw6OS9Xor2Xgyvi=Oa*WY z49Z5g_)Qf5ICNgvLcgCICF(e1m={!4xSHg=!q{1~?kiW(1~ZaU<3T`LoGqLH0IWp` zcLeS8Jh6qfT5e0Mzjelkwcf|Mt;M~7uABxZqG*b0M{yiY{a5>8K=;`P3X#{Xg>XUeev){3Swc(K`W_MSsq)w>VpDELZd2CXT_F`gKMwJ1G?&6*DG z>*cCmA(1$QuG(xN>j4U`OaE)cZw+3`~aX;GWednsCP9)KpJ zR__DM6aw2T;@XiuV=UgD8j4j>wfZT(3)wQQcn6HslStkHBb8$6=2o^oRSb`|vIJD4 z_KD;-zOYra1O+e*MESs|par(Kj@HsC^{X)+g=EAWE9JL>Dr-UBPA+f!F&9Mat?X5br>VPO~lf=1PV1!t-o8J`O_hUAhNg$Ir8wE!

}Ao}iXt3rs+;Lr#KURYYNaSXvsh+@8>`7!e9Q?xsKfO&b)@7QIL59fX`Tm2Wgg+y=Zw_W^iCBHBc<*tCX~cRPk8N4BUv z&aS;+frdhhu;CyJQMHpXhNwj#Oq=#lCQ6$TuxQ_T3U)TFxm0`lW;G1}3;7;qz2jP` zQA+DhtuDvl7Z{{P<<+#)RTMW#tL-*F9}o?m{O%;teTal zV1QXv?({BUdR%FItKr%B3`Qa|X^LlR)I<>P0&<5&+5?%J)%LpCZn;WfK>QgsM7CMB z9hu82d+TDkj$6Fts$MLR`K;w3C3u-ykOeKcI~ujchaO;nk+B3N3t5orke*D%)Jhk& zV0W|ACBf=#kkw;ZtWt<|+(Iw~aSzMNr}d)dv#dNu5>doLx|4Q)S1D*d_4nYFF}w=8iuZo& zwZyA%ucc~c+E6X^iddd!uR-$S^km`%_PEsr_O{gp7Dej<3!-&_#n8IILTFuJ5wtF_ z09qGV{HzNseAWdPJ?p|iJxF;4!Ut)-_71nJa9!5hi#vLqYOQs?z~AERVS<4d#9E`_ zx?}8(%Q-x(x-xp-h&}08|1o+=?HXRg(Yr=3B|WfMU%VdARZ`XJpQoa$m$0qL9^qt# zbu>kTC3&iqJ;XRN5Pl+npyQ#L2s{#_df?9l`KbVi4zzB8h%4vJmY5Jf9e@begxWH_ z!bn%eOoX4!gdpE3G!cG2fS?2Snbja3B!YhF(8T)10G1B97{bB>h9}}h&vbMP<3VWjqsIYFu>VM4*YLrOqv<9w9*w=nXGr6BT((wA<6+YK zU90-LWES^jJ&sH7_0@mhDv{-_JOkv9h&jiSq+PMX^BSKmye{~ka>>&x_hoWa=t zxJWn(0&c+luK-*cd9i@E2F~B*#9?994V)|X_>D6SKP-y6fpc|U97jH@12}0q3%#vo zu(K`zlcrki*)#)ZV*n@HV`v80mH?O@Ih?*?Ja%S4Y!5)hc3u9~*8%fgG*d>q0$6rb zSi=mccf*tkXGZDT07h)LRT%O$Gn1Pe0!Vs5BjJc(gl3^B6w(8l9XwZLS6$zHJj{^j zbTVD>QkYTbHjAz;G+}BaUHJrU7I2<=#g>OqSWCc=Z65nMa?NC08HEHTG2S$I4EFuoE1=$Q!L6+p1xyKp55 zmxn#5WunXmP{!+2JaT2|^k4u(&p1K~K@oO^*i_ z8%F~eqhW@lQn=#Gein){_iV7et))WlYj< z2$YT|O|L!~q~8=MYzMz)uRIwgiYTG&sBL!T`hbyr(aLUjH<8_XsL3cA1$f&b)WDyN z!{QHrv&kq`wFuhHK<1|qRIDI-ZpkQoCP30|jk2VMa1B)}2Zn2^o)2K`bgRyv<}tO| zx9V~W?N8(rFpVa@*0#@g$*)tRSttU;)Qh!1u%oSvH<|k0lczJ|#$q4@$L0Id?>KJDbgFRDX z^6<@!0Q@e5!NIpZ0JVD>scpH#|} zzPc*r6vEO2_T!8y|8I}pR@E@nGaP1t%da)to!XISJFBox&5rpxhe7Bnl(Se=mlT3U zMVx5^U=;ya&0~|~)Luejs#t5WscuBc)g$9M4THo6BH=9QD@m%N=A#)#;mv`ltJ!oMdTpy^OI=7%O z>^Cn==5Gp=SG`M>Cox%%QWzY(DuAHOlSDAzo-oSZ8YrvILdml1^nmd^g~|Tj0DwA7 zF9B%EPp1paf_DW9dX&AFA`I3G0RVO9P*P@39jM17O#1f*itFycnqfx_wlv62}DRtvtqU`YRo z0FpYZCy|`vhU$R^lcfUzAWs&kihO#(EPE(W*6aJ~U_HIrVwRo{lvYMwzhYn(If5eE zxlm%)nT;n83}GD$P*R7<LMUlaR2a!Q=cJaCHw(o=Yqw!I@JYW*M3umhuxFEF+S=DWr}o zB-Nqg%ZtGKMwNOV8*#EW*r2sIPdH~iB-Kn*oN$x>739~wQyBu4*9wqtaQrs6-l}8k zqDBmSqvSiNq|=mDx6_5`UngXse3Rqv4U|`dzg^ypV{dTqasWZ8-A7Py>J5lj0uX8l z*ATG5dMS%FxOWE%25Qd>im>%&?SCLpK0p{t1Bgs-7W@Z+f@J*#_0mrz@&rryE6oB2ZMdR>iO#AKfVaQ>luRi_PMD8;2QLC;jO_ zapkNk>Q0<=Q)oXM08j=}0hqDO4d#D7ePLhbzZfX2th!BEh9x&he=$&6IhLxl5q;b! z`)h%+Y9?xwWr4M#_6Jhrw$@*C-ju{hdBu|E$K^DTxODcb<}%K(7idqmU* zqugHy$|;Xe+{lf(reOXSCG^0ojjD={JJ0{cV`Lko{$C=sCOTh^I{Li3wk@i>8SC08 ze%W=-_^#$8icK@%wGqYI0J)Mt)~N6y{7A6!-87IFrrN-`hA^C=SbG4f8g?XVqx_mc zd9@&*Szr@-KU}q`iuC~`-D(skY%NK}p*8_F1pw4yxn?C4A=;?W)&NR?4JQV)0k9(g z5Rgb*aAyN)cK|8SM6CeMM)B(c#nlxp7E{ZV-i^qudxEMlkG&O$$!rk1nFyKAs+zCG zm6oA4DbS|@bPEAlb7N)T1dC`|K&};Rmzmc`9l;3XYp$mt>cq4OzU^Bdq4PoUj!J)hPIOD(LvQ>OL|r zDr24+rCth@3Whi}%6xyIjPlqxB`=JrQT$zj;%Xa3gfcYc`S*}t`)o=YM$p5fJgTW# z=dj~ZOQmjEm;O*u;jf*rZjWZ-=+1FDC`7MFoT4KDtX$3+Sl5fjva z`6nKX>ZtMD$Y`Gi&JTMys(Z!bs3@KW&<6;}oz$rjEgp;AUN^=3VUHsfTxtx88FSH0U)VhU%$AeXxe0-9MCbc&&h^9gNN4<)K+M5$4(P$Qh{c06`Tgg}t~-^Q zfCS=3nx+1QTT7!Ed0{Ep2B(f|Y4G}gdUaLv`2YhlaHRq8uRMT_(oGYQDviuPV^vk{ zV92P0X8rz+l~paq$gDE*qyhd5#ED~dL*-bINu%5^2g)hars(Nll19;A4HQ+4R25ZG zBaM>39w_NE>$__IHc(D2Kq`s>-{t=b6jUp6svr;hXz=;(1I5&!M58r3^JTAb{Wi+z z2CdqYk=qHwXzKkx5ka%}Dzg?}UPWd!82^6=#~L)$^kEzjn^D?f77ft<>VZBc8+$US zTql*G8O>V%z6Y$_t}(z^nnHBz$ePdnk%#nf3Krd9R}?$ZBHQ|jZEJFAh4E&wPz`da+WiY@Fr`kdJ47@84;KJ^jiFkgHJp=D*4^JIQ ziL0X>I?upb?O`cbC=N>o#WPUWc_?a$CJx0pd1k6`qlXr30JKmY;AIPyc7{dextiR# zHo!d-y*&V==2Iq+6@|`_%B}!FuqI}pIiviwf%3|SAO>8HZ$JS(5UGJ#W>t~kOkqzE zk=Xu16jU)QIGn-fG(lKHk5x+>g9m^!O5f&{UL|^)$>tqa)sz%uI5jit-ENJPAY^VG z&&}Xt9~E=w1!}`d6}95F8O84l6<1C$3l?TF`Jl_Ba)x+ZF&&%Dpz#P53JaQ-^5d@= zr62c7D>vUL?L=5J%72$vUTyvH@;F9hR&mzLuN1-a%iDqoxn`C-=#^7`8{3G*D8}vjd$OB0TPw8q`nYBgGjj;&=Tm zlw;jd7SUOT4%@3^hgDy$zI>sNxMB5wNVzxNeA#6pl|m`$)DJnS6lqAOepIKbs6smR zFPv10X`xg9)=8zv6FPP72E`RarhD8v^(iNnu5IhoV@@jFvDT??c2emUvQB-;Nu~Rv zI`s#gRJ!G;Q$OIO(zQgL`UNMI?w{$@|LmmF-6oy-`#P1aq|*f@ox18qB`cOn_fvH0 zRwtFNh3M29oK(7!p;N0)DjkZ}sck2fjxy`i7o1c&Nvu;}a#HEsuTK4-lS;=ub?O(L zR64V#Q(t$JEe$$2pi@_zRN73{sjH{#vb1ccQy+IyY5hT`zRpRdDZ5TR>ZH;vU8gpj zRGJ9t)Gs=zG&<|luR5tTz^POngz(C4uWv*lRKW?a?DZ@3eYlR!<+j-w2^KO@L{Yqk zJrcqqBMw)?(}AxPogdZT41-a9dALEuEW{)1rA9OwZYiFkN8s?9FoMY9Jmz_dSO|-R z+`~czV+lXrHG1c0@m-_g zYJ_9pynyqS8TD87<$4L(_SWsP!}Z)0PQ|0Q4D@Sy5x>RK$HzFxbthS-spF;PXcXdi zU?5sdx-1X39cRHFrz|GlH5v@pmRjwWRsoZ{5dJ$y^#%ykn~X*LMZB^f)tB+tTj{U2 zi8S2~uIjfdZPpMzgR72*;j+;O9r^OP5et2ZUu1Xj>(l(#$N8^M@n0Y2zdp!+eUktB zDF5{l{)F&0a1D*>>5D#8Wo ziMpH(#4p0@<@9wAMMmsBwr^jhU6ye-3+?XmzWYZDult2No_GuOkE_d% zoh@~deeZDVfn&u(r%#C^Z`MP=JsB+9doMik14f6)2?Tf=Mdt zkPtN*K81&qD3npmKvy6pa=Q}cK}InHS%FC8jo=xFuN%>MAN)0mZ1a*Pz5yjkz`z{f z-QZOFOw{t}97?9cdJ+17p=KXb65OH)K3xjv`{2cpQ;3on6Ch*HuUKOD5auCRF%Bom zP}^#E+dhrtwuNG*h9rnY-gSHh*P5eKcm$_NKi=4GMa9#n4p<%i$t0O!@iC%zbTp+f zsHBSekloEuABy2;P*ETf8HVIgqg@I>CmNC^DyOjx7zqw@c&OWcA!?n(bj&k{k0(h9 zlPUw=29hLTs}6|($v%ZdTP0&F8)PgnNoDQvl_x`e@xi1jz**AR3PQr}JiaoIprGA; zk&B5t6+NphCH6lo^Z`Lr2_j00J3x`neYVQc(FjqiE56VUB-M#W%QXlF03|&%+#`6* z#;20l5h?nKrlCPh|}Ai)fx1k!eca6Yx=Gv<+{F(gC%KP&%Vq1bFv2>r-u)*Q)W6nM{-e& zLzeW>?J;R#FWC4kAaNk6;F*watz$VUHk_mbS)PoZ4|_t1vh+P63ro^~aS7VTMB`%F zM+G5aVcAbMYIyzFYh{U+y+`GABQszm_zeK>cL(J@YBY#oO^T;mbjzu7s1`LURs(ol zQUkyPs|}Od7+gsnb;I-(R1eG^IbuK>6@WQY^CpG#}6DkXrt%Sx4`l613Jis?`VKzLp>-*KX-bb0VA2m z_)X@+$4(q&`zU7gGX)}%A$BY$l+_d~Q>#H}ek!T)EhtF>J*`O7@!m6~E|$ZV4>b^> z+oY4Rr}wcp%9bEwq;0PpdU#y9v*euW4XOI`9pP^Sw5$Tvxn`Bzo9Rd$52c zg&RTPNVHrkuRMd5?e@9ep_6khbjy&9Npyc4g5z){{XH)Ill@Aq?bUTIsZ)(3tsx~< z>SYVm#ptzcGjxBF z#IVM1j5=T#01^?d5I*!V|87LoU2$s7WIl1QX|va(^qA&?NjlWNk74@)$b)$-Ix2Ev3www^2 zq(^r0>8QKd?)l=+Y9~z`iBJ73I!oInG=;a?P@+5SPv1=_lLBqqTp|hvl%zmyvLDudyw@?*_Xxyv@=u*LI+ zqjN`#2ag?{onI*8pQHD$y6p1H=s&Z;B@SlIs0s5XNqeBOiZ;1p`(I~O@?xkER+!3( z*=H^p6~dBKZan^m;?r{nP8~Zz)Ar)*i6>7Vom)6{vUuze2GCO$&BS37+t}J69FHsM zZ^x$D=|jcYg*Oxr99uXw|K#aor%zf`6U_v-GD>S9JV^~kl&En^7L`OJ5uze+Bsw~n zMlYT?W)Vm<6Y&HHO45MC#%RPzE3u0O$(U%8l91J*V<(Qz+U+2htOSlk#{wJG zYegac8Hz-Psg}sD4iX3AIPic5WGnL8Yc35~XtE|4)Tk!&3kT;|m*W$CQ|XsoDLG7IO6fg(PdR2D`ZJauI~HbpdRun48iPL&Bo*h)++?+Q=!UWg%pOk>HRz zf7Q15)ZDDyb`sq<94y8T0UoF}&LNm!k_N^Z<1=i~ylsCHmsS!8aYRWC(=(s6zu#lEV%?PR)$%4~bO_HPH~L zq=^G@#o7I~O-)=1ajX&pkbpEL-#_;xCP;Afk3Ca7_0$Pi51T-uuk9=)gzzLij6lWx zM~)ph9Hf+Jyh-GCpiiC!dEgqaZ4#!~jlruml`oFFk z3>*oM7F?WLI5%N z+g*bVV@j$p){^Rp`2$ZKICk{->NtHZcYxap9wq-#fqXm zI=v7-t|ZR>9INSKNjf-81v>L|`k**}viQ{elTQ^-o<4En*pnCzEMXl^nk{?I%@|-w z{yLjHjn`r7iEDCWsoS`cIL_0WEQSducH6OpHKrtbtwHp4$Ka)?EVhd>pI_WAtRzhx z`1At2A-EFmEHlxRyIsKqk_2d&IK6QCq+|Iq55NLL!jg;9#Bos`b<}E@wwzr& zfw*Q*9+;o!e!NwoL~qn<%qEho6WY;iZ>3e{2TXewg~SSZLyiR{NuUn<*`^wfMwV>~ ziFNQOm`IWU^rCLd1O$~hK^S*kM&LgR&rImi%d?lC2XAb%7ty6 zk26pt-5j03NC2{ zYLw`+m1AycIhw(42Ch^s)$9X>i5-K661wJyf<^=8K$3szbmAhUxucwDbH`neQa&xl z4FS%smswpe@!b443LH+>fi+xq&kO5L7Li0Xk0U~07Kv^zEvJ< z|H74njiHELl?s3-4n?6WR{{7gPT~jP6a50ehaEDYq~NjGCdaw}k;J8>_&ZllO)#k9 z##DerqA%;-x(Wf~=0g8qv}Co-L;;1ywI?G9B?W|e<2;>B#3McUc@nQ@+e2KU4YD0h z4@=TPE2Vo;0SP7c0RMKCBO}7b&8S@1-u)^E8x80vUO&L`ppf^PXdpb_(gBm=fgf-* zYR>XwKJD(oHhXH=G^vRmrgKOqgeR#{r3`9w=dG5NsPb`?fF-G*Pk_o|)V(B4S3_C& zbT9A{;Y%nJpUnnc{LIt5qY6f1lLq9+;>kw4pHTzOEY-o1RN%ub3`hf^wwtJCukG4c zk_fzuK+j7Y9zy2H>3i_{_?Ovk)GDdYVTmen$G}+_b2u_FVEF}sn=qzb0 zNdVJGc?&J1lf(hZ(}{~F385w!Gy;lA9FW|bdX7?{ZW<*9wnLoHnG`^hXRJ`4v@g_Q zPGqmJBw9h|notN&l0)-ylKl&TiL zkzrfo=c0+`!kdfQSds_?qxQlr_H%iE8cO107<#5wp(Dv~aL7Nih$J@tpwV*xB`MnY zIDO#cy%vQ;W8}$+V>qDqT>{Yilx78|4_pG!2NWpIb;`X13pcUj2PD9^UlcU0qVtn= z7II<>cTeL<5Gh<@S*$Qvz=0&n6eC_Nm{Flc(DdCS1kC%SORtw5eXqNSL3Egt=}&#TA+!R#sQTW z5_Ju`f|0$s(%9G5JLVci0}xUuevhn(2U9ApDVLa%4BBM@HH15b3<9B>QBhKIX& zY2YQ0gkKAytlu~b;#mb_z)0xT^njqpb)vy^grYzs>^g{=o@4Zoll?Edm6$jZe7*SC z_RzB`(*lz48}OA62p#O8SzRY_G1rlcjU)+>a45)#$9@jsC>#mCx{5o`9&%QNDi8%r zR=|@-R#*ihVOP~!&kt(OebK~$Z@JtXbjby|&!C5fyf0~2yqvMSfak>KkwA;6|i z56#jUfD$LWo@un8B!M-9An%EW*Ab3Jk-!_zvitvZ%hOYCqGZgwp$?A3UvswB3yedF z(4JT{j(|oe;PPX{Gke6EqR`S=ofeDnb)XuR?SO2F<_!&Buk%8(N7Y7P_cW356knv1Fov**clUeqvt^qjMlh0*4%J z60@yJ@DxqrS;H~ZOiW1_tJ6gIbPFdf&iIu}96UX8CXytARZt@GbjjCEVpsGCNE8W< zSZ@Y6tAbfkbN>8P()>A&n1?EfBh(5f-l$Q~RG~6_8c>K0d%-;M091f_46G!NMV0-C zJXG{MZlYZ6)7A!x#KvkT`-<3~P12IiMqcnuB?~En^W)-0K}flz~Y)I3OqKK$^Oy7PZ9FOmWm~NJ$fR zSI~Si>W4yKCZ4B>p=ZEJTG+-BwB~y;wM$%Cj-h4&N_w!!g5C-4J6nQG98h9NNi0c4 zYwaY(vVoWnwY$xdJ$mKUngc0mYDu1IUt&pGfF?a0Amt(9XHSY-5SBO-hn#T-U5gr1 zlElFWI;1K{vfl1kmt>iud~788SqUi#ng@9UrZRCYcWnK*>6N6g!KmxTl6-$B@qT17 zJ=^i2Kp0A(Xfy~LV<|AX>x~nq01VcU`ouAIC&?msaWynRB~gs=x`vcaLquyC<2-dE zi+17~`B>@t*pdaS)#Cb}e-G*6TCIYV1TC$eh-e0ARrKPtDgY%hGN`Hvc`{8NDaJJ* z1}6!LzSuMDg6W|pn{H5YPrDmfl8mSi$Vg*gQc0X$QXBE9NGM5!#s|u%h=kf>;%Sw! zv?QV=DK82H%vj>wFi6NYU!u+RIJ|GVk{zOu;0!w`>w!5Z7hS+yB~GZq72$SI5)j=L zHDTW&$AeMB>OZL(wbuwNI7v*2jm$^DN605O156SkpN_RSon~KTPFySu%FaZSq^vpx zY<&JY39uj`Zr3e6+L)58GDXV5U%V+&P?88u1X;uI zYQY)n=s&+MiOU`4(jDj4K$0|Id*lrt!}OUlOB}mnZ}=F10dkm{!9cM`sxA#V15lEq z%U=9SQxT~L!#lQ#ohY_~Hl`#Bx4|H~fC~gx>qu;aLqXNHl`$MXbTxGVPltQl8`OTOWW8%O9D!A7^K*fYQEh~T&)be zsm4(xHcqZFY>bRn(@tFb4RhH))QxeWuJfnC8?0aiAr`&`tYVE z*=BN8{M7nH@7~_B?1MH3|F>sK*RbjP>RC4tQ3Lr^9 zXigHaFPJ6|gP|&M3i@`bssjt`Z@24wbr3*a9r*W4Q3r`6NzmxS^d;VX@YSC4T0VEG2PC2}@8(7&{5P#)n&Y^_Hb#$<%7? zi7Vg1%G!969F`_Hxg&VgZO~zz*&>$gWQH2Pi6%)2yHzfdYZPxhlII{HfWeE z3rv&zec;*N|3}=Lbw`pMSHjejxb(u__vX^vq!F{lCPh)4Clr=$NB{~fpt{JO8Kn}5 z0FbOiMlzRLc+UI-J%0MXpP9Sga5rDV9T5Qy&tX?pM#Q~l=H}++`!1h!K?hoh`kwD6 zCyuh9;q(R&bgD_!bYbryJ2n*TPBHR&`J$tfGtA-!>Fzo?fY8aDaKg7W^XOrtvrAZz zdnv29DUddkfCQzAF829ey`^z5nQ~?4E0V@!Mj(RF(edzha=o+GF9=8JuA_jAP*QxE z4@@Z_L8-Da-atIwrIoyQj4`}cJaOiVfddUK5~I;Qra7c$qP@#cDwedZDRn=$YWjR{u600D?-@ zMNp~1`+zUIUM<6CQ9;V%S=xvsj(V&oErgocgA_|>4K9djI>{18II}?@!|BnfbRWj` zwx_!B^*Fa8FhlD>Lt9-@cpP4xJEYs0a5^l6 zI$OqV)E+K~b>#su4V4J5%2u8nBLl{%{GpfLRPH#8_FQO1>n1$CvYwmMOGCyrqgpzw z5g8CvD&JAQl=6~--mv;U>Yy$tD0NH8#-xe)r5w{LNRZpe7!EW#wl*}o+Z7!rA}yJX zt!>4oga;}}RgS97xlez{G@zgt)uNon1Ce9I{TDN-RzD*uIMC<@R~gZ-VA%$@)p&00 zQe(8M+VvGTJ{R<=-MdG2>EtvQ3aY3vT6*N`kslQgj$%_7z@><{N6Ws?XScBt?5ve| z$v9n<=$w?{p@E0|Sw0Edl57~tk;yfMbYOYIxJTza^QrmcuO2>rB*Ia)619*@RA@?F z+mQG8aQD%}GrB{`yPf1=uJtaVcflbAr4KPFP9A#)UT0g;G658BD|bZsLAVVrxG8V3 zdhZ{d@2Fzm+xgR(DE915hBmb&ESP^3Wp>I&O7Mq1CErLO;2{YecOJ2UHk1@1o4ys9 z0m$HYeNT0%DM--rHI6Z&5c-tAj|*f${cv$qWnv69n-CkUkSGCU`&QhBZ7~H=mp=O_Pq-JYPv9RpB5wv4k_GP?7TQ=3*zIpau3{sG~8Yb zLi73TV>$^Frp``$#+}O`K{v`5Eq<5xo+-PYJ?>pb0t_tF z-=dXY)7AKJO&&23B>5blznm@UvUod!BhbJ?L*@E+>ZI(_vWT@gklyVM<=eX?n}-Tk zu1`ugdQJl@cOGxJY$G&)F)n?!t1xB0^=acWfN?H9=XFpn1qd$X@$4UD!zU{`I@s&` z=WB4AVn75N`#envp04T_bi25>Ogg*vBRv1x0)c^JI59**M0QP92p@^x4R#nD@-c`$ zb}Etw6=)Dl$8^#_p#a<1pEs6lCbNZ{J?mh93j_u_$UxiQA0f*g)e&C zlUCW^iYk%aKNJB64kYK+%)yV0^XKDbSipwG8{&s96l4a`1vtJg=J$bgk!aweA$w&v z^OTp)h3h`@@i8=A00>6ZaW!ae1gtd{zBA{F1{<#z(wPcs=WR1ogI&i)Ir7oE-ZgS1MEWdE|ymyK;}GwYc?ea zbT;~AJD2!f;v_u0J$|Bg2)uk-Nek{)6xhx(pIU^V4 zoZameaUcT&xq(jGM7G}AkS^#32I%BR6xnF)?`400ugNFV~QXR`3K8$`m*-URdr^xn6Qd9w|r`174WTLb>Yo(!pPpt@R71^kpT}hVG#bAMf z>X2oSJ9M)n2kjJJH?f}Po|uDLcrs*gbWOIGouYB@pbf1%QcSaF)q=Qm{foImb~Qzk zGztxVQ>Un*YuJTbbgokZ5o|OE!rHpeI3L^dPN>UnO-Sh)0|qy>e~P=N-fZoi7MjgI zl7v753ysWb7COvkPRB~bt(u)*Nb?1_U^e(`)x#YDwZIwItbSxQPJ z4F!BtyVZ~0MLL~pH^9JQ+AdlfQg2t&>d9oa@K^75Zo7O?a2mbnF^yKqyrQ#S00Re& zi?i=h%0ynrS@x6J;_MfHMxsKB@WOVC{H_!IR+*IRTBoQo- z>L1FaiX6i5@AoB}cSgf6?;@d0c*gfD;@WQyb@>n19y)j^FVh~;6Lw(o+=VOs5WdmfDn*%B!%hVTSm5DW@9^k*^n_~Jo@biLpn;1c8FTS}c(1Ua$@Zbb`;8?SSa=N8W$~(6 zHezOY2o6l_fnZV>Lbh@ zgTIq*U(V|be@Hz$XV7Lv0D=o1Ph6ZKc%%1OKWw8icwmAJ4=If4Fe3BRF7eOB0uPU8 zavfGPk-YJl202y-^NDxLOSV^%sA3UVFhfIguJ#}i-o*kBBD{GvP=uFgA(t8?8;r|E z0~h@Mj4nxu5M^gWBF&Zq6|m5OU90+vyh8+zPAnD*EQo{D$2jL(AO%Nu)l5ti0D%F1 zZt4~IY+-GnLH<(})7UrkJTi8JbtFSOVzZVM&TrksE0*`#F z6~hOzwq$4gIbPT_$b|tq&H1RGxka6MLlxOIXAyYd0G~=r;gf0)m(_yP?yu+wBH@?W zc00o3U$3#KRDVKrpwdt z$BqklSWt%&D?<}I10>tZTt!&`1rqjT#jjRN2tD$y7GuyjfajvO@Zsv!Y!5H0h2oHV z4;msK?~NRp(v8Rg3pCbSSi+{ih+WY!1*}9mZ1QvK`-QbtiBGLe6w`E*c&Rl@S05CfOfWt%~n>xnP zWs2|}P2q>B-{clM1lVqHqH4-=`|-oAGuhlAMi7lgRLXjJ#dzoPG7{UfOtaf%y>fb@ z0UC;fMq2!5k$!wO8szv4CRix~ft7ZME-nvgfO0dr5T2ZEzfzn65sb7N$uRD}sHU7S zM9i9PqZ5=KBsi%}iE?^#l-abuh}D_ZqX-q{jTCHl<#rLbSGu%5F3QiYemdFQ@Ul{w zk3Gs&%_1=*K1#v*+Ww2pz`iCC!AQB8(Vqgj{+rj+%jUZYeO)}TSe(J7IE99a^L%p0sXJ?YMgJkF z@)=7!%o`|h(4G~+p}Xr5LuUJ$vo<~f3vN0^Dajp)N7*xIiY4%35;fmKj)?Zzx${ost<<#ou^0Kf)=Cc&oYa4c=y+5;^KN_0&WIH#s!_rG!!&cGkWV^Bdsl76@0BsF zdyVLSQa_mc>#4Fm$N~!h7dEgSM!9r7iKT5_Jxl0<69MQxy=@_sl|6`!!@4B-l9eF6dCR#kA6Ay+qW? zW`wsDpGD%5MG(Qr*_mX-;DgXJo1JAy8&L3ab|!iGEVP5iC%fl|4^ISlHap933t;eb z+b#M1j#4%|$EZ?g>r% zmZ(MqC%2})u3z~l-{+%iyP^uPjq#X{xDiVBWmJG*jQP)e9XUk$~% z87lI5-ld1mg0jqKqU~krz{0+?7N5@1Fvk&yV$7bGGNbRD8e&m^O`~NBJFs8&e2WOQ zuo<=TM|8o`ct?$D2(h#4QReia72Ab@+%&4Me_o$&>CzejpPfsK!5bXllg$-=n4)BD z9zmB25GX&f*x^WGw(pc8kYkC|KT|B+lpdb%9}5#@^Q;I*0|Xnn3}=Vm$Q37D859s0 zP|6%r?|jl#Oa+4j{6+&hGmmzlNH^-F0f4}OT0n_QwUSM0ms((8fKDe6sWSGXZFZjBhqTV1NcRqce!-00;Pu1}JcMIK7MK5P^0< zFi>PxWqbFNha!b5P9AEIX`o$1g>1}^Au|YMW~X*izOmQObdW zoe(Mbk#bBoFm;I(4G`$%(KX7f0uSXL|S~Mjk zLcUvE*-?u`aS1>$((GB3k$)8JR(7PgfK`El*)2!JLRZbM}T1Mb`3X2Ssyq-jaTY)bz3kC6$=al-gWq z`qgAjhXV_D%!c5kiUtfcG%zV?BC2Jxi42)%PRAp;-zgW1boWS&1-+_`!HcX^2kQpbGUnhM|RZaxJC3dek3hbQoM zH=h9m4b5I3)2*U6v@x77z&)C*H@Y3;W{CH<3Ei?w6mB(^8xUK;AqGw82r;OAi3*VI zGqelf!h)LmwJvpw_W3EvHtjuN(9^MQar%fGXU|n_)!qu=MI377T@lW1Xh0@v{p`|# zR(^>K{i(|aa<%)Bvw-tD@VxApLXz4?1+k;Gv+XiM-CgSt7v$7U7Fz4FIje!!bf&=Fb2&az@^b@#ywb7 zGA?CjRARsi1;~_dGBPC_J8Y2&oqQ@p&*x|ns|YkO8Ot9JWO;)FbYppcIKPwS-SK?R zO2|HsCeI@-lW+1O#<5V4oknI2M^M1oo_nl-i9wXH)gfa1t~z-3=Vn{miJH@(ZspUr zxS@dMTPi})%~A#k_{K-+&|W{g=@cCd4$w_qqtt4^x+c)TL?fd<(OyrfZ)@b(TUw(&#LE<4rO*cK$AVAuSI;7h+yN?SNV%#;}-kD_Ug)8Zk^AV z6hxBJflc#jF+{)|g4e*Nd3ED9IIn>Pul6F80Z(E-*g4x5tl9C8Ou;sw;FM*n9zQ-f z*ncEg``Xxn1urM!)~Bce<3mqo*V}q4t4%&DX?H7$40i5UsdbEzx|1D8_gCf#Brxz$ zjAm#SC%Qv1`F@qR%+dz~kMbE_k*RJ@j;?Slh&*yhr{UsKYXHG#_2S28`$q@DQ@ZNa zfPqJ~3`#FQ#VBYQqUyL=hROgG`dKx<5*ie=Yf*Rw1nIeTR!e$m-{<&{mQe|ceCw>f zbt1FG0t=VDdcr%{;AXP=}<5v7+IlwSrV-dF`)ME^#Zk#d?l^4U_JTMa`M-k0u#CROl#5QNI%!wMQws zkl<|U13T9F%cbm9b*v8!7Fal{Ynz6%m-(n3x1*fFq&Yd4A)Ld^&a2wlW3$Vaq{hCurVxa{dXUj?+OWM`1 zJxFlU?3^hh`GT}#epEPKSUx6Lt!GenW_zTfS!)_eF^aM$QHs zMz!%oRPB5=m?YC+;Nfgg^V~ffj8nMTpl$W(*NDx!w)z$gdf1GOdiHd~mu@SC&AMi6 z0uX#uK6<0_c;{kW&$r(0oNW2{d)Rz1@KE{S(WN}lF`KQYCp$>lN|Oyrb>2twNfo!2=uRbcXG4aXP1?f+zmn?>?meiqIOz?2u7OTl#Fy=UE$4F8 zMs`f8o!LW%1e6PU62!Q(xnPDHm|(Th%edRaJI*Jy^AQ@DsO^&aoz~C2G2m?5)lQ}X z!ABFelJ8Mq}41X)wV`*|45U3y?CG9T9mMx6X>n2PU|&YYA}!v z4H$H=RWoc!x>ilugxJQ>hI!Y?x~BFP4Z7G06lpEGRv@pLu;tRka#xwIzSV$*x}4V! zCf=UPuDTc~aM&imX&+o|x;6n09Jp-f)Ng0Hc22zp=Hc0R=ZZG0)1_&0=TWvYu3xV0 zERTSJ@YEM_f2a9MI_*WYV%c&}k{B>hQGzF^PA99%o7~A(m^7C`0~u8qB70C>(aq0+ z-LmE4(>OSiKy{C4EXh0D{LTap4hSd&lLiN8eA=EUknEObUwVT9U|kNE^_H&08*l3I zI^4vPO?sy_=OSxyXBbHvfPzyib6ss{zhFOQ42A?=4*+a108A+nDYRZJ`POwgqmZo; z3F|aq;GoFC9Ay9L?NXQ}J7k-pFj!#FWvxq?%UTzZpz2!I0Vp_)!R^<_Krj`P+=^f`XJCQy1uimmBYd)UGb0k-)&!OEd5aR^gM`e1I+hoCjW_V1RDR ziGRkT55ba6osujK9N1{jf};x_(@#4q?>fKiC_$DKsNkj)(c#u>l7yc5V3o3_0Rxk* zacool@T3k@%+|Q1iUJa>H2xCk2OGHIG8*!OxuTxiqsX>?W?VU1gk8~h;_S{ zrU8pHX%h?0x-%KD1XF0k9!wexOq?y-nBr}u$acx}n$T!mAt-QgPs4EBRMV%CV4R(G zNi=gRc{X@pqcKmH&1oK7-_K4>)XBD0kvgy-=A2He>F*lJ=5!Ps%q8xDE#1u{G}&(% zb~fHI4Otdai87iPgTjIyw)G@#esUIe6S7k*?OX;Cj6$#AsG=TvDJ-x!~H-rKYzI!Y)i@}zSqk7xaJ!ppH^}-BHLPJNP!7T8~KRRU;NR}pxzP?YfyUd^+ft!c4n(pEdvOh zXjsycMfSe*Bl9-F(5Rs$Q`QxYVK%0>DyH$Emu=&ztR62yvTQtRB?BVpoJvqFD(a)t z8l@oIX49BD9&YI#5*MlkZfz6pSG!5PE%`_WpY^bI61V0!n$)sLx^_`1ST^<2hO$$h+7dr88$I2VCQixV`P>rI~bAS^ybPa4$?{EZyd}g-c)4v^s-WN4Gjq>7Kai<;#Kw- zuM&EL3+^AJxkLT4hv$_GAT99oj1Yqe)|3glg8FjkGwEl#!9M^1vhZr)dyWd*?YiYD7{NTWODLQ@GAKQvReht)@rU1pn=E44g18absgh|zylZMmr|$w z7ojb)tL1X40Tir4!$_{vOG7Wm5gO`e18eAlLPHZXBf52rnVwcAX1dhw0+)_4(}ja3 z6f@7Nzwk^(#IUXCmfDCS+1k4{ z-wH)sG-yI4V|nTY9mOhwVYX!2h%_9Ss2A!oZD<#(9R1Gr3){IgAlQWc>a90|*vozj z4LlSZ8m(vvk{bVTT{{~aT9g7FxLga;v+xGIJ{D{M!KQ1H_L&1Zs9g9(wkEZxrNF>K zJ?X}N{6HPx7hHdso$SugS=3hE;8Mgvc*PBglx<0US=TdR+ibR#Q&vMlQ`bW=l{}P( z0uNlShtjiQJ+uJ?o9m&0%k=S31qK$^L(S;|)SdMMWgkzGs4cuS@=s@=31=CA*Pw#e zjhx|b@jj7L?ihDlp2+-RpO(j)Lv;OwuV@qo?Bgd240dz%i4;^HeY_HKYc$5(hpN%Q zgH~>hrf0*}=mrpMZb=1m27O9O%p15K9^OXW$HO%mw4u}CNkcxMQFz>Ma>H-y%31gf z1c1^WMgA$AFUW7W^kFrI4?M5DRi7Pz6$XH5DpyHNM;iw@Uv@80U<-=9GSgGJ_-4E} zTTdq|Y3b}m1pzuxJlWO3y#9^JcbC0^0le`LzYlSD4{^H=2K3Y$#JM{tBS2CbvExDv zD&;@j*_lOEq~Vw|x|@^k!y)u1lc&{oc_7O$JDFU)m{!XT?eTRskw-A02q$2Cbu?AW zKX2C?YLn<6vLlku*%`p;T1D_c$KI(PhZQzE*tw3;$V$sifr95uETT$2X2v)iFzCSr z(~JoyH$oyr+vFlf?s_6pbk0b?fyS7RX%Ig|Ib}OxtyB#p=r{}*tzLNNpl1uJor%yu!g-A* zIb4Uv%MK2-@c(QE}I&QZi>+%^^Z}m^8 z>mf}m2Wx41>e^sJSDIY%bj2%Q2+zsR60~b;K|!p-q$mf!^~$!8?UZga7M3VI4Q$)9 zL;(p6!xBBa2k&h#K^y8yxneNT+EZ6Rf|T2bmuqgsceaXLM9W+~&D8R*<%(QWCJEX3xmI(! zsNnWI#qVVF@D#U$LCKG+;YsyEI%GC#rS(!+(1!XHE)Tbb>z9iu4a$g;%Vzg!Iu{bG zo_1%?Cvw4K5A76Iz(X0!A@_cdVpnK8Xju#`DLU^?KZ4 z-(#$zIauJa9?3k~D@Bd&=8+CqoJsr2KuiVIB1or!!bhv$(grozL=zP0Kq7=BHtWHD@FnbXE&55e^W0iy0pH&eRy@{ z6J?`CBnOT_f|2up@G)Jv7u;@^y=|q47|7tKb-TTKLk3K6awMdU6_q{+U>u$Y zm9?UOl1~T+F0KI%*W<;84<{40%+~5QHUNT;y8q`q6%ld3?2wW-*zMu~o*OF*ANpU` zFVY;+`#3r&qUdx?Hn2x&8YpNZNP?xN-ATmyQm#i@lgJo(HYmgu@g{bx9fm;5IA|&po%(enJEj-KRxpseF-|j$;f}6%Gfo2qlBST)1}kJB zfub=|u;Qnik;JMW2B$smk*JX`UHZ-$4zMT?oSUrX*Dz${OCUiY14hHb<6gUy>5Xi# zIE&Rqw)B+2c22%U09S;QwKi zpB#RFLE_97^7Q&gxy8AKLb&*lByI`yrW{5X$`S?|{B+< Z`JWTx|UI6HXrpGhgm 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�Q_jOJ?58o8MdDxm})uR#01ScBy7; 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

|d4&}v~;RYsu(e_aK)-XcEur7vr@u{RpDFc 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�G+*o-FHJ0C4y}i2i4i5v|THU&X zgY`9}(t;enx4f~nx^n;a@<#36{f&EfH*Z3SFqjA83H7Jsq~?6>^Ul^igmZR#xZ{CY zvfshEN4wbjk3CJHEnhLI9<~vE*@OUstQ{k7v8;K<_P*l5RL~S?n)|GEfAi)>4a;j? z0&7D?vNt#G-oMAkk2}4+5t5L(iGfE*zcBy7wGY#j3vz&x=W%2=j(eKG;t}K+q=&YM zX->)6qgM|Z3b6cQfxvZI%)9JfPde*2#BnVgv^+Y%k&2_^ds0ZGs8o+De%)?oQ!qf+ z``*m!!U)q#z!+m!7w;TyXj2?y<=*U!fM(%%w@bUyU(!{af_lQVg%d8L@lyT!)IeBR z(UDL9AS8WgAa@+@{W(Mg3Br~%Llbr_;5u9o3NO%I6$&tn7?JKv_0790Yd5#1;KfU> zmg-^Gfog)ZBAdEgVreyF9!ch$DY$XDPB8PtbmR`~5;;2jc_uRV0g5dHq>LGMC{A`U zeW759OBws9Ak-9G79!y6G ztF0h}3wn?rLiU;y1nUbJEbKd3vZ}zJ3(n^fH<)04`|g`(;_YK<&D9#`X=HACH~Q!; z8JEeIA`=pM+$g%Rv$s2*4@Gz_S{V3s@Zqi1+c!7QjrOl>-n}DCh`Xje6(X5@fekER ziX1;2Tc0Z0KBFHYGY8ZhxNw$yi^{h56T~;)THd&MWA$vVy%F}%u&n^8eJIp1A|3Xdw{`_bJ%@!#-J{ZvLkenuv<)E)=|k}?hgDdwdMyvtH36L?|e?wwn! z&%(cu_+d&I)lOhw(Vax%`B~`+QqvBd2xS7(YKo13(&pC2>YcMu+R)q{fnWM}jy9*xoG#pB)^Hi}7#2rt--hknsbh$Hx(26Dl12+Oxwmom z*WNj^{Y?l(0VJXtxk_;`v%ul$SW$@5u03PSa1sGJ0D3epLInBfIq4%l66!@0iH4wk!nhg17Me!OH*Vj*c@G@41@RX7 zJbfB`d|bBDPkH?fCO0`o>X~Vy{4I9P&sC~HX5mP(cDny2l~P-$(w-^VIjZEq&iUK_ z9qb&rmNwu2;+-(BJ$L^-cmI86Y#Uku5KB5 zm4jHj!Gl9IT}5ZW4hB35xJLq)L+hb;C=GmLK|07Ur?XQ+x3LFDEF&;8HR;6@bF+Q) zgzFIPT#7e=((S`%A-$V)V0mlv#v4Z!H zhy!DF@##(pYb!pf-HDes37mw+*gJ##1x0YSCG>-B;n;!F z=A{m{n|3;yXb*23Z0*j?A8ai1E^6x)+_Tt-!X_D=hM{|MISeS564Dz~qSa)iB;^3d zf{h0fYd<53G!R(e2%cT+z+z*D2mXMPCwGvvM~Z|W>68l4--H6%b?AtI0uzWl>Db6N zp7=avu>;QBDl;=4D*m%Nx}yU?R=!fIdwJRgvDD9v3~}iG>RojSfE>7xQ{U`%x;@8Z z{E+$Twaf{!ws;wSf5noTTd?b+}c7x)yjfEh{e5tEmAL$UV{bsHI0O3WpXcLxq3XI_f+cwadtOJxAxBH6@#% z<>CnZ>ypikNZhvu&V1IwRAr8N;e^!pNs$1~Mm_+mw6)n<*|>?TqHbK#`0rLI;+&Dy zAM|^?|KJ#ZbLeycIZ(!XX_orD49;6-mm-)M+LBYY;=InwOXgw+dK>$_TNY@zaf0*F zqr5Ow!VGu_Rs>IgN7df3fcj$)A&Dl%2?d-Ifg`8Wg8m(2D{#OL8o3TDB}j++GUhy> zu%Oyb_D9r!?3~MO6O`5JMpq5c!sO8gPV2(75JIKl5R?@>Bq6UQuaIbtF|PDBBRbfu zHD}U=ZCXRrN&o{tRyJ;4!6EW02s)=@WUub@t&()M(%>caZKT#Km;(k87g@s zjQ|`rC^f&dnFZ|aOzkZg^ZgU>6b?2Z>_Zkj@>N)0&7E%ZBzEo?@-Sw#LVGSR5q%Iv zB@Sq@9exgZFs&eU8?he7iJNcZ6yGMAu#A)CkJ zXm*Kf+sXCi1`;z^Bhz4lVAk#Zk|6cSbOq)TR87QmW}! zr=}8jd#VF-8%#D~M7P0SID^Y2o=IbTOqh)pYrNV-Ol>*T1Uh5FLAQWoN0?5d#!!yA z(l)q|k^oj6c;Lo8VnaDor$m$=iBE>pz@EpQ_XM(l05$ZHTG=346a=6f6;|RdPWZ8~ z1gb3%Yffsuw(67-NrXNfBPdA~Cn5*o1a%Ptr7itNvf54?5z^F1$JQB@Ie4bpqq?~O zD36cAZX*Uc8yrkpW{5-!>0M5@_*QE#=9!aVyypA%FP>+iD1#(oUYwgS0t4acghHnohWM}wjK7P(V)+b4m)y!Vp%O}Xo52ZB4bnK785-?{ zC7qgwOoc|B90Sv5401RdsCS0gGk+MuuN)0`wMY*!X-|_ZD3MC?BE?A_=sZGAk{zeG z#?asLJSq_aOapm`LbIWs)Y*mf9#xP71Bt@=R+{DzB{kykvKaO`kB+AT3MC4_!t)A% zh*>L-lOZPcP@oDN9%n)ZbTGlf||S^9lxX)81BFws6mc{=cNC@i(@uxuw3P9J|;&Ko1Q&tl`EfoRF zFD;WQ^?)?7r3_OrS*PO&+ZuVBgDSnD&^)Uo1tS(uSwOP^6A1Z1mNQ{3<;A z#DS!{WTGk#Wjk`T=u2EGxXxf&GqEENW!2te6f5~5b}=%rmEj^^iIyb+BH6}`x$XID zNJt<%>pWkQb+n;&V4Q_!0kGv=pfKone> zLc7C4Y!gaDuOP0~l0eU3N69F-x#APmxfG00&oQivaE2nMm{9n?>#R^$>8ruCKJZ|cu z^9m|RBufzo(<@~|Mg~zK7iyhXP&&Lt219nC`)NytE#(leeLp%L!ka^*1L$Pu1Y&*G zR;-@O#!2QAX8HMKquh#3e!*pPyjxB-;>MK{(TBY0Um)$h!ghqCwi9Pt9L#3`9xG+w z<6}>j^6@2Q=m*(aCcaI(f}HenQ>COA!m&A};WJ1|uPYNHn{c19jFhRwh3_K@Nk{xl zi5D5lNc_QvDZwYpxzK{kw;qxLC$fz{PiVf!6)6>Nd|eQ1p+-jNDA}aSvrDxtQN`4s z7Mmb#b!~IDu;WhB`{(lOW6Q5V>d0Ya|4!`|$;nV0?y9VwtG|DRk)>1d-i58LH|cEWGLt8dK58?mBDr zEgc>9V7mUsWt~1}Z^KmEJf%Tc`#+*w(teyNm2&0HF@knaqdn+_RqB^DP}bip^VpgC zn*-Rc$7Wr`!9v~{v`2fHm_zdO<7ye_#Y=LIRVE0zQ0Jowx=_8>mPR;DieirX_j4)7 z4bq8D?sIEtO6Dk*5|QLX0dq^a25M6>Dg^=Ng_@6cVb?wBw}&WhHpir*r!9pie(+CB z#yKX!wZbRW%9od$D(k$EVfyS6&jEZ20*{h1f|vPXGEXI^ofrO?=ITe1c#hT|t-uSd zy1c_Bf1Sq&ib&+0YfIG<&npxp9)oeXEbHDQ?MR$?E~F<525f-w>=H0DU=y{^TNJ07 zA_C`)ZaT^{%c-2KnBGt3TYhfUGB?b}mzOg&i|X{4Q-p3PgTWDOL!kRJxo^-*HGOLt zx&9=sM#e6Tl#E_MR)(rN>LCLWDj`Rr+JoD;#vZ(h%SJD!DrH_ZN%x<~_)sQr*n}1g z^NDSE{WF@ew2xkzhPb43U|*8{I4vhOSAgTYiyvP>b`f&c;^Bmwx_Ee@k7Bud-QWnx z^ewaAWpCjlDa$5lpe{QXWot&seD_iqu@8*h7I9f1Ho%=T>}MD{{{B#rentnWcm2%8 zBdRUF!rP3{W*z4^KbFjps8YN`s}J;&JDpQk(2MBruRG(4+i9|IA;O9%Mr@p7yd3yE zFt%f}hMPlB>?kt$i7kXd_~=ap5V4ICk;RekBsupQ>lKnU7KSgbYm`JJ;cZyp77Uea z0z|J$sPHK)w*iMgS&J;vK1!5SARYJWux*_UgRU)M7bt{QL7nss5zK4avm6T{5Pw7_ zbS8aJ@h)&z+0KQ{Afo7xVee1cMNWktG8SS-Q*;Je>+RaC#WT%fy~17?;+46Rp*?i| z#0KRP=D)$V33jP1_7@?F8f0y-xlao6Nel*q;rd;nGnxoHpc>eOgB_CeRO-=}L?T0P zh_WDxmh)MA=orGsx#`Dnzf*Wih=}t52O8Ib^AX?gA+ZDQPeq`h4MvD+@(MwjnXrb( z;m@>^Vs%p(5}hQJa3*NUg#N&O0N>8Stb$t!SZzG~IgAf+hnoLQl=egx2=wyd@ayL!3hzPSe>JAx$!dee>ucoe3} zY>B||I=FNZF>HvM^-XG-=aYT0`ug0?SZh(XVx!2SThx3)>1MjXe)}QLePa=F1oarn zP6tnsNfa@CK=!d@<;P8nexWl~EQ%{R2SU+CsT>5UfQ7s^LKapqJNNJyITyV|f+&uY zAjs9vb7)!+v=3P>P}z=;eI63d z5bG_MQOy}+u@fDHRff>kG|ZKfpHUHsM`Xq8p?w z@zx{maq-#0*^#vqVb`s$k^w4){1 zl*cBh(}dK0+jnlhJ->2yeSP`Pjrm*m@2p(G*{8SXf3S=*saI;2hv7il?9h$NW+ffI19d99Nz=JZ37}l|f#npc46!7{8+IHrXn)jH1BWSn*a6`(z%mL zklXfO=SD76(A}5wqv#be%BQ|_gR45`=N}q}r zg@h+df)1dUPw@pJGovxd(u^R-^5pU*z9bF}?1nHU5)UIFT@q8ChV(4dC1j zuzrb$c5$c*k+(QD1=*v};yD?w&A*bbFzvpDK?(v$9mVt@OF9Z=0J)Zyf=v($SB^S9 zWjGNL4&51z?jTlAF9u?@G77jD-EKJN(d^_l9dYT5=euhDJGM%Iigs<0dmBq2qHA%a zJX5N;hKpjwg-(Xl%5TY8a7mMUFhD-Ejm<4+8{v3$(2cOI$&=O8`b8s=!_tK6N36I& zTAJk0a^*aj$l2f{dnX9yEEG=iIU!OeD9?e`WbV({)lkjbO1VMZ*?{>D)FYTf@fMEkdI;RHMODDgb=s;bxA1cuoN&;#f zLkD%R5~G|pCzM9=1=l?K&$0Aa7Y|HZ7%545&>tknX3^Y z=SH>=Mpyu3vAtBqV#d2i1Zc?tpbmH-m*XL11ECQz|3vn4WJu&GIe6dhyPLK8IP1nv zU@r3L+Pg=3b`6iV>pc5e$6go9@xbKIHrBN+Zn=RhdJUJ1{H+V?3c>X3n2>G zWB6c@QgvjI6e_cxJwi^^TpE1V=KM@eS0Q$jw3Y6a#19UK@*F*O;2~+@5^##isQ47D zOWpZ-Ib9C1gTt77;vz@q9A(VI0Ynf517Ale5a7V_VG-V9m4cCK=>~TY31wKHX<1cA z2ZNMKj_ZHIvWCqBDdVSj)73%>*lJmO7h>pLoQd*53&c$+K1NP9oGPC>bW$c8IIWe! zLDHKupfE+wODOab8auW%hqbcB>flT;C{Y5#S{axmgY6ku9Uy=GxJ0V7e%edPf`EB2 zm0ViL=vBW`Z!)opb=Uv|WWx-REDr@4FNG=OtkR+2T%KiVe|RJSbh8l6qw6szdHcKVfW(Gn^`=fUz){Ku|54$u4l zOuC%u3{J*%p>#5kunJrG$xIGrX}g0?_qvwTcW7 zGDxI(2xvKA&A|%H+iu#->jeLFU$pzgIUQCbfs}GYPKUzIYk6Ur4LTzHzK76?qZ+6x zlr)e7g~qO3FNa~d5|5Z&gkTh^!Qg;lfg|L8$Q(&%#OV)J7MqOjOyB(@((2A_!y6tff-75yU2TSUuU!WF1nAI!oX* z0{~EJn9-gDG<_WLVO@S`I!GoU+!`$C1^xgP4!gr4xE^MbR*%f7m1|<+N{%Lfz`rg^ zrkZ{Vaa)mx@#nuY^A8(o@W9EoP+Lc$-NTNwCT$}rMUpjZ>rAN-2}`Y!?4x^<%-5w^ zV@Rl$RIwuy#C9gxph{%2O-wrLWPnmrCfLlZA4i}xXp!7AYOxb3@_=VignADh-S*$9 zYn4_Twm>7EsB;{1{&Mogh8!cEJvR8PoEKrSss&1#QDY{dg#feli8c9|5x)ZQ6)Dn2 z5*qVf00x#sqz39K*5=2SZkT^WK?v>GqAzK@1x0TrC}Ufof3PDtPQi{0Q^^|$p2zG> zsLaNzEAx%9iYIMKF->Axg`cL*eU6`$sv1D8UY^zRJP;-sNW-d%Lhv5bwi{;sR6-|p=nf^soln6Cbk<#2ic${%N%D4 z0#xJ?YX`@Kr2WxI6JrJ1}!3c5m$ zHwBAzd_!|~NIl@E3CKJVD94eaMV+gfW=;?_52$DKJAcAI^?L@ak_)BL%yCE-E(PER z#j-EiSUF^Ns?QVHmBK$T>v-vgB;~Wr5IhNrrQFeXIjY&T*)dfsv`Z3Sk^@0lfxc7K z1gg_*J2PsOGNCKE-9+H&wN#SbRo4y=Tat660&GRET82B5ORC5}`Zl>&0lfrSW_!p2 z3ELF;8e!-&cfuICdihZPnHTk=*J~mrJMvUoelJVIg9ShwrR8(+#hCPUPt>hDrDWBBa> zrL7+;BQj~EWm6D_DI^M44zl<=C;c}t)}l4UJc(LIWK*bulB|`2Gt)3R-$O=J%%kx1 zQbDe%I8G@S+&^-Y8d4h|VM3M#7f?~}?nNnA@AhL@VZ!y1|V8D3dX7W(zZg2{v(x;_jO^}1> z8a>_a?4?=V2~|Us(X37`cZfiB(q!i$3?IAHjRcp=X^WUWFxZ#uis#{Cjkj5X%#V4^ zn~o-Xj80kp4UR4Kgho9Ibxc@)xe$IBH86Ar!AMBVB1qVFU*ALrt@ zc{Jec`=@8#kv_@Nn2RS2@=I98GV(29w-Q#f8kj+hWktelUdI)9{gZy}_WBCdjzhWB zgF48yH@k1>DS-A-8}78dHZ;{fL^`KFOa&+!jD_J%7m&s@*sonhR%$%}!~+yZIB(SM zA@?mpMd78NQ!$)l1?;(}S`fLHb5!SQmulCV*F~Hpbl~lR$jZviJjH^PDD^vZbcJTL zF27hP#6r#;E24)(Cjd?qqH-IGuVq%l^yP5h1QaaMp`l${3AFEUl)-R8858iLDI{mt zcID;?H>7n(lr&YjON|V=30-4)WXg1v(iH{?Ff`AjC97Me*~?rL;h0oLp~v+(x+wPJ z)N^N=mFw;Waz(rbxJgWM4J(2&4EnV!&~v0hJYSQSh?I~^fJ{YB%LxpQhaljwA|xEH zKKT(mCJB1_#FROVr$N{sbvi%l;FefV=$~MKQgK-GZYZ>m*M|(F>aKX$3($k=h8sGt zMHJj9kz=L%?7~^pXPIiGL+z<#=a@D3IOQ8iU12WK`XVcT7>8k#nemzYnD_N*OjKZ) zpdbj&dhJk?CDUVcc5g;PavS0)D+bj*E^pMM)0F@zR(T^JETxg#nm&WgFp~n2|Eshk zM0UHKDy3m*aGMhwLI*mxc`KqZVIovuE7Wkm5Y{0yh2TV$o#wY8o5~D^H$vw+lHSYF zD)6QVBMJop3OE2GHxi+T;{5Bhl831jaRsvqpF)0c)qRz4v`1_}g@n>Bw23ohj6j?Z zgUY*6RK`VlV?ZkT3h#L90cT^pu7cwQ%K;Ve&cGGcJFO(9f`ZUSS<1!NEX#1~m%*i_ zLNFS;d#9ik4fqZ&Q0?Ga(hlgzwvi+<*{dc{)aR=LqQKB@YDlnT@nl7kY7nJ>+Zo}q z27nN>rF8=vk!R)50ja7nA4}mz8i0VYZ{2ESP;A5r1MHTtN91k3D!*<6e8G)041@P$OM3WG^bJ51bI)W8AVU+6=g4 z{f$}!7fQ=rbSJ||o6xE>xPZo31NxSBp0}(ObeY-$^rGvpT)K4KWv0=C&YFBvS5J%T z^?I%W!94|1Au7cVNhbTKj*A01`=D~dG^D?rRiZf0dB)-5jox0?*qft$;ZjfWw;YNp z%^>#TW|DG%%yNu1me{a$#hTN&l}O1IZAUfUbl33vo+S(|VJytWOHCB4&lRRF8*uc! zGC7rAj|M8tZ7ccTFdID1}Q3*+IR!6Aj)~H-e$j^kwuJvm+h0CDsWq2d2jjy=;0g#vQ=|z^^5;uDDA>F7=J2 zXo2+g*siRse zm8^#tkji>LxVf>pdiPFi^+sirj|OnsOGV2p5&NOeL5gQ#9VtYoZsolbNltNP!Jl4`{PlFec_Weq))l|1(ri6+ zs4_W{pKUDFRE3hW&74wP>C&<`597IMIhqYEJ}va>)hi0L@b66R)vMeU7JoagTtGF! z=|f#>qDD2zC{a;i`aM``vTc{>@lFS4U0If85_8S$B5)_!Xc7Z*QuCWz%Ukz1>u>|J zWjpdye|vd#i#N0ffdbJc;JLTRf$ z`ci~uXlT?APp_kQ{b8;^$6GO#@{|PXr-mLvl^<#xc8l<5j&j*#Xbl}W=_JO!YvR#u z>e7~;Pz4RaIDXQH9dVeW5NRCU2?BosCx#c2Mts=JsBlLEuWa4)(_dldhC4u-$Ryb- zO1G?(&LafB)HWpgg>iMXsKky#9xIriX3>SSWf^o`7ogH%6Onvl7dCETCG_nh*@glo z#7NiWA}o>?Gy-jF;bc6rTbL!lVZmrOT6p);p{0vm726W$-k=QS+hbItaCzMkyiM38 zBfB|1TtxI9-WsZ#Q3no0VB}a%MXO7ybI^pNw2n>8o%T)}^p-kctwtS^@RfN^e7%Jp z?|32$uaGoPk7j!eu%y+%@<{xgNpu&^v!aLyODKu_X!w7!vDd5-lZT+$X#Nqm{>CrA zc2%Up4DnaAxe#)YI&k{w6N<L%iKF^J=s-jdUXB+M_wlC^0ZbW@j|@l_ ziH}Wa4*e(5H^Mpnn1C!z0{BdV%4j`W4zO+4^@5U(OVFWXzx+UUf^g3mX1A#FQN|@Z zz`@X6xFpVmIqXGpog`~O#T8bjJJ!CEt0gi3t)7TVKL_6`HpY3JKcpKq;kezvmOYNo zVY&c^45IFY>T~ZC0-F%S<1<$@h+IWhX_*R3+OpViqzNm2IuCowRrV0(kqQOXnLLUn zk>Ykm11_~wH;f|tPj+2@10 z)I=O#@l8zye-w9Fz4V8Ipd+IML)MOSgV-NSyhaY?*+58$A03n_kY@yem7qYSXQf32 zp=+{Mo|_baz&W2&^x66`Jngi|n^|X`4FqgiY!VcpJR^wRk4?=-?E}Q?WroBv42bq2 zBZ4vSxjRBCO62wa7*-z~L3DEo#E%3b)D}Fho`)y&qIgzpL1#HQirsmJ>QumDMJ0lE zAkO9)o%Ika;mi|*%HVj@d@7KTTX)xQ2OTKZEPSiK-|3&I?OB{mNceq@`r2iR!XnNV zUfPN!8Z?%nq0y1qPYXWBBorlUgk3%l1jT@nepz*pf{O8ZAV6M~n-@}^7Y9Oc z|7ecIvp^`C^E#U6g)n~q1RJ!N9VJqnbAo)B(@NrmyZwXtM36pTsgfC{OD?tY;^cb9 zRXZVY1b<%U71hCKQHIGmhrOo#c)n7R_Vwp0RjsZP_4!H_CnGt-=U92EIIo0$zETNA z>z~R>#dBGS_?xy;J(FlH8363Vvx(L}*(TMq(ZXj@GE~n>&gUx?S@8Kv1seRxTB$_i zZc>irnmC8M^!WtVBiITOl#AcXisj`rOqia=1=W(}XANkAGP{7Y5JG zOdYmQd_8-AckuXnt}H!Y&xF=Wa9LG9Eq~~rMVs8m&rdu_*O?>?~(EyKIS4b16zPNlj0$wo_ds zi&VA9s&W-eY)-oo2TrgEFfXy&iQ`RPVi<;l1bzt+Gk7XwC+Et#ii zjxUcWY`nAL@l!vd>fV94nfi>6sPpmVnL5|Gw6@Q&bIJKo5q4oAP@E6MOG~IuxtDi# zUpPx>a&UgBc#+1>e4>0IJyB-p6rb^_cCI67=Am{zPX6*#6DOAj`SMf~E?%B$&p*}9 zaMAQxt6h4PafWdOaqp$l^@VekgYWcQQCGdu+RgjT`E92`LqBzLlf7fyHuwYb~+0BRdN|FKvM0IA8E9Dn`jYi{f#z8PF`tX&3xyi0olj zK`2wLJ;d|)M20~FHR>Fl2@WGCh2Wbx8-*OR_mkf6Trj4Co;+^M{Z1Y@E-gy!x5i87 zMqs2tL+9r#AW4V@m=VXzBQ{a*=l+O&dC!&>>&&?Lf}gRUFmx8ff_`wOli{=W13B|R zUYaSx@$!W;Q-)BsFAu21=(68l9#9DxFYnPZTzr9JJH9kirgheDjWeCrFU^#OtWW!a z*hkXmJ>W89571welIOuElZrT!!V^0 zQzP|}n~~v|na;k;Ts7WRrAHrSAZn&_e{<5?XQeEuyJq3hrCH@R67Ie=*x%_|!ZHtI zosAY%Lf#+cvYA*C2(N)itA~ROX3;RDWDk*?ksJa^D;^sIhcMT8H>HR0gmOe+GsPEI zb%RMnzzSgyjK~$b<4Ew9_r<_KSzni`2Z~v30l3LRkwaj>JOZBL64@~s zij^NNubcWC&m+q?SB%Sn90iE&ilEog%yZ5egwQh_f0}SMlUY-pIXlI3d6)Tf5_ZGG zifq>B93NAUn?JxgM`&btsk)UBY@pMaLW-F+5wIMgXPH9;xexXS14NkL?>)5ygo*@S z%Q%IKQz7c72n4yEk$lGcYfRDC=zt-ixg{TamQSOrfY@=CfS%byJV!GUWDSs(0#Tc0 z%!Fa-wL6(%WHLm;l#l=Vd%u6-75;qmar38NQAU&?vX4K0{~!H>S6*5D!RjCU(Z@f% z$Xs#l!$JFL`2OzdU&i;Zk^uJy9qh|C>`BN><<0)e>fd1TR0ba}{^QlZgW}hiALS?T z%WH2Rgogjo>fcAnud`t+4H56X@qe@W-=fMd?sxioS;PN+_5Z-vFS8*_CZLNj*8g+$ z|6y-P9=;oX%SpqWfLJsy{NFFEz4B^NI6)s?`0A@`H(29L++tq#(U;c#*Iz){*Jqt@UgsbG!rK3hIup|T%(4HifB4EP zGbvjIwQlvTK2Cl7^%EAwphR*JIqBO8E3LAx)KO?%@N0yW2v3ExHlGS+Q@e`l+eaT? zV=syF^zEb#Y7NSrrf=DH)!!$qkje^fV-Q34wt4ieq#J#jVqw-eGLnSrDUw#r`WC5u zw5`F9lb`E`jg$mBV_vdeg*ENY=9$V zc!uoK!x6<3p6C5MPFJM7>g^r_3_h7yKv|4w>|$=EyZ0Yece{P$B;BtbPPX=Y+X(-+ z4G%1wYU66iFXJZ|))v9A^&O62!$(lvVU|jzCH#KX?V)@WGxWU?(lp1TLqlq*h z81~2$e;_4v|G3&m`li@&_RP}+m4kyrc>-54j0pfSzmTQ_E3-S<{ zm-%R}BWp~z`oWXK!yyu<9vvOE_WG07V6-=nwdcBz=YPo203`!tH8oKj(fzRP!neKA zF#I|ghu?-rI~Ol1KTIHdB(0hpVs6APK}DJI;>GR#&UlP1puIA>C2=1KZ@5LQtCoGU z>@Ti*LUU z1f~(j>YlZcwXTIhPWK5~2!&Ajsa@yHN4O#UOX61&I0yr&mT3ix#hJCBH)csXII_bm z4wSqvt6`kqPd0+LQ%KL521otw4%ta_$p2oiCOzbD-0SV6LuC#5%phi<)G}tvWYjx^ z2nbHpKLqy%Vwh~MBCwH)r2-Zwj=(RVjh!|L8grLoz(~@`@tZZzD^qUuH0*w$U~~%{ zqH?vdx2%!MV8XLc7#!qcOk{!onN?q9v3_L!Ai27N~+-PrBPrdE^k6 z$OI3m4f5vB014)})RNQ&uaAx@WX@F5=s_QLIi7qjnnG^Z3Xpg?evCz_Ega z!9d~5a_j6knl6oO&tBr-f8Nk#LkYH6> z^lW^sEOk0iWGCBqZ{7@(S zVk{&y3_>6JWrM0E^!2@bKW9j zZ^#Uij~m1-=ggCZrwtL!-}AFxl_XWQrBEUS)O z^ITGE3FF2$BMP70b1>I4zQJTl7m%05B znZ)PRZXx#bn>K%V@K39zF?%CkK6Ru>CYN;T1z^2@Qa6FW*^ubZ@i$ z@ZQoU49IKkmD{IVOm|@yH-;BXrnm3kVPDO`*89-Y((y@$2q~7BWa~|^fXZq}59w5F zL!k=54o3s1*711j9k%RXl`(W@YapkB3RYvt&M<^ahjF!ORtI)14t?m_LFf2dwfzJa zt|qt%uS{jTO=TXP^Cay-zP(;SY7CE(zbht&=(*wN}Vz=JC=?+oR5?w+U;Jy zci3*b@t4R!;_eTIP+MtY8!vwM+IMf@f0?4BiAmP-lQbS`RO;S>XA}VkN>pzpXSx-b?Z3P;FN56elM(uKoJ!j zx5kpq6{s?8mC^vw3MAut2543oONn9C1e^?@vMWxv5lh=B4_HEeOfCGZ!PhQ+k z*qOZ?)^^6C+|ism*d8<`OfAl-i|`1WSvNVD_mja+1#zDSll@~Ru*dj#zin9LIuS8i zR4xhKF(Atd=i9h%tn#EFaWg(NDQ`|Q?<2B`Ew~6U^)IX13-P#DpPyvkLPMH zg)>U=pr~_9fD~vtNxTx-0CO=Pz_3DKO<_sv=;Zmc7#WBY&(791KW+_Vmd6$6=7ZZ0 zsyW=0_jh0_=H9?Z{GcLFbsMn#qV?c+=2yo#FlfdLD`eI-uaL3U+%y(S zPj0WR7#$}$xV(KRHBQUnWuy{*jYDT`ngD@>$KKNHgxS2>N8Qd-Xj8*6YU#c(HisNV zvltG}h=Jx69PVRy3;^mCJH&Xo4`z)2b*iIoZ?uCHe=?^%(6#Cn7UTS&IB>l>dV&*x zz6aQbU_$nA6j#sNhZErVxH3cBxK-UASR;bn0V}%FAM6aa$AD(yK=%U-f>mgA)rc?A zi2JOwKk33&$JGhI?21|KcW_XUlp+{wXuOTsIUGZT+9OULhpyrG%H_bS zlOA&=v`KplwPYN%9~|QsW_HLZfB;nlaG`CjjZ=L9j?=Pj*V3`xc)X8E!7HO-XD>-F z0OKVkTxMt0O=lKI5rM?TcHFJlfo&HY5&(dB7=ry817A8(Oazuk&Ohh7huia*{5(I| z&8+VV4K1IBh>=K|x=6Vye@@3~oXRQnYjc`xffNqmF#z*>0n#KZ5yBL&klf&`#z*P?rJLc(^tz9ralvl5*YM_8XFI=h&QX2lH%FbvyY{Y&* z#w5)rc+*$edI%0_F9U+%0Pn5Q@Sp`x5Qy|yS(~WF{caok>JTEzK^q2bY;bHtOk{M_gB(HzGXMcsM}z(q_}mOe zPeHx%Gu=PV@f5hJcIFr}A%zXbb3U*}wyiih_}%ou2BzwfAGtvg&c&TRmw2~a#3LJQ8f($9tk2c1MNK0I@21#z-Io*aOqnE%B!{g&@vV#Gc5Iomgy ztST^k<{fX8;s86=lpG<((u#i|JyD#e-v zpM?brRyFXKXPv&eegdHovo#KqYg`|mxLJ>e4T9qjs20RMDZCp9x#d_Y2jHU%g^zE% zOT-hik0V;MJ230Q#%+Rt=%*N+rc1d1CxX^xQ71w+U?b10&vFLrBqE<)XAzeyDUSty z;ZJSE;YK>2IOdl6(W@VoCTf|DnN*%IlfLB_IyRECA}7H(2|uYu8h7a9#qg6LHr_2z zlnPQ;8H#-SoPZ!N&CnCJ+Y3_;&o^$^6H(*kX|$gZF>%BtT4Fbm1hrvk`6-dH)7?)j z;c-UmuJu4tl|4}BZ8*J?4JD}wV9q?p#zP2*u=TlvHf_Q>neBkegc3sK_9HEiY0AY# zE=Emjl#4=z6E4{n4)^``7}8pkW~$sN%N<_hWR1z84$o#D8Uf2Jm|<;luU!h(_N!Ei zWwK*R3>nTi16@%z8+UM4*x_vu^-fUUaOb(YWmM;!{p>l3iKgRWo$2Bci6$zkr0 zN(ogU;8zl0Xaa5z!yGQ^dh}P_w%-aiZoiGZvU(j?m9K?T+9188wfa4jd@V0A3#6AX ztiFlzKjYfFZZKL*lL848%)IJKWYJ?Bh)Xz0ikZ ze0Wa+x&7kXG>zF^OV);B-qORB@HU1GXg<@MmC4wQW=D8}uBv&}@HlbXR z>5cuet2kuzVTP+QbR#{m=!}kA)e4@yLZBUAnQ4;KHEzZlH%+NE1Jq7U1St9~qD5{&ZzltKlRHUKO z9D0LGZVPSCxZd-rymwu9J)#)AXL_$bp!fXQmsP)c{UUFgu+Y>pY+0&jHv!x!i%WVU z4Da*idlxVAfHmvN*J1|rkjBcxPIcg+#Uo)2&rfTgxZ|(-3>@H?u28H zz|C+7Ra*vZSd;NO60W2+aT8RGRQ)ZU%+xBc&H*L>F5tSB;~ ztv08WD?EN`r+Jlv@}gej%U(iy3RB_UIGa{|q_dD; zZ*7c&2$owGjGPnmH4aFA9^n*EvP2A#K0qvv`_^zUY&H^x!95;lx}VE`ClHXY_VWf( zP_W67iHVoHDAJ{+b54n((4%~sk-%^^zpevHEH-%sTWdl@gjJy zcL=jTgyFx|fG`Z-=GuGUm!hzVJ1>3oJ`X;66oqf$X)zxOfpT+2pE3mut4|STgB~gL zo`!reJaCc5ZXRS1?BEW%;xVO5K3Q0|0h8izf(oNKti)y+uMiIc7no40ap#0L*_2Un zu)SlZb3Q1k5J9N5I`SE$}uplb0!MU4*ILZ^i)< z4|F>H4s4e@xCN(}6o*1EimB6*^y7YiuphjjGa?)dB|!mCyZe(}M3k{d(i`}9zq>v> zP$Z<_Q|QizUI$s?V8f<^dMIb87G0Kj4ca71AH>!vud#z04vjas6diAmdXky&O671J z-~6;C39Or|7#@nHYQW$2{v^I34%8vZ6q0urS4P_y4Ub9p$#J-Js-bpa7JOnjGavcG zcxxsno!E+P?0e>&1KSFhTXueeio?JmRvU^&;*L9LCQuY<`Q17+bTTCb3^bRDA2d&UpoF)1B_tWUq-Hl2NuW z^s-)JS1tKJwxP)mCx>i>Q5+&*)MzoQv$1&_5jzq*x8`OwZeh1{cODuGoMqMxqnk4A zYVO##!KOPK1>Kg7FpYr#XBvE?(KtXRN0^CO*XjrfPO{raToZUnz^;nlGn@7l`cP^6 z3GSe?cmK0jChLK{P^9#?GVut-0cf-gQg#B2WWqLeQV{?W4Y#*#aYnc~z^35W4}Mb3 zZM)Hf&G~ZzRj?>qLL&rvh8yvmHVWTw>~M~+0$|ITLB4?(!G&4@G%Ta)Y-+A?HpH`= zS~4*1MCs3&*VK~Dob36io*-V3^22DSs6Q~S7o&fIov{b5q>GaT-;PZzRn@>Dd4;Fs z6oz$H7VFL)KEcma4_L$O!bTA*_iK@0$W$##rD6fWMgsNwIB6~l1c9$v%701nvcQ-wz4CG$vNYu#6K!=AB@x<=u5ftF5C-Z7k!1Wa zB=X9fe!SpOG%!UBn6V`@Yt;cI%ZhfmRy`9rjDGG94p%7U9>BMwyCVjk+Qo||vOJC^ zYmON`l+z~-o;(L__GT09WM?4Snm-S?0i+ZKlrz6Z(pNwXf5(c`T3t>%p@UV*GN2?# z+pUAAJN&&F49xcQ2uI}{I&Eb>U@lc=6rqzRpc$MkjFOgMcFINb0IF?-<(Q2Oc|Dj! zkk0=!cZx2=6s)?8Z;-~f1U55HS@%!KL0>rPIx zSWk+-oE?A4%~I>QhJ+b}kj2#8j1I?|Vtv1eK>I=e2R5r?8vZPy{OqwPQ)cHfW^a1ImRe3=TjdKj| zp{4xrEg!VBxZ0AkVGy0bxzq)1^qbVRN9*@EMy?m;mgQHa z@F|*F#au6Sc$u(VC`;y|7e~l4Sc1oNcVL$s9^@rA4(L-j;KEKqpR?g<%Bz1A}Gj;muwjQUi*?81{+Q;jm zjDMNHxzgY1egOU#JG0NtyLDAI3^hA_)y9KhS%A;#b@+mkMCU$uwhNj35BpJecKOyF zSk&#iE&E7KG|rk>H!)hc#@;zlECf){I_8Zi3u#$$Y+b4z!rv0S5SNvRa0v3kCGQhO zV2iMEFc^4@ay|>o>(s}7-DJQonx2W)ZM@F{Xgw%z5=0Ht0SSSyh=%Q9H8%nd=3CV_ zp&z#2e6(`!c6u$A=|zzf{dr zNtHg^*@r77*s3{t``xrzdb+H3$SETb^aM+Age!5}BHB5e1(+6QCR?pAWjn4p;rVM= z?l_=nXF801Mk^r5sD$&*LQ9Y1Nlo z#92%(sAc`At2y@qn$6r9Z436?hU`jm&6G*AU|E@bD5i#O;f4)cEq)|6bLJH#2szyb zyO5dc^6->wyF1w59~_w^+TGt7FDxXUk0qgfXaVu;bVrYvg;Yq>x}$>MJfqId){UaX z{p?wizB}u~M_q0O@fRi_>jHBb?hlSBS*AwhfoSn?Y4fe>!JX>v%4W5`{O|$ZkyW?u zJ-EM|*Th@F#ucVvUDtS2*hI;l!ZC)AJU?t)BX+De_ z)$7ljS$~fBk(6V`eT<8n)olNKj{L+y7t8d}1CRwC%c;x<#D&dX!H-8qeyN~ zu~B~=Yq`jQ;}>aSfz=e;m=%E#ee+c-&B4P1UmAXX+~^|&`Sz1=Fcnq=>rGHZNe~q9$TmHtbR4yz1&GLPFZY$GS28nV{GPOPG7xDW9& z(0Z~EUG_USENCeKZ4qhUw~F2n_j&-$c`o4Ei2qujhE14Y!zLvzYxBk~cj0OwyQfim z9j4(9F|*9qAjC6_yF8oW>$;_ZCzpU3g5X>w^rBZ+m&5YHKATO>xwPQ{i#Wk;ra|D6 zwYLQlTVuwA!29K*7oMr;9Sd(Sc!6nJ31cw$$&iRlATxq+b%Taey3}za1vUkW)!c9? zMd=QM^#vm`F^$@1a4C{R{&K+S9GDkiQZK52g(SO0hDjPNP)y%74#N#8VW;`SKZlWN zr>H8v0i?1OG3R8aFd+WXoQaf( zfTPHDNcYTX$bsn3-K}eXb#I^6>J51C{Q2p6>59-HzOnja)copHP51Y?uHvtwc-@cT zdRKqA`mZ{GSVMM5hyUJc2gQFj2cToot({(LTVcaEuLQ)5#BPc6dhf3er#fRjFCMKv zL-B9qU}_c|ulT|0$Ef(rSw)}kAE@B9oZh|3zq9&Zp~=^5QS)QQ%m4oBKX%WkS;&-2 z({t8Cb;>d6)9Le36?U00N7?S<_h%Fss#I_)u2tidHB8Ofo1Pz0ZHAK)Ukh#FT@`$S93FHtJj`wHcXtmBZrFyW_%m&;tSz@0 zU~Op=!b{`wJ9C#0<}UASUVdxg^4h}X4ahg{gaaP}?PJ|RHKTIl;>r+7Dm#7~H8d+- z&Ggk5V)%5Asnz^=Y2wec2Fo8Dju2tTv3)CcjGggjoa#EMF=j1rtH8a&(}PJ&x&_NAt+$`*|wq)ArZz7 z?1oGoiEZ`h;l}3r^3q!SN4GXKh8ppI*kIRqUmt!j_?AYa+Tm*>+@N?x)(WF7E5fQ2 zhEAxgn0+!OGD3YaIOq=H1?&B@GG&5=e{2{G{r!H zBmtXqNmjuODEecifRVDA%!7fLSxxvV>m=l%(|Am=vP#J5uhvK~;+Vs1FvZo~<$DkA zw(l=5-(J2AZF%bFQuX5>|CqR>S)t@2vqpn64t9Rny>?0AcA0hS!TmccciZdBcWOz2 z8#aS(|Cu*H@7`wl{*Pug2+MC+{_vyP^z5S03M<6r@Vr*`fr#-BWwZL68^MAb*T_FS zr7-!2Q+Xp8@xYz*AqEmeR4jLx!|}tA6=MZ&KZP0 z_u%1XnZ2iNO=!GUVh?3zon8ceNfqc{P@dFueY5Mxlh%rJ!fhEPyLW4Zo&bZ`1u0+; z6y5GV8+G7r)^;zRmDYk|tb9 zDN^w`DD+Qc#SX8&-dOOaf!@#5fmBKWY9r9wDfs7l&YipnHDb`fj0D0Y)A9yh=GuIl zIwzvQWe=Bp-8)eo^?l;ewS9Y_3Dy@^aPla0HA)-6*4K*_VBMEa^aR!Fo~yYI7jhDK zCh5cDli6koN(Nmnf?jbQF(OTGKx_aHiB9dOppBqK3!+MD_zCkd0Ra;U0l=Ki2h>P@ zP_egA+_CVW8bBRWL96I&;qoKAaM@<;G#O0FZEPT1PorNn$ z;Zy@M+-Om1K*AJK#^#)fcr>x#cq?iaJ-C}WD46D>aUX#&r^J*&s#P9G4KrD_X zQQU6RM7LM~vzxfm9qSBWjT)F{nDL?D0Rxn2I2zj}#A@cKalEl#AcC<&<7KL@#j9fm z8pZtxt7Xd}a%Npx0bv8s%{bf-P5_MiTU_Sv9J7UARpRbXL5dLvj%p?X31VfE=Eqw{ zbjj60u4Fw{41tJorwKO)1ZQMm`evj8>0nX-5q}Z`#(Mg#tSmY3gR_pbpy~}Z0G@r0 zF@HP37_ge50npqONgpm2(6hjWt5(|%2r&4OCanQ;WL%eY91y`mFCt(cVTG@zOJMUm z5SUb-1k>B0H)m#H4NeM(Av(PZ%^}{&z|6F`-#OUA`&b->I4cMiQQW-KugI0l&`LK%LAzmGR#t?tzT)S@eFG{`%O|Qz?D{?3^c7!Fq9U zZGtRge-!4N&=mj_RLjJh`0C;i;*LP_p~(ewsKqn0ZGe!txS4jXiuGwTwI1zvLJx)( zP&80v@Q<M$#WwsA*HGGQmE)XAmlPS`J7@T-lH z5rk;c6!9$VydDAZAlBk>gchurac*5MKft_uxF-pqKtFuYBSPw17I_#r`_)Y}2%cjR znuGu>4bfak1ttj`P_2B1moj4)2RO3CW6_aMHcgOY6jT=`4#Lss5WIn7ZMwD|fE+Gn zIYrS6Nl`${eok7g%j3Chsp5)Y%^LTarxi4fw8Rk!90Y8VaB|L~xQ_P^`M!jCs2N7q%9AvNjKy+w^Ko7AQ1{)5eBW4>bs#|Aa@nG0uk0=bShXK@yUn85bM zePDx|rvYy?Sgf}YvyB4on=pdol^3rWIYj;_kp=#R!`LxXARKkC0GI`oL)q-Vk{lM#NI2mE}(G|A8{00%8%G1%>J|=k1tId%hfWEjKUlHNDb&=RWPy@w%z$RC) zVV^Cj%_{p&Pitg8M+H}HHa0=v$t~Q4*yi{u^nM*}irO6Bh&8S^T68aKKE_MYs(E>Q zRXY&RI3P>*abqwVU6nqbe<7~RA@QN7^v*CsK|{k#;ze13r@;yC53+)XwJTt-CE?aSCxy z;Cy3V19zaFeX`tk32xTWa?(ba5-xxlmu-Sm9}k>BUiC8vTaT|YIl@fDxH{Vu1ieAH z_G7~|CS+)pWtTb?`o?8!2`lgcWKTOhi+pdpj1NY@Ws!3Y@<}u3skq5wbXt8}{O-+f ze>>UTmc4;aKi|3#Y}lMM1Z~3au1O%pCJVq_QnhN5OTktnBqK622zZr+xOvM9D>p?K z+a-3zm{NxtIf#&w02+Ai z+g7z9iJ>qn!R#PqN56M4IWPoLZt6n14b!v3D9F-r_M#e`#~$~S zYB||_Tz-M(5msw~*JRuxLrNoE95UB3B0QzdFc3c1Q1yJ@^F~s;9kXF$5ObgH5oD&Rni6=vb0~ladfCt6Fp5iN1V>CJ zv`OK4fs;!5D|u5BJMensB|5lFvi!N6TsRRTWhFU`Ouba1kOh3yh2r%1N>rl|wCakh zQT#Q?dROp_SR3FAc_=n-Skz6;FcL~&Hi2)&otz)DfkWtMRD14zu&B@GWF>EN9t4t; zaNb2&e6S~aP{BmxyvVKt$MKTmI#fVq0ix=b8IoMEO*_FG7N;u+=Y{M?gWX*S3=7r$ z$-x$Ez1SuWohBXHHH9y;4ej?3rZ4ksGzrzeu5~`pQPH0T$k1^LD60VBF>oIn1>9qdV^1a`t zt~Tvl6hu1pM{vnl#Eg?blU;nOJe-Cxx8WV-IInny^Kmt+Bd#`gzIDZ;;ZAo45x=S{ zj`=Hs@#}(;-4TqvskHqs zO~Hz30Alg&>5KcN;Kfbe92SBbtG{AxT)#Dn*Yh0D#)6{Zh*6#8(^B2gNiVUmm~vhkeoo{)#aw zSOdAU=;4W9SZbmYq!xXllN%H2B$|vc85JTFXCRAa8g!NrC}!9?30|x)1u>S?U^=Ex z02tOGOR)I+;Ep2PQIq(;Ff4AsdyjWt>b zH3lnAmPs2Jqp$aN+mn90>plUxqOq4X7jH5YiBCya@?mDi&GZ*InK^cfjloQFjGPt+ z{tXw`!`|Y}8O-f%gv1y@i)Mm1d4u?SVUH`ztrs|mb0>`>KE8e-_GR)_F+yl~h$UsW zLZBa;3MmO}sCRHMF}7+=ywnCFK3N0B+^+dBF?l|0p&8k^5Wa+agK#AC80C58=LH;% zbe~iCHGoNqf;4S6$)6V#7)8ug+~||)gr`*TP3qks`3XK|>q5-9kGnjzNlW$>uUYSpaPkZxlbDKl`dBpdbyZi9&-0Jc> zbGs7Z=HB?;+y~$LZu`66PLW8es&I8{^mgdrX7vjP>hR(L$)_X^e$zd_a18^$i*J%O z$?>b0l(s$rJ~=!bVvzc~wKeK>`um-JmoYvUzIXGDZwOgoZ?sbAgMM zO$|fpZjAnnyNz2mAM{SAqSj!vHy@h+F1Ouc#LsVW4vTdp!Pk!q$b4i)I+GfM;0?Wk8n@q6#} zb}$Zd_bsM|gpUY_lOjt7)dn6ULa=ahkj2cs&$lS^O0p|pH;$(f*P+;$<{nb|QDjg= zKnX?;l)po^I}L0&WTuWs>)~;O3rtZ`J=D%au2HBbQej0Ai&r$V&kpt}F(EWBx(T!r zNiozaI|MD3MCMkr+cyQWZ#H`fl*3p z&RV#b;b)d1(u4y0oeB=C^KkRzt22ZEGcpv)3vU#pQd0Qp0ZnAcW!M`nXg@14qzuGEv_vbF(ZUJ}>Woi2zue0LiBw)ieX7F*nH+edqqA zCNGUFC(o2-qYmOUiKuZoSu%#e0}Tik!TsDoCp`4XeSL-k$0qK7W8#a_s@)7C4a5rE zJ;+UpHTlDSmEqgKJSJ3=(^<-H#0zJ2#0oa9;OK_&1u$wgQ{b<6=ruKdAG=&^;AAv7 z;tls;6fU%+EWlO-TMzXx<~pW-4o(gWp>;`QV^=$NPC*ldw#H}O%r_0sf_ThOz8gab z=^yUXReem=c}If?bDALyXZuZ6fuAtpz*TF!J8dhc3E;>hH~O&Q$;1ItTBlxdO+;&~+nHE9GCNGcGIZmZ^9e?Km5HT{X64+jw=;H5hk(R~Pi8PV z3VT5Tc8-Qd99w7FlI;S2tIs9_w6Tfy0h&`@Wm zKxw`Ptl(jenW0?1h+GX4kuOPH54!uFvK}_l7~CU8GQ_1wz^SZ-a8sOd{ODN^l?FxN z0VPt|z(4Ye6Z&N%@ zTE&2c_#TFvhn}dKS6GJ(m1MQv2>#&6bg-iU==Q12?Xc@E!G%5t6hdjhMc#fF{%qND z6lt(?dG?=}q@yZzYWUmbA?^XRP!wOkc>>7roZQ%&>9{c4@;(5qQl1m@ZG6i5usF zgFA@_{?XXYd^u;KHAzDe4lD2j(o2&7-d!;;FrFOW7atUUB7xyiv@8^cAD@N_Gvu)FjR1pi2;k+aZj;daA0 zoXCV&$e+lJc1sucsPt&C&>ah&l#UpKQo$x^*^}x{Pq9?6LQDROrvTiwHd%~!7i6xu_)dC( zMyF=S#yF-Xecp+JJ;e&{fV_M{v}LxN>2dtfpD?LozgEZ4j6Zo0QTiK4n$8@K3Dl2H z5k|t+%&sC(9kyyg&;1D5&%j{V3fE_HEFhPnL}!)lwwQsD6K|!*gS~vqxMPTMFl`MJ z;$HX>w{cSP#Z7RNz(Sj{EZyMoX%_;NaU{>iFJULx?Nz~8bME{JEO^swnNg86-8Dqf zMf`SN)dz=N?JrNYI=$%+V73HMDpW;4*$Sa|o zoe>N@2Py0{NAQpkE*0$<%O&k(OjTgiHUS?A0n=!(DcPO}5U~SDX=`%RVzbMuUqyJh z%BubpfW^suh(#K5S_AwE+aPQOaiJm)YDXh)u%}=GzP)GIy<1xBYI8^9!%3*d>2#$x#Q_tV3xF z_ML0xl+9&~(p3Fu!by`NXO{G6VKdW|5~JeQ@N)yy4D&VyjD=$^J8*j`lz8UC2ZZp} z4&^1PR%J%jmik+VG=!&9Fe)}5(*6$Y(K-h&Kf*Ncp%a1 z&Y{_8)=p;yG%zBs`2M$xBQc}*C@dI%=b%#lM6NAdFsV>NX2T9395QH2kvf%12oV5{ zgJbOvz|OPeUYy;}i(7J1FUA&prje(Wt9L#Q!BL#dB_xkoeD*IF`_SWtSF7JZbnst< zOM!wadQ9+du3pF2FY{{*0O&>YtBWZ5N*VOQ%YJY5KFVIpqcC{MUr?O%Un^V5mDMXe zUHu7~Ui1p^E%omot^Ql;u5eBEvY)R0yD0lbR91K&|N1vq|2Dq<62B^_kbnL=tA7`t zzl>`X@gljzd(nTq`kxj>WbGnl&3v2&`rC)O%l^x?=<4-QEeeG4YFKc+|ufMvssM6BT=%v5= z>e@Y){%YOs<>mKZU3-V+Uo*8Rx3zeU$FHt^#2UX+<4a!ruf4kVpQCv4(Z|i7)(Kzn z-0Q@xkJ&!Z-!r?nnu+T4cTR8ma1!cOSf>kpoPi5{|4JQ$`Wi{Xmc9H&+0g^(Pvgg` zmYY=HiruF#Q`=l$XK!O~P}`{bI%}V(;Pfq^Drv`N6HOnpnNHEMji^qY`Z|-USu!~x zc>f`H`>~R?A`nE60h1Mf$VBx78pW-v)f+c%eh)-7>>k1;qWk^ocrei|{s{R_U~{vF|E4$0Lzw~x=n@INK!p7bEkE*-fKH@6vR}Yb^u(yr3E(m?ihyL&Y=a=ylsWJe=Gx!ci zu;C-9?$E>|m-_ElU5Jm6V?91Y^+xEz;nD3FFq+VtFl@Z(k&`h*0*IoF*$`XKo_U&} z^b`)|2@Ek9697s#f?5gv56Uy_%-7KqeHGqb*?bGx-YZ(?V7psiy1)6(_oH=4IhhFw z0aNySm?f}^KsblT7&-u~Ew3|p?dH;(EB975-=W*|ot4e|%NrXNqQAoe{%~o1bLG~f zdrRxp!$<26A8ahQDtM|&$V2;6a7$GeG6{`SdhB6yeh15$C%|J6^4>FytE2cU0ih?u zMW-F4O54jsc_$tWY(@7L5VA19AGl-Y(a}+BuRoD%B-WnmKA!&}M+40m_b_&sCIjXH zg2fj$ke{~ z=yx(|())p109AQ9omdTpbZ7Sg494NNz0vUWtN~_C9u4?1nSv!~|6mwe507@jua?Cu z{)G&f*2bWx#6BUtz(d*!uU8LO9xjJQG)7!3at(ya420BXqGg3JDXNHn1kC&NWIOe5 zIP4UWYPykSJA#=4tA=C(_Gg=B4cQ^58*qHEkR0H7v^Ck>Xx~Cm^v&hl*DL(Ku?ed8 z-|wv4U)gwzf5^HiaZqhx0}o)J@xgJ-Vdd=baB#3sMDyQr7}Tgj@3)~LzlCJz-BDRb zE)yWfFt16!?Vrke(32;JjAic?qdH2}6FM@tpDzczdSJCNHXW*)XGR-&1fX&#)|>w> zt208u#UhtFtfpQ1nD>G<%9xhlWPiM+l!Q?7n0&{qY~(|<>x3O;`)hoBK;x~2Ajg|q ztX~MP%>NbTC zo0Q24EUnyIzRi0kQl2jzqyjE5Cg=P;;@C`)GK-?Vc?;&#J}=%9V$$?BjBq_n7~=I{ za5hY{-XazSLP%ixfwV*?wz6Cg=*9t|(I{gGjcC!`O(GPQ!ir+Er#XsuI&KJQSl4*H zlT_^!FlyU5Y#7HStrf`DU=+(Bl{kRC2$GyaC-sqrKzm1TSFAr@q`7MS(S6=E28jT& zO?Yt-(Gu(WW(;+8Lt5;>z+HqaH9Ozp`P@YEY3XV-?MeAgL~o6*KjB(%d(gV4s9SM? zar_*@rnw0D61Q|G4+WMwxLY9p7R2VEdtneFrW8QH5!KhAmY@496nh3*WOt{J^11Y= zHx1c%oepZ_tu0e;OtQ~#gVTXeawyhKv&)kwQd>?=Ct>Cm@GFbA6MEdUAYO8H3k4|a z-}Ck?0rLm-eB+Bv;t~{ry~s6nxW3Q~?3@Mykps#O6&G`Pgdkor4dHvaQ^p3Xiesue zgm{yRA;;iV`jBrZDMOkC({BvVaYWzpRk$V3OcAvM!B7^eN6e130;Wx+2VoiQ;xO%L zyC_uE_{`023NZ;}Mph8Q=eAef*xtNZ5Cb9J6^7$`zqiH16?=^Y1ZlmAs31l~AR6Sw zP_c8*F`}|}Ppcj)c!NV=^90B!@=A{WHU@yoNx$4}q7Mm7H;iU6{-)Jl z3@g3}BtVEg7%t-f#{W5-gJJ8Tt#A{BfGIEf2yj4+_Qs2N(Jp%6fUdi6Fl_B~aB%g} zJbFS5!FNDN!IR5dl``U*lNMRG5gS=H_m0mA5*ohaarTQ+Tf&!7T3qVe2-)OscIW|U z@HgW)`1b4#-n3%%A&(-VHXXe(S*=yQ{e(}`;z)JX$-v3j{W!>QSgXf$MBzK zC0wHNE{1oX(rR!OV*TK96>+Cjr%+lsye-_B*+FNhYuX?=-~V83+v{S2gS)kLYe2W22bFpd7_J4s@mc551sw!sR|IB`S$7@-dmNOrb^S)K_9=I!e@4P@&2 znvk(LBV7eIF;HBVj`3EF-@}hzf5O96>#Lta6o6X9)a-0ki@ zBB;kFyz&*ar&FO9{yQz)@~goQ_BKjfW*q29n;#5m$MiK1mFB6J%2_2c(qc-OG8KFj zjx&P9%z26fJ{2R$_U*w_kI!7R=f15#n~(0ETK|s1Il%}W+oUgz%gxRh z&UXklGOjK+_X(PedyUGnSAblI=8`oR)$!(TYm@DG1vPsnmI~-?w^wn7&YewJz3{ko?D>cmpX5&usw4 z5qo4q|NFV^d~ny<2ESYV5)(dq&hPQ_h)*2Lv6RtJwkVlH6K9LMZgP>p&(kjxyxePH ziZ#@fIV0TJwgp!#Wn3umJ(DMKcgmXw8k%V)*s|1osKuJ$h=VB+RL%oY!~G_Qxd}KS zx=jTc1F|`hA$3f{J|p~d%s5CQg+0Y7t8PASY78(ohekEhW-~Liy5tXWyM_PbL8uJ1 z*#q3r1Gl0Ta-zH*wZF#A1jr7Xc3$X!vtwumCu1LpV%A|;I3|L83k@52S`h)d3q=3|Uz>oeoEZkG!yp-7n0Bb+l zsC3>^b&xRXGK!Bdizy!foQE`J3VlJs4E^z6Xa#VA%_0GWLQ-FyU6T$26PsQyfjj&0 z!Ro*jPF=7BihghTIqE%3vj(>C!q)aa8B1-Gfd#ndIC+a%N~Rf+a}a9wzB3?iuV*)c zX^n-Qxu=j-rEIitt09FU1Mz8TvS#$i0Gsc16n`XJ!7Y&6lnO=i#gxabX`Ng&7Rpqm z{bKf&0_?1(E)casZV~xXK~PwO9B6*-^n|6?rEOW<*SPwwtA2PSx;OYVvdjj~0YSjg z1rI3*LL%Pqw(K&EgP*`EwB)z38Z;{P2XoJQ(4F8A(5;$=1t{6DNf6ut=HYn4K?1FxX5KKE?i;jkTWLP{(a#JQZt!bEdjn1t_+YE>-vB0FSu` z3)7`|PoP$;nd>ys-;dcQGRIf7^Zj}w9 zpvnBIP#}0|L{lut%k0@{pF~KG_crZ=M%#ixhh8T%Kw|Ehe3w~krrz)^1#gt>rWjo! zKK`DmR)Lo(+MoQD)n%Vy+vEBYeF#kw8z}-pAi#K877$(5^mE}-^`M`gH-M*zrFbY| z-8|c67LywJ3#~A-+A#WqHrtjlA5!0Rd~R!~suAtZsmAX3^zx^$Qe-vKgSiA^XK>Kj zMyNR(#jF~EyJ+P!68N@|3K9^gGanq!F6xZr$3cN`y&blo$A)o{aefT z?8L!1W@6gTT_Or1PIvol@HzN3%772S1xz>WE5O@Wxx2Z%zNW=)c^|@z`n*GNb9rOaNrOA0 z<^qN1LzW~EbI%>8k|Yi>pf;n}Yc_X+hJ_bKA0iL?2ojz!@5HG&vJ!u0+hA2PnxU4c zKM94*(|Bk{Y8*uEOjQT|pXckFIp~|k7%}avaIv~Mt^CXqe28tjL)bk=5N9&{b7<4n zW`3=yg2lpQWY9{-BkfL^CkXqlR@Rp8E@%Bs_l1=SPG}*-zAgd-UGKu5axtfIr%;ZO zKbIhKQ`fdj4j*Rl`t;@IIx);?q%9fyB|bxP;f@RyBV#PEPZ>Ixl7iP@IoJ%g(W>Ow zT&vB65xEO>4}vZ=#g>`tiq<95N_VPecdtcLI7W)EN4z)hCtWCQ4)QTwh0Sm*0$;=W z>>q5;(F3a_pKMc^i&cJyWN1blhbQz2Y>f^M;mzEvy*HOnMcA0VF-_R0QuabXs1o$! zY#nplNKVx4qK>Z22Rp27TqCMVR9)huQK~9&;iR`9j{4CKui1x3xJJ;i&l|GV@JJT+ zSXqfWz~$id%G!G)TxF{^{=JGc9%b!}JFfJhm&1!1>n&3uF3+D}Ol19GydXV1^EQhX z2I%QU)2by8*cLA}kabNUcdQe> zgB=Yde0e&;gUuQ#N}o&5?n9AL_Rr8BusJm}=-}K1SKtD0#c-DgeGNB zzEPYcvrdp(oj$LIDL$jUL`ZsCYvj=#38XnS$7}{Za=(H(WJq=qYamqf=jV1SXc~&& z%n;r&*Mria6XhC6NwxrXl8bMJO`#-R_Tt+*5pK;?7gz{p4H>4%N+-0dy{=T_t!_)Y2f2cr@fWtA>st{)z zMT#S5-0zy-l#DTfJ6IJD;uNIC)_Xqk0|^Oi*C zd7Gv8VD5d7gTKvp5@k`x_7L!>}u&N(7npXZL_c zlaUVJA8eUeixtOJ4?Vj$TL~pN@R5Cqw7^gKzPbh%k1eG0fUQ^Uf=!xKsZWrWDO>o0 zvvOEb^z!?IE&BIBM%;-$Oo>)S*=B|f-aX=*3`_*iU%wlTXH@vm*&55qK4W{%&oQQ% zUc*^UoL%86H`p2B50spT6VWqD`F3yEO|NV+uZj|4Y$O9d&qbjloF>|MkmOF2gsg?_ z7g_(Te$r(Mx#{uEcy5L{!_7Hx1LP0J*%;8}YIXvh3BmSJ`%?%fux3`1u2L-3bV^OB zXnMnjFA~JkMN*Whwivlpv@ML9A6m+SBtirNsJkyT+-FKFj5zl;?WtNBk)x6gL_V$Q z`O}nVL?ff{sYW0czLT2WC{Q|DY09Ceun^O&a*{x+{LiVmM5^MTs&poWDAQ97ocCJw zqCqGrvPBT6+mgA)YL-^D2Hle=;1I>p&&;x!zK=JOxSTOY9IRj9iD4;4JnYPBw0REF z-$Qrh+!Wr@#I4XO$(G~E!2#GeG*C#cR<~u}j^Tbq4bwi7HP*l-Pl9mkZoOZ%?ZZJC zDTaz>!i_y@=q@E%MUxYAVzgnOMKIJQ0}z98lFbUpnPo%`&ps!&tY#i^m1*NwU;lHB)(;vtP&h``=GLZo-|mJcH^Vv>r^ zQ}3t)k&3c_9F$2*hepWchz$&-f!lI}P;0r>WjnQ~n%fgR(NjcpB_QOvIH(Y!mO=lx z)3285nUMoTNl<7qLPKg7LkRZg5jE%NPLJQ!%uP|4oB5!U$OG$!lxl84L(gt55-%Ug z#l8U$K=ic7s2j8W-X6F|big(FsZV#g9cWW&N6Tlg^U&>UpD7g(4%V#U>pI7%IydBl*JvDIF1 z#O&CIH8ovpER`uh0j?Mwi#h=5dR`k>O8L6SS?P0&=xf9pU#+9j@ z6l&9Dmszun&5Yq=YTOKb=e-)`UwuzA4AQTb>)dR_Wl?Y!wl{h#h}aLXTHi8mgdQ_e zK564Q6q_Z9OPHW)0GZpU%YNsJbcpzliIi!TJy=~EmbXx{WyA%biTyS5W3&;mrJ_rHkWqY|gx_kg5*ZkW~EW;k^e-w>M-m z{G6PUzJ(X6hww5df2)sEj6(u5CLmP8K@Op-2irZF237b+b%WgI|C>tXruwMVrOGa^CK?75giZobktu|BfZ+B)0nr zwugq{gb4)?nk(`o*xwvLu&*#Zc)+1n_5`{&a6n$0v3wI8+xNkklRcsEt!Xv&J==se ztB^Afn|FEn93&lsW5z7Jk>q0=ae~juMvHuX6KvbYDkZJp-LjsLdTsbru8eG*_#hbm zgrUOhzAVT~#mO%aI`L0C7!^L>F{W@-iK4P|Hg@Mvb;hddzP_z7Lbu@|y^*M^Abd!8 ze{iVibh^V!aDBNG%$(<*Ml!PhCAPZ62=bAmO8>;x_Z9z~EVeNz!>@)vtt?xit**FT zQ9E%NX*YQgh;XJ$tK(t?G60vzVCaB_xF&V+wB1AyXCoS%mmN#IVEq_5q!lJ4UBQNz zUF_Rl{VnD#lF)Y+=0~WB0n#XFtsa;63-Ddd?^DWA2?@MF&fj>IjLE1h<3Q#&RWdTY z0;|#Ex?cU%Nm43Y+{vE-S*D?Umb4YG@5;Y)*CnESLP(cuR!bo<$ zQ3%*)*@!k~ur|nd+1>)DM?}Qi?*yI2&PltV2__%$htHRMogwMxwp$HV+zni&Uf(n( z&k0-W0L`E3hzNfWNW+gIZt@mPP;uLaI}Xt@0yj5WMm5O@qGSSH*P zBkL$TV`!>loa<)87mxRpA*YNipdKd*7$IXe?_HoW2|z9sXE}BGb`CRl9H3(lK8X0u zAPFd9TS&WOen(e5W)QHi9WA~0ptplaAXH#?5TuPRRy{wvko-o@bQYjS0!qN|+z$hO ziE6-Ozlvj{Y9SyZss%3bm+r`S%@$K>b>b)jP!pg`8TX(poC1U*&Z*15Ie8dXwBPCN zFmnjr@*Uyq(pn&dwq3pBy3EYS`W&xN&u5s;uWz--aSK^Mh;Ts@C@U^#rpY3J$Y`R_ z#YpI&BzIPiwKW5lxzhAtRzw?nLpeK|4dqIW6l-Kr@IWqd?Mf0S;fJ4SKjjAvgV@YX z+WEXuR?M4?Fn2Qd+O`OwviY-e>4_hdSrIk8<$OWIy+0{ET?@0l)BdR@5!T}m2IkcP zpDGav*uG4i8dMORIBRhl2?-9{6Xn}twoJSkmspRpl9w6Sz4p8P zV$3_^^kJ(k@sSAzi)>DCR*efLCx^JbF$4C1aBh~n#>~LkD=<5srRQhN$wb5uMm5Da zLFid{S%?Wawz&0}X$$|_PA1;M=GMe~2p|)>Pqg?SkJf3C%E~}n4)(cgcHZ@}!PS;) z3#V|3qmhT=1YSv}A_OuU8`exp2$QYBwtZ*o9K-~?piGp3czcM;rNsj!YnjPsf!_Y$ zs33`H=1w93v*a~1MjEmp4F-rH(ck-BJVF8#yz4na%mT4WI8tMQ{Ed+mwM^%?$vzm=NmbZs+P2@-8O0tA<8gNCJw_bU=NM9& z;9&na>>;s15L*c1q+Jo69;S9ol#OniAVg`wjm8exLJGu~d7pFf$R;>LA|iUCrmf>& zZp9`#<0RI~1sTbp_?^2@AH*TU@QYqnx`|Z~o!v)(;0=825&phf{h+#e<5ao3aXUti zM9V!~Ws%@P={Vd+hYB8p2Okljtz4>w6Pr5XC!DR%qR9Vdp1gK zgw?ejjp*O4}y*S)|P*i8EU@M+vNTAaC7~KbaC7%! z$_84@Ji0B}Cc=q}7E>=(NT|sVmn_bAV0eEKBh1ulMK)^{Gg_-vwDBcyVf?jfT)tR| z4;nyzT47)FJww+-Rt39@3zTe?yo^Gtg#X`ug22 zU(KQl5>bu@JCp6qFe1`0_u2$mHeXVv3%DYw6Fa1Q=dWE=F$3uh>+rY)r-EaJ6njo9 zkwLZQ322mpm!MU{&Tzmb+&V_!6o=8V=nz5BT?(&qkz`M^l-71OdDo&5gghN~YRebV zk0nXM$4t=X_T3nw?bbDH3dBg{Tl0{rJ3s+Vz#VAh{-{ivnJ z%hYtHXoddSlH5p>#>M5)r+{QSYsye_#+GP{aoUlqPjfdzI#y@51)->(<>|@|2g2}iroQnmZu0J{6HD3bGqaF_<5E3K@hOePP zr8Zf21ShF4R@w##q=LU-4{yxfa;vxrPmQ_l-8sZCdtDn=X_RJ!)4jM%}J^%s| z3infX&S<9Tq;YgW$62=nM5?aORpvk%rY)JeTfs!&-~xj5xpZRQ1n)_s69v++8E4`w zlL8JN{)V=X)%AuUhTBnS>Zd@^j{S zz~Ia2)$j-s67q!{GMKm2@s4=Y9>UQw*0Tcne6D17&JMZ3CI?#xt&BNwo)XJDxHi1) zF-9Q~5jVzW^&Ff5HwDK|9wFyt(zrttqH(@eooBd`f>#4# z$qTx~UWV+G$=t3&(vj#(=t-~1CSzPnK(xqOL&VwdC z6(r@5QIry}$DM|#yGK#m$wdQmGLVRkBMK6T5Y9|pc$L$SDgye+2u&@gO!qX95N<1mjC0(S)n_H}T4AMgYq=9gG2qT!1s2yu@ z-9&xr4K~gWuZD5b7JT|0*oGe3QY{Hmh`RwrBbR!n)J?Gf(~aC_-_%>Vn(gQlNRzuen<}JqNwX5zqK(B5C&JRkTgg1$0;e zPY7;-ZNo?9jETL*tyt8JU(3p2cY58VPNq}A@*+VV4|N40S(M@uONGgDDH@_1n#qnH< zdH g+oicjL^e8j8kXSS9F`mkHCQQSZeczA4CA;A6~}@(hg-S{y6;9I$z4HLIjqV zpYF1?UThpYXwaI2&7qO{itcgcI%W_Iw=HRyX{1v$S5OFT{h$dtrYfg;vt%VEA=&;Y z2hSAn&tYIlNyp*G1GL}t#C&D@IDe(S>8w^{y`P-bRtFa7R?wJ}Ry%MIsVHo36& z@3HKc#h2_z@S;Dyu=by*nOUETvcGp>?Z0E$SErt4dE@`#!rDJ!g|8dj@*%3%`I8H4 z|CDupRdqNuv%8PI{QtYK_KUBg{8v<-9#(nr#aGvUgT-G{aq-B-Yy9S`Yu{pxuX>I2 zYQ`&k=hd~hSixp*UPNB>`>(G3o2kegFudrGUS0c}EczvZrOn+7{{2_i{wEgvq6$DA z{{4S>b?r-E!uN~TfRARq?{@5xWUIy_cp2E-TWwS={g55ZLO zuNDJv{BiTgbARuZS1uv7)h&edAN7zur)u81TD@`O=5Np8KfhB|h>u^r)j^E^mHu|? zBCAUGkn9i3KhCmU#Hp^vgWba;#H#v!bv&5JHyY6q5l?H>+nUHhpGV<5m^vc5_jZo~ z29i4jd7W{%AL)(`f*w)bz5fWY*BHlhzj`>?+DELOd%bNw>LfoN@(a`3!YU6iJRI+E z1RFjA1l6R1K*i|$m8(D=DGmXKU9)v~jC=wZO&rGutsH48~z(V?>)r6tC?tD0YKy7~(|(mhVFBq4%L((KwBKA@J=- zVwmo;QKzg)qg|+R8+Tc6F^}%3tb<523>qIHMXex=EAQ6QaZxcpz)O>h+mKDi*#C4h z*o0p6qt3pbB{!EtiY*uOuH{6ku)r#0-JRqP&gJuH;nL1Al@M-|&Gz1TyR}>A8aKXKB3v2$NJ)U?9SKgHofg7Ofv4_Zi0A^g3?I zq9C8YhL|xA;?(A%z{QMaAnwoAgexy24bLG}1{ei=Md7edG!=Ji4l^k6rB#9h2o)A_ zj`2}JGme6Zt@k?zTRWZVV4*q)QA(jvLp=*G`w1c{Tc9$aE4bK~mSxcz(__2tk1*&=1!s+Lp{Fr+n zr<3O{0GRlP4b+9Jjw2v6ED&IWV~cEX=2k;om+`CkB><03w*1Kb-F+d*3;2vXSe4u<>=&a}S^&#!{p zA=_@8|E21-#^pEK&eDu@z}WN)DLghn-&X2flKpXG>*Hh5@w?>)Ps321(EIO&Lqwp- z*?l2(|2Y~MyUb~C9%=FoWbLF9Ve%Z3M71% zL6I{%wab$ritw>VPfM2%vl+*U!|HLv+c(}duY?yFw(X&F@^?pr3B2leEG>YP1z+27YX*)F zI>V-)cllXFU4Yxzz`}b(6zdFTnqq_Wbvm`02$>0Mi7Bjihe#oZLmT1u`Hx?KaMPK_ za%Jv{1Wt>NYVAyr z0>a?g1lh+HJ_dC}Wl(zecfuDj2z(WKkUU!P&3`;&-mlX(pzrq_M9+^>p)qXcaDT zCZJxgZnSQ+Zt|Ql&YC@AMI#8E(2*s274xG~kdG5JWZ|W%3^w^ZP+8OKG84ppI_gGY zXNi3n7GMPF9Bx0cyv7luHa1mehZ#WV8U8qzaeE0KU^w2B!QgczEdjmVUCg!*^N&48 zPcu>btdBU1oH$V)2#q2yHnwd9$F#f3bG>oY@?^~$XcBx;ov5`uY>iO_Sj^1X(8@K^ zBJ1JnIe}7JkIG8cHeH}`z|);)RqF$&&5UA1jv099oHWOx9`!_Q;bMSU%d4$^_XA~y z+c+4de89;Q-0wXoCESaa#E) zj7yFd`s`>^*kNGIU0!x}#%hNcF%^~vg5lH-tvC4IRdwJt%_459hDuFs+ZHn42_IP4CsRh?5A(MYliea1!u=cq@4{Xsapf<2TQOT%EhB?D35^aeY?>yat5_oqoc+`3h z`zRlW!=5%JJN-R(lxH0r#=?2t?;ctAcM*q^GP3;o9SC^jE%*fBda8pHf<|W4s*Jzd z9lk%F2C=)LmIyKC=10P4ctEKhUWWK@P}1>{XMn|vg`e8~Smy!+L9;;PfyyotudyM? zmXa9mbRltVKY{&H1ZKxVgdU{Y)T@g<3)PQIYR&pa^x-`OAI3EZE<#FZvDGv{dP~8Q zion-WMyaC0oni%^Rj zCA$YOBnyX*KP_F>fdQI=zPrE+AV8Fa%QsqBF~wZMHC#(59NuNg zy5#O^H3SxLW1q&IB(B7_|5H?MBlgI-aSIrMZ(^m)EN4kt_XmTgkbICjop*Q(9!G#| zyf6+6B)>ZCE;f)$7i5Q|@%`Q2o{^B3J2fuq#x8H@l!by+-|1wL;SP~anuR+3W6}wQ9EPGS%c~DRIdYz|W5v2dSeL{-HyvO}y{Y?~V@0 z0LBvOKsrQbQg9#2mXR?$=XeWyYDPDUvwP&{(0L?nTjucJu(67v$*!;Q;kR;(ybuYD z%#YcTPR}f-q<`RsNQdpZX?`8dS~t4f!gdL2tjCYu@_aSO1eBPjZMXo#ULp8_nOC31 z3(KB}f?znZl42vJ(6csTxgKAyu8g*>C^~p1{`#Ktdh{x2%ec4ep}=P#O6A@FLrr+9 z2_=O@!l$eU`|-k9!wo`#%^jfZO_NP1zhJi7dgGA#&CaRp%<#sUvN;1!DIgQZqznE6 zeclIm48(4Z8yAh8oiUQTaP5#}X=FBp8OUR!P)}RV&W0iIrxMUtTuQDS7rQF5FW#lM?H-EGD`psN(<}maG)n~66 zvmgFI(=&r0#&}RFnJl*91r4@w$BAPI z|7+2WrfFcp$emOTPEL~v6WtGxVGd3NZ6bm!RK#w71e}CN!Bjyk&L^ZTrA&5zDr;4- zRY9Qz@SMOx0h^TM@&B{;wy|+$S$bH1%}iD^J2N}8<3-{)t|_ILC5>2Q@tfRc_o^jI z&6P@0C~A7f9GNUu6(zPv7PpF&n$zwe2$HN3%#R>wCvi4LU@VOM4vZiOoGAsjXCJJ4I0P>TDHW?9g?$76@1wtn18M^{{t18ETYJ|XVLLwe-FzDr>` zUti1tA&7!~Mei)KjdOvJLlJM_ApEg=93H588}=g=li}`Xc=QA=4X#_$ru4-gn@f)B z>F6FyEX|i?+dS@3x`bTm@0z%#LSbNHeu6jA0Nh#Fys&~C&fPh*f|8w>L$HqKJJT}1 zl}z*|YBzR*Q`FIPlWsesbP+D_O%B2e>6d~gj-*0I=m;giU?y}0hL{AQH$$n#B7r4` zqmN~Q5$RifHeqa1IwG~29lUgkTrr{^(pr?GgJDYR%8VKq$qt=0qkN5IbXVNnOP?IK zH*FQ@4)RElp+q^u6s2WETO&-0I|LzTElgeX&N{FiQ@unmoiK36<_Dt@mIAuuZYGn2 zjUtLs>BaeLk(@s3($CV9k8*` zW4y4Bg>+2GM4zj}Xr1ER;aA+?p zRI~=Jf@A1hEBiLWD)?T8ScbIs!Rz4q9k38-cWxz$rfSDN+HL(Z!aS{uFw1m@ll}(J zOsfu`}}S#a%*On0sK{P|Ng~)Cno8_(q;6 z)F9VB>vUU?*xCI@q?lBBvKZ<+*}h8vk&jHMqc#93KWTRl+Ix6p5eX0iK!X|IMp-!( zO+w8L*TqB61l=7$`z}!n#VPTJLt10Uz?zC!1_-F=!{~srjRE7h<5;?=7?m>^gKx93 zO|7WX6oMI*IdI@!?=jXWJ6HWW_!t~=NIniV6K&paDsev}%|#jx zm`vPpJR3&o{}gtf?1WA`UcMdh>j3I?u|FWWp&U0~m_Kl?D0}3D+~_fLRboCc1ZKKs z(J^zM#HZK;X_uJf+(~}pkr!dFaq#FE@t`7}N`k3@eJbVs2Csy7@Mr`BR^eNG+@H6%7`28nnjaVqmW!YIc;Jkg4-A# zCj7{6InhbTtyR#uEBd)^K{@-;`9A8ojWQC#Ay}s+G66#A<##<2zSoBvVyq)rh`YeX zBzinot?EIKS(AYsofTKVY~qt^mR-sr&X4QL4;`(m&5LWw6ak!95i0r7Gi3fWV$y%v ze2@91azz6W%T>v)#wqODH5+XKG7=IES0-$UrGoNqqHI_4PPJ3&ACWOd1TB&&M^ZJS zT!PO>*%YDxw;3`i0+G`+t%=ZXp9*wM#IKw((Opcvyr0ZpI>RB<%?QkHzxN1oYPdye zd63WSCAXmMsi1|wU)QPGQfSpH$Ci^J)JPaXEh~*AGPu66BKCLYH{!7pFJ-&g65HM7 zjtIRAj|Dyhh(5&igq}+LPE)-ogrw6%4}t0B1nz&l88N!8thMZ zdq?_6Dy78E5RDYw`Ge12-t8(HGgK>r*)2o%Ai3|642fGvK83D~Z~ zGU8{rD*VaA?P_t@P_GDZ5qo-Bu=Q&I`ldMMJ&Hlrb%o~F>%e)^LdZlIHV_z&;c1J^h1J4}Hnh|!Y$Qfb_8RiwPj z){Kfwb;(&6LZp>-9~`b+kr;$<{?ofvQOmRjm@!YPQ3wutv9ys^c__~YB4kZf+IV)W z)oH?Lcfc4}Tui|lY5#c=-7QY97oy-sqc^7`vZEPbQ&m*Bj z(krmL&4EHzAz;cbRN8Px!b^;mw3jPlRLV$(X%#F;`e9?zLeVVk&aL*zir6;+W#osR zC#&Ukaf{)LivDR75JWg!*aQ?4+#@=$DODszBA3{hq0)p3u|!-joDSUkL4u&E0`&Bl z>csn!-1QNC8!D;$!?n%<@CKO&oZesDg`l0dd4rA+q?NeVsbBg{90LpaGH`G1b|fZ! zlOCa{t7*_=1T{k%?sH(yNhW5yfv(nq*S$CpxN0)2^T^P<{#qs?O6=d+D5xi<&+qp;LRz z#7*jG2R2Q=8Fk4E)4Qp>&%VP-`2n85wWJ26yDBrtxL!h`bKza2PXao){195fj9)Cr zE>y7^9mJI*eMH<|$6qSFFRp=N*N7v_T6h&Zz~zo zWkyPHbP#$Y*+c5AF8;9>?ra0OdNxMIH`V@i8lY`F5KwC2c(#jnk?}~o%xMv}^Pbi= zt|Rp1eT6^90Q~|-oNTeK8_eq!7F{Xb--R#fTH9O~ zoJ=cuo}UW?z9w0 z-D>v6kzQz=*AZ3ZQ6n`D>(cI?S=`|Lfev6I-04ja+j|pggHfcCxfu=#2w-7c2~;yv#kr7NdnEj(&T+W|*eM!8zr#z_%}Q4RuzfKVcshILXt z(-4k+fZAEGdvHD3g^mHw;KE~08TTqO>&eoF_GbdR=3uPn4BZe2yAOb`=)sPG;L)!SOwI(wUhQfNyNYryJFtVAP3A zbmlV?4ljWcqPvS6Sszy}=_%f11zTYLI^0o~zU&w&v=v=ZJ9BdI$`96Wj4x0-v})5+ z0V(2-#;;I^V~YwZKE@nIiTyLa$XZP5o!kN83b}frpM+8t{y2~_1NE1CvSOKnOJ4{@ zVcjS2PopAwER{TS{Lhi6>!5BvOCe#uJBut5$XoWFr4W_Sz)J_(ldXsPZrZ%wY0k-Xc-TL6H5}s1E!1ZHuL}n z_m%EsD7zWlM82)+O}QKdDsa)sU#(8N$BZLFLx5UTw0JTFa?00WkU@GM8CQ`yi;(e0 z|J)Q&tO$&}b84JDMy^o-xc02?KRz*0y?J$WPOpq0szz~U)Vv1FvxjyB1ZqNz|>RB1sEe^5DV4yUTfqj%Qc19 zr-msYEuqorw;kCI#<#6ATM)z(PInFRL45_f5ZIsD}&eZ|PBfPLKWsMuU43aRP&_f(-8oQ*{Si8#V>(7Q9N(zU*4Fi3UIn6vYIL7bvl66s zfy!p+TFEzu)=<5OJx)RtW43t%Ql*Z`7d~+F0gZP+k#RzEheD#0&MJ6^&BdG3dgUM=|`lU3nPNNwLym86sD@g7&ySa zhA50^Yc4N-VoQ6_Jy!LbteKruJIcI>dYw~Dn&Iiar1w}~(~ZdxfpDU+sEl#Z5i%=c zWdqMPD4SEu`JEwU!^I}LrlF3mle>f}rs^3vE6sndV;#+np~PGS4SUHS?xdx>Q{b49Z$ zuuR1nIpitd%*p>S8%b_jAG<}y%yZ{?q4p)Fk1rChm6M8+v=78QxcS&cid4g65s}f! zIi9umRVAn@4H7)eN{l;&9@C_GfV8Yl>siaa&kjw|~81tu#Y+rR;ldjt&gb6MBWgJcg1S~Zk6rIq^dxxd?^l@*4%YoACZ8mf_%6? z&k9HTI^=3eKch{QEj64(`$ZmNCqa6NA}7r0WFw3+%E}dsu4^8xUaW@Ew$XNgWU+Yt z3k4M;$o(6;Rs}o9qL*&p9K7k>I=5q?TAm8L*zE#(ji3Xz+IE(cw%Ox+KFUQ+L+zD| z%9YNfKs0qAND=flaw)>iRX0Q)-*#Ie=gE+nLa$SgDggsdpGn(D|C3Y6lNZ|~ekP79 z6gXo2h`*nLyJ(OtEsapBKHcpc!|m|=+1m?{usO3+iI`GDoe&JTGO^)RO)vH+d1R5z zB_54H`TSnHn^(V19De!+ry~cOQ1Ez(QNztDrISG56e&VAPbXhyj8Hs%v2vBJk=UaL zidSkpqPAQx%ZXQ;+b5D`G(%#kCs(+ooe+1gcTea(2JI{CtK3v<){@t!M5jqm6j+n)7d6vP^Xk%CxWnKm0p1_%J6upAE+ss?Q2&{DubWZGVqE%DMF!s3 zqU6*#u%XW=%YjVMjQsw^sbCLCdk6_w6`E?2+&-%7@KLTWRJvezYa;3xEss!s%?V}R z{TKLN>cOA7rIrP4?WX87q|rp&kdobcfCr3$5sr~T;kuN(VRj=)Fkkc%nT2<~^gjTs z!9)D=oB{`PzkF^2uFgC<7@?Kt!7uJy&`_!vaRbXI3UdL)DV&m{q8sWFEXsoCU{=&H zBwxLo@nVV1U12yG&t$s<4Kf&@qZi_f_i4;D@!t(=x|r5Am1&v!<0qHJ_u6!eqA6!~ z9t=eP$Sdm5jU-dN!olapITa$L0}Az*z_9E=HD@RXIXx!a+;r9W2A;d7kX)(FIclFr zHK9OK_jDJiA}o?^k4rM!uSC9!W6N?n2s(V=iVI*+}z+<)%8#L8zzH#6P7fbiCB!-=`hHc3< zLpO2+!0{<~+*8F~9~EEuEEVj)u{nP<4L055kx_UE1}h?SAoc4FI^&Yaz#-CJypJsTFN?e*P&oOfm^QzL87r=L(=BDlYS5?}|ol+I$W$m1!BO`8NA(~K}H)X5X`^%sg( zk|_>h5k2wQ08~gVV~OTK-}Xye5*oqp6YnSue0Sm<2kyHQ-FI*YL$qDz;N2~m&)owA z|B<%EM_sqs$QdGiC5asRe56-5D&y$e!!DSS~0H)kx%?5$6%U93NC)B;^MEtWf`j}i-T8Uu}nZVN<1Xx zTqAoonS84l1_0>ZR(5+!FE9FN5v~9%dnD`gwZJ;tN1%5-1j{K>AV#hxBeO1lwsA|- z6pU%qZ>FD`(mc`#aB;XZP2hjsw?zrWdR@NL}SK2RRt)6=%zSX1{p-f}@rK zpzTH8hMu9=15?FWt#3OYYtymC7Wk>1nFlWy#bVd6m`Cj!dpMlcJIEAo6m$m|W0;9( zxJQY&6Fa*3DF$Ndkqzzi^dQ9~vJl`1iCUd!2CAWB(xWuBt91+M{wv&DtRi#lc0F zhe+-#$-e-Xv&EYXDUIydOaD0fNW6_kppLjA`Bb0^oCIhQ4`E|}0^8@<(1bmWpGC+P z!V?anV|iJe8kIQ&{8F?AIFg`Q=`&KWYACD7^+e9zrXUz&uGp(c_q)A3_WC`5uzE=& z>OrR* zECXoG4vwzE!t*_*lwiV<=!q@@?o%3qLj&+ARiqL{_S_~HVk-n(T+M2?cesZ*&ao~s z$4*_^7_XTIz}K@3!$^_88SQ(Jx(BA*OP@an$$#>RKQ3O+t}*lgeQ` z6Qw~k-9L;%2Ho<;5fP+Dq2J8A-?IL!QS_rD0jF)qft5WtsPBItn8edXI--G7^$r}t zO->G(3VSAgME+-~vtZy2%)$XlVtF#0iQ7>0L_$UhDS@cS<9#5G6;a$eUxKQAo>O4R zutr%~06fU057uIqx~)P+4Kpi~%V6V5>{J0^jc^3)sJb|j@Y0 zC~kcZp@JYr24ejb>F%Cj=P4Mk83p?gpYS9p1bGoSwQF5k5_8l(CCXkptsWlt9<#nv zxZzh*x48xKDT|&x#uZG0p9AODN{%mRmwa#3NI9ng;uGRcP%|`UX}F;9FI&x&k@zu8 z3YQf%AlZn#;Q$`o?x+e=v5yfPl6TfVzgMa=l`B=GpsJeJMu*Xh8@mPER$Dq$uRdWs z=?v)nA}yQkJUlLGOm7Y7AO*$@dl&tt(X;qetsb-M5r*n|N#I`5M3&&OX&>}K>1PUfA=MI@)KlfsWEN~C+ z?(Gm$F?3}EBB9oouXc-apt|Vt!=}1j9yYmTR$mvoXAFs5YmVW^gv0Wv87R2ZQBUkH z=mLh~Cx$09r!64)=rUGtlq;WX6~!Apq#QKiwESRmaIcpTY4p>kkrp3W)L-C<`e&Cw zU?E_lo1o}!V_Yh|s|D#?*(5!U#@esRfm;X11&;N3$PUml4YMgaNIZ+HBv#-cFm@6$`wUNN$wZ8 z9$=&WN>EM}K$S7M24o1=WP7v_SdJh{2VFi8(v?JAxlc@BlVx)znfZNiw+(G>k&imQ zRkacqv75sjinz>AWQG!^+*ZNcF*_56Qeti&je_dr>9C*H;t9(+u&826o5(rTUm-!G zH-Q#;5!ysYbcV`Ohkx2&n!f5o;&V%~sqw$G(XkHm5G!@ubbn@g*<=;#id771H)fSO z-v;hOz0ShiWX&oX$8`0>X;Y)HF8DfnbLUYfVmPeDwja(59*YGMY5)|-%qB|?M}vjm z22nD5Kj-<@RpyN&@EEyk={xnpu#+1X6>(7IN!3V02W& zU4E6yxSoUY?Hx6cY#8jy?)t)ZC0X+3(*`0G^?flo=kO0)a{Oy$peCYPm?#r3>gXl`Vu?dXGvX3kgBJJNd`FfF{b(ztG>U4_rZU8mjfAE$ zwi{BKL|s^AuQ$*x!6_9x)rG-xF)GS z0tQi83froPrHNan3wMx375-1W~gO39Br#2bf>P1_SxUUMUR8w?t@F)KM&9 zO?zUxABJj`VX@0zRXR5$(}@pX83)%wN zZdqU1=lHott?EcpX3G=|V`_`d?cOTlSRfYm8azv+c5FR2B>J7*0WX^%IEwD9X z%h+M&E+*>WVFIBRkUT*iAyDIH!4=i+tYM}*Kg*?(QYQ&*q}?%)P~LU!STn*`oL6_f%(hxW1iUjRc#N!wUlZuAkaYPL_7 z_Zs`#Eu?r`DjoPYHucnN>|Pi(^dFBJU~y6@HE^Mojhl3K+Q>c7BtO|`SlqU$pO9xh zD%pXPMmB2rcG{36KTk<)qXi07K{nj!nLa54r1BEQmVV}nGJq>DeWC|4$4+JIA%Vwq z;?qxUr#&FaiVX(k^ntjDN{~Js3^Qky10^hDfW!3&bQ~~2SF5MULE^%F6N)jgp{o@& z1RHSO(U$IN1d!N!(N5X&xW;`~fbEl=b3^#eaomCDUqzra4ZEsgIgn$4>_UGJtl&B+ z5b1B)7=oESs3y1mBX9(Bow9Uf5$ha4iTK(KHieGL0T2<@^IZFrPcPZ)G=VTh?E~;b zv=>UQr^mWrbN(8W3xdRNF^O^`N>+|a=;E|9>rRNZcU{NBIS^9XlnxkobJ~z{60+mv z$Pz2)h;jXxCb7n8V|hvtRwUqh5uS^sdhqdv(02`1oX-C4PaE=hU$y*$ry%_vOLL;# z!;Pnq1N#vt&f^rIibo8nSv=w?)96p8Qiv!z4xSsWQ>OqECP)gAw_RZnUL}Mh=@~7Y zlXzfA#oUuq7e$r|vLAp}#Q}viZuO=JoN~kn1Ai`-^c6n7bg}hH9 z?;z;&y-8a@9G>bsWr5&-lr8`V7ZxTy(I7S2RWd+(k3-1af=u=7Lr7PdA$l1{PXeau z-nC=c7xz`RukcNAE+6B}OUDP;q0XZNDA3_^lt@|4mdWN5ldoAgtkrb@I^3 zZgv3N=aj|>>=}Xk6RTPkvAS|;si5;AP&U_1*cA_>M^LwDLVjU$f7XC-B{>Ac61#WV z3A57aN*O7WkM~4VD}*aO^7a}IpH+;;4lj6{OVpVq&; zl+~wqefBEbxBH5oWnJ{qwPNvBVk^i*5qt+lpg9#9$_w5JH`R-HvIc2?17&Rw2Tdx> zpd!QdNb#xqp!YG{nRQny)Q@d!NKL-Y{4g@t^olljjeW8v*T}ysEfXgJF8ax9&}2Av zzQhELB?17xuncfCRtls!Pb;S{7mLqlpMF;P*>|qx+#Npq=udy|wbyQa|5o|8KKt3X zluh1%7oB*~SmD2T>unT%T?^xav0IhU%Db+9_R$})%c)!UQTWT+s%rF5M6#aMcyQ}S zsPWxw4e&Or@Rx2qj4CK0PkPwAwT%kju^wE7&_V0gqo`cyX3~E5)*i}j+VV~rNxY4I zaO((#Hf@P5w}Pj)K1P9qJI>``6@Gf_-$#XCG_ZECLqBz${s*`Ia}<45i)?*=Am6^H z-;|eS7xTZm^bNg>^{a{?Ata|J?c$l>b81Oc3nTd&u@$@1?C6@iB5H;)nh-4gb1Rlfat{UWP;ORJFAY&P+Lh84g4dVQ9~ zzvOx_vA1c{s?Wb(|C>1wsEf7^e&_Z2KVbP+kIJp+-W&DDEc%WV*|e10S&fh0sQ)Xu8k+9dYW%Bj z)c+c5{E}>fIsB5|+qtj*yKmHgCsZ(E8dvyRZ`A)bEBvCRHdHvQ`~T#P`tP#v>sH8y zR`mOC)c>KhgUeV*8E1w6=#BdSF72!^YWI)dsDJHEj%TnWKkOIG+d->m<~Ec{-fZ>ClH+i%u?mzDn9HDMFxpp`k`^}qXO{SRfF zq?Xc+`tMueH}n8XKW^Lq{+snT-a_}^Aq)n7OCu``fVbYN|9RH&$#)B6VXN{t z-m3ortKcm8o3s`E(OdO@%px4aROqwvKYpwJPf>nM&isp+#r&N=cEevwZA-N~O5)nA<>!E>~_upM4}nDJ_yuS=uEZ6BLs#ijxMX9A^1kfaCH##_g!R zAs?I_44}d@CJp*g04a3bP5wyPmVC<67WtSvt@5>q`bPyeW25>~kf9m!t(XH!QI2)W z*OaHprvf%8-xD6^I9R?!A$1#_9CNAsE&If&DA94F3PGTC38+FrBL7`^Q2x8hKJI&# zddPQ7RCrv}#V=;qp47`T6Zu@kgrp!NQ1ILF&%S$jve)T0K8B8Hx2p5)eRc#=9)E`} zoRW9tNB`g(uf2Bh!bKz;Jv`~|K6-pqs$9ENnwqT5kK;d!r8VfmK4>5eWA&g}y}+8{ zTXop&;4x=d@EH(+K-yks=ja(^qhBkXbdE)j0hteSoqCec{RW#h0fial{@tAubc0WD z4YJTf7_aw5$ImVHC*MCeE<&D+#J1h6^mu}o$D_t$! zySlc%dhNmOt81lu57zG8y}wc|mF{DGun=fJU~Q?+-0wj5V|-rc{9|mV#kNZX1`w*f z3oi!frNg;?>s&_I$WBVc=qgB_0hp` zwbOkxfxYLx_a@#YG*}WCLK)M++#(kk+ksbs^ep=O3UfeYaFfMAQ!wSn0jU%Z)n3 zBfgYoee-t*a;N8hd)Dqg`DyzY0m3q%ok`aQhzhM=QY6Q?E$OFRtq<1M?`^KEt=(PA z*L*tZYCWCY1O+IlQS&uw`5L{G-tiHVfVet7N7aQ3xIo_SG#NP?pEz!UZeImZxb4{2fFvUkMSj{kWVeNY>SJ~!E? zxN^pxn^BUN$4AJt#!8~`Oq}?PZsIAfW5l1Bhh+Eo;DG*(f(oQ$Jy4-0&MF9+SDLav z_sp$($hNWFBW%%2wyp$A&fUQpli6U6v7FWFg#J&~gh1ka57WmdkK(ZGT)90AzU6xfUF!iXZ-p z^weh`5wv}D+>3TdKRA?dz93tI5n85+j{b7yN5C=tt!#vJ?5Nw-d#j+Ks5+l}TE&?z?05X8(-`@Kiv*ZR`*2ba-@KB9_}?xz(&lYm&W;OiRK2N4>!Q5cL@%ZsCk4V z1H2Q&YPAo0oxP_V6obL7d+$VgXDg$Vj`6~bq7zB|_6_ZfuvcuMmIp7B?zp}qzpQjR zT}P_`gjg=uG8=AXVN;iL7-Ln^jqO`4MxbTt;0s~lCN3KRg`sC>_t8dqeWiZy_SN+j zWgz#3K07if%ZG@@)*jfX<5aNoG}|H=^{V7NEACIFi`$a7_cxD`K%pY-Jvo*vwQi9W z7nUWj$Q9eC9%nfOnnZ>3Kkg0h7w7a(S=wI4y^ zG>H;?kf#>OwdCwSot!W(1d&*)ZTeTqD#|M1BGTR4gpzM(_v2;d6KF;jlI^>e_FbDm zjRz1=<|%%$f~w^SLvKS9|Mvve@fgO@v=)+a9Eix9FOd9% zxzD=T6Ym@!@3wmH=8AU@b~;)Z%5aoEf^gKEP!=?yb@UHa!}qTXiyFpw_*@HIn*hTP zOSBw*y)>vlkz9&44E2wHac=#p*g*an$I9*N74`@hlZRcPR`K&~=wm0%ddu!q2MU2%G2@V4dmRn&2A=gz#bCi$IlQ}exWLxt&lD}$ECG5-9mAAps7 zGo6){jo+F!!$PiHm4dl0RnOOl%YgrUJ9`Gfdj90CKCEZ)73)#$;49Vx&(AMh$LCp( zu#6^Da6L(2zd{X|QjB#JU5Bf3OC4W4QRrFViBjvHeFup}hT{Wp6+{(Q5L&Q(g4?7O zlJZMPNVO#$R>qExcE%T=WXkb`{Gqo%1|$7KQ!=2D?nR#1>VeHVI-7PC*Babns!(?D zAE+yh{3%iF7?kj5$A$Y)?#11950S%|MZ4L+rMa{v<4XN4x~<}#43(%PB7j)Fw|ii5 zdolRdJBB>qDt4DW>?`^~eP%CJWmsl5AxY-4%3DeXRl+gj?n6ac#TT_cm5!#QGjL)E zI6+^mg!vczvYXe;FW>qeNb*+%S&S0@%B{b^PqIAr=`Y^;K0dw0TK47QtucOKCHr#e z)@38$@gPFGt(yGq`qcvMQ40(P{&8GDyg|`_DW>S6p9M+(t6zOZ(qEZvUUst$bg-f= zA=d6fOx-y?P#eqzYG-33NNlil=7%-$)DUu6@bX38@yVpe#*;Q2&XAhk>RwDqs|eGronOC_oUP@>dPAWuC#&#TJ(;$ znFzx?b{+82)+yAD*t)U}gY4nPlJpC^4LOEaux(0QK(7K73pf|dna#)e7g=@=p+`Ov z^-|c6wY(R#uWD}8iQ_anMQR-}+}R$Hck9YanHZhoRaXc`Oc`pP15`fd9vUGYMr)f? z1rJS@E@7K;SptwybE>7@ZfmDm?9sEGpU z%l0kRY!ilawV#1lqZ!R#Y+wcmiUmseF5Fi$+*-SL2-gSP2gWl$7cSiIz@$P~Z79(g zqym0uBp!*mr1^x{TJTjnk^DI{6uJ-I*~K-8OQ46_(r&geA>ol?@}!ZlaRB0zcCM}> zV8K>b-ft1k42G;#U1CSPAhUOjSUrJf2!SKjDk~f?CJ_SrEQU`J zG6uJmvBg$eh6~EkxcrUS8L`5UVQaXc1SXzT<;5UeKKY6SERozG8upQu^rP)guct5I zRmN+V%9<=C1y3d&;N#Y=(FY>lz6%$whBUjL#^PmFsaP@-vy7~+O%M*Yl>6bb*nI?7 zgoC3hy>PJDnz88uE|sv#J~l5T4lCAF-ZeRct^EdVY+J_0C6P-QS^A;}*fY2+aY0nc zdjY|02m;lSCGuLj!nZA=z}B-)_X!*tn(ZwIx-iD~w864HT{KSK`!0IDz~tfzj&$n; z30nKuaTu#ALZ;IxJcr|uDYfChllKpb9E0TGP(anw;XH)kfl<(|dE8|TDSU4ZsUQFk zA6mzr6PG1KLc~Dtu@imDi`UMqZu7!nz-#T|s~~Uf(qU?of%rDxn5Qc8JHh-iv30=D z#S+>=xLZOjc#rb;GSH~iY;;@WI`)<01ESh^=5roo5$%Gp)&cOo+x7btl5-2=?3u2* z`&;5r;8SAe&Q01mqd(2Lz_u-(zH8w+)BvWQ_2>T5?(SLdLQ?2B2Cq9DHb zKiX&m=&XEfh5zURWc`PHw_;0n;L0Cn--K*^B~{t`Jn+Z0}hCPGG(#6_-8!<|0wJfZ4}^T_!d0aw1*ewT@v#8pUwxASR*{ zZN$P5`r{Ys!~EORS~c1Ox(c&CoIv(2Fyj&QGACQ3zxvOnae~;Q9({W6FAb)uE z_UiRbP-mFV)>iM_yi(FH@85o~at|NYH}71nuQX?u)Rujr#lk;^+j4EXa zYs!M*+YmWB{<;cr=F3=~2z(QcuDv7Jka%lGrBEQ`C30uGje5f48c!i~5dLtFmgr*l z2D2qNynNZYzl1(zu*;X-MQ~u3L4+c$hr5p4?;$-+O{N}4WmN&7BwG*$M&X7R#FTd+ zT`O+x=AjbUiF(a-4k@4H3m@%425xtE3fj?!cwA-Xd^-`l@}Hj^Z^P{t#IIK_J|%*Y10Vsq*Rp(sSZrv?km(@#YXLT@*zPdM5#v#hGem5_ypcX`-Q! z{RW1EmE#eG>|7NaFx=Fnb17vHiVJ;P8LFU}Z)LiNA2Ri_aLuggM3q8AEyep+uW#O7 zt*@?c-d)?gd*jCam36-$(8g5Sm(uwTt%M1fjHzwxY%Gn>Y9>R-&j-qXbY+DriMs0) z?TkH!#x;|rM4W6gNJN1vp&+ZulwGs?np>ezdpX~;=|Hu_^|q|r0tX5z5tsSIL+FHd z`2pmMA_6cTl^}-+>S#G7BySVWHNoA={qT$)p|y=988>$S-QFN5B)uFp zKgo^va9sy6Sbm4w_gBc8-+dS;v}r^M%x~Pkdx!EQuDBqL66KPEs|t<@T4Gn@UTGRT zdWhHd;D;=jg7Yb=>K+0xwm=vT@T|#J3GeYBB{?U9?BI{v7);(dlm}ukuxHF9Qy+Td&&H}KR>g(W?N?@$!Sk_Red8;l0NB!7hyz!yrm_L#`dUWhenMB_gK?1| zcoX%#xZJU&()->+Q~0UV8E|@BWXj066YrF^+}?0kwpi?R4m|Xn!-KWkW9so=@|SAV zviKi6m#pZ=p!kKqJyb}@-fcX?nU!IuPA4S%Oq! z14^#i66$Uc3)OAu(%6!2-Onh5wl+;#kbs<`fuIc#%){`;1XM`?6+;ubdV2_O3bP@I zqC&9obX!b8gh$hvU`bcS^fn}aPIrTY#53U6DkFecmuvxDjv;S>ToDvLTGdykx3Q>J zQbsS`@g9NVa*!{Q;Yub0xE`~zg3gn`WJ~-;i|#1XX#uEl0x7_A64=R#GtvP?)aHS1*?{Gh?N~v{SfEtuBu zgXaLs?2Po3-}d}`%RWa`UWR2Sr_5;T5a9|#&19-tJFjI#hRs5($S&VZb*j(a4Yhm` z7ED$rt8-cKRdD8@{0XW~9w!@Mh0Z+=$A>-fnXN2`3a*-HRO zN*O`(1VrVOs=c0hW$aSkAm=1N)#2nKE}rAMz{@w6Fmq4%dAl>7@@XABY`lcSYY>z>DAuZc$X z25c|NR#G2Ko%YpMi}8aLrTx}C>m0)nEV5~f83YdCDnz9paLz9nTW4pH+p&@Mf<5wQ z2uwM3U_Y1M`J)QX9 zgi^BQ%l&v9(+F*tph};DahH&L1R0>%zujnE@d%f=v6rp+6NcRR9V>>fee74}P1U@{LwIS|~Q zz9V2Ck}UhprBc%}7}NI*!N2Z-*??`Khwv@wq`Oq=<~tD}KtH@pg?bs`{F8&992gbb=*ravK0usSH<7j6bHyo$nVH(YFZ=!X;PjTmuNGF_TedYAsQ9(6 zKx)sV`?YTJno&sCzy3nhzcylqX}Gu$n0eN814!bmF4U+{_xgpR_ID)RZ{JC7yr-)7 z<;hBXs9W4_(0 zHFu`k?dD>w(W*^tFXF%L`N{Uq^vwL^wo5s{*6~l-{Os73U*VG1kK&~!%d91upHi=Z z%uv;SdM>xe=GjFUrP{($ZTc@|^-F9yik2}f zPP5&f-I-}lP3|`pQnVM_2re|9VlM9oR+q2Vib5qmXjh*Iftv$5^?Ae(*kHwjJv5Ui% zS(=_a$HkePo}LGaZ0}%McG}Z3JG0HX=F}n%*vw+HIkmkow>Z17eLjmb{Q?(fa(!xg zsW!VbJ9VCm1ESMzZg0;|F3io(Ztpa&7H4vS z1bK35X=c87adN~xqpl~_);Bsp<~>6xm^H2na7O?$n9Fpj8h7@?AJtmw?^@zqb#S+M zrHg+|WymXkq+&0om&_l@3tEwW-mbo0SANdwc;*VEB1)99nhMvxWG+ZS-*R@fy9#2Q zB(G7%Glc$B*Dz?_B=eY8Dc;wFXgns8Yiy8a(G=+!RZf4suU$GaYIr49 zMQR0*EL)sZAHo*Sn=7nd>?CGiollnwcFmB^A{F8%MvXo8rJ6_>JToI>rHnMwRm=vC z)vJUy)kp9Pe=dqHQE#NB{dNNhS#d*C_m;$s%RFq<(wLh>;f4;>6;n@~P7r%2{razx z4np;0;oGoUu8hJZbkJYF;u6fRv8IO0_hO!D z7MBDCCiSykVMi^R?Xl|ZVr?eAz(G#+0=_?&nHWk8hbf(wPnBhsTeSxU^~BaS%{4T> zjyRVsc!@WV0>g!xnXzIErZ(gr7XP{lDhf4D=?G7bO?*5qo?u>su%1(i0G#KFg5%K; zoQC2;1Bn!N=yXPjgkv{O`1yIZ(I*@TB-2^ybw_&}WAR3hAz2mm&S3{5^)pv2AQf%? zAssw7+j~9(wHp!7*~^+7`gOvb^1c&>_YkKl%?4DP>Yx!@Wigdu97mj@y}+@6^U08+ z7w!$hF-NkzE61<^nxVM9U){)r&0(3IvmqXb(Jl%sq;O6}MVo-cozRH@%0cP`z3C_6 zEq)vkht6iB_Pdmf;K$t*h(?_~Cw+>*(_a|Dn)DGwMnRdra#O~`UO-LGN%1H&a}H*A z8X`2v(x6V}F-yF@a(iWcg-mgPp{Ng3PD!X zR@o1f{JMnZCAJ5NcZ6NhaczaKh;R3qUEt;U-m_d5zG>P^D`YBH#-h4>u>)YnO!IH~ zO+Zie5lN`&VOQW;gAJi~w50*QRlHOXPMO&u_#6ad5L>Y0Im6f%K6b2;ogmTc<50^X zZXl8qrh^XBOe;Mx5ko*~?DaYZd3xGW*FRlgy?SWA9DIF99w9P(0fQ($gJOU8=D!Vd zz8ER8=+B_5U?PT$!~p{rP{bdN4d~t`Y(=|yE|wbg_S~FBhyPMC7rzw=)$f0!^7W&8 z)rVc=LrSQ0PRfwo>VL=by$0&sw^Js@$1^|OlOV)6+DGRdHFuhI6`tS#tXJ9s@82@X z!BJDb_zQuk)j@DEeT6h*1E%5VX>vcqm94dF$@u*X1_{aZbD&Ez@Ag8c!3`v_1b}Er zPJad6Q(gEb;>#oTe}>mTf}0SkL*W52Dd8m@#u0md!dNP?P?xr7@-;4j$Qzf=A`Md_ z3$Pvw!jzm-MDAXCDcVw|BiS8r zK;V#h(0OKD#m*?9%`=#SDBY_}RH5Ow;7wq|aJqDgOzYB5MaSZus?&p~pcTK=%<9z@ z#RYW*BhCvW<0J6ak;pnWQ5?vfKX{bM^OV#EamE-bK%zi3G8g`6KI|12fl(gG zDKL!G7a2M>O-Ln*GnQrbVop=o&%RfNKGoT>{VajVg)t2>rE{={qix_&|DdpGC#%T-PS}=HqX$EGw-avS7urVRS z&K_S8jlwof!AZSnqclb<5(7}iPUDkBGmf}pI;?iC=Vz~tSUpqGg0uA`auU5E-4bKS z;4yLtw*zG8HCGptakuauWp9G@u+Wk^|J{jqod4Uq6WweUSS!LN@o)zB+^Zi^1R~iXW=k?ba}>jic(o<5van?g>UdkH(Ow# z@l5kPJ?ph`aNdFb{ult{9GQvt%NWQ{2B)QX(Xe_Lvp%;kjP=nHbSm$|-B$7eE8P-y zh)>Ad9DRVh=z#mJL>^{R81mv7-Kk&12;c|ITC8AZ#yd0kY3CE~_zvGaH8z)Yh5zsC z43ob9xna*pOnJG=nn@okVZR-7dyUcUC@Jfse5;{~kPk_-GP9fs{n~ zjQJ!K43m`vM3FtVqTMiuT(=`me=uJ9@b22J`}eM1TgeUJ=ZgLh@jQcQGB^jxp6D#p z&^K)Pjoxxl^JV(JvBo}pX+ozq;bGWHL>$gC!V+6yk1HsR?FL~XL=0o&Y${SeBQH0t zP&|XI2Dbq7h<3XL37BJB?oa8efy5EA^c^O?aao~C$QXP~2X6JKr0|NwWZoE$9#9(! z8OHERE!M!_a8YJ-IRrdPc9g1H@-T(ns}P=2sa0$VAo*iE2Vm;h4}dLLeR@td{iuoO)uLLF}AxfSzuu(cNt4EWQVi)=v>o)1~2=%2ZFM-9J2%_{E&Ir44@?L>u* z1ZgN2&BSMnbh+aUaWY`Ci ztImoW;7|!}ctHv(0laejJkKf;1KdxPw~B&Nluu1_REZp-;;u>De4rX5Cp6p+cmiv1 zC2(VnjCE|7^mz_ZE*S;AB-Tr}?tISl3x_)!&^7Yvz7PoGtEZsIm*_;xrNf8R@vllk zne`zn&&8BtW#k05TIPQSM+oiUb-kY=l~Js3@f{0__SDERP>G|xWUU&#)72eJv0AL} zpsv5a@m~kbs2++lk@?vuvmqVPv{shrUF3b2svNf^UamC)$3JW)_*3{cMZbyX6bucG z**)bMiU6X!ckoK7fV!YOxiuQmGiQ07kKJW>k-?L6@Cf2-4TrtX-cuJD^;9&v)quJqwV+GE<$aPK_^|jsyj3QoP>Le)hZm zXZjlU8Vh0RRhFMGbCw^U9TrN0>@#C(5hr{7`N_DioCvbFCETYT#`6>rRzxXNkYL}k z_@?heu4v=lpC-jY!Hy7pEL`o38BY*TlUU+{oavZx~7JlCeW|U+^Pi}Oi z#UqQ&yXV`4}?4rLtT1D1ADhf8uZgRl` z3{s7N`E2UuS?SeXSu^$Msi8Q=h_i?eBd{y%=uQXjXZ~dZXID54MU~oQa$gP5>oKjq zA9EA9zbWIEO9lCpI63!2+s5tz9#)UQzt-8`-i6hq@Q%VefxDZC6@ysiYuiphB zlvmzkE62p6z0S6?afPdaZ>fWA9^l;J5csK7qwl`1iFf(RaY3kUk2|AVqr|XERib`> z5I0MS@!?YGaAPu)V4Z8n8K6Vs1^kku206NU{mzZscdy+lv%BV#lq5xcx`(R~9U&K} zcB0-2owT;2hp?mQjp`#fWgqJGIm&&bE+olI*9C{G5bw_MU_I}l@(2+fdjAb#zW=>y zw{tEYlbZ<|K-l!+N_d z0JqRA3qR%dVF$_rn$`=|80d%253DfoJ;E;3hHzDudc6Dh>nys=i_W4*O;M;HI%Sfk zZ#wfN8_m6bphr`ziKeAr#b}OG(96u8`Ef?KljkXeT_ z$_A@$Q~Y--?S4lkI_;tZADW^Kix!^Eg18nT!I#=-(B}ocDBq{w#x2?zsA4Q|!gMX7X>ofEy-N#vmtJsJ@yF9uPZZo_ z=m3Da8^V$5uOZUmqf4I6I&PS>9`Vh3cg7903u@{xvgzvWLt-M`Un=dpp}eUySTH=(;{btE#J>*k8!$nnV{hWlApc);688ibCjg? zHvW`{WNjxKPaC^?jqN??3C*rC;k0VH0>M?xS74We->f`+l;qJ$zDa4Z0hwnjkx_Nu z>lL^0ysA{SP#hQJ0_QN8VC1O@st&iJ$19n28c!i2O=$PgF@xBVRn*XO7o9hLZc0j|4J3}7ryLuZ?bf?dc9hzppyfb`I>Ou`$_qy?QW;kJ{fPd+dnCb%-$&B z_Ed0(EkEw;w+|6*MAhBnqoc#6iHXC##>r%(g=Ag(MJ=2{5LJqb?e$Lfcdgs$^~Ue* zHI8s__e*Q*_e(dKRu*`4m6~wm2l%kj-9eOAQAfvzhy!dl_BWq4aS%%72lwu;udQ6I zZ~pMw{p>9}r)0|B6*CGK_Y6&Gsy06#Uh8%DNB0y)Vo;Nf1$Qcb5K6ZlM|WznjF%aV zsbQ)+z_Y%sUb1JTlKGBgJPb5p*;56jBe7$AVmZ`BGQszrQIZug_k$xu$xJf_J9k{9 z`#w@?hE5K=l-^sr`x`6Q*0UD-Okla}s2dvl8NZ<9Cy($w+3(~Hr3@^tk7f6ZYgF`_ z552hYl-)9)OY)=e;g4)Yx$A6#$tF`{niUOpW=`5qypyyka$`;^P>sO_L#=3mThj0BhwqZpTYY#aJ3SEzVIS*TB zClrilHdgTv476yB_dp-JNCeYTTNH?w8xv_ukO*5H4U`E*4!lMJjAt5y1RKSJ2f@vm zlOQ?tdt2H*-rZ}B#&H}t!|@Ltpr9^ER-WJRtG6W$wm?YF2zNi&*=3##Mt+vxf3SM{ z`sTH}cW$iS++16^Q9$Tr1Z~?sc$zj`x%0!*Tk)A_jwLVuPELiYsF^~i*N2hHEW9;sz!SGe4ZaA3 zaX-m1E%uRWpQi^}ntGk%Zj)0l-ZpfF2dUZzYL~lt@AlK_AM{y&R7L)!(;!1F9nx*m z{ksp=uB{B%A+(4Tq}W*9;Tqr>re*^u)S5Uzg)A`g*JzRj1FAhsm){F$gN6mFQVx{3>2MG^$k+}(S zc;xCQoJDiSm_Z=UNJ9f9Gv{n*5*qKt^3Epyi@@M3rJ2b|W&4><-L$=kHArCMjhp(; zvj|PDkF1Nvzv*>F|A8cXvOkf+1FufB9r-irY$hD%Mzd^z>5%Y5D zWjD|MPnXz+pA4*o{^@F(^VnUZLqqDm3#pMfXLOpf{IB%l{K6A|8q*_NqVA3ubB%`5YaOJ+2hD0B{4U4q-Bt6@kRwHa>|#X!lLFES%SPyH^-zOUV$g{nK`us z>I>o49Q+I5)R{Sdaon1K4C2&!_vojzwwnoAN~F8C`+dx8w4!P#`f3fLu>!9v=nMhP zo!%}kkM!%61yt&(J zcE&rfFg%_@JZ_edyK4FXb8np4ZUNpT|7Mrs?jCYkd{UsGQy%YUABLRKtPJNskEqVl_vE|7vO{u z+$MQz7e(E~J8{b*JzHEJNsIdVR4tpeCcu@rr(80^MAw#4vQa;!jV-#Zz`Ud7$(+V% zC+NMKJ3Ry@ug&WxIcmo`QRFIy-#pyIRi|d$)Ij4CZey3ncxPoC9@7)w>EK-e$rvU%Ly zDSDx8&J1LNvyyd;@=Y zlB2wU0c+zR=wTi9cQx=(fi|ilYAV;sd!%;Deo20n7n|kcbxCz>@n6FVsCxWf8jX>U zu>#5ec?${W^9qvpoFo(kE24#tUI={wC5(4P(qLVV(q9eDmU&3ho=S)nuYT0oJ*cGo zbyS`$a5~Dp3{|*%$og+8Y26I<9<`64dOqy9PnEJz1)Lz04O$bIY57Cw0v$!~Lq4Wc3)3An?$Kb?SY}C3O37Y(^|LeqkD-m#*75#f&o%&; z3j!#a#)?7AgSURSe%p}}#>=Tc2_M~)bhQ?ro*kMgCw6yEDuvoj9mLd^3Q(LvY_NFh z-;=Rk23Uf1t(evpf@A)5jjYp;R^LSR==yY(?pczB*BLOinuua5kzj8TGLKsq_{Oxyyty$^a7R+|Humt)yq7Uc9pG12%Pqzcf+hR)qND9S zxw+50TcSL}PJIgN%K(Iop2|TKVrU4ejnad)+Y}cYC6vhlle^@J3m9^(l;`ty6gMPw zYm`D+u9XQD1#PUvOOUHOfKMelh-=z_LY-)J=@tY#XuEr~yR+NmlPIPAV?K-0R*K_Z z?>LcVL+)bR~xUDKoo|g>sE{2TbQ^Ay%4@dOlI|N=~@`4boKb? zF|O7}2snjIja5fxF9^&+eTrbm=4N1rfLMZnsQ?=ofZJ~501<37)3JcFl_H9P-Fw_Q zhLC><1}I|wZg^Mo$8M^KtxJxC;c`VViPsS@qD00AC19#D^vUOEcx-Gma~;50@u@)U zlRJcPKai^g-X-nIn?^Dh|CAa|qhF;V?g)@IokZNk{&x1qb)4~9PAts|r9f%;03JP_ zIO-n}FbPqq?_)|)wl20conQ-mir;X+kly}!<(n9k& zgcJQmD6-YWQIcZ_;X+^FaN=3!Eo?We(@v(77F}MX%CmtR)Oe>FE_)(FxY7>X_jn!1 z9Os~-1KBgm8ZlA|R}NU^Zs6CsX{Za`mQHTV>Ci+ECDO!!bu40X+#jAz0||(AZn9iH z(-d@;JqVGYbCN&Eo|K5FeIM7Ec!M}YCNz6K(ztp@hq(5^)wTQKqPKdW*E>kb-3C&$ zLMp|bwvXe?`4N6OJ}&{)SA=XuR9_(TB%g$^hoxzsovs!$4oZpQx5YcdiQG;2N%!3g z2nuFGj;Su8Y=mp5gAcpv^c0Q;%WRBob1p9z!}4-~M~9eiC2rlSi3zCB$?yj&lQ6r2 zMjO!~ie)bCfSyKT$tXWKgm6T0If$CP;EMZVsj-8zff8_gR(YE#mZN?H$JSm;1AxMI z?``(r2U?+MwrPiogE}e8_2K>e|(upLkkBORJCjn|_q(0Ahy7Y&7Z^3G9^Aj$HiVu8 zUiF9%Lc~W z^*+zsAbrH%L~{Ex5U&TZEZ%`2bj4qxWQhNaEMLk2lSLazjS;x58=`kg%pVL964|Vn zm1rC84Icrhedt){ApO+uUVm_VWtjNC%zDeopjpc=M6?3~9PJJMK7RJ`3i&gdakDR2 zfiwH<=`#2WXU@sqL4AhUN9$tQ{)MJp!X?iX`DlGj@M-{2KYBM;OBB`md1b||GYqJ} zc|Y!v${bVZ=;wakST=-)pTs=`+0_Kf#0x9$BSl6BC6D#jPkiM%WM&dfZ8i}3pmxJl znNb1)O@zr}c9RD|8;xRA7>y^!uoOsz6y)-plwZBWdtdK;sfDZCkm)W5dhttNLwNE_ zy~qo`R^ZLgIyuplA5WR+;8@I&CR*g-PY8zc@|TLy9E&~uS*viCSxJ%=GqMan4Ik(C zD#Q=V1xEGKOKjZM=a)T<3VPwDcWQW_worBu2|;HSLP#h-Zy|&-hb_S8EpbHCec=*E zM%QFBcG5$ERmc=0V9R~|U98F`EC<~KQ94bSwC6yiG6-ixJCHwc%Z1|-FSGE6 zK&U!=G4$=u(u6gdV7;DoWEm8B(D*Z6x@#^jK}=#tngJ48QhEDLZ^?Xr#G0c9op9)F zLczcTZBoGH%ZaCt!4X7`%)+Yo44u%J{zYbG3koyOSmTf;S4s6SL7VoN(~>3I5cx=0 z+r3Wb2^0ZO=&-WuA7L5hF7Kx!yG6|s-CdCMp$ndt(J(n<>?Xlx)qK2nSr?6kmRQq^ z@Zvk5J8=&l>NG=fJw+F2ejOed&2OIB^NL{2nA2A#J3a<463gZ8Hs3$ap6p|_G^T%x ztGx4hlD1;BGx<5-g(SINGe)R~7c)F}AQc04B z((y5z6eZufvrU3qp=s~9*+c;7XuHSpH+T8ecey>c)0k^*&x|iN7i!}(+w+s-3-gmZ z z@xUzN-YkgP@Cn@y;aQ^Yhp21Mk6;VQl&p_1PKJc*diU`OsjuF@zk289CXctjhL-EQ zy7WS2NQ}$g<|iA5k;97?dWZ!S7)Nu^DAavCYyA@=S1ioDj7N0F{E?KdacI^JV; zz2nxYY#z4lqR3`(F zv`PT6egXgnqY}6b7-3Tjm+}3p%=01+ESu{;zPA!~kjof%Ji;Qz&0@&o@8z(7D)ah{ z+`MzOzGBbIr`u7Wt1O(xBS0OP!x%Smp-@PYycI@b0N6{A4XI zdxQTfNC%8{hewAAn>);j)i!YkhJ;jUG9OTRgyT`H+LRB8UsCGoBp&1lreWrwjk324 zr=NY6-c;$X95wl`o`&c>BAN3QcLD{w!C@UiO>O`y;`=12rjjINJf7YKLw&MDdMS%< z#8J26Opy+fVb;-k!}UEo84IlIJ3ZL^I?`y8lS#RiN1x0{f*r-3(j$wG@XC3Y-7o#c zag|A-PBV*ce0X6ESJVTqT~o6vg(7Fuu`o|B^@?ySuvH{r&y|bREAGb%bGu~-9!yO( zssaN7 zP8X?x$~J2gTk^-jyYW&!&2*=x9@l;BWsw?zysrulaqQKQ9^AZ-qHkwTiWwY|SuO+b z%}{#;1Ps$@f2!9ExQp^wrHJBtz67VeoY$V)UXeWWxF(;AaZP0scg3T(HHFje@xcKl zK53W>d`(8nB9n;qX|Hlfw68R2T(O!}s`n6LvP(A?x4|ag>(NtegiX@`9Z4sPNe+i; zDp}9W&Q4B2wjQ6HYcGt?EHq}v8&kE}@u}^Z+WgG+^jvLbJ0n>W!Gc(Z!ODXk-6+c{ z^G*(rVOIX|>gqZ~!JTGZ7O@vZ^ZMHT)J%`x#`RdH<{N%#if?F+z;(#O4P8L2P zoKsBZRj*}TiMiI);?#C)a(uhpoX1K`&5kd$=3C=4wf4?pbGnUNM^VnXbS0h~Z@0S# za91sQf9LE=F}qluoSdFnT$nz6DRQsaWXMC>Lm9X>3f|0POKMZwQ{#)cmyOTNG;t%F ztj!==cX4XAIX&B+Uz{!4VlS(Vj5li!?%Wv(Z>FcK^NVw{i;IitR0V&DY9he2V^l+v zg~`d<^vrBQlT%SGA;%m_&T}0FjHHc9ba6i;dE~=G{ze{i&Nt> zv+e1H$(`xNg~fahjWf}?8+Pw6It2xUZnlP#U0s;sKT`$RSAejt$@Jt*tq5V+Bw8z> zr?ZPw(=$~LQhPom&w|#Mp0?)}XB#^^t?}u_`JM3@toHcg5rO)V@|=WC18(=$b^rC`Oi$>RKMt=4ywvMW9}Jv%vBMIwQj*}3`b>J7ue zo{y|JFieP7{yUJql*9T_EIftQNdDdeN+aJ-p);EM*95KpR7R?eLSxc?&q86Orvmy? zV7WE%VWGJ&1Gcv_-kRHn(9oP)7+>7psX>}*?<`DDwdb~L`CL9(0@GhVElewB7380K z&nr4ac>*&#H9a-6SY4b3dz%`LBl;$_nW0Cfup4BO1kR%hpc?}cqLTr{6*?K#n1 zc5D=67mY4-s;8p5iLSx0vi!*y72UmljwkL0p$#YAk;+9GfTVzGUH%`@Lk}LTUN6Y3 zZT*=HU6EFWS8E;6U3bihe1&H1GZ@uYKVw z|9bb~z(dQ+bsO=F4o-BKICna6L;y#`wptZnMqv&hu~w)AWr*VB4R%XsZG$g_iVt%` z*PR&ZhOW1TFXXt7BvIfb&dtDMV;Xd6vWW5I`I~DpJ4<#o^nsrP8(mzOn}JAC(B{+w zpKa4uqWJvps(~XWRLS2UvX|BAnVG3-ZDC=0=sSnB0LcV#&aMNPLji%Eo`WD!tIo~h zYFtEHqCzxZySX4gX&_{a8nF!zG0gR%ElIW7kx2-9 z)8P8ka>TibR;$l$H45w@#NW&<)Tp~enCBw8pVL&5$>S`Kf@2xYtf+`| zef92P>Dass#OZ5a)Ci`1NWTc8h88WH4Xy0d zhJ_8NJ_!vFgwxtZ{0P!%xY``*2R5wh=?A82*To+woU4=~;HMUXWGGu&PEb_XG{+OQ z4yv}M?ma6hmZYn;T`7_Wk zM)AlSH43sLsV0`=Gk*a8HS4YR&GbNVwgvY!te~?V8<=Ki;7WSHp}F>Z8!!`7^QSj= zFsrTgLT@9o`D1>6eOj*qfEwmC_D!tPGkWO z&PHkydFb3yHiDI?RCbF0h%=1>v_4a`dS~;)wY%^@y1#yPJ#t`qU%cGj_L=s;EzLkh z*Bl#KG7}IP;GU$1E%Aw9$)+9YK_ZBtlc1h?Z}oFX7-f3SFK1KEG3&12JCQ8HX9U zJw81@HP@(3E>7>X^3Pr*bUnz?^sAN5%Syfnlj`0}K&u_D6kc;Um2;5G&(04Bh$q7N zn>>qOoFpzuI&}{H>3`6?cr|xK|N85#klL#{JrMhlPb8(396ezG{Jt?jgi$ zbRnKDGkFejnx37loUo3ZUjnvOxQ9 zB9DC1TRs-kh`k0>=+a_jaZKh#9==PIyp3q`!q|Y^Le{j?+1u+pV+9Uv9s5kBrPAdR zGy)oR!Yzta@EytQ2C$vfF$DlUK6g2#>CW1+R|AniYzAVIJ`jqann3=E}8o{X8GI-G-|t|m>2 z^ON%n?b)eXV|He{Hq~ylr)y1e>?yckO|}~Ijmd@DY-1+-JoGT(Gm14BBr9B$8-^^K zRNoScoJkWg!25W+S{|D&uE50y)#|xEvZ4;Ii>?ZGjeUIl)BG@!WmtXpQKQ@G996MV z)q<+o;MRrK66 znyjRXsygXW#MYNUYE7gWVQ{8w;O_(V(kc4a^`Gtywf-qePPHBokL%*{{2Si>BWap84!+WZYnkb|$&bPO#F)Cn;AT z!Cx0yYMPq;T)F`lmVBU2xKUo4l{pSOhsWSQ5CJ5OPL!RH>QR?LUxWyMHD8D5v5yC= zH53-OX{kw*P*^06ZgfK|EYna**r=~=^P$d7-jZQjGOmy=a7jXtWyR3q_`vZv_n-kj z(n`1o&WeQL#Lri1Pp(4dTn?l|=R_F%h5LDLy`#W9&wGFc!pjO*WheNXBljDKKz0`jlwJvLB8KrAp-9-&fqji7C_0Csyr#ad(tn z5Gj@Uk4{Ua+4&Gt>8hBTQoxQy$Kj;x7`8km&G*^u?29PxR zKa?{%y(-75TDqVxy7_^UwDV__?N(9UrP#WGOl83j?ET2UZQs&u$)Nh+4W3YetF+J> z=t23!rYwuNiIwOl=Ha(V@-%CEp$5kXyKp`Bl|m1;m~eS7kC*Y^P~t0JEdA(5KZ1et zLzuE7J?W!kSn;Tgeb(td5&9+;Sv()9gzr7yfvr&wF2#s*-fLHM5UwwD1F!^oEsiOe z!Uw4@TActG+O%4mcx%Qhp89(mg9nYyBGBl37z8?khHZDRKaXIk(}wIbvt{$R+l4v{ zcu7m&(*_bWqL%@Zw?Vq`UT^oO?d4m$@8^R0G_ejAp99(Zn?w&Ui(>#ycBtxc?x}oI zH#*x!Dlhm5o~d-ycl2Kk_mg5^soBB*}f~9KxyK zsg>%x?+2e`Re#!RV4_O5-W0W+UQxPzxu6?*6U zfXCmNYV;W15M4a~Y9kazCDx{vW*3(b3N|%0Ra(7s`&nk(Jm`DvhB(FS?QXN3WE(3Xq0_|C{vpz@>c{IRCkr<}%1>qXN^N!~ zw;HFw!A7&WMz$SXLXeWqLBRyhx8cq9L7QGUvS+(Tc$;u1KjzHhm6^HuEU;&2>M)Th zbH@!=%oV7K$gQJcL2&(eTU+Vvx7lZ@C*4%+QEzU)L%i9^EAtCE#JdUx(!Ue<0zJh6 zY~!J6cqZi#ptws1+wgOgesYLpr}8?V3>@vqerc2hiSqy{GI)P+7E>02ZI)}3Q!`~` zvf;j(=VM4@%6r0dKCd{u!+^O`{al1p$SUsjw=VLHVwZI5`R)@#>Vn~OCo(P;w@XX; zN&BdZI6vX+WWG;#5mo6T^AJfvz!T&#fo?4^C4#vQVM-)wA!%h_dz&nhx~AZ0AHgcW zLSNb!jck9d_Mg5cKc9X2S>-?LR{Ob{YS6Y|B%)Gg|wP>wVAE`_g}C7F>7aL4|&LDSN|uk*T4G)YGh!CByIzK z?~VE#D`dK8?e6SYjfFSrf1Nclv)k#m+dp++|Mna8x86jZKbHmju-Dmp>S}%U&HBH^ zTHi)3_jIm2ePkp3+i%wYPOdy`RsFwsv;HS6CnUZ-y#b>!{`AfIl|AQ63g^HG!Kc4^p z`BweiuVjiNV1E58^=B;R@|kR}iPmgRCts=mLAIPGd_&{3aekO|2x?V8sKFW{=Ki( z|Fdj`WD)<)SL^>PD{v7V4ACn6Z(prn{90xf&Ktspc>8Ph_gRHF?|LwExz)J-wfYuo z#AAS3x|Q7iTK%uEINk}l?OOAH`D^vx&ccA^aNq;ixdvrVN zuq#)PEM*Z!ON-*uAVme+FW+OViB=}=DPTjch2mLm?100$vF#Ac_d=Y`wGcVtvybF^ zJaczca}A7+$oH6fMbnEvN4wsKSo;w?S&h0XU=UJ&5P_8nMN~iPx2QM*wJ()t-^V}u z=HZFFB#T)4-RjfH&yGIJe5!p``O#nf>#x0b@d9#{bPi9tyN@0pl`7XR;myn1VyUzS z$?by%lJ~A2G^-a_YaQ=yKym;7w|6bSab{V)dzw|y%n|U=}rcB z+DV)E5p0JhiXx{TUpdt&yR3S|?P;|T3pATqMu-Js!=HfIAvP=k@t+_zh!tYP?>z4P z?)|=7<+3|HooN!OJE`x!&pr3tbIv^v=waH&qzj=l278qL^b8S`Ka9>tGYX0T#ZnJf z*BIh9@+LqJ3WJ~$I4oQtgZ??X!6%#zC}>D!0!7WS)#*Igc^rv6I*cC8I!F@|Z4J8d z2~v}Qr97oC6xR}2e$frJzE3mQ*BM0jS+_#ATOS%dl-j9BRiif2{*ab#j6U*E4q)0) zDRS1770mSPN3s)WA>ikJ3nKv-(Px_npYA?B zh}L(Wz`1yDZ+++B$%p(n0*z)Azk*;&iyFZ0e1KH~stDdcrOY(wV0&W^+2VH&)<53d z+B|r|7J8cpI~)7^(f!>$M8|rxzIU*B@A209Ui9ek9%5B*6r*S#@IjwwzW}!M2!A|+ z(puv&$eN#EJKa1u2r>{4USVG3?R0AM<;?FFgSLkws3h1@mXfv@~GM$}9uPSCIDL<&BaJfe1*8sK=())lQ z9YGIr4Sz%a)L#?|XbT1LIG^+LDPkr^sZ^^oQXOXQz~5oVtYhul*(T-u@ISuRmo}?GNYf)c~gk9_qSK z95Q0_Wa9~u$+^Mc_xJ-WJhQFM(Vl&q$A zY3foO$NA1o*!dKwukrSEaZK_hr$Dx@xTKnHvw`(ROuf&6{Xo8UB&q{W&))v6$UKio z29ig6yMMfK??4lSUNqGHll_B@?Zf@u$9wniw(@xA;m+=7JBLo92J(M%P4$w7@WlA@*MmPP45%q~sqO$;Slymn-#_Jb?K>uzkJRFt(`5 zZ)D^6cmxy@+`eEuc~pZeo2>^V{Twk&EN;_zA=COpk%fS~{A+4HT-*crHMfUsgK>Nm ze}TA6ig4-3AGb6Xh}~OGG-8O1i|NzR@sKD0{hb|VHXRJ@AXer-)JMT7~>FXdx6yK04q3}c64gJc0r`bi?^?9F%4 zrHhrAC%QePX)4}qrDTS2A!1fj02J<~O(s0!;Wl1&B-179|I#WCv_F2&@ygE#j%a?c*;B-NeqQJKPW5*8ZtFo&lM-2Mi5q)3aLF2MDu zTT8!<@LI)apSv^li8G{EHZVn^uEJ{}h0~&2q-UoZd<^rQA#?MCSm@M3{(b$pHyXDC zB`{>>d+G4#^a#bY+^m~{R+&tO^Q)l!%lQ0oHXerJXb`M&bPt2gDZ$aVboz2o8lN5) z(5$rgXuI&>(SyRnjVFkkPZKRvn+0|AblxeblW^u#iAAc549uTixH0wIeeON_v3hxe z$Hlw*k0}psdyJ&HftENFUz}4@<ZDG7O1H%w3(B9+;_igu={jrrKC55J z3+?7f^s3B!`Sa%l#^=xVfSiHmgTL=t(<`{q=i9_GgMp-)wt!}{f}9}esS?><^caZt zdxY16PNxCHGJSPxHZbk#m+4h2GerKNqZ#=OrLx#vhe%C{68YL7 zvj(M-l!@r?k znx#XKC!&Km`#Mgqbd&$38%y((>C+^Wg*a(_leJz7D6}k0=%RIF!g(3i4IE30#|F_= zM*SpHpaKDciEgN2S<)hb$vl|E8f$B|DH)Ak#^hhAsFm0xyzo0#R#I#7lqP~Lea5E- zOtWQ^^Hd_dGi^D+kuPPlEwFS#eE*8>DVAlAACQjt*&Nd&TC6NBS?+b1Yr$0RV0U}V z7^0rV(dRR8SZ8EZglE3q?D&+Cn`~xut`IrFq@EJzLL8a&YOgqb_oI=E)Ow;DpauZ! z`4XODc6vNBB_hTN7DGbIL4+G>DsGYLe|+-WaHy~&-YIg(g&crN7>Ygw)s)tz(;>&Vs0SzN78vdn{7 zPq}&+2w#9Frrm&Df}CtG*Kd|7#wZCJOoQZcPNhF+&&-LX!;8ByI(q?~mcDt>C{_TX z9q6%d8*VEU@OwlOs{H`C@%%aS8um_f7%Y4Pc^wZRzEQ3=W95Yy@h||1fDib9f^;jGP$aqR?5c&+GvU8m^b?vNjO-rr_z9!SUz6FvrVFI3{$i| zrCbKQj_HJg31?*xcoM#T&KZoz4c#wH21h60X^bvc&H2FD8)%Ul4-01|pR}kX7Kje@ zUNTO!J_FW{2T)$3E_Nb%!S*~%eL{1`=BDNjhByL4EfdyhVBU#In%V_A9rJXaKlczt zr>%<2Q(S*cn+AZn7LlHl)Yi~ildf9qbqOcszyQGslduSs3Hda{43waA9`(>C?7Sj6 zp4z3NAkKk8C6zfQC;2O7dGnGkbSo#CP?kbl(v$RAUg9rt7ml0Vu()?0wHu}|r^X5V&`R^H6!SRIDTA^4; z;WKgo-XWkZR-i26N41I=`8b^DK3M_ce$;Zg)`$_KMDONa6m#DfqZxdAj7AdtV}B42 zdlQ51mV0EawuZ#BA64fP(wt8lSo7EHaI+twjGW}FQGVxTN9mA86zjp zJ-KMqA-y~?#Fhm&TnlZmR5P`R$C{kRUA(KB*LijWEbv)trwNjR zA;puwK>K+~x}A`|Ufw>RuMi&!o~c0goZQwtaa!P-%4xPr$cWBVCve*`|1@Mu{cLxM zkLxfehTI6atJi=?; zDM5aJcYEXG-A|rmwgO1WdC z4ZXMXc;M}r0VW0-O*sKaj8{nQ4LSgjW=qsT&5vN`bHXej&u0RDou2-wno>#(4<8!Q z@9^Elq5cT55!qbQ4=36jm0&^45nKz#T#HEo^`!U{H~L6P-l-K@-DU;Jde@L#dac|q zv>UCpZo5{lcYFO5`sgyWgZf%E?v#Z)kde?s5U#DbO!<} z;2sI23L;vTP(0&}a~-m?xTpRUYL)4oiadqN`z*xyHZ&x-G{p$T@IC_Zbkpjbrkdr? zZ|w2dG%}fH&-b*U8pOz!=epS#<|=|IUecR7{3_4Eie(Y^7D#cT-$Y%_J_T$e&9U~8 zj1y)&!x_hXYaJu9Y^wt^u`A3*rX(FGWbK8hCtBS5^(rWQaPj{{wFAl01U_{wEM zs#nf}kvTOXZskox`$;CCbL4Q=>1iap8iZrkHp^@wfzj>w5b#{&oaj3WJME8I+k7ZD#WN5nhn0fb?aA4`xQRZ^_Ua0RS&CP$x3*@wYMm zVLWj{0t6>yG#GY`3AR2yd5IU~lcYnw3{6THe;8+m$z>n`=-`;0?6gOMh%zROsJk7? zxITmIYvT!+ZJ}25hwxjO?i@i&xA3VM-@#^SKtUF^pnn2=6Dpc=PsG0nTM+bw9Q!1$Q)X)F;{VN|CtFJHW093gG}?=(;E1Sh-Ce@>|%Iu{z;sA zq6VR1{4;F^HemSL)6VS5)0|m^vtD)Jd>Ef^1U%|^nqs$Mb4f6h=-NbDyzSpGBtCKH z|5BA0Kf0l$mAcH}qFFScO&qps5PKDX`*0?7wTdaGhX|Viw6%jKk6N)r|EHtwQ~=|}CZntw6|e3kpr4SzWqgW#(` zh_o9bAbNpA?Aco)qe+;kIkvJEFBAn5QYuXo+O!OBA#L;-m*?qW5i`%=AAvz&1;r#OH>b+ZLO0rbWO3I37YME!1}5osjgdEUxY=o{ zKnF0~v7OD=|CU(Zgf?7l5DYou&yLP_Po8Z^GE~vic@iZe3E}aCRDRqrV~MNX%4mtg zb8fF9?{Z%(3)@ieFl|AZ4Oywc$b$7GgWZ z$MjodKnEmRl3#v0a}x!?EZv+;D4HnKxac29%TuXW){tMkQCln4>T6}>ehD;DPbt#Y zl#AtJHq&^z&0I({dev671980*ch?HFX0={u_SSlZS|#qcx~nlX06{}j%g53jl7t;8 z$(~l3$rf^HP}Ez+a(T7ZYObc2h2B%3$Ye!vwWb+M-W+i4GI+CwEvZyHRj4$O=(JYr zLOW8f)L=r~s@A)!^?0pS4}rjg*3l4_0P(nwsIivP7<9-0%VgjTR1M?J>S}SV)u^{x ztvOBjhK*fRLlZbGJQ}Q_9;ltFE-MUFL(+CQ7bWnyqH9-z&7*-BzI%SF43ir_!TToz-5sQfvsDWm`$RoSG{+LRP)&Cqsj`XB8LAt&H0l-HuEl1R{;Fm%nfa5{rD2+^ zmTQ&Jr9q=OuwtI3-m0$FiZlqG0s_NiE}GQY%$&%%JWbqa)!Tg>HA+p6lxF=_p;g9t z!)s2pfqb~Q#akiRT>X~5B*YulYO_^btF%_}MiKx8fiDGdY0_G&S1NNiDGl+)YQ0=8 z!c(YLZ>$A|$v`|%=U4k`&y`-a#}tOJ#4hOOU2zOM%E@dvos^bAl@dY^yez(YvFLJs z$0aO+4&7OE-_w`5wGD^yj!XFEa|wp3r~*TnpM|kV9A!8WPes~Vd9TXB0W-V53f`lHh9JDF6#k@-KQYUm2sKjE4T72qq^5Clv`yYX=D}nBqYNem#fda;`}K-{izjY?tEnb$qKBy zKar|;J~9sp^84;j=y59fO26)A;?A?&Y{YCbqK@HMVhqaBVK4{>PaKYdyaK9Bp*Gmc zP4p2e=egaIo3_p`W7D?q9YA&>d)>~J6~C3+R?W;pH&*bzZPaST>MGcRa!8EJN{hHV zxkCSSZOv_m)4?l3vevp zjRLR>zXNL`TuV@@;(n|A~mPueEE{KQlkVj0FiTLN)Qt&r4PqB-TNd+57kyqQW z8^l-y+puwr>7OU1N;=e5^JXz4lHXhdfEDfnb}tCTwn7fI;4Tt4x`Hme3gJ0*M+_jA zfA+9@B7KpAfZqrA`!q);2+7lnR5msj!3Om9oHT&1R&M~$UIYvNxU(;LWh?sg|Q#OqgDM28Oy>K@Ei0I83vL}Evk^5@O!Ih~m$%FYMzR8diT%Nl1XJjByf zK#RKUT0t}bHe)2MDQ>A!geAfLXb9p!6=-Pf*zx4NNudSA<(KJ-TBKpT5r?sW-G{~4 zn}o$ksfGGF1ocbOuzc54Th{cId`^4hlLg91*?mx}XVQLASeN8*$plOq2>7)cOMlyi zbs?hRY&IirYRAWL>qnGNn@>(;lS1av$ty8JS?Rd4)UG4YE zRhYe%d+oJ$8OA{ETKa8i87E)C8Vr&a{c|Qs-XSqKG>Z%ynQM;`5WGDloDNr@BLjMa zM2FJH(~OZZ&ylKN*Qk##ewH03F+`;rPCC|1)nd`O4$2jjdJNAIYN3zJS|$Bo95&5L z*QTzqba+0|e4CBKM#wM$br7OKDwQ)6mw)s35} z31#f^%n?Y}vxh&l8#aQZpu{>wK57HgKy+rEczlAutO$G3ChNddzfp7%1}u8&2yHaB z@rt&0SF^kG-#0FNm|td(E_#^1+@t(*W_y=1*}IInUcfv3B2&HPpG2;zDzNSJN*1T~ z3*J!RaFcOezo^MFW_hW@Oy`^aV2d~@v^d-If0YjgsAU%-Y|PBxGo10?yn=jaCc^;mTtiY5xOtQ2xxn;6Np{J2!9ZVP66WG*idYQd?-H3L z6qzy|(NbI4h%Kh?l6~)?{_bL^Y?RAC;@EKP{x``#&08*u4^HyBr9<#5*L>MV7k6kT zkayRUyn5|t104`o45pt~PYixr28p`E(X3~E?aWIUJEWVq5ow5~R-H&i2VnF$3J*l{ z??Q+ipOc&un8x0R%$o(m(ols<1*NgEKTNy{ju0lhU?sJMvcMafxN+SIaa~}-IU?8+ zVPEWhmo^&+27R%$z1uMu^2Or>0s&t_cjiGL+>6hCgoC{}Y(XH@3*rqf2=wCKa+%Eq zATJIkVsGPYaLFqK3bE3&;q))QW<5HS)vU9+5Gqy;6@A4U)y^wL^TW3{k7@1=ZVDnx z>Wd`idN{}j-7&cD$fa3YBwDkj2G&JhEu@FfDA<4kn6%6#6=i_tN`E}ZOQ*8=?&!R+ zG)rspKvlGCrBE3 zl*3&Eal%I30p<9Da-Kus4iF1ek;h05GV92f9Ta^2ViUQ+@VUPltdI+{x0Ms}i3Z&s zUV^*D3W)?ElP3+q7ZXupzCOc^_~QbKsezKu3=N=gI#=Vt=F(kPb*bO*QQqVD6$l`S8vYZdk^iL& zb9x_a9HftKcGBP2!41io0d+dO7s{;~LNqj5<#NU_Fr`SJBeg@rDHoW!23)8*@4%q2 z88`cda=#5X(`MW)v{qXPQc&+!Ta{)VVGC;WRp(YoaDl)3Vs&{yoBb}qI*rw}E*xeGtzHY>L)Eobp;KOPw!Y%z*BX5(4Bt ziXLsPKZ%~Q`3U9Ec^2KptFC(*xd@Bi%iOKAwcB^B2 zt6C%Zr(=vk3Wr(bWO}(Li!n6n$5;Z7m3n<%#3lupq`lp(tyB+u{f9%*2OknNY`ym; zv6=1DjU=?bxpU(nTP5(0fAO2dK61W4+5leqM37ct9XJnmcLS?T9ws(-T%u@H|HP8e zznKbHOEXdozQI?C?pnQ9?==wN3$a4LKlQtXb`#Fnl_sL~)EaB8es|5C+;@p$i#nQh zt$Yf|_&<<8igqDUsiC^G6IX$xAO~BAzLs$SN_HLK%`?X@)z*BT(~_Hdw+fSlD>Hd+ z@YE!v>RZq7IdLNw%l{y;-53UVj#0tl>%>vxrSfDdD=9ttG#LFSmIO`@U;j>#(ZZL? zJzkr0tC--CnzoRQ+d1DkJu8hzM?e)DR4T0a3oS0WV7?i}UwL({z1pic3LOMSDAZPC zL@H{n)(c(4I;@wwO+@kYVmp49sEv1$1^8D!%HN$sYo0MCNkkOo9BoNBCQ3kW1}AE1 zYu{uipm`_V;jE{&^@A}JRcOp%?tIQ{5~?649CA#7p)mwm@~=$Vuka1ipjTAnrP_=8 zl%$ihqHs6Qamc(kI^=Diop53!WwdVI45;nw!mfDQZ2OQ>PJ%UNEu+DY=&DIHTMrn+ z&^2dXr$e^YT(0(7fsv^g9e5EQ)!H}18cE%>g|B>d)ie4f%~>&THRX&^1ww;4v+?FK z$0XQ+$vsXh6m5PoXSz9{OgDZp8ur90bY8V_d=!5{K%Q5D-+WOnz9uenCF>0+#Hb(y zu7HVX=9w440df?~>lx#$86q%9dH{DP5<<+q%)0#}Ff+?MHVFG_aF&&<CnR`ElE>P~tbKJh z)j4blabv=;oT(bOPXxZNWu5&7?9~j8Gf@B?Gp1JNyF>mBRJ}?mOEJRLje z2WrM{^H3q==RAa(nKCQ@+4UGu{4ahF zx-Kl4(kf35)l-02?AM?F`#-<;-ow(v$G#mX51k&8MQ;D`_qP9rivPeV7S#bjq8>Wh)8Bq?`@g8_?+2<10%^tn{@(Vl ze}IZVKt)wyI3s@lgY6oXem^P2)0j4Ge6YPkg*01j%Bo&1e)PfiS5!;@*J9BhY5AXj zu>Dt5P7u{{b518(<*z^3{uio35Vd8@xNC)f`(XQjOdm-FZ-M{&!S-+c+RtCl2#G>F z^LPLH-g|R)m5Z`_!Jl0;Qas6gSM=iV?$Bn>xnR)_afQXZ%~j?f4lbU1EVz{5pM@P4 zh2YKwfj#B#87$(jY3$*T;ce%lEJD%e*)M)@dd>mD5p85pd{ucpef^8yaX+1n#xE!E zrH^0d|Ln^jzW3hsYuBTDqto;8;ONCP%HLaws^!XB1eI7X`m{a06>Xk$i`S^u0aCcr z?RPY8AJa>He;gx0)2Kf^Ymeg(qw~>>pF+nmG%tv?(V20x4v`mt?LfGuevjz{Czg!z#*Kf!iRFtcF~AweMZ zkK=BP#LkpEvkP=F0G;1225k>V9C2m(0<%bv2NT<5PaxvBY)an+}Gyzt2a56S7vs(44l+9v_6t8t2CdA7S#YCS2paaZL8w zgci0sF^=d)EV$d41BW0Pjn9E|z-Z3gDxBnP$agqk)b;IX7jabhpNN@)%FN&0W+x6Q ze*l3w=}U^Gy>xjy`k1?BuGwjAN^wx-s|XsC+c@RW@X$;}8?IBs^zBk$l@6dL(;3rz zZX?LbSQcPxerSe=+!ZPCPDlI(Yu@VfEBup+)iBM7ItJhjTy77}-VP3lK;{nlC$%Af zde7StyZMe{5tG|PJz%k*fouqEm2~Sa^xNDIg9MDcG=JF{`j@>2ch_{2obeT7NwDH^y=TBaM#r6Sk~a-+MK{JBCx@yGj9NMaOQG`pBBSz3 zu@`rdo;{y?d~m z(qMP-Z8<1%Mv_VL(hMO>W=k+JM3gq)Agv;@SnuCXY&>qW0~~OBa~BXG{-CFU*|^2q zhuuYkbAr%mG&}NLF8n$aH@!T$SY1FU$|W}_;pU|gDsy!Tsl15TrFT~;9o^ODmbG1^ zuTa@r=ppBArCb|osPgUbG~dJ>N-M?%K@0;SvsopR6lH`uqtVbK47xq$Hd8QLV{{c2tA8#AbaWo`p1JC5_BP({DS6@7Te!SMrji+tMYMH8CF-YzuEQ&>^+8rlrFx zpvLTEI5>G}`GJ*dth4*R-2>u_LGNqQTD^6j48Pmu0Q+} z6#iCHXr`j&2M^mQ|Ba+vkWou}4^RD4S4s46^6)QIMdY+MHAIJz^vi4Ek4|MX7=I5= Yl1nn{=C9cm)92Yd?Z))=Y}P6MACz|Uwg3PC diff --git a/docs/html/.doctrees/index.doctree b/docs/html/.doctrees/index.doctree index 3b2253c4ddb6b0d990ef2b7f04a7fa9551feb04d..9838339624016fd228ca2e60e9e0c85d17b43012 100644 GIT binary patch delta 1493 zcmaKr?`ugWgsL(-7uAV-aX5Jd+ zo54C9&9-dl&Khdf|2P+rpyn`G4nk$2FlVPl{-&`+woD8 zDpGjQ(XM2edDbweM?>N&Gt zScxZHF(pXe8RqqWL*7@5yaUApa2lhIly{B+V{k6M00ndSu49wJKCHHIh@Fqw3fSlDu^@?Q}E4 zOruznf$m^8eyys_rxxa!Cuba|)soQgb$b{y-tEpy45i5noEE1Akdqu(+<^!^$Cvdv zvR9w>G(Pmk#ViJWQL<^@%VhWay2Kr7#D^z*ap$dS*xY57P^ApFb z+to>8Kay-hVedKv1c+PCECZ+x^)-L|&_5ifxt2eZQzMe~=l5$BOT~zE}s}J_(U)aa6 zmR`RMzn3Virk3IN;!UjsldYPq$|G)Jp*7!Wao9)ojFAOi*rgOv((b{htqFy_IC<6- z$Qg766QK#}Kz>Vx*QquReC?As7|eeq8$7T;IDV??4gS`0~df gQI#1dnHhKt533rHy2fB#;{*0`EHqi!9_bVR1KW1hegFUf delta 1870 zcma)-T}&KR6vvr`Ss3<{VH13)C9N-NEGfIo;N=P|9oSeO zj32~iNk$($V@xVZK{S5F&#gXC+xTG82Oo@4lLisf_~e7ZsKKB~@tm2REo@ig11E>W zz32b?-?{hj>AgEg#An2p=fWR}D>W`>COb8gomJG{%;W^D)SR@jslx9y1wnj~`I!dG zp0M19*#Z+-HQUd+SoiS&tlNj+o4QDNh1HJe-AvLXRT)=QWjdqipvRuopTerhR=_UB zg?At+^~06gp!gOxdINr_Jq+(j@s`UuwvTBj|Q#aU0c*n-(I$@?y1ws=c^ zIG1KiFjPO_WoxGV+aSV?Ux|Z~FnAt!j?(fdjp1H8q`K{W=K}!#cLO0v^XB z9=2&furCeebs*(dTydS0dn+khT3YMqkTRB4Q{jPRcyN3m31{kq#~eacRT&hwYE0Io z(iZ)By?9Eyi_Fg(;H0k|PDpYxS>#Wa^K%!fkcAS9+aw4%B0>_5IDGq)dWyA==qxg# zYj!-~oI0WNFm0nVH|=s4OnZ97Ac{&T8vVa^6C{=}><(72Yt?q!O;oa*&{6ql$u9nC ze6GZ8b`Mpwn*g$#FzhBO**#Te_Ym6c7Y>ru%6IC9<7jBAf+MTOWLS0v;2~#JP>a}g z@PS)|H=T`;-m1P+Xo^1`O|fu zuXOGCYei@TeBVug9=POgtoHNQcVPyitD0vLFYLKq>&=&51Yfcse|FEwm&zcQ49E~d zE)t|@K*AY+7yROpT^EW|fgbDvI2!Uo0J`iU__*Qjx}ONl&u`GS7>*IXL4{kBB!aj2 zRqGZryZLgK;IJGM{(uQNitz=x4dc6Vhpoy6U&;5>+{6~}fG-M*P0euA+XqiH1{=1i zuQ{EfD6@rvJtAelk#qow`Q{#JbBZ{m! zmD1A&D}8;w38(!%t>2<|{v8GyD%LfiL*Ia9e@2MF*Pc)z8u(ifJ}oM@mI*CCQYZNl({Eolv(3H&G})Y z?J&ERXWMzBVcuw#HyY)QCV75>It=Gn3mwor>oGAF5aTM_V!xUU5t1?(9;D1*m@hGW OLK!jejlxXZknj)JZc07? 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 098131e6ab5beb2f9115c480f8c057bd95717ba3..724a296366168b07ab0fd88bebce94caad71a46b 100644 GIT binary patch delta 188 zcmeBL%hk1(YeS#>BsGP}Q{{ywACR9j`H;Ho&ds(%fReVjljwK zHG;wHy-MkmZI#`@?1!4glXJDqz-&L2zR7;tQj_^rZ&2CTWBsIy&LYlIZkI2uMd``^*%-*O_IeCt{{p4nK*~$0SizW*yg-+h8 zCOi4ChW})3&1|q5M`h>9bCt`%>_RQ0$$PXWf!RUYVw3q*Z&2CT<{<6%AZ^C&LE20f F*#LJlLjwQ+ diff --git a/docs/html/.doctrees/lorax-composer.doctree b/docs/html/.doctrees/lorax-composer.doctree deleted file mode 100644 index 7d200317ac6b095c9d433ae14b0614d962645cee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4153 zcmcgv-D)Jq6_$2)Mw(e^q}}xjlihVX!3o;UYGmxaFd+m&5{!`%!3l|NFg?}XHB*JU zyE^qFjV>1K3&Sqd-L{`0Ay)=JgTYUeXYg0me>0<%tg9Uu=sI=k{MC0(o%2=i+wtz2 z|JfZ?FrLrHBuR3SP*vK^M8qbexh`LokH0RTm-}`g$(a&H#wfe%F=Oy@zy`++*xp8 z|C`d=1flnAzaX$em+X#-h#eBGC6A1T7tZRNJWD2KUyP?Uggo+Hp-bM=C|N84EfB7`{ z)89TGB66ox24{@NEZ|v@Qg?$Y$b_W9loD+uRlz=;je|faEh&8pHZr4uDN;ca^)#S5 z9zPB~7iJifJW#mOG%(6(Zk#)aQx2^pPdqU`DY#xV=ZtGMe4U}=;O~@rHyUgahmb(X z%D39J;EYC!YdZV`)4EW|3u3Wn=j6DjYg3$hHUUqwAYKeKR=f476`bI8a&vg;ev4}4N~0&GKhok^>hnoL@gR<}Bd z-lVUtZ_+P+rW$mT?a#8-PN2x5cvHLuc%hnC3mJ6K6wPZ@md4ke+SlgLf}w)tw0o7|--9bEW#vs%yjlYe>Ka>;rk=H1 zt-quxajlW;Kd##S*ACk-C*{$4ZQ7pQyQC<0h3_(sN(8;K$UbF{*%S7=qg!D1kFklm z0~acI=htdy(Yob)8A8}i_p;Z*@m616>f6_!J#lB(?II z>!pz?R@+*{q3d7VF4Xm4mpm`+-Kh{d7n&|?9 z(4(YiCUJ4_Ek;YWBaB{_((_VE`)FlnMFji59aTa*1Dc}`mp4{U+Fj>>LX=qD&6RdL zCHc&t??Si}bkjG`MB96k#zH1xLJNQcYB-Q_Z2Pgur|=Qs;7M2@_4vGGeLEsXi?Acv z8ytw*PE1yWE$R?ePv8KY%t`75?sy79n=5zs9jQ>%BqE$=4o|yu?mF>s@uY`Htiw}| z{>HDq>Pc@KMY#S;V;C zDyMK`uK0vFePRk2<3=+-Z`HZ}5+D(=Yn!{|zw63@GSM>MF3lpEARo`6i&4BfFYWyp zgThHjGs4pl<01wMH&nf_H)(!a9-GK+R%HNr2Ndx<;lQ;Ht7pqkUw5DgsL+@f5u3!# zThCFbmZ;TC1~Q~g+l6~A-8cvOh9g$r`|L;d1N)wRXY9aH^?3n{T)+O~G5h|7Veh!_ zAMk2?$Np#R_Tt5PS=%v3QF6vWenoM~)$mnDFH$N#43fCMED~vp1<(4{3bExLEJ++R zTK%EBOY%`9rFK>M{;I5cXUz_g`mr!Bu}gb97HNtw!w1yjKz!Ld(OZFEyOk7c_^VdC;CK~?)t7JrB diff --git a/docs/html/.doctrees/lorax.doctree b/docs/html/.doctrees/lorax.doctree index 7ca6a136ede8bb4c852ab3e37ff9c948b0dd7e15..116094f5afa1f027d297ea080b14c81866070043 100644 GIT binary patch delta 218 zcmccjgXP-~7M2Fqsp=b9gamlG6p+AVF#+YtZUVE>L>~&MPZkxNj3&B5(0TI@!B|E# zVG@m){6lc!<`bfur!j7yT(f2=dr@j}X--M;W`(sc88t)`67=+;BKn!RiRr1u`UweB UGT39MWQg?$!sRwAuD9(405u^!#Q*>R delta 174 zcmezNgXP{27M2Fqsr(yRgajrl3n=q)DIkH#ZUVC>zY|cO{7^u2vaDeDZu6@BM!JCkvr=OXdn4Vg!pO7#mgFSXihFA}$ K-e$}7w!Hwd05n_x diff --git a/docs/html/.doctrees/modules.doctree b/docs/html/.doctrees/modules.doctree index 058edbcf8dd89153135c441c06f0ee22f5e2aca2..9b333c09f948e052e530af2de2e25b45c7271b11 100644 GIT binary patch delta 94 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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 43247e7ea363b6d689e1eb51c089756460237e09..ebf30d76707f6f9d6f60310a59ca9dfc189d2717 100644 GIT binary patch literal 577219 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 diff --git a/docs/html/README b/docs/html/README deleted file mode 100644 index 615e8738..00000000 --- a/docs/html/README +++ /dev/null @@ -1,5 +0,0 @@ -To build the docs for this branch run: -make test-in-docker -make docs-in-docker - -If you already have a welder/lorax-composer:latest docker image you can skip running 'test-in-docker'. diff --git a/docs/html/_modules/composer/cli.html b/docs/html/_modules/composer/cli.html deleted file mode 100644 index 3d065957..00000000 --- a/docs/html/_modules/composer/cli.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - composer.cli — Lorax 35.0 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 7133109f..00000000 --- a/docs/html/_modules/composer/cli/blueprints.html +++ /dev/null @@ -1,782 +0,0 @@ - - - - - - - - - - - composer.cli.blueprints — Lorax 35.0 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) - with open(toml_filename(blueprint), "w") as f: - f.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 - with open(blueprint, "r") as f: - blueprint_toml = f.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) - with open(frozen_toml_filename(blueprint), "w") as f: - f.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 - with open(blueprint, "r") as f: - blueprint_toml = f.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 42c7eff0..00000000 --- a/docs/html/_modules/composer/cli/cmdline.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - composer.cli.cmdline — Lorax 35.0 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 67e105c1..00000000 --- a/docs/html/_modules/composer/cli/compose.html +++ /dev/null @@ -1,906 +0,0 @@ - - - - - - - - - - - composer.cli.compose — Lorax 35.0 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 get_url(args): - """Return optional --url argument, and remaining args - - :param args: list of arguments - :type args: list of strings - :returns: (args, parent) - :rtype: tuple - """ - args, value = get_arg(args, "--url") - 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] [--url URL] <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 arguments before checking other parameters - try: - args, size = get_size(args) - args, parent = get_parent(args) - args, ref = get_ref(args) - args, url = get_url(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(url) > 0: - config["ostree"]["url"] = url - - 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 0e891472..00000000 --- a/docs/html/_modules/composer/cli/modules.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - - - composer.cli.modules — Lorax 35.0 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 635c9930..00000000 --- a/docs/html/_modules/composer/cli/projects.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - - - - composer.cli.projects — Lorax 35.0 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 ddca8dee..00000000 --- a/docs/html/_modules/composer/cli/providers.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - - - - - - - composer.cli.providers — Lorax 35.0 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]] - } - with open(toml_filename(args[1]), "w") as f: - f.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 2c5b7eda..00000000 --- a/docs/html/_modules/composer/cli/sources.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - composer.cli.sources — Lorax 35.0 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 - with open(source, "r") as f: - source_toml = f.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 8e5de5d7..00000000 --- a/docs/html/_modules/composer/cli/status.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - composer.cli.status — Lorax 35.0 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 4ebf0904..00000000 --- a/docs/html/_modules/composer/cli/upload.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - - - - - composer.cli.upload — Lorax 35.0 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 1548aeae..00000000 --- a/docs/html/_modules/composer/cli/utilities.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - - - - composer.cli.utilities — Lorax 35.0 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 69b73987..00000000 --- a/docs/html/_modules/composer/http_client.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - - - - - - - composer.http_client — Lorax 35.0 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 82ee83f0..00000000 --- a/docs/html/_modules/composer/unix_socket.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - composer.unix_socket — Lorax 35.0 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 3c94454e..c2b180fb 100644 --- a/docs/html/_modules/index.html +++ b/docs/html/_modules/index.html @@ -1,38 +1,38 @@ - - + - + - + + + Overview: module code — Lorax 35.1 documentation + + + + + + - Overview: module code — Lorax 35.0 documentation - + - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -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 2e4cf211..00000000 --- a/docs/html/_modules/lifted/providers.html +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - - - - - - lifted.providers — Lorax 35.0 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 ad8542ba..00000000 --- a/docs/html/_modules/lifted/queue.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - - - - - lifted.queue — Lorax 35.0 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 23513a4a..00000000 --- a/docs/html/_modules/lifted/upload.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - - - - - lifted.upload — Lorax 35.0 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 9f641757..f56a20cc 100644 --- a/docs/html/_modules/pylorax.html +++ b/docs/html/_modules/pylorax.html @@ -1,38 +1,38 @@ - - + - + - + + + pylorax — Lorax 35.1 documentation + + + + + + - pylorax — Lorax 35.0 documentation - + - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -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 fa4e44f4..00000000 --- a/docs/html/_modules/pylorax/api/checkparams.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - pylorax.api.checkparams — Lorax 35.0 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 7de7f4f2..00000000 --- a/docs/html/_modules/pylorax/api/cmdline.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - - - pylorax.api.cmdline — Lorax 35.0 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 1a129254..00000000 --- a/docs/html/_modules/pylorax/api/compose.html +++ /dev/null @@ -1,1467 +0,0 @@ - - - - - - - - - - - pylorax.api.compose — Lorax 35.0 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 bf8360c7..00000000 --- a/docs/html/_modules/pylorax/api/config.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - - - pylorax.api.config — Lorax 35.0 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 d566b473..00000000 --- a/docs/html/_modules/pylorax/api/dnfbase.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - - - - - pylorax.api.dnfbase — Lorax 35.0 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 fc737ac7..00000000 --- a/docs/html/_modules/pylorax/api/flask_blueprint.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - pylorax.api.flask_blueprint — Lorax 35.0 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 a94fa96d..00000000 --- a/docs/html/_modules/pylorax/api/gitrpm.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - - - - - - pylorax.api.gitrpm — Lorax 35.0 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 accccabf..00000000 --- a/docs/html/_modules/pylorax/api/projects.html +++ /dev/null @@ -1,897 +0,0 @@ - - - - - - - - - - - pylorax.api.projects — Lorax 35.0 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 545d0d4e..00000000 --- a/docs/html/_modules/pylorax/api/queue.html +++ /dev/null @@ -1,1063 +0,0 @@ - - - - - - - - - - - pylorax.api.queue — Lorax 35.0 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 98ad6aa6..00000000 --- a/docs/html/_modules/pylorax/api/recipes.html +++ /dev/null @@ -1,1476 +0,0 @@ - - - - - - - - - - - pylorax.api.recipes — Lorax 35.0 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 3a4c5a69..00000000 --- a/docs/html/_modules/pylorax/api/server.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - pylorax.api.server — Lorax 35.0 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 16aea740..00000000 --- a/docs/html/_modules/pylorax/api/timestamp.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - - - - pylorax.api.timestamp — Lorax 35.0 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 e391ab1a..00000000 --- a/docs/html/_modules/pylorax/api/toml.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - pylorax.api.toml — Lorax 35.0 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 e968ae30..00000000 --- a/docs/html/_modules/pylorax/api/utils.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - pylorax.api.utils — Lorax 35.0 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 8f62fb54..00000000 --- a/docs/html/_modules/pylorax/api/v0.html +++ /dev/null @@ -1,2197 +0,0 @@ - - - - - - - - - - - pylorax.api.v0 — Lorax 35.0 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 75879329..00000000 --- a/docs/html/_modules/pylorax/api/v1.html +++ /dev/null @@ -1,1242 +0,0 @@ - - - - - - - - - - - pylorax.api.v1 — Lorax 35.0 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 0d6cc6e3..00000000 --- a/docs/html/_modules/pylorax/api/workspace.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - pylorax.api.workspace — Lorax 35.0 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 885e0dc9..6ce6b2b9 100644 --- a/docs/html/_modules/pylorax/base.html +++ b/docs/html/_modules/pylorax/base.html @@ -1,38 +1,38 @@ - - + - + - + + + pylorax.base — Lorax 35.1 documentation + + + + + + - pylorax.base — Lorax 35.0 documentation - + - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -251,7 +259,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -250,7 +258,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -505,7 +513,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -940,7 +948,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -214,7 +222,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -229,7 +237,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -371,7 +379,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -294,7 +302,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -557,7 +565,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -749,7 +757,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
    -
  • Docs »
  • +
  • »
  • Module code »
  • @@ -478,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") @@ -843,20 +846,25 @@
- @@ -865,7 +873,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -1068,7 +1076,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -388,7 +396,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -288,7 +296,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -344,7 +352,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,11 +131,13 @@ + +
- @@ -607,7 +615,6 @@ - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -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] [--url url] <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 2f1bfb28..00000000 --- a/docs/html/composer.cli.html +++ /dev/null @@ -1,1520 +0,0 @@ - - - - - - - - - - - composer.cli package — Lorax 35.0 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] [--url URL] <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.compose.get_url(args)[source]
-

Return optional --url argument, and remaining args

-
-
Parameters
-

args (list of strings) -- list of arguments

-
-
Returns
-

(args, parent)

-
-
Return type
-

tuple

-
-
-
- -
-
-

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 f327301b..00000000 --- a/docs/html/composer.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - composer package — Lorax 35.0 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 1cfbeb02..5b5e4692 100644 --- a/docs/html/genindex.html +++ b/docs/html/genindex.html @@ -1,38 +1,38 @@ - - + - + - + + + Index — Lorax 35.1 documentation + + + + + + - Index — Lorax 35.0 documentation - + - - - - - - @@ -58,7 +58,7 @@
- 35.0 + 35.1
@@ -75,6 +75,7 @@ + + @@ -130,18 +131,20 @@ + +
- + + - @@ -561,8 +365,6 @@ @@ -681,8 +483,6 @@

M

-
  • composer-cli
  • mkksiso
  • Product and Updates Images
  • src
  • @@ -134,6 +134,7 @@ + @@ -168,18 +169,20 @@ + +
      -
    • Docs »
    • +
    • »
    • livemedia-creator
    • - + View page source @@ -225,14 +228,14 @@ you have the anaconda-tui package installed.

      livemedia-creator cmdline arguments

      Create Live Install Media

      -
      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] [--squashfs-only]
      -                         [--timeout TIMEOUT] [-V]
      +
      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] [--squashfs-only] [--timeout TIMEOUT] [-V]
       
      @@ -1045,29 +1048,29 @@ report bugs against the lorax component.

      -
      @@ -1076,7 +1079,6 @@ report bugs against the lorax component.

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

    lorax-composer

    -

    lorax-composer has been replaced by the osbuild-composer WELDR API -server which implements more features (eg. ostree, image uploads, etc.) You -can still use composer-cli and cockpit-composer with -osbuild-composer. See the documentation or the osbuild website for more information.

    -
    - - -
    - -
    - - -
    -
    - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/lorax.html b/docs/html/lorax.html index 0b8cc68d..1cf53560 100644 --- a/docs/html/lorax.html +++ b/docs/html/lorax.html @@ -1,38 +1,38 @@ - - + - + - + + + Lorax — Lorax 35.1 documentation + + + + + + - Lorax — Lorax 35.0 documentation - + - - - - - - @@ -60,7 +60,7 @@
    - 35.0 + 35.1
    @@ -77,6 +77,7 @@ + + @@ -158,18 +159,20 @@ + +
      -
    • Docs »
    • +
    • »
    • Lorax
    • - + View page source @@ -203,10 +206,10 @@ 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
       
      @@ -396,7 +399,7 @@ repositories.

      You can add your own repos with -s and packages with higher NVRs will override the ones in the distribution repositories.

      Under ./results/ will be the release tree files: .discinfo, .treeinfo, everything that -goes onto the boot.iso, the pxeboot directory, and the boot.iso under ./images/.

      +goes onto the boot.iso, the pxeboot directory, and the boot.iso under ./results/images/.

      Branding

      @@ -528,29 +531,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. -
    @@ -559,7 +562,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 454441f3..d5ca78b4 100644 --- a/docs/html/mkksiso.html +++ b/docs/html/mkksiso.html @@ -1,42 +1,42 @@ - - + - + - + + + mkksiso — Lorax 35.1 documentation + + + + + + - mkksiso — Lorax 35.0 documentation - + - - - - - - - + @@ -60,7 +60,7 @@
    - 35.0 + 35.1
    @@ -77,6 +77,7 @@ + + @@ -143,18 +144,20 @@ + +
    - @@ -339,7 +342,6 @@ will pass.

    - - - - - - - + @@ -60,7 +60,7 @@
    - 35.0 + 35.1
    @@ -77,6 +77,7 @@ + + @@ -136,18 +136,20 @@ + +
    @@ -254,7 +230,6 @@ - - - - - - @@ -60,7 +60,7 @@
    - 35.0 + 35.1
    @@ -77,6 +77,7 @@ + + @@ -132,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. - @@ -217,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 181f6fe9..7beeaf03 100644 --- a/docs/html/py-modindex.html +++ b/docs/html/py-modindex.html @@ -1,38 +1,38 @@ - - + - + - + + + Python Module Index — Lorax 35.1 documentation + + + + + + - Python Module Index — Lorax 35.0 documentation - + - - - - - - @@ -61,7 +61,7 @@
    - 35.0 + 35.1
    @@ -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 855cbc32..64f771e7 100644 --- a/docs/html/pylorax.html +++ b/docs/html/pylorax.html @@ -1,41 +1,41 @@ - - + - + - + + + pylorax package — Lorax 35.1 documentation + + + + + + - pylorax package — Lorax 35.0 documentation - + - - - - - - - + @@ -59,7 +59,7 @@
      - 35.0 + 35.1
      @@ -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]
        +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]
        +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]
        +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,7 +269,7 @@

        pylorax.creator module

        -class pylorax.creator.FakeDNF(conf)[source]
        +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 @@ -275,14 +277,14 @@ 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
        @@ -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
        @@ -323,7 +325,7 @@ this. Everything else should be a nop.

        -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
        @@ -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,7 +348,7 @@ 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
        @@ -366,7 +368,7 @@ has been used.

        -pylorax.creator.get_arch(mount_dir)[source]
        +pylorax.creator.get_arch(mount_dir)[source]

        Get the kernel arch

        Returns
        @@ -380,7 +382,7 @@ has been used.

        -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
        @@ -394,7 +396,7 @@ has been used.

        -pylorax.creator.make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, vcpus=1, arch=None, title='Linux', project='Linux', releasever='34')[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
        @@ -417,7 +419,7 @@ 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
        @@ -439,7 +441,7 @@ 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
        @@ -463,7 +465,7 @@ 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
        @@ -487,7 +489,7 @@ 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
        @@ -509,7 +511,7 @@ root=live:CDLABEL=<volid> rd.live.image

        -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,7 +520,7 @@ 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
        @@ -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
        @@ -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]
      +class pylorax.discinfo.DiscInfo(release, basearch)[source]

      Bases: object

      -write(outfile)[source]
      +write(outfile)[source]
      @@ -598,7 +600,7 @@ 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='34', 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
      @@ -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]
      +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 @@ -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]
      +class pylorax.imgutils.DMDev(dev, size, name=None)[source]

      Bases: object

      -class pylorax.imgutils.LoopDev(filename, size=None)[source]
      +class pylorax.imgutils.LoopDev(filename, size=None)[source]

      Bases: object

      -class pylorax.imgutils.Mount(dev, opts='', mnt=None)[source]
      +class pylorax.imgutils.Mount(dev, opts='', mnt=None)[source]

      Bases: object

      -class pylorax.imgutils.PartitionMount(disk_img, mount_ok=None, submount=None)[source]
      +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,7 +872,7 @@ 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
      @@ -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,19 +912,19 @@ 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
      @@ -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,7 +997,7 @@ 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.

      @@ -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,7 +1038,7 @@ 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
      @@ -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,25 +1099,25 @@ raises CalledProcessError if umount fails.

      pylorax.installer module

      -exception pylorax.installer.InstallError[source]
      +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]
      +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
      @@ -1134,7 +1136,7 @@ other mountpoints.

      -pylorax.installer.append_initrd(initrd, files)[source]
      +pylorax.installer.append_initrd(initrd, files)[source]

      Append files to an initrd.

      Parameters
      @@ -1159,7 +1161,7 @@ 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
      @@ -1173,7 +1175,7 @@ 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
      @@ -1194,7 +1196,7 @@ cpio archive.

      -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
      @@ -1213,7 +1215,7 @@ 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
      @@ -1232,7 +1234,7 @@ 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
      @@ -1248,7 +1250,7 @@ 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
      @@ -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]
      +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,7 +1664,7 @@ KEY = ARG ARG ...

      -class pylorax.ltmpl.TemplateRunner(fatalerrors=True, templatedir=None, defaults=None, builtins=None)[source]
      +class pylorax.ltmpl.TemplateRunner(fatalerrors=True, templatedir=None, defaults=None, builtins=None)[source]

      Bases: object

      This class parses and executes Lorax templates. Sample usage:

      @@ -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]
      +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,7 +1736,7 @@ there to be a listener on the port used for the virtio log port.

      -class pylorax.monitor.LogRequestHandler(request, client_address, server)[source]
      +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 @@ -1742,12 +1744,12 @@ 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,7 +1758,7 @@ 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
      @@ -1768,30 +1770,30 @@ 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', 'Error in POSTIN scriptlet in rpm package']
      +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]
      +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
      @@ -1805,7 +1807,7 @@ errors that indicate that the install failed.

      -timeout = 60
      +timeout = 60
      @@ -1815,7 +1817,7 @@ errors that indicate that the install failed.

      pylorax.mount module

      -class pylorax.mount.IsoMountpoint(iso_path, initrd_path=None)[source]
      +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 @@ -1823,14 +1825,14 @@ 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]
      +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]
      +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]
      +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,7 +2104,7 @@ 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
      @@ -2122,18 +2124,18 @@ 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
      @@ -2153,27 +2155,28 @@ lowest numbered directory entry is returned.

      - @@ -2182,7 +2185,6 @@ lowest numbered directory entry is returned.

      - - - - - - + @@ -60,7 +61,7 @@
      - 35.0 + 35.1
      @@ -77,6 +78,7 @@ + + @@ -132,19 +134,19 @@ + +
        -
      • Docs »
      • +
      • »
      • Search
      • - -
      @@ -158,8 +160,7 @@ @@ -173,20 +174,25 @@
      - @@ -195,7 +201,6 @@ -