Compare commits
14 Commits
master
...
f33-branch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
391c63a4be | ||
|
|
341be5add2 | ||
|
|
60188d5809 | ||
|
|
cce83b6354 | ||
|
|
2c58a0bc14 | ||
|
|
8bea79d1d3 | ||
|
|
ea65f428dc | ||
|
|
49190376ce | ||
|
|
9ead517ec4 | ||
|
|
727dc5e5d5 | ||
|
|
f231e915bd | ||
|
|
ffc49fe3c8 | ||
|
|
3cf3a18c5e | ||
|
|
a589a4d28e |
@ -1,5 +1,3 @@
|
|||||||
[paths]
|
[paths]
|
||||||
source = .
|
source = .
|
||||||
/lorax/
|
/lorax/
|
||||||
[run]
|
|
||||||
relative_files = True
|
|
||||||
|
|||||||
28
.github/workflows/tests.yml
vendored
28
.github/workflows/tests.yml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: Tests and Coverage
|
|
||||||
# Make sure only one action triggers the job, otherwise pushing to a
|
|
||||||
# pull-request will run it twice.
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- rhel8-branch
|
|
||||||
- rhel7-branch
|
|
||||||
- f31-branch
|
|
||||||
- f32-branch
|
|
||||||
- f33-branch
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
unit-tests:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: "Clone Repository"
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: Run lorax tests in podman
|
|
||||||
run: sudo make test-in-podman && cp .test-results/.coverage .coverage
|
|
||||||
- name: Coveralls
|
|
||||||
uses: AndreMiras/coveralls-python-action@develop
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
18
.tasks
Normal file
18
.tasks
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# When run automated, randomize to minimize stampeding herd
|
||||||
|
if [ -t 0 ]; then
|
||||||
|
chance=10
|
||||||
|
else
|
||||||
|
chance=$(shuf -i 0-10 -n 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $chance -gt 9 ]; then
|
||||||
|
# command lines representing pending work. one will be executed
|
||||||
|
# randomly by the calling environment
|
||||||
|
echo "./tests/cleanup/remove_old_objects_alibaba.sh"
|
||||||
|
echo "./tests/cleanup/remove_old_objects_aws.sh"
|
||||||
|
echo "./tests/cleanup/remove_old_objects_azure.sh"
|
||||||
|
echo "./tests/cleanup/remove_old_objects_openstack.sh"
|
||||||
|
echo "./tests/cleanup/remove_old_objects_vmware.sh"
|
||||||
|
fi
|
||||||
24
.travis.yml
Normal file
24
.travis.yml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
sudo: required
|
||||||
|
language: python
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
env:
|
||||||
|
- DOCKER=docker
|
||||||
|
|
||||||
|
script:
|
||||||
|
- make test-in-docker
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- |
|
||||||
|
|
||||||
|
cp .test-results/.coverage ./.coverage.docker
|
||||||
|
|
||||||
|
pip install coverage coveralls
|
||||||
|
coverage combine
|
||||||
|
coveralls
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email:
|
||||||
|
on_failure: change
|
||||||
|
on_success: never
|
||||||
@ -1,4 +1,4 @@
|
|||||||
FROM registry.fedoraproject.org/fedora:rawhide
|
FROM registry.fedoraproject.org/fedora:33
|
||||||
COPY test-packages .
|
COPY test-packages .
|
||||||
RUN dnf -y install $(cat test-packages) && touch /.in-container
|
RUN dnf -y install $(cat test-packages) && touch /.in-container
|
||||||
RUN useradd weldr
|
RUN useradd weldr
|
||||||
|
|||||||
@ -25,6 +25,7 @@ To run the broader unit and integration tests we use:
|
|||||||
|
|
||||||
$ make test
|
$ make test
|
||||||
|
|
||||||
The tests may also be run using a podman container:
|
Some of the tests will be skipped unless a lorax-composer process is running
|
||||||
|
and listening on an accessible socket. Either run lorax-composer from the
|
||||||
|
checkout, or the installed version.
|
||||||
|
|
||||||
$ make test-in-podman
|
|
||||||
|
|||||||
70
Makefile
70
Makefile
@ -3,9 +3,9 @@ DESTDIR ?= /
|
|||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
mandir ?= $(PREFIX)/share/man
|
mandir ?= $(PREFIX)/share/man
|
||||||
DOCKER ?= podman
|
DOCKER ?= podman
|
||||||
PODMAN ?= $(DOCKER)
|
|
||||||
DOCS_VERSION ?= next
|
DOCS_VERSION ?= next
|
||||||
RUN_TESTS ?= ci
|
RUN_TESTS ?= ci
|
||||||
|
BACKEND ?= lorax-composer
|
||||||
|
|
||||||
PKGNAME = lorax
|
PKGNAME = lorax
|
||||||
VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec)
|
VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec)
|
||||||
@ -28,10 +28,13 @@ endif
|
|||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
|
src/composer/version.py: lorax.spec
|
||||||
|
echo "num = '$(VERSION)-$(RELEASE)'" > src/composer/version.py
|
||||||
|
|
||||||
src/pylorax/version.py: lorax.spec
|
src/pylorax/version.py: lorax.spec
|
||||||
echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py
|
echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py
|
||||||
|
|
||||||
all: src/pylorax/version.py
|
all: src/pylorax/version.py src/composer/version.py
|
||||||
$(PYTHON) setup.py build
|
$(PYTHON) setup.py build
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
@ -39,19 +42,33 @@ install: all
|
|||||||
mkdir -p $(DESTDIR)/$(mandir)/man1
|
mkdir -p $(DESTDIR)/$(mandir)/man1
|
||||||
install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1
|
install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1
|
||||||
mkdir -p $(DESTDIR)/etc/bash_completion.d
|
mkdir -p $(DESTDIR)/etc/bash_completion.d
|
||||||
|
install -m 644 etc/bash_completion.d/composer-cli $(DESTDIR)/etc/bash_completion.d
|
||||||
|
|
||||||
check:
|
check:
|
||||||
@echo "*** Running pylint ***"
|
@echo "*** Running pylint ***"
|
||||||
PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py
|
PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py
|
||||||
|
@echo "*** Running yamllint ***"
|
||||||
|
./tests/lint-playbooks.sh
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@echo "*** Running tests ***"
|
@echo "*** Running tests ***"
|
||||||
PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -X dev -m pytest -v --cov-branch \
|
PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -m pytest -v --cov-branch \
|
||||||
--cov=pylorax ./tests/pylorax/ ./tests/image-minimizer/
|
--cov=pylorax --cov=lifted --cov=composer \
|
||||||
|
./tests/pylorax/ ./tests/composer/ ./tests/lifted/
|
||||||
|
|
||||||
coverage3 report -m
|
coverage3 report -m
|
||||||
[ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo
|
[ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo
|
||||||
|
|
||||||
|
# need `losetup`, which needs Docker to be in privileged mode (--privileged)
|
||||||
|
# but even so fails in Travis CI
|
||||||
|
test_images:
|
||||||
|
sudo -E ./tests/test_cli.sh tests/cli/test_compose_ext4-filesystem.sh \
|
||||||
|
tests/cli/test_compose_partitioned-disk.sh \
|
||||||
|
tests/cli/test_compose_tar.sh \
|
||||||
|
tests/cli/test_compose_tar_kickstart.sh \
|
||||||
|
tests/cli/test_compose_qcow2.sh \
|
||||||
|
tests/cli/test_compose_live-iso.sh
|
||||||
|
|
||||||
test_cli:
|
test_cli:
|
||||||
sudo -E ./tests/test_cli.sh
|
sudo -E ./tests/test_cli.sh
|
||||||
|
|
||||||
@ -70,6 +87,7 @@ clean_cloud_envs:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -rf build src/pylorax/version.py
|
-rm -rf build src/pylorax/version.py
|
||||||
|
-rm -rf build src/composer/version.py
|
||||||
|
|
||||||
tag:
|
tag:
|
||||||
git tag -f $(TAG)
|
git tag -f $(TAG)
|
||||||
@ -79,7 +97,7 @@ docs:
|
|||||||
|
|
||||||
# This is needed to reset the ownership of the new docs files after they are created in a container
|
# This is needed to reset the ownership of the new docs files after they are created in a container
|
||||||
set-docs-owner:
|
set-docs-owner:
|
||||||
sudo chown -R $(LOCAL_UID):$(LOCAL_GID) docs/
|
chown -R $(LOCAL_UID):$(LOCAL_GID) docs/
|
||||||
|
|
||||||
archive:
|
archive:
|
||||||
@git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar
|
@git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar
|
||||||
@ -104,39 +122,25 @@ local:
|
|||||||
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
||||||
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
||||||
|
|
||||||
local-srpm: local $(PKGNAME).spec
|
|
||||||
rpmbuild -bs \
|
|
||||||
--define "_sourcedir $(CURDIR)" \
|
|
||||||
--define "_srcrpmdir $(CURDIR)" \
|
|
||||||
lorax.spec
|
|
||||||
|
|
||||||
test-in-copy:
|
test-in-copy:
|
||||||
rsync -a --exclude=.git /lorax-ro/ /lorax/
|
rsync -aP --exclude=.git /lorax-ro/ /lorax/
|
||||||
make -C /lorax/ $(RUN_TESTS)
|
make -C /lorax/ $(RUN_TESTS)
|
||||||
cp /lorax/.coverage /test-results/
|
cp /lorax/.coverage /test-results/
|
||||||
|
|
||||||
test-in-docker: test-in-podman
|
test-in-docker:
|
||||||
|
sudo $(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test .
|
||||||
test-in-podman:
|
|
||||||
$(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test .
|
|
||||||
@mkdir -p `pwd`/.test-results
|
@mkdir -p `pwd`/.test-results
|
||||||
$(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results \
|
sudo $(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results \
|
||||||
-v `pwd`:/lorax-ro:ro --security-opt label=disable \
|
-v `pwd`:/lorax-ro:ro --security-opt label=disable \
|
||||||
--env RUN_TESTS="$(RUN_TESTS)" \
|
--env RUN_TESTS="$(RUN_TESTS)" \
|
||||||
welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy
|
welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy
|
||||||
# rootless podman leaves them owned by the container UID
|
|
||||||
$(MAKE) set-docs-owner
|
|
||||||
|
|
||||||
docs-in-docker: docs-in-podman
|
docs-in-docker:
|
||||||
|
sudo $(DOCKER) run -it --rm -v `pwd`:/lorax-ro:ro \
|
||||||
docs-in-podman:
|
|
||||||
$(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test .
|
|
||||||
$(DOCKER) run -it --rm -v `pwd`:/lorax-ro:ro \
|
|
||||||
-v `pwd`/docs/:/lorax-ro/docs/ \
|
-v `pwd`/docs/:/lorax-ro/docs/ \
|
||||||
--env LORAX_VERSION=$(DOCS_VERSION) \
|
--env LORAX_VERSION=$(DOCS_VERSION) \
|
||||||
--env LOCAL_UID=`id -u` --env LOCAL_GID=`id -g` \
|
--env LOCAL_UID=`id -u` --env LOCAL_GID=`id -g` \
|
||||||
--security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs
|
--security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs set-docs-owner
|
||||||
|
|
||||||
|
|
||||||
ci: check test
|
ci: check test
|
||||||
|
|
||||||
@ -150,7 +154,7 @@ $(VM_IMAGE): srpm bots
|
|||||||
--upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \
|
--upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \
|
||||||
--upload $(realpath tests):/ \
|
--upload $(realpath tests):/ \
|
||||||
--run-command "chmod +x /var/tmp/vm.install" \
|
--run-command "chmod +x /var/tmp/vm.install" \
|
||||||
--run-command "cd /var/tmp; /var/tmp/vm.install $$srpm" \
|
--run-command "cd /var/tmp; BACKEND=$(BACKEND) /var/tmp/vm.install $$srpm" \
|
||||||
$(TEST_OS)
|
$(TEST_OS)
|
||||||
[ -f ~/.config/lorax-test-env ] && bots/image-customize \
|
[ -f ~/.config/lorax-test-env ] && bots/image-customize \
|
||||||
--upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \
|
--upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \
|
||||||
@ -165,6 +169,16 @@ vm: $(VM_IMAGE)
|
|||||||
# and update the image. Mostly used when testing downstream snapshots to make
|
# and update the image. Mostly used when testing downstream snapshots to make
|
||||||
# sure VM_IMAGE is as close as possible to the host!
|
# sure VM_IMAGE is as close as possible to the host!
|
||||||
vm-local-repos: vm
|
vm-local-repos: vm
|
||||||
|
bots/image-customize -v \
|
||||||
|
--run-command "rm -rf /etc/yum.repos.d" \
|
||||||
|
$(TEST_OS)
|
||||||
|
bots/image-customize -v \
|
||||||
|
--upload $(REPOS_DIR):/etc/yum.repos.d \
|
||||||
|
--run-command "yum -y remove composer-cli $(BACKEND)" \
|
||||||
|
--run-command "yum -y update" \
|
||||||
|
--run-command "yum -y install composer-cli $(BACKEND)" \
|
||||||
|
--run-command "systemctl enable $(BACKEND).socket" \
|
||||||
|
$(TEST_OS)
|
||||||
|
|
||||||
vm-reset:
|
vm-reset:
|
||||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
||||||
@ -181,4 +195,4 @@ bots:
|
|||||||
ci_after_success:
|
ci_after_success:
|
||||||
# nothing to do here, but Jenkins expects this to be present, otherwise fails
|
# nothing to do here, but Jenkins expects this to be present, otherwise fails
|
||||||
|
|
||||||
.PHONY: docs check test srpm vm vm-reset docs-in-docker docs-in-podman test-in-docker test-in-podman
|
.PHONY: docs check test srpm vm vm-reset
|
||||||
|
|||||||
@ -2,5 +2,6 @@ Lorax is a set of tools used to create bootable images.
|
|||||||
|
|
||||||
* lorax - creates the Anaconda boot.iso used to install Fedora
|
* lorax - creates the Anaconda boot.iso used to install Fedora
|
||||||
* livemedia-creator - uses Anaconda to create bootable images
|
* livemedia-creator - uses Anaconda to create bootable images
|
||||||
|
* lorax-composer - API server implementing the Weldr BDCS protocol using livemedia-creator
|
||||||
|
|
||||||
See the [Weldr blog](https://weldr.io) for more info about BDCS and the [Lorax documentation](https://weldr.io/lorax) for more information about Lorax and associated tools.
|
See the [Weldr blog](https://weldr.io) for more info about BDCS and the [Lorax documentation](https://weldr.io/lorax) for more information about Lorax and associated tools.
|
||||||
|
|||||||
203
docs/composer-cli.rst
Normal file
203
docs/composer-cli.rst
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
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.
|
||||||
|
`lorax-composer <lorax-composer.html>` and `osbuild-composer
|
||||||
|
<https://osbuild.org>` both implement compatible servers.
|
||||||
|
|
||||||
|
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. They do not need to be
|
||||||
|
root, but all of the `security precautions <lorax-composer.html#security>`_
|
||||||
|
apply.
|
||||||
|
|
||||||
|
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``. If there are no blueprints available you can
|
||||||
|
copy one of the examples `from the test suite
|
||||||
|
<https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_.
|
||||||
|
|
||||||
|
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``.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
``lorax-composer`` and ``osbuild-composer`` handle this differently, with
|
||||||
|
``osbuild-composer`` you can currently 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.
|
||||||
101
docs/composer.cli.rst
Normal file
101
docs/composer.cli.rst
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
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:
|
||||||
37
docs/composer.rst
Normal file
37
docs/composer.rst
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
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:
|
||||||
@ -265,8 +265,9 @@ latex_documents = [
|
|||||||
man_pages = [
|
man_pages = [
|
||||||
('lorax', 'lorax', u'Lorax Documentation', [u'Weldr Team'], 1),
|
('lorax', 'lorax', u'Lorax Documentation', [u'Weldr Team'], 1),
|
||||||
('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Weldr Team'], 1),
|
('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Weldr Team'], 1),
|
||||||
|
('lorax-composer', 'lorax-composer', u'Lorax Composer 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),
|
('mkksiso', 'mkksiso', u'Make Kickstart ISO Utility Documentation', [u'Weldr Team'], 1),
|
||||||
('image-minimizer', 'image-minimizer', u'Utility script to remove files and packages', [u'Weldr Team'], 1),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
# If true, show URL addresses after external links.
|
||||||
|
|||||||
@ -13,6 +13,8 @@ keyboard --xlayouts=us --vckeymap=us
|
|||||||
lang en_US.UTF-8
|
lang en_US.UTF-8
|
||||||
# SELinux configuration
|
# SELinux configuration
|
||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
# Installation logging level
|
||||||
|
logging --level=info
|
||||||
# Shutdown after installation
|
# Shutdown after installation
|
||||||
shutdown
|
shutdown
|
||||||
# System timezone
|
# System timezone
|
||||||
|
|||||||
@ -18,7 +18,7 @@ network --bootproto=dhcp --device=link --activate
|
|||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
|
||||||
# System services
|
# System services
|
||||||
services --disabled="sshd" --enabled="NetworkManager,ModemManager"
|
services --disabled="network,sshd" --enabled="NetworkManager,ModemManager"
|
||||||
|
|
||||||
# livemedia-creator modifications.
|
# livemedia-creator modifications.
|
||||||
shutdown
|
shutdown
|
||||||
@ -63,14 +63,21 @@ livedir="LiveOS"
|
|||||||
for arg in \`cat /proc/cmdline\` ; do
|
for arg in \`cat /proc/cmdline\` ; do
|
||||||
if [ "\${arg##rd.live.dir=}" != "\${arg}" ]; then
|
if [ "\${arg##rd.live.dir=}" != "\${arg}" ]; then
|
||||||
livedir=\${arg##rd.live.dir=}
|
livedir=\${arg##rd.live.dir=}
|
||||||
continue
|
return
|
||||||
fi
|
fi
|
||||||
if [ "\${arg##live_dir=}" != "\${arg}" ]; then
|
if [ "\${arg##live_dir=}" != "\${arg}" ]; then
|
||||||
livedir=\${arg##live_dir=}
|
livedir=\${arg##live_dir=}
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# enable swapfile unless requested otherwise
|
# enable swaps unless requested otherwise
|
||||||
|
swaps=\`blkid -t TYPE=swap -o device\`
|
||||||
|
if ! strstr "\`cat /proc/cmdline\`" noswap && [ -n "\$swaps" ] ; then
|
||||||
|
for s in \$swaps ; do
|
||||||
|
action "Enabling swap partition \$s" swapon \$s
|
||||||
|
done
|
||||||
|
fi
|
||||||
if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /run/initramfs/live/\${livedir}/swap.img ] ; then
|
if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /run/initramfs/live/\${livedir}/swap.img ] ; then
|
||||||
action "Enabling swap file" swapon /run/initramfs/live/\${livedir}/swap.img
|
action "Enabling swap file" swapon /run/initramfs/live/\${livedir}/swap.img
|
||||||
fi
|
fi
|
||||||
@ -115,6 +122,7 @@ findPersistentHome() {
|
|||||||
for arg in \`cat /proc/cmdline\` ; do
|
for arg in \`cat /proc/cmdline\` ; do
|
||||||
if [ "\${arg##persistenthome=}" != "\${arg}" ]; then
|
if [ "\${arg##persistenthome=}" != "\${arg}" ]; then
|
||||||
homedev=\${arg##persistenthome=}
|
homedev=\${arg##persistenthome=}
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@ -134,7 +142,7 @@ if [ -n "\$configdone" ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# add liveuser user with no passwd
|
# add fedora user with no passwd
|
||||||
action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser
|
action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser
|
||||||
passwd -d liveuser > /dev/null
|
passwd -d liveuser > /dev/null
|
||||||
usermod -aG wheel liveuser > /dev/null
|
usermod -aG wheel liveuser > /dev/null
|
||||||
@ -178,7 +186,9 @@ sed -i 's/rtcsync//' /etc/chrony.conf
|
|||||||
touch /.liveimg-configured
|
touch /.liveimg-configured
|
||||||
|
|
||||||
# add static hostname to work around xauth bug
|
# add static hostname to work around xauth bug
|
||||||
hostnamectl set-hostname "localhost-live"
|
# https://bugzilla.redhat.com/show_bug.cgi?id=679486
|
||||||
|
echo "localhost" > /etc/hostname
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# bah, hal starts way too late
|
# bah, hal starts way too late
|
||||||
@ -261,7 +271,7 @@ releasever=$(rpm -q --qf '%{version}\n' --whatprovides system-release)
|
|||||||
basearch=$(uname -i)
|
basearch=$(uname -i)
|
||||||
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
|
||||||
echo "Packages within this LiveCD"
|
echo "Packages within this LiveCD"
|
||||||
rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn
|
rpm -qa
|
||||||
# Note that running rpm recreates the rpm db files which aren't needed or wanted
|
# Note that running rpm recreates the rpm db files which aren't needed or wanted
|
||||||
rm -f /var/lib/rpm/__db*
|
rm -f /var/lib/rpm/__db*
|
||||||
|
|
||||||
@ -271,23 +281,18 @@ rm -f /var/lib/rpm/__db*
|
|||||||
# make sure there aren't core files lying around
|
# make sure there aren't core files lying around
|
||||||
rm -f /core*
|
rm -f /core*
|
||||||
|
|
||||||
# remove random seed, the newly installed instance should make it's own
|
|
||||||
rm -f /var/lib/systemd/random-seed
|
|
||||||
|
|
||||||
# convince readahead not to collect
|
# convince readahead not to collect
|
||||||
# FIXME: for systemd
|
# FIXME: for systemd
|
||||||
|
|
||||||
echo 'File created by kickstart. See systemd-update-done.service(8).' \
|
echo 'File created by kickstart. See systemd-update-done.service(8).' \
|
||||||
| tee /etc/.updated >/var/.updated
|
| tee /etc/.updated >/var/.updated
|
||||||
|
|
||||||
|
# Remove random-seed
|
||||||
|
rm /var/lib/systemd/random-seed
|
||||||
|
|
||||||
# Remove the rescue kernel and image to save space
|
# Remove the rescue kernel and image to save space
|
||||||
# Installation will recreate these on the target
|
# Installation will recreate these on the target
|
||||||
rm -f /boot/*-rescue*
|
rm -f /boot/*-rescue*
|
||||||
|
|
||||||
# Remove machine-id on pre generated images
|
|
||||||
rm -f /etc/machine-id
|
|
||||||
touch /etc/machine-id
|
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
%post
|
%post
|
||||||
@ -313,18 +318,6 @@ FOE
|
|||||||
mkdir ~liveuser/.config
|
mkdir ~liveuser/.config
|
||||||
touch ~liveuser/.config/gnome-initial-setup-done
|
touch ~liveuser/.config/gnome-initial-setup-done
|
||||||
|
|
||||||
# suppress anaconda spokes redundant with gnome-initial-setup
|
|
||||||
cat >> /etc/sysconfig/anaconda << FOE
|
|
||||||
[NetworkSpoke]
|
|
||||||
visited=1
|
|
||||||
|
|
||||||
[PasswordSpoke]
|
|
||||||
visited=1
|
|
||||||
|
|
||||||
[UserSpoke]
|
|
||||||
visited=1
|
|
||||||
FOE
|
|
||||||
|
|
||||||
# make the installer show up
|
# make the installer show up
|
||||||
if [ -f /usr/share/applications/liveinst.desktop ]; then
|
if [ -f /usr/share/applications/liveinst.desktop ]; then
|
||||||
# Show harddisk install in shell dash
|
# Show harddisk install in shell dash
|
||||||
@ -334,7 +327,7 @@ if [ -f /usr/share/applications/liveinst.desktop ]; then
|
|||||||
|
|
||||||
cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE
|
cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE
|
||||||
[org.gnome.shell]
|
[org.gnome.shell]
|
||||||
favorite-apps=['firefox.desktop', 'org.gnome.Calendar.desktop', 'rhythmbox.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop', 'anaconda.desktop']
|
favorite-apps=['firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'anaconda.desktop']
|
||||||
FOE
|
FOE
|
||||||
|
|
||||||
# Make the welcome screen show up
|
# Make the welcome screen show up
|
||||||
@ -344,11 +337,6 @@ FOE
|
|||||||
cp /usr/share/anaconda/gnome/fedora-welcome.desktop ~liveuser/.config/autostart/
|
cp /usr/share/anaconda/gnome/fedora-welcome.desktop ~liveuser/.config/autostart/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Disable GNOME welcome tour so it doesn't overlap with Fedora welcome screen
|
|
||||||
cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE
|
|
||||||
welcome-dialog-last-shown-version='4294967295'
|
|
||||||
FOE
|
|
||||||
|
|
||||||
# Copy Anaconda branding in place
|
# Copy Anaconda branding in place
|
||||||
if [ -d /usr/share/lorax/product/usr/share/anaconda ]; then
|
if [ -d /usr/share/lorax/product/usr/share/anaconda ]; then
|
||||||
cp -a /usr/share/lorax/product/* /
|
cp -a /usr/share/lorax/product/* /
|
||||||
@ -379,11 +367,21 @@ EOF
|
|||||||
%end
|
%end
|
||||||
|
|
||||||
%packages
|
%packages
|
||||||
@^workstation-product-environment
|
|
||||||
@anaconda-tools
|
@anaconda-tools
|
||||||
|
@base-x
|
||||||
|
@core
|
||||||
|
@firefox
|
||||||
|
@fonts
|
||||||
|
@guest-desktop-agents
|
||||||
|
@hardware-support
|
||||||
|
@libreoffice
|
||||||
|
@multimedia
|
||||||
|
@networkmanager-submodules
|
||||||
|
@printing
|
||||||
|
@workstation-product
|
||||||
|
gnome-terminal
|
||||||
aajohan-comfortaa-fonts
|
aajohan-comfortaa-fonts
|
||||||
anaconda
|
anaconda
|
||||||
anaconda-install-env-deps
|
|
||||||
anaconda-live
|
anaconda-live
|
||||||
dracut-config-generic
|
dracut-config-generic
|
||||||
dracut-live
|
dracut-live
|
||||||
@ -392,12 +390,13 @@ kernel
|
|||||||
# Make sure that DNF doesn't pull in debug kernel to satisfy kmod() requires
|
# Make sure that DNF doesn't pull in debug kernel to satisfy kmod() requires
|
||||||
kernel-modules
|
kernel-modules
|
||||||
kernel-modules-extra
|
kernel-modules-extra
|
||||||
|
memtest86+
|
||||||
syslinux
|
syslinux
|
||||||
-@dial-up
|
-@dial-up
|
||||||
-@input-methods
|
-@input-methods
|
||||||
-@standard
|
-@standard
|
||||||
-gfs2-utils
|
-gfs2-utils
|
||||||
-gnome-boxes
|
-reiserfs-utils
|
||||||
|
|
||||||
# This package is needed to boot the iso on UEFI
|
# This package is needed to boot the iso on UEFI
|
||||||
shim
|
shim
|
||||||
|
|||||||
@ -16,6 +16,8 @@ keyboard --xlayouts=us --vckeymap=us
|
|||||||
lang en_US.UTF-8
|
lang en_US.UTF-8
|
||||||
# SELinux configuration
|
# SELinux configuration
|
||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
# Installation logging level
|
||||||
|
logging --level=info
|
||||||
# Shutdown after installation
|
# Shutdown after installation
|
||||||
shutdown
|
shutdown
|
||||||
# System timezone
|
# System timezone
|
||||||
@ -44,6 +46,7 @@ kernel
|
|||||||
kernel-modules
|
kernel-modules
|
||||||
kernel-modules-extra
|
kernel-modules-extra
|
||||||
|
|
||||||
|
memtest86+
|
||||||
grub2-efi
|
grub2-efi
|
||||||
grub2
|
grub2
|
||||||
shim
|
shim
|
||||||
|
|||||||
@ -16,6 +16,8 @@ keyboard --xlayouts=us --vckeymap=us
|
|||||||
lang en_US.UTF-8
|
lang en_US.UTF-8
|
||||||
# SELinux configuration
|
# SELinux configuration
|
||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
# Installation logging level
|
||||||
|
logging --level=info
|
||||||
# Shutdown after installation
|
# Shutdown after installation
|
||||||
shutdown
|
shutdown
|
||||||
# System timezone
|
# System timezone
|
||||||
@ -43,6 +45,7 @@ kernel
|
|||||||
kernel-modules
|
kernel-modules
|
||||||
kernel-modules-extra
|
kernel-modules-extra
|
||||||
|
|
||||||
|
memtest86+
|
||||||
grub2-efi
|
grub2-efi
|
||||||
grub2
|
grub2
|
||||||
shim
|
shim
|
||||||
|
|||||||
@ -15,6 +15,8 @@ keyboard --xlayouts=us --vckeymap=us
|
|||||||
lang en_US.UTF-8
|
lang en_US.UTF-8
|
||||||
# SELinux configuration
|
# SELinux configuration
|
||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
# Installation logging level
|
||||||
|
logging --level=info
|
||||||
# Shutdown after installation
|
# Shutdown after installation
|
||||||
shutdown
|
shutdown
|
||||||
# System timezone
|
# System timezone
|
||||||
@ -40,6 +42,7 @@ kernel
|
|||||||
kernel-modules
|
kernel-modules
|
||||||
kernel-modules-extra
|
kernel-modules-extra
|
||||||
|
|
||||||
|
memtest86+
|
||||||
grub2-efi
|
grub2-efi
|
||||||
grub2
|
grub2
|
||||||
shim
|
shim
|
||||||
|
|||||||
@ -21,6 +21,8 @@ keyboard --xlayouts=us --vckeymap=us
|
|||||||
lang en_US.UTF-8
|
lang en_US.UTF-8
|
||||||
# SELinux configuration
|
# SELinux configuration
|
||||||
selinux --enforcing
|
selinux --enforcing
|
||||||
|
# Installation logging level
|
||||||
|
logging --level=info
|
||||||
# Shutdown after installation
|
# Shutdown after installation
|
||||||
shutdown
|
shutdown
|
||||||
# System timezone
|
# System timezone
|
||||||
@ -52,6 +54,7 @@ kernel
|
|||||||
kernel-modules
|
kernel-modules
|
||||||
kernel-modules-extra
|
kernel-modules-extra
|
||||||
|
|
||||||
|
memtest86+
|
||||||
grub2-efi
|
grub2-efi
|
||||||
grub2
|
grub2
|
||||||
shim
|
shim
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Sphinx build info version 1
|
# 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.
|
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||||
config: 3dbb02a107cfe7acde05f2a0794f42a8
|
config: 9b3b905a33a257ccd41a2e1f4238d37b
|
||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
|
|||||||
BIN
docs/html/.doctrees/composer-cli.doctree
Normal file
BIN
docs/html/.doctrees/composer-cli.doctree
Normal file
Binary file not shown.
BIN
docs/html/.doctrees/composer.cli.doctree
Normal file
BIN
docs/html/.doctrees/composer.cli.doctree
Normal file
Binary file not shown.
BIN
docs/html/.doctrees/composer.doctree
Normal file
BIN
docs/html/.doctrees/composer.doctree
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/html/.doctrees/lifted.doctree
Normal file
BIN
docs/html/.doctrees/lifted.doctree
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/html/.doctrees/lorax-composer.doctree
Normal file
BIN
docs/html/.doctrees/lorax-composer.doctree
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/html/.doctrees/pylorax.api.doctree
Normal file
BIN
docs/html/.doctrees/pylorax.api.doctree
Normal file
Binary file not shown.
Binary file not shown.
5
docs/html/README
Normal file
5
docs/html/README
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
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'.
|
||||||
259
docs/html/_modules/composer/cli.html
Normal file
259
docs/html/_modules/composer/cli.html
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># composer-cli</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.blueprints</span> <span class="kn">import</span> <span class="n">blueprints_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.modules</span> <span class="kn">import</span> <span class="n">modules_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.projects</span> <span class="kn">import</span> <span class="n">projects_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.compose</span> <span class="kn">import</span> <span class="n">compose_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.sources</span> <span class="kn">import</span> <span class="n">sources_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.status</span> <span class="kn">import</span> <span class="n">status_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.upload</span> <span class="kn">import</span> <span class="n">upload_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.providers</span> <span class="kn">import</span> <span class="n">providers_cmd</span>
|
||||||
|
|
||||||
|
<span class="n">command_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"blueprints"</span><span class="p">:</span> <span class="n">blueprints_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"modules"</span><span class="p">:</span> <span class="n">modules_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"projects"</span><span class="p">:</span> <span class="n">projects_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"compose"</span><span class="p">:</span> <span class="n">compose_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"sources"</span><span class="p">:</span> <span class="n">sources_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"status"</span><span class="p">:</span> <span class="n">status_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"upload"</span><span class="p">:</span> <span class="n">upload_cmd</span><span class="p">,</span>
|
||||||
|
<span class="s2">"providers"</span><span class="p">:</span> <span class="n">providers_cmd</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../composer.cli.html#composer.cli.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">""" Main program execution</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="c1"># Making sure opts.args is not empty (thus, has a command and subcommand)</span>
|
||||||
|
<span class="c1"># is already handled in src/bin/composer-cli.</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">command_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown command </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">command_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]](</span><span class="n">opts</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
779
docs/html/_modules/composer/cli/blueprints.html
Normal file
779
docs/html/_modules/composer/cli/blueprints.html
Normal file
@ -0,0 +1,779 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.blueprints — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.blueprints</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.blueprints</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">blueprints_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">argify</span><span class="p">,</span> <span class="n">frozen_toml_filename</span><span class="p">,</span> <span class="n">toml_filename</span><span class="p">,</span> <span class="n">handle_api_result</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">packageNEVRA</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_cmd">[docs]</a><span class="k">def</span> <span class="nf">blueprints_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process blueprints commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> This dispatches the blueprints commands to a function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">blueprints_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"show"</span><span class="p">:</span> <span class="n">blueprints_show</span><span class="p">,</span>
|
||||||
|
<span class="s2">"changes"</span><span class="p">:</span> <span class="n">blueprints_changes</span><span class="p">,</span>
|
||||||
|
<span class="s2">"diff"</span><span class="p">:</span> <span class="n">blueprints_diff</span><span class="p">,</span>
|
||||||
|
<span class="s2">"save"</span><span class="p">:</span> <span class="n">blueprints_save</span><span class="p">,</span>
|
||||||
|
<span class="s2">"delete"</span><span class="p">:</span> <span class="n">blueprints_delete</span><span class="p">,</span>
|
||||||
|
<span class="s2">"depsolve"</span><span class="p">:</span> <span class="n">blueprints_depsolve</span><span class="p">,</span>
|
||||||
|
<span class="s2">"push"</span><span class="p">:</span> <span class="n">blueprints_push</span><span class="p">,</span>
|
||||||
|
<span class="s2">"freeze"</span><span class="p">:</span> <span class="n">blueprints_freeze</span><span class="p">,</span>
|
||||||
|
<span class="s2">"tag"</span><span class="p">:</span> <span class="n">blueprints_tag</span><span class="p">,</span>
|
||||||
|
<span class="s2">"undo"</span><span class="p">:</span> <span class="n">blueprints_undo</span><span class="p">,</span>
|
||||||
|
<span class="s2">"workspace"</span><span class="p">:</span> <span class="n">blueprints_workspace</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">blueprints_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown blueprints command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_list">[docs]</a><span class="k">def</span> <span class="nf">blueprints_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Output the list of available blueprints</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints list</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/list"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json_unlimited</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="c1"># "list" should output a plain list of identifiers, one per line.</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_show"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_show">[docs]</a><span class="k">def</span> <span class="nf">blueprints_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Show the blueprints, in TOML format</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints show <blueprint,...> Display the blueprint in TOML format.</span>
|
||||||
|
|
||||||
|
<span class="sd"> Multiple blueprints will be separated by \n\n</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/info/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_changes"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_changes">[docs]</a><span class="k">def</span> <span class="nf">blueprints_changes</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Display the changes for each of the blueprints</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints changes <blueprint,...> Display the changes for each blueprint.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="nf">changes_total_fn</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the maximum number of possible changes"""</span>
|
||||||
|
|
||||||
|
<span class="c1"># Each blueprint can have a different total, return the largest one</span>
|
||||||
|
<span class="k">return</span> <span class="nb">max</span><span class="p">([</span><span class="n">c</span><span class="p">[</span><span class="s2">"total"</span><span class="p">]</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]])</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/changes/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json_unlimited</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">total_fn</span><span class="o">=</span><span class="n">changes_total_fn</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"name"</span><span class="p">])</span>
|
||||||
|
<span class="k">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"changes"</span><span class="p">]:</span>
|
||||||
|
<span class="n">prettyCommitDetails</span><span class="p">(</span><span class="n">change</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="prettyCommitDetails"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.prettyCommitDetails">[docs]</a><span class="k">def</span> <span class="nf">prettyCommitDetails</span><span class="p">(</span><span class="n">change</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Print the blueprint's change in a nice way</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param change: The individual blueprint change dict</span>
|
||||||
|
<span class="sd"> :type change: dict</span>
|
||||||
|
<span class="sd"> :param indent: Number of spaces to indent</span>
|
||||||
|
<span class="sd"> :type indent: int</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="nf">revision</span><span class="p">():</span>
|
||||||
|
<span class="k">if</span> <span class="n">change</span><span class="p">[</span><span class="s2">"revision"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">" revision </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">change</span><span class="p">[</span><span class="s2">"revision"</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">""</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">*</span> <span class="n">indent</span> <span class="o">+</span> <span class="n">change</span><span class="p">[</span><span class="s2">"timestamp"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">change</span><span class="p">[</span><span class="s2">"commit"</span><span class="p">]</span> <span class="o">+</span> <span class="n">revision</span><span class="p">())</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">*</span> <span class="n">indent</span> <span class="o">+</span> <span class="n">change</span><span class="p">[</span><span class="s2">"message"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_diff"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_diff">[docs]</a><span class="k">def</span> <span class="nf">blueprints_diff</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Display the differences between 2 versions of a blueprint</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints diff <blueprint-name> Display the differences between 2 versions of a blueprint.</span>
|
||||||
|
<span class="sd"> <from-commit> Commit hash or NEWEST</span>
|
||||||
|
<span class="sd"> <to-commit> Commit hash, NEWEST, or WORKSPACE</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"blueprints diff is missing the blueprint name, from commit, and to commit"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"blueprints diff is missing the from commit, and the to commit"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"blueprints diff is missing the to commit"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/diff/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">diff</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"diff"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">pretty_diff_entry</span><span class="p">(</span><span class="n">diff</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pretty_dict"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.pretty_dict">[docs]</a><span class="k">def</span> <span class="nf">pretty_dict</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the dict as a human readable single line</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param d: key/values</span>
|
||||||
|
<span class="sd"> :type d: dict</span>
|
||||||
|
<span class="sd"> :returns: String of the dict's keys and values</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> key="str", key="str1,str2", ...</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">d</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">]))</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([])</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])))</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([])</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])))</span>
|
||||||
|
<span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dict_names"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.dict_names">[docs]</a><span class="k">def</span> <span class="nf">dict_names</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return comma-separated list of the dict's name/user fields</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param d: key/values</span>
|
||||||
|
<span class="sd"> :type d: dict</span>
|
||||||
|
<span class="sd"> :returns: String of the dict's keys and values</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> root, norm</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"user"</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
|
<span class="n">field_name</span> <span class="o">=</span> <span class="s2">"user"</span>
|
||||||
|
<span class="k">elif</span> <span class="s2">"name"</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
|
<span class="n">field_name</span> <span class="o">=</span> <span class="s2">"name"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Use first fields in sorted keys</span>
|
||||||
|
<span class="n">field_name</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">field_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pretty_diff_entry"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.pretty_diff_entry">[docs]</a><span class="k">def</span> <span class="nf">pretty_diff_entry</span><span class="p">(</span><span class="n">diff</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Generate nice diff entry string.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param diff: Difference entry dict</span>
|
||||||
|
<span class="sd"> :type diff: dict</span>
|
||||||
|
<span class="sd"> :returns: Nice string</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span> <span class="ow">and</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span>
|
||||||
|
<span class="n">change</span> <span class="o">=</span> <span class="s2">"Changed"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]:</span>
|
||||||
|
<span class="n">change</span> <span class="o">=</span> <span class="s2">"Added"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span>
|
||||||
|
<span class="n">change</span> <span class="o">=</span> <span class="s2">"Removed"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">change</span> <span class="o">=</span> <span class="s2">"Unknown"</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]:</span>
|
||||||
|
<span class="n">name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span>
|
||||||
|
<span class="n">name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">name</span> <span class="o">=</span> <span class="s2">"Unknown"</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="n">diff</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Changed"</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">"Description"</span> <span class="ow">or</span> <span class="s2">" "</span> <span class="ow">in</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s1">'"</span><span class="si">%s</span><span class="s1">" -> "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">],</span>
|
||||||
|
<span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span>
|
||||||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="c1"># Lists of dicts are too long to display in detail, just show their names</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"Unknown"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Added"</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Group"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span>
|
||||||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="c1"># Lists of dicts are too long to display in detail, just show their names</span>
|
||||||
|
<span class="k">return</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="k">return</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"unknown/todo: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Removed"</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Group"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span>
|
||||||
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="c1"># Lists of dicts are too long to display in detail, just show their names</span>
|
||||||
|
<span class="k">return</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span>
|
||||||
|
<span class="k">return</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"unknown/todo: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">change</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">details</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_save">[docs]</a><span class="k">def</span> <span class="nf">blueprints_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Save the blueprint to a TOML file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints save <blueprint,...> Save the blueprint to a file, <blueprint-name>.toml</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/info/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="n">blueprint_toml</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">toml_filename</span><span class="p">(</span><span class="n">blueprint</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">blueprint_toml</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_delete">[docs]</a><span class="k">def</span> <span class="nf">blueprints_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a blueprint from the server</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> delete <blueprint> Delete a blueprint from the server</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_depsolve"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_depsolve">[docs]</a><span class="k">def</span> <span class="nf">blueprints_depsolve</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Display the packages needed to install the blueprint</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints depsolve <blueprint,...> Display the packages needed to install the blueprint.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/depsolve/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]:</span>
|
||||||
|
<span class="k">if</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"version"</span><span class="p">,</span> <span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2"> v</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]))</span>
|
||||||
|
<span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"dependencies"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">packageNEVRA</span><span class="p">(</span><span class="n">dep</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_push"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_push">[docs]</a><span class="k">def</span> <span class="nf">blueprints_push</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Push a blueprint TOML file to the server, updating the blueprint</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> push <blueprint> Push a blueprint TOML file to the server.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/new"</span><span class="p">)</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">blueprint</span><span class="p">):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing blueprint file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">blueprint_toml</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">blueprint_toml</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rval</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_freeze"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Handle the blueprints freeze commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints freeze <blueprint,...> Display the frozen blueprint's modules and packages.</span>
|
||||||
|
<span class="sd"> blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format.</span>
|
||||||
|
<span class="sd"> blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"show"</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">blueprints_freeze_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">elif</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"save"</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">blueprints_freeze_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze is missing the blueprint name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]:</span>
|
||||||
|
<span class="n">blueprint</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">blueprint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"version"</span><span class="p">,</span> <span class="s2">""</span><span class="p">):</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2"> v</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"modules"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">m</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"packages"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_freeze_show"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze_show">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Show the frozen blueprint in TOML format</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze show is missing the blueprint name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_freeze_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze_save">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Save the frozen blueprint to a TOML file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze save is missing the blueprint name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="n">blueprint_toml</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">frozen_toml_filename</span><span class="p">(</span><span class="n">blueprint</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">blueprint_toml</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_tag"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_tag">[docs]</a><span class="k">def</span> <span class="nf">blueprints_tag</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Tag the most recent blueprint commit as a release</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints tag <blueprint> Tag the most recent blueprint commit as a release.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/tag/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_undo"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_undo">[docs]</a><span class="k">def</span> <span class="nf">blueprints_undo</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Undo changes to a blueprint</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints undo <blueprint> <commit> Undo changes to a blueprint by reverting to the selected commit.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"undo is missing the blueprint name and commit hash"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"undo is missing commit hash"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/undo/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprints_workspace"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_workspace">[docs]</a><span class="k">def</span> <span class="nf">blueprints_workspace</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Push the blueprint TOML to the temporary workspace storage</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> blueprints workspace <blueprint> Push the blueprint TOML to the temporary workspace storage.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/workspace"</span><span class="p">)</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">blueprint</span><span class="p">):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing blueprint file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">)</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">blueprint_toml</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">blueprint_toml</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rval</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
251
docs/html/_modules/composer/cli/cmdline.html
Normal file
251
docs/html/_modules/composer/cli/cmdline.html
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.cmdline — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.cmdline</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.cmdline</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">argparse</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">vernum</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">epilog</span>
|
||||||
|
|
||||||
|
<span class="n">VERSION</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2">-</span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">vernum</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="composer_cli_parser"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.cmdline.composer_cli_parser">[docs]</a><span class="k">def</span> <span class="nf">composer_cli_parser</span><span class="p">():</span>
|
||||||
|
<span class="sd">""" Return the ArgumentParser for composer-cli"""</span>
|
||||||
|
|
||||||
|
<span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">"Lorax Composer commandline tool"</span><span class="p">,</span>
|
||||||
|
<span class="n">epilog</span><span class="o">=</span><span class="n">epilog</span><span class="p">,</span>
|
||||||
|
<span class="n">formatter_class</span><span class="o">=</span><span class="n">argparse</span><span class="o">.</span><span class="n">RawDescriptionHelpFormatter</span><span class="p">,</span>
|
||||||
|
<span class="n">fromfile_prefix_chars</span><span class="o">=</span><span class="s2">"@"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-j"</span><span class="p">,</span> <span class="s2">"--json"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Output the raw JSON response instead of the normal output."</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-s"</span><span class="p">,</span> <span class="s2">"--socket"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/run/weldr/api.socket"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"SOCKET"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to the socket file to listen on"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--log"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"logfile"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"LOG"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to logfile (./composer-cli.log)"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--api"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"api_version"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"1"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"APIVER"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"API Version to use"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--test"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"testmode"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"TESTMODE"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Pass test mode to compose. 1=Mock compose with fail. 2=Mock compose with finished."</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-V"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"showver"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"show program's version number and exit"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Commands are implemented by parsing the remaining arguments outside of argparse</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'args'</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="n">argparse</span><span class="o">.</span><span class="n">REMAINDER</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">parser</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
892
docs/html/_modules/composer/cli/compose.html
Normal file
892
docs/html/_modules/composer/cli/compose.html
Normal file
@ -0,0 +1,892 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.compose — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.compose</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.compose</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018-2020 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">toml</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">compose_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">argify</span><span class="p">,</span> <span class="n">handle_api_result</span><span class="p">,</span> <span class="n">packageNEVRA</span><span class="p">,</span> <span class="n">get_arg</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_cmd">[docs]</a><span class="k">def</span> <span class="nf">compose_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process compose commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> This dispatches the compose commands to a function</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose_cmd expects api to be passed. eg.</span>
|
||||||
|
|
||||||
|
<span class="sd"> {"version": 1, "backend": "lorax-composer"}</span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="s2">"/api/status"</span><span class="p">)</span>
|
||||||
|
<span class="c1"># Get the api version and fall back to 0 if it fails.</span>
|
||||||
|
<span class="n">api_version</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"api"</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">)</span>
|
||||||
|
<span class="n">backend</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"backend"</span><span class="p">,</span> <span class="s2">"unknown"</span><span class="p">)</span>
|
||||||
|
<span class="n">api</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"version"</span><span class="p">:</span> <span class="n">api_version</span><span class="p">,</span> <span class="s2">"backend"</span><span class="p">:</span> <span class="n">backend</span><span class="p">}</span>
|
||||||
|
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">compose_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"status"</span><span class="p">:</span> <span class="n">compose_status</span><span class="p">,</span>
|
||||||
|
<span class="s2">"types"</span><span class="p">:</span> <span class="n">compose_types</span><span class="p">,</span>
|
||||||
|
<span class="s2">"start"</span><span class="p">:</span> <span class="n">compose_start</span><span class="p">,</span>
|
||||||
|
<span class="s2">"log"</span><span class="p">:</span> <span class="n">compose_log</span><span class="p">,</span>
|
||||||
|
<span class="s2">"cancel"</span><span class="p">:</span> <span class="n">compose_cancel</span><span class="p">,</span>
|
||||||
|
<span class="s2">"delete"</span><span class="p">:</span> <span class="n">compose_delete</span><span class="p">,</span>
|
||||||
|
<span class="s2">"info"</span><span class="p">:</span> <span class="n">compose_info</span><span class="p">,</span>
|
||||||
|
<span class="s2">"metadata"</span><span class="p">:</span> <span class="n">compose_metadata</span><span class="p">,</span>
|
||||||
|
<span class="s2">"results"</span><span class="p">:</span> <span class="n">compose_results</span><span class="p">,</span>
|
||||||
|
<span class="s2">"logs"</span><span class="p">:</span> <span class="n">compose_logs</span><span class="p">,</span>
|
||||||
|
<span class="s2">"image"</span><span class="p">:</span> <span class="n">compose_image</span><span class="p">,</span>
|
||||||
|
<span class="s2">"start-ostree"</span><span class="p">:</span> <span class="n">compose_ostree</span><span class="p">,</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">compose_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown compose command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="n">api</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_size"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.get_size">[docs]</a><span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return optional --size argument, and remaining args</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param args: list of arguments</span>
|
||||||
|
<span class="sd"> :type args: list of strings</span>
|
||||||
|
<span class="sd"> :returns: (args, size)</span>
|
||||||
|
<span class="sd"> :rtype: tuple</span>
|
||||||
|
|
||||||
|
<span class="sd"> - check size argument for int</span>
|
||||||
|
<span class="sd"> - check other args for --size in wrong place</span>
|
||||||
|
<span class="sd"> - raise error? Or just return 0?</span>
|
||||||
|
<span class="sd"> - no size returns 0 in size</span>
|
||||||
|
<span class="sd"> - multiply by 1024**2 to make it easier on users to specify large sizes</span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">get_arg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s2">"--size"</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
|
||||||
|
<span class="n">value</span> <span class="o">=</span> <span class="n">value</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="mi">0</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_parent"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.get_parent">[docs]</a><span class="k">def</span> <span class="nf">get_parent</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return optional --parent argument, and remaining args</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param args: list of arguments</span>
|
||||||
|
<span class="sd"> :type args: list of strings</span>
|
||||||
|
<span class="sd"> :returns: (args, parent)</span>
|
||||||
|
<span class="sd"> :rtype: tuple</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">get_arg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s2">"--parent"</span><span class="p">)</span>
|
||||||
|
<span class="n">value</span> <span class="o">=</span> <span class="n">value</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_ref"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.get_ref">[docs]</a><span class="k">def</span> <span class="nf">get_ref</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return optional --ref argument, and remaining args</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param args: list of arguments</span>
|
||||||
|
<span class="sd"> :type args: list of strings</span>
|
||||||
|
<span class="sd"> :returns: (args, parent)</span>
|
||||||
|
<span class="sd"> :rtype: tuple</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">get_arg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="s2">"--ref"</span><span class="p">)</span>
|
||||||
|
<span class="n">value</span> <span class="o">=</span> <span class="n">value</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_list">[docs]</a><span class="k">def</span> <span class="nf">compose_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a simple list of compose identifiers"""</span>
|
||||||
|
|
||||||
|
<span class="n">states</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"running"</span><span class="p">,</span> <span class="s2">"waiting"</span><span class="p">,</span> <span class="s2">"finished"</span><span class="p">,</span> <span class="s2">"failed"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">which</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">a</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">states</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="c1"># TODO: error about unknown state</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
|
||||||
|
<span class="n">which</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">states</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">which</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"running"</span> <span class="ow">in</span> <span class="n">which</span> <span class="ow">or</span> <span class="s2">"waiting"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/queue"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"running"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span>
|
||||||
|
<span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"run"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"waiting"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span>
|
||||||
|
<span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"finished"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"failed"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/failed"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"failed"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">list_fmt</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{id}</span><span class="s2"> </span><span class="si">{queue_status}</span><span class="s2"> </span><span class="si">{blueprint}</span><span class="s2"> </span><span class="si">{version}</span><span class="s2"> </span><span class="si">{compose_type}</span><span class="s2">"</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">list_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">results</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_status"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_status">[docs]</a><span class="k">def</span> <span class="nf">compose_status</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the status of all known composes</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> This doesn't map directly to an API command, it combines the results from queue, finished,</span>
|
||||||
|
<span class="sd"> and failed so raw JSON output is not available.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="n">compose</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"blueprint"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"version"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"image_size"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"status"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"created"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_created"</span><span class="p">),</span>
|
||||||
|
<span class="s2">"started"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_started"</span><span class="p">),</span>
|
||||||
|
<span class="s2">"finished"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_finished"</span><span class="p">)}</span>
|
||||||
|
|
||||||
|
<span class="c1"># Sort the status in a specific order</span>
|
||||||
|
<span class="k">def</span> <span class="nf">sort_status</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
|
||||||
|
<span class="n">order</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"RUNNING"</span><span class="p">,</span> <span class="s2">"WAITING"</span><span class="p">,</span> <span class="s2">"FINISHED"</span><span class="p">,</span> <span class="s2">"FAILED"</span><span class="p">]</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">order</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="s2">"status"</span><span class="p">]),</span> <span class="n">a</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span> <span class="n">a</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">a</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Get the composes currently in the queue</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/queue"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"run"</span><span class="p">]</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"new"</span><span class="p">])))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Get the list of finished composes</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">])))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Get the list of failed composes</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/failed"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"failed"</span><span class="p">])))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Sort them by status (running, waiting, finished, failed) and then by name and version.</span>
|
||||||
|
<span class="n">status</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_status</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="c1"># Print them as UUID blueprint STATUS</span>
|
||||||
|
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">status</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">c</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">image_size</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">image_size</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
|
||||||
|
<span class="n">dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"finished"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"started"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"created"</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-16s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="n">c</span><span class="p">[</span><span class="s2">"status"</span><span class="p">],</span> <span class="n">dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%c</span><span class="s2">"</span><span class="p">),</span> <span class="n">c</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span>
|
||||||
|
<span class="n">c</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">c</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span> <span class="n">image_size</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_types"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_types">[docs]</a><span class="k">def</span> <span class="nf">compose_types</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return information about the supported compose types</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> Add additional details to types that are known to composer-cli. Raw JSON output does not</span>
|
||||||
|
<span class="sd"> include this extra information.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/types"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="c1"># output a plain list of identifiers, one per line</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"types"</span><span class="p">]</span> <span class="k">if</span> <span class="n">t</span><span class="p">[</span><span class="s2">"enabled"</span><span class="p">]))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_start"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_start">[docs]</a><span class="k">def</span> <span class="nf">compose_start</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Start a new compose using the selected blueprint and type</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
<span class="sd"> :param api: Details about the API server, "version" and "backend"</span>
|
||||||
|
<span class="sd"> :type api: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose start [--size XXX] <blueprint-name> <compose-type> [<image-name> <provider> <profile> | <image-name> <profile.toml>]</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">api</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing api version/backend"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="c1"># Get the optional size before checking other parameters</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="p">(</span><span class="ne">RuntimeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the blueprint name and output type"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the output type"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the provider and profile details"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"blueprint_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||||
|
<span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||||
|
<span class="s2">"branch"</span><span class="p">:</span> <span class="s2">"master"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">api</span><span class="p">[</span><span class="s2">"backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"lorax-composer"</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"lorax-composer does not support --size, it will be ignored."</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]}</span>
|
||||||
|
<span class="c1"># profile TOML file (maybe)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||||
|
<span class="s2">"provider"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span>
|
||||||
|
<span class="s2">"profile"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">testmode</span><span class="p">:</span>
|
||||||
|
<span class="n">test_url</span> <span class="o">=</span> <span class="s2">"?test=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">testmode</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">test_url</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose"</span> <span class="o">+</span> <span class="n">test_url</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">config</span><span class="p">))</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Compose </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"build_id"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"upload_id"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span> <span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the upload queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_ostree"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_ostree">[docs]</a><span class="k">def</span> <span class="nf">compose_ostree</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Start a new ostree compose using the selected blueprint and type</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
<span class="sd"> :param api: Details about the API server, "version" and "backend"</span>
|
||||||
|
<span class="sd"> :type api: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose start-ostree [--size XXXX] [--parent PARENT] [--ref REF] <BLUEPRINT> <TYPE> [<IMAGE-NAME> <PROFILE.TOML>]</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">api</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing api version/backend"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">api</span><span class="p">[</span><span class="s2">"backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"lorax-composer"</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"lorax-composer doesn not support start-ostree."</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="c1"># Get the optional size before checking other parameters</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">parent</span> <span class="o">=</span> <span class="n">get_parent</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
|
<span class="n">args</span><span class="p">,</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">get_ref</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="p">(</span><span class="ne">RuntimeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the blueprint name, output type, and ostree details"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the output type"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the provider TOML file"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"blueprint_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||||
|
<span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||||
|
<span class="s2">"branch"</span><span class="p">:</span> <span class="s2">"master"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"ostree"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"ref"</span><span class="p">:</span> <span class="n">ref</span><span class="p">,</span> <span class="s2">"parent"</span><span class="p">:</span> <span class="n">parent</span><span class="p">},</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]}</span>
|
||||||
|
<span class="c1"># profile TOML file (maybe)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">testmode</span><span class="p">:</span>
|
||||||
|
<span class="n">test_url</span> <span class="o">=</span> <span class="s2">"?test=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">testmode</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">test_url</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose"</span> <span class="o">+</span> <span class="n">test_url</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">config</span><span class="p">))</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Compose </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"build_id"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"upload_id"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span> <span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the upload queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_log"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_log">[docs]</a><span class="k">def</span> <span class="nf">compose_log</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Show the last part of the compose log</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose log <uuid> [<size>kB]</span>
|
||||||
|
|
||||||
|
<span class="sd"> This will display the last 1kB of the compose's log file. Can be used to follow progress</span>
|
||||||
|
<span class="sd"> during the build.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"log is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">log_size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Log size must be an integer."</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">log_size</span> <span class="o">=</span> <span class="mi">1024</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/log/</span><span class="si">%s</span><span class="s2">?size=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">log_size</span><span class="p">))</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_cancel"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_cancel">[docs]</a><span class="k">def</span> <span class="nf">compose_cancel</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Cancel a running compose</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose cancel <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> This will cancel a running compose. It does nothing if the compose has finished.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"cancel is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/cancel/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_delete">[docs]</a><span class="k">def</span> <span class="nf">compose_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a finished compose's results</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose delete <uuid,...></span>
|
||||||
|
|
||||||
|
<span class="sd"> Delete the listed compose results. It will only delete results for composes that have finished</span>
|
||||||
|
<span class="sd"> or failed, not a running compose.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_info">[docs]</a><span class="k">def</span> <span class="nf">compose_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return detailed information about the compose</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose info <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> This returns information about the compose, including the blueprint and the dependencies.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">image_size</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">image_size</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-16s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"version"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span>
|
||||||
|
<span class="n">image_size</span><span class="p">))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Packages:"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"packages"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Modules:"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"modules"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">m</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Dependencies:"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"deps"</span><span class="p">][</span><span class="s2">"packages"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">packageNEVRA</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_metadata"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_metadata">[docs]</a><span class="k">def</span> <span class="nf">compose_metadata</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Download a tar file of the compose's metadata</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose metadata <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> Saves the metadata as uuid-metadata.tar</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"metadata is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/metadata/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_results"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_results">[docs]</a><span class="k">def</span> <span class="nf">compose_results</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Download a tar file of the compose's results</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose results <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> The results includes the metadata, output image, and logs.</span>
|
||||||
|
<span class="sd"> It is saved as uuid.tar</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"results is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/results/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_logs"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_logs">[docs]</a><span class="k">def</span> <span class="nf">compose_logs</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Download a tar of the compose's logs</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose logs <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> Saves the logs as uuid-logs.tar</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"logs is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/logs/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_image"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_image">[docs]</a><span class="k">def</span> <span class="nf">compose_image</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Download the compose's output image</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> compose image <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> This downloads only the result image, saving it as the image name, which depends on the type</span>
|
||||||
|
<span class="sd"> of compose that was selected.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"logs is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/image/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
249
docs/html/_modules/composer/cli/modules.html
Normal file
249
docs/html/_modules/composer/cli/modules.html
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.modules — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.modules</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.modules</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">modules_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">handle_api_result</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="modules_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.modules.modules_cmd">[docs]</a><span class="k">def</span> <span class="nf">modules_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process modules commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">modules_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"list"</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown modules command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/modules/list"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json_unlimited</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="c1"># "list" should output a plain list of identifiers, one per line.</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"modules"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
311
docs/html/_modules/composer/cli/projects.html
Normal file
311
docs/html/_modules/composer/cli/projects.html
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.projects — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.projects</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.projects</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">textwrap</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">projects_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">handle_api_result</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.projects.projects_cmd">[docs]</a><span class="k">def</span> <span class="nf">projects_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process projects commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">projects_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"info"</span><span class="p">:</span> <span class="n">projects_info</span><span class="p">,</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">projects_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown projects command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.projects.projects_list">[docs]</a><span class="k">def</span> <span class="nf">projects_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Output the list of available projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> projects list</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/list"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json_unlimited</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">proj</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"projects"</span><span class="p">]:</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="n">field</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"summary"</span><span class="p">,</span> <span class="s2">"homepage"</span><span class="p">,</span> <span class="s2">"description"</span><span class="p">)</span> <span class="k">if</span> <span class="n">proj</span><span class="p">[</span><span class="n">field</span><span class="p">]]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">title</span><span class="p">(),</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">proj</span><span class="p">[</span><span class="n">k</span><span class="p">],</span> <span class="n">subsequent_indent</span><span class="o">=</span><span class="s2">" "</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">+</span><span class="mi">2</span><span class="p">))))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.projects.projects_info">[docs]</a><span class="k">def</span> <span class="nf">projects_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Output info on a list of projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> projects info <project,...></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"projects info is missing the packages"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">proj</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"projects"</span><span class="p">]:</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="n">field</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"name"</span><span class="p">,</span> <span class="s2">"summary"</span><span class="p">,</span> <span class="s2">"homepage"</span><span class="p">,</span> <span class="s2">"description"</span><span class="p">)</span> <span class="k">if</span> <span class="n">proj</span><span class="p">[</span><span class="n">field</span><span class="p">]]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">title</span><span class="p">(),</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">proj</span><span class="p">[</span><span class="n">k</span><span class="p">],</span> <span class="n">subsequent_indent</span><span class="o">=</span><span class="s2">" "</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="o">+</span><span class="mi">2</span><span class="p">))))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Builds: "</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">build</span> <span class="ow">in</span> <span class="n">proj</span><span class="p">[</span><span class="s2">"builds"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%s%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2"> at </span><span class="si">%s</span><span class="s2"> for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">""</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">build</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">]</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">build</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">])</span> <span class="o">+</span> <span class="s2">":"</span><span class="p">,</span>
|
||||||
|
<span class="n">build</span><span class="p">[</span><span class="s2">"source"</span><span class="p">][</span><span class="s2">"version"</span><span class="p">],</span>
|
||||||
|
<span class="n">build</span><span class="p">[</span><span class="s2">"release"</span><span class="p">],</span>
|
||||||
|
<span class="n">build</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">],</span>
|
||||||
|
<span class="n">build</span><span class="p">[</span><span class="s2">"build_time"</span><span class="p">],</span>
|
||||||
|
<span class="n">build</span><span class="p">[</span><span class="s2">"changelog"</span><span class="p">]))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
523
docs/html/_modules/composer/cli/providers.html
Normal file
523
docs/html/_modules/composer/cli/providers.html
Normal file
@ -0,0 +1,523 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.providers — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.providers</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.providers</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">toml</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">providers_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">handle_api_result</span><span class="p">,</span> <span class="n">toml_filename</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_cmd">[docs]</a><span class="k">def</span> <span class="nf">providers_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process providers commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> This dispatches the providers commands to a function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">providers_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"info"</span><span class="p">:</span> <span class="n">providers_info</span><span class="p">,</span>
|
||||||
|
<span class="s2">"show"</span><span class="p">:</span> <span class="n">providers_show</span><span class="p">,</span>
|
||||||
|
<span class="s2">"push"</span><span class="p">:</span> <span class="n">providers_push</span><span class="p">,</span>
|
||||||
|
<span class="s2">"save"</span><span class="p">:</span> <span class="n">providers_save</span><span class="p">,</span>
|
||||||
|
<span class="s2">"delete"</span><span class="p">:</span> <span class="n">providers_delete</span><span class="p">,</span>
|
||||||
|
<span class="s2">"template"</span><span class="p">:</span> <span class="n">providers_template</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">providers_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown providers command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_list">[docs]</a><span class="k">def</span> <span class="nf">providers_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the list of providers</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers list</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_info">[docs]</a><span class="k">def</span> <span class="nf">providers_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Show information about each provider</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers info <PROVIDER></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the provider name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="n">p</span> <span class="o">=</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> supports these image types: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"display"</span><span class="p">],</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"supported_types"</span><span class="p">])))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Settings:"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">p</span><span class="p">[</span><span class="s2">"settings-info"</span><span class="p">]:</span>
|
||||||
|
<span class="n">f</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s2">"settings-info"</span><span class="p">][</span><span class="n">k</span><span class="p">]</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" </span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2"> is a </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">f</span><span class="p">[</span><span class="s2">"display"</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_show"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_show">[docs]</a><span class="k">def</span> <span class="nf">providers_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return details about a provider</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers show <provider> <profile></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"show is missing the provider name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"show is missing the profile name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid </span><span class="si">%s</span><span class="s2"> profile"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="c1"># Print the details for this profile</span>
|
||||||
|
<span class="c1"># fields are different for each provider, so we just print out the key:values</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">k</span><span class="p">]))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_push"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_push">[docs]</a><span class="k">def</span> <span class="nf">providers_push</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add a new provider profile or overwrite an existing one</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers push <profile.toml></span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"push is missing the profile TOML file"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing profile TOML file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers/save"</span><span class="p">)</span>
|
||||||
|
<span class="n">profile</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">profile</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_save">[docs]</a><span class="k">def</span> <span class="nf">providers_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Save a provider's profile to a TOML file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers save <provider> <profile></span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"save is missing the provider name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"save is missing the profile name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid </span><span class="si">%s</span><span class="s2"> profile"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">profile</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"provider"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||||
|
<span class="s2">"profile"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||||
|
<span class="s2">"settings"</span><span class="p">:</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">toml_filename</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">profile</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_delete">[docs]</a><span class="k">def</span> <span class="nf">providers_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a profile from a provider</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers delete <provider> <profile></span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the provider name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the profile name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers/delete/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="providers_template"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_template">[docs]</a><span class="k">def</span> <span class="nf">providers_template</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a TOML template for setting the provider's fields</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> providers template <provider></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"template is missing the provider name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">template</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"provider"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span>
|
||||||
|
<span class="n">settings</span> <span class="o">=</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"settings-info"</span><span class="p">]</span>
|
||||||
|
<span class="n">template</span><span class="p">[</span><span class="s2">"settings"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">k</span><span class="p">,</span> <span class="n">settings</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="s2">"display"</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">settings</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">template</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
353
docs/html/_modules/composer/cli/sources.html
Normal file
353
docs/html/_modules/composer/cli/sources.html
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.sources — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.sources</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.sources</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">sources_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">argify</span><span class="p">,</span> <span class="n">handle_api_result</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="sources_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.sources.sources_cmd">[docs]</a><span class="k">def</span> <span class="nf">sources_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process sources commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">sources_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"info"</span><span class="p">:</span> <span class="n">sources_info</span><span class="p">,</span>
|
||||||
|
<span class="s2">"add"</span><span class="p">:</span> <span class="n">sources_add</span><span class="p">,</span>
|
||||||
|
<span class="s2">"change"</span><span class="p">:</span> <span class="n">sources_add</span><span class="p">,</span>
|
||||||
|
<span class="s2">"delete"</span><span class="p">:</span> <span class="n">sources_delete</span><span class="p">,</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">sources_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown sources command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="sources_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.sources.sources_list">[docs]</a><span class="k">def</span> <span class="nf">sources_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Output the list of available sources</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> sources list</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/source/list"</span><span class="p">)</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="c1"># "list" should output a plain list of identifiers, one per line.</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"sources"</span><span class="p">]))</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="sources_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.sources.sources_info">[docs]</a><span class="k">def</span> <span class="nf">sources_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Output info on a list of projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> sources info <source-name></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"sources info is missing the name of the source"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/source/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/source/info/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="sources_add"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.sources.sources_add">[docs]</a><span class="k">def</span> <span class="nf">sources_add</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add or change a source</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> sources add <source.toml></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/source/new"</span><span class="p">)</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="k">for</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">source</span><span class="p">):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing source file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source</span><span class="p">)</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">source_toml</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">source_toml</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
|
||||||
|
<span class="n">rval</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
<span class="k">return</span> <span class="n">rval</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="sources_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.sources.sources_delete">[docs]</a><span class="k">def</span> <span class="nf">sources_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a source</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> sources delete <source-name></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/projects/source/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
257
docs/html/_modules/composer/cli/status.html
Normal file
257
docs/html/_modules/composer/cli/status.html
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.status — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.status</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.status</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">status_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">handle_api_result</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="status_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.status.status_cmd">[docs]</a><span class="k">def</span> <span class="nf">status_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process status commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">status_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"show"</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown status command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="s2">"/api/status"</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"API server status:"</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" Database version: "</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"db_version"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" Database supported: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"db_supported"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" Schema version: "</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"schema_version"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" API version: "</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"api"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" Backend: "</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"backend"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">" Build: "</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"build"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"msgs"</span><span class="p">]:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error messages:"</span><span class="p">)</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">" "</span> <span class="o">+</span> <span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"msgs"</span><span class="p">]]))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
478
docs/html/_modules/composer/cli/upload.html
Normal file
478
docs/html/_modules/composer/cli/upload.html
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.upload — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.upload</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.upload</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">toml</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer</span> <span class="kn">import</span> <span class="n">http_client</span> <span class="k">as</span> <span class="n">client</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="kn">import</span> <span class="n">upload_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="kn">import</span> <span class="n">handle_api_result</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_cmd">[docs]</a><span class="k">def</span> <span class="nf">upload_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Process upload commands</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param opts: Cmdline arguments</span>
|
||||||
|
<span class="sd"> :type opts: argparse.Namespace</span>
|
||||||
|
<span class="sd"> :returns: Value to return from sys.exit()</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> This dispatches the upload commands to a function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"list"</span><span class="p">:</span> <span class="n">upload_list</span><span class="p">,</span>
|
||||||
|
<span class="s2">"info"</span><span class="p">:</span> <span class="n">upload_info</span><span class="p">,</span>
|
||||||
|
<span class="s2">"start"</span><span class="p">:</span> <span class="n">upload_start</span><span class="p">,</span>
|
||||||
|
<span class="s2">"log"</span><span class="p">:</span> <span class="n">upload_log</span><span class="p">,</span>
|
||||||
|
<span class="s2">"cancel"</span><span class="p">:</span> <span class="n">upload_cancel</span><span class="p">,</span>
|
||||||
|
<span class="s2">"delete"</span><span class="p">:</span> <span class="n">upload_delete</span><span class="p">,</span>
|
||||||
|
<span class="s2">"reset"</span><span class="p">:</span> <span class="n">upload_reset</span><span class="p">,</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">upload_help</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown upload command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_list">[docs]</a><span class="k">def</span> <span class="nf">upload_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the composes and their associated upload uuids and status</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload list</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">compose_fmt</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{id}</span><span class="s2"> </span><span class="si">{queue_status}</span><span class="s2"> </span><span class="si">{blueprint}</span><span class="s2"> </span><span class="si">{version}</span><span class="s2"> </span><span class="si">{compose_type}</span><span class="s2">"</span>
|
||||||
|
<span class="n">upload_fmt</span> <span class="o">=</span> <span class="s1">' </span><span class="si">{uuid}</span><span class="s1"> "</span><span class="si">{image_name}</span><span class="s1">" </span><span class="si">{provider_name}</span><span class="s1"> </span><span class="si">{status}</span><span class="s1">'</span>
|
||||||
|
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">compose_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">c</span><span class="p">))</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">upload_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">u</span><span class="p">)</span> <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">c</span><span class="p">[</span><span class="s2">"uploads"</span><span class="p">]))</span>
|
||||||
|
<span class="nb">print</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_info">[docs]</a><span class="k">def</span> <span class="nf">upload_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return detailed information about the upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload info <uuid></span>
|
||||||
|
|
||||||
|
<span class="sd"> This returns information about the upload, including uuid, name, status, service, and image.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the upload uuid"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="n">image_path</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"image_path"</span><span class="p">]</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"uuid"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"status"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"image_name"</span><span class="p">],</span>
|
||||||
|
<span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"provider_name"</span><span class="p">],</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">image_path</span><span class="p">)</span> <span class="k">if</span> <span class="n">image_path</span> <span class="k">else</span> <span class="s2">"UNFINISHED"</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_start"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_start">[docs]</a><span class="k">def</span> <span class="nf">upload_start</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Start upload up a build uuid image</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload start <build-uuid> <image-name> [<provider> <profile> | <profile.toml>]</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the compose build id"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the image name"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the provider and profile details"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">body</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]}</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">body</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
|
||||||
|
<span class="n">body</span><span class="p">[</span><span class="s2">"provider"</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||||
|
<span class="n">body</span><span class="p">[</span><span class="s2">"profile"</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start has incorrect number of arguments"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/uploads/schedule/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">body</span><span class="p">))</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_log"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_log">[docs]</a><span class="k">def</span> <span class="nf">upload_log</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the upload log</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload log <build-uuid></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"log is missing the upload uuid"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/log/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">rc</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Upload log for </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"log"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_cancel"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_cancel">[docs]</a><span class="k">def</span> <span class="nf">upload_cancel</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Cancel the queued or running upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload cancel <build-uuid></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"cancel is missing the upload uuid"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/cancel/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_delete">[docs]</a><span class="k">def</span> <span class="nf">upload_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete an upload and remove it from the build</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload delete <build-uuid></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the upload uuid"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="upload_reset"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_reset">[docs]</a><span class="k">def</span> <span class="nf">upload_reset</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Reset the upload and execute it again</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param api_version: Version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param args: List of remaining arguments from the cmdline</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :param show_json: Set to True to show the JSON output instead of the human readable output</span>
|
||||||
|
<span class="sd"> :type show_json: bool</span>
|
||||||
|
<span class="sd"> :param testmode: unused in this function</span>
|
||||||
|
<span class="sd"> :type testmode: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> upload reset <build-uuid></span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"reset is missing the upload uuid"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/reset/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">({}))</span>
|
||||||
|
<span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
324
docs/html/_modules/composer/cli/utilities.html
Normal file
324
docs/html/_modules/composer/cli/utilities.html
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.cli.utilities — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../cli.html">composer.cli</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.cli.utilities</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.cli.utilities</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="argify"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.argify">[docs]</a><span class="k">def</span> <span class="nf">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Take a list of human args and return a list with each item</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param args: list of strings with possible commas and spaces</span>
|
||||||
|
<span class="sd"> :type args: list of str</span>
|
||||||
|
<span class="sd"> :returns: List of all the items</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
|
||||||
|
<span class="sd"> Examples:</span>
|
||||||
|
|
||||||
|
<span class="sd"> ["one,two", "three", ",four", ",five,"] returns ["one", "two", "three", "four", "five"]</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="n">arg</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">entry</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span> <span class="k">if</span> <span class="n">i</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="toml_filename"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.toml_filename">[docs]</a><span class="k">def</span> <span class="nf">toml_filename</span><span class="p">(</span><span class="n">blueprint_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Convert a blueprint name into a filename.toml</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param blueprint_name: The blueprint's name</span>
|
||||||
|
<span class="sd"> :type blueprint_name: str</span>
|
||||||
|
<span class="sd"> :returns: The blueprint name with ' ' converted to - and .toml appended</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">blueprint_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".toml"</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="frozen_toml_filename"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.frozen_toml_filename">[docs]</a><span class="k">def</span> <span class="nf">frozen_toml_filename</span><span class="p">(</span><span class="n">blueprint_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Convert a blueprint name into a filename.toml</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param blueprint_name: The blueprint's name</span>
|
||||||
|
<span class="sd"> :type blueprint_name: str</span>
|
||||||
|
<span class="sd"> :returns: The blueprint name with ' ' converted to - and .toml appended</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">blueprint_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".frozen.toml"</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="handle_api_result"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.handle_api_result">[docs]</a><span class="k">def</span> <span class="nf">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Log any errors, return the correct value</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param result: JSON result from the http query</span>
|
||||||
|
<span class="sd"> :type result: dict</span>
|
||||||
|
<span class="sd"> :rtype: tuple</span>
|
||||||
|
<span class="sd"> :returns: (rc, should_exit_now)</span>
|
||||||
|
|
||||||
|
<span class="sd"> Return the correct rc for the program (0 or 1), and whether or</span>
|
||||||
|
<span class="sd"> not to continue processing the results.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">show_json</span><span class="p">:</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"errors"</span><span class="p">,</span> <span class="p">[]):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">[</span><span class="s2">"msg"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># What's the rc? If status is present, use that</span>
|
||||||
|
<span class="c1"># If not, use length of errors</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"status"</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"status"</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"errors"</span><span class="p">,</span> <span class="p">[]))</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Caller should return if showing json, or status was present and False</span>
|
||||||
|
<span class="n">exit_now</span> <span class="o">=</span> <span class="n">show_json</span> <span class="ow">or</span> <span class="p">(</span><span class="s2">"status"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">rc</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="packageNEVRA"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.packageNEVRA">[docs]</a><span class="k">def</span> <span class="nf">packageNEVRA</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the package info as a NEVRA</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkg: The package details</span>
|
||||||
|
<span class="sd"> :type pkg: dict</span>
|
||||||
|
<span class="sd"> :returns: name-[epoch:]version-release-arch</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pkg</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"release"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pkg</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"release"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">])</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_arg"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.get_arg">[docs]</a><span class="k">def</span> <span class="nf">get_arg</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">argtype</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return optional value from args, and remaining args</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param args: list of arguments</span>
|
||||||
|
<span class="sd"> :type args: list of strings</span>
|
||||||
|
<span class="sd"> :param name: The argument to remove from the args list</span>
|
||||||
|
<span class="sd"> :type name: string</span>
|
||||||
|
<span class="sd"> :param argtype: Type to use for checking the argument value</span>
|
||||||
|
<span class="sd"> :type argtype: type</span>
|
||||||
|
<span class="sd"> :returns (args, value)</span>
|
||||||
|
<span class="sd"> :rtype: tuple</span>
|
||||||
|
|
||||||
|
<span class="sd"> This removes the optional argument and value from the argument list, returns the new list,</span>
|
||||||
|
<span class="sd"> and the value of the argument.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">idx</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o"><</span> <span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> is missing the value"</span><span class="p">)</span>
|
||||||
|
<span class="n">value</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
|
||||||
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">argtype</span><span class="p">:</span>
|
||||||
|
<span class="n">value</span> <span class="o">=</span> <span class="n">argtype</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span><span class="o">+</span><span class="n">args</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:],</span> <span class="n">value</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
459
docs/html/_modules/composer/http_client.html
Normal file
459
docs/html/_modules/composer/http_client.html
Normal file
@ -0,0 +1,459 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.http_client — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.http_client</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.http_client</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="kn">import</span> <span class="n">urlparse</span><span class="p">,</span> <span class="n">urlunparse</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.unix_socket</span> <span class="kn">import</span> <span class="n">UnixHTTPConnectionPool</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="api_url"><a class="viewcode-back" href="../../composer.html#composer.http_client.api_url">[docs]</a><span class="k">def</span> <span class="nf">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the versioned path to the API route</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param api_version: The version of the API to talk to. eg. "0"</span>
|
||||||
|
<span class="sd"> :type api_version: str</span>
|
||||||
|
<span class="sd"> :param url: The API route to talk to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :returns: The full url to use for the route and API version</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="s2">"/api/v</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="n">url</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="append_query"><a class="viewcode-back" href="../../composer.html#composer.http_client.append_query">[docs]</a><span class="k">def</span> <span class="nf">append_query</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">query</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add a query argument to a URL</span>
|
||||||
|
|
||||||
|
<span class="sd"> The query should be of the form "param1=what&param2=ever", i.e., no</span>
|
||||||
|
<span class="sd"> leading '?'. The new query data will be appended to any existing</span>
|
||||||
|
<span class="sd"> query string.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param url: The original URL</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :param query: The query to append</span>
|
||||||
|
<span class="sd"> :type query: str</span>
|
||||||
|
<span class="sd"> :returns: The new URL with the query argument included</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="n">url_parts</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">url_parts</span><span class="o">.</span><span class="n">query</span><span class="p">:</span>
|
||||||
|
<span class="n">new_query</span> <span class="o">=</span> <span class="n">url_parts</span><span class="o">.</span><span class="n">query</span> <span class="o">+</span> <span class="s2">"&"</span> <span class="o">+</span> <span class="n">query</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">new_query</span> <span class="o">=</span> <span class="n">query</span>
|
||||||
|
<span class="k">return</span> <span class="n">urlunparse</span><span class="p">([</span><span class="n">url_parts</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">url_parts</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">url_parts</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||||
|
<span class="n">url_parts</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">new_query</span><span class="p">,</span> <span class="n">url_parts</span><span class="p">[</span><span class="mi">5</span><span class="p">]])</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_url_raw"><a class="viewcode-back" href="../../composer.html#composer.http_client.get_url_raw">[docs]</a><span class="k">def</span> <span class="nf">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the raw results of a GET request</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to request</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :returns: The raw response from the server</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="mi">400</span><span class="p">:</span>
|
||||||
|
<span class="n">err</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"status"</span> <span class="ow">in</span> <span class="n">err</span> <span class="ow">and</span> <span class="n">err</span><span class="p">[</span><span class="s2">"status"</span><span class="p">]</span> <span class="o">==</span> <span class="kc">False</span><span class="p">:</span>
|
||||||
|
<span class="n">msgs</span> <span class="o">=</span> <span class="p">[</span><span class="n">e</span><span class="p">[</span><span class="s2">"msg"</span><span class="p">]</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">err</span><span class="p">[</span><span class="s2">"errors"</span><span class="p">]]</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msgs</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_url_json"><a class="viewcode-back" href="../../composer.html#composer.http_client.get_url_json">[docs]</a><span class="k">def</span> <span class="nf">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the JSON results of a GET request</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to request</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_url_json_unlimited"><a class="viewcode-back" href="../../composer.html#composer.http_client.get_url_json_unlimited">[docs]</a><span class="k">def</span> <span class="nf">get_url_json_unlimited</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">total_fn</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the JSON results of a GET request</span>
|
||||||
|
|
||||||
|
<span class="sd"> For URLs that use offset/limit arguments, this command will</span>
|
||||||
|
<span class="sd"> fetch all results for the given request.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to request</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="nf">default_total_fn</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the total number of available results"""</span>
|
||||||
|
<span class="k">return</span> <span class="n">data</span><span class="p">[</span><span class="s2">"total"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Start with limit=0 to just get the number of objects</span>
|
||||||
|
<span class="n">total_url</span> <span class="o">=</span> <span class="n">append_query</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="s2">"limit=0"</span><span class="p">)</span>
|
||||||
|
<span class="n">r_total</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="n">total_url</span><span class="p">)</span>
|
||||||
|
<span class="n">json_total</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r_total</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Where to get the total from</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">total_fn</span><span class="p">:</span>
|
||||||
|
<span class="n">total_fn</span> <span class="o">=</span> <span class="n">default_total_fn</span>
|
||||||
|
|
||||||
|
<span class="c1"># Add the "total" returned by limit=0 as the new limit</span>
|
||||||
|
<span class="n">unlimited_url</span> <span class="o">=</span> <span class="n">append_query</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="s2">"limit=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">total_fn</span><span class="p">(</span><span class="n">json_total</span><span class="p">))</span>
|
||||||
|
<span class="n">r_unlimited</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="n">unlimited_url</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r_unlimited</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="delete_url_json"><a class="viewcode-back" href="../../composer.html#composer.http_client.delete_url_json">[docs]</a><span class="k">def</span> <span class="nf">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Send a DELETE request to the url and return JSON response</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to send DELETE to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"DELETE"</span><span class="p">,</span> <span class="n">url</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="post_url"><a class="viewcode-back" href="../../composer.html#composer.http_client.post_url">[docs]</a><span class="k">def</span> <span class="nf">post_url</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""POST raw data to the URL</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to send POST to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :param body: The data for the body of the POST</span>
|
||||||
|
<span class="sd"> :type body: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"POST"</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
|
||||||
|
<span class="n">body</span><span class="o">=</span><span class="n">body</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="post_url_toml"><a class="viewcode-back" href="../../composer.html#composer.http_client.post_url_toml">[docs]</a><span class="k">def</span> <span class="nf">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""POST a TOML string to the URL</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to send POST to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :param body: The data for the body of the POST</span>
|
||||||
|
<span class="sd"> :type body: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"POST"</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
|
||||||
|
<span class="n">body</span><span class="o">=</span><span class="n">body</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">),</span>
|
||||||
|
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"text/x-toml"</span><span class="p">})</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="post_url_json"><a class="viewcode-back" href="../../composer.html#composer.http_client.post_url_json">[docs]</a><span class="k">def</span> <span class="nf">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""POST some JSON data to the URL</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to send POST to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> :param body: The data for the body of the POST</span>
|
||||||
|
<span class="sd"> :type body: str</span>
|
||||||
|
<span class="sd"> :returns: The json response from the server</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"POST"</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span>
|
||||||
|
<span class="n">body</span><span class="o">=</span><span class="n">body</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">),</span>
|
||||||
|
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"application/json"</span><span class="p">})</span>
|
||||||
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_filename"><a class="viewcode-back" href="../../composer.html#composer.http_client.get_filename">[docs]</a><span class="k">def</span> <span class="nf">get_filename</span><span class="p">(</span><span class="n">headers</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Get the filename from the response header</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param response: The urllib3 response object</span>
|
||||||
|
<span class="sd"> :type response: Response</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if it cannot find a filename in the header</span>
|
||||||
|
<span class="sd"> :returns: Filename from content-disposition header</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Headers = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">headers</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"content-disposition"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"No Content-Disposition header; cannot get filename"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">k</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">headers</span><span class="p">[</span><span class="s2">"content-disposition"</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">"="</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">"filename"</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"No filename= found in content-disposition header"</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Error parsing filename from content-disposition header: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">v</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="download_file"><a class="viewcode-back" href="../../composer.html#composer.http_client.download_file">[docs]</a><span class="k">def</span> <span class="nf">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">progress</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Download a file, saving it to the CWD with the included filename</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: Path to the Unix socket to use for API communication</span>
|
||||||
|
<span class="sd"> :type socket_path: str</span>
|
||||||
|
<span class="sd"> :param url: URL to send POST to</span>
|
||||||
|
<span class="sd"> :type url: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">http</span> <span class="o">=</span> <span class="n">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">preload_content</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="mi">400</span><span class="p">:</span>
|
||||||
|
<span class="n">err</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">err</span><span class="p">[</span><span class="s2">"status"</span><span class="p">]:</span>
|
||||||
|
<span class="n">msgs</span> <span class="o">=</span> <span class="p">[</span><span class="n">e</span><span class="p">[</span><span class="s2">"msg"</span><span class="p">]</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">err</span><span class="p">[</span><span class="s2">"errors"</span><span class="p">]]</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msgs</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">get_filename</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
|
||||||
|
<span class="n">msg</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> exists, skipping download"</span> <span class="o">%</span> <span class="n">filename</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||||
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||||
|
<span class="n">data</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">:</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">progress</span><span class="p">:</span>
|
||||||
|
<span class="n">data_written</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span>
|
||||||
|
<span class="k">if</span> <span class="n">data_written</span> <span class="o">></span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span><span class="p">:</span>
|
||||||
|
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%0.2f</span><span class="s2"> MB </span><span class="se">\r</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">data_written</span> <span class="o">/</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%0.2f</span><span class="s2"> kB</span><span class="se">\r</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">data_written</span> <span class="o">/</span> <span class="mi">1024</span><span class="p">))</span>
|
||||||
|
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span><span class="o">.</span><span class="n">release_conn</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="mi">0</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
262
docs/html/_modules/composer/unix_socket.html
Normal file
262
docs/html/_modules/composer/unix_socket.html
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>composer.unix_socket — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>composer.unix_socket</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for composer.unix_socket</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">http.client</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">socket</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">urllib3</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="c1"># These 2 classes were adapted and simplified for use with just urllib3.</span>
|
||||||
|
<span class="c1"># Originally from https://github.com/msabramo/requests-unixsocket/blob/master/requests_unixsocket/adapters.py</span>
|
||||||
|
|
||||||
|
<span class="c1"># The following was adapted from some code from docker-py</span>
|
||||||
|
<span class="c1"># https://github.com/docker/docker-py/blob/master/docker/transport/unixconn.py</span>
|
||||||
|
<div class="viewcode-block" id="UnixHTTPConnection"><a class="viewcode-back" href="../../composer.html#composer.unix_socket.UnixHTTPConnection">[docs]</a><span class="k">class</span> <span class="nc">UnixHTTPConnection</span><span class="p">(</span><span class="n">http</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">socket_path</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">60</span><span class="o">*</span><span class="mi">5</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Create an HTTP connection to a unix domain socket</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: The path to the Unix domain socket</span>
|
||||||
|
<span class="sd"> :param timeout: Number of seconds to timeout the connection</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="nb">super</span><span class="p">(</span><span class="n">UnixHTTPConnection</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span> <span class="o">=</span> <span class="n">socket_path</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">sock</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># base class does not have d'tor</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sock</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">sock</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="UnixHTTPConnection.connect"><a class="viewcode-back" href="../../composer.html#composer.unix_socket.UnixHTTPConnection.connect">[docs]</a> <span class="k">def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="n">sock</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span>
|
||||||
|
<span class="n">sock</span><span class="o">.</span><span class="n">settimeout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span>
|
||||||
|
<span class="n">sock</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">sock</span> <span class="o">=</span> <span class="n">sock</span></div></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="UnixHTTPConnectionPool"><a class="viewcode-back" href="../../composer.html#composer.unix_socket.UnixHTTPConnectionPool">[docs]</a><span class="k">class</span> <span class="nc">UnixHTTPConnectionPool</span><span class="p">(</span><span class="n">urllib3</span><span class="o">.</span><span class="n">connectionpool</span><span class="o">.</span><span class="n">HTTPConnectionPool</span><span class="p">):</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">socket_path</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">60</span><span class="o">*</span><span class="mi">5</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Create a connection pool using a Unix domain socket</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param socket_path: The path to the Unix domain socket</span>
|
||||||
|
<span class="sd"> :param timeout: Number of seconds to timeout the connection</span>
|
||||||
|
|
||||||
|
<span class="sd"> NOTE: retries are disabled for these connections, they are never useful</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="nb">super</span><span class="p">(</span><span class="n">UnixHTTPConnectionPool</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span> <span class="n">retries</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span> <span class="o">=</span> <span class="n">socket_path</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_new_conn</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">UnixHTTPConnection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Overview: module code — Lorax 36.5 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>Overview: module code — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||||||
<script src="../_static/jquery.js"></script>
|
<script src="../_static/jquery.js"></script>
|
||||||
<script src="../_static/underscore.js"></script>
|
<script src="../_static/underscore.js"></script>
|
||||||
<script src="../_static/doctools.js"></script>
|
<script src="../_static/doctools.js"></script>
|
||||||
<script src="../_static/js/theme.js"></script>
|
<script src="../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../genindex.html" />
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../search.html" />
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../index.html" class="icon icon-home"> Lorax
|
<a href="../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.5
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,44 +71,125 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../image-minimizer.html">image-minimizer</a></li>
|
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../index.html">Lorax</a>
|
<a href="../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li>Overview: module code</li>
|
<li>Overview: module code</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
<div itemprop="articleBody">
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
<h1>All modules for which code is available</h1>
|
<h1>All modules for which code is available</h1>
|
||||||
<ul><li><a href="pylorax.html">pylorax</a></li>
|
<ul><li><a href="composer/cli.html">composer.cli</a></li>
|
||||||
<ul><li><a href="pylorax/base.html">pylorax.base</a></li>
|
<ul><li><a href="composer/cli/blueprints.html">composer.cli.blueprints</a></li>
|
||||||
|
<li><a href="composer/cli/cmdline.html">composer.cli.cmdline</a></li>
|
||||||
|
<li><a href="composer/cli/compose.html">composer.cli.compose</a></li>
|
||||||
|
<li><a href="composer/cli/modules.html">composer.cli.modules</a></li>
|
||||||
|
<li><a href="composer/cli/projects.html">composer.cli.projects</a></li>
|
||||||
|
<li><a href="composer/cli/providers.html">composer.cli.providers</a></li>
|
||||||
|
<li><a href="composer/cli/sources.html">composer.cli.sources</a></li>
|
||||||
|
<li><a href="composer/cli/status.html">composer.cli.status</a></li>
|
||||||
|
<li><a href="composer/cli/upload.html">composer.cli.upload</a></li>
|
||||||
|
<li><a href="composer/cli/utilities.html">composer.cli.utilities</a></li>
|
||||||
|
</ul><li><a href="composer/http_client.html">composer.http_client</a></li>
|
||||||
|
<li><a href="composer/unix_socket.html">composer.unix_socket</a></li>
|
||||||
|
<li><a href="lifted/config.html">lifted.config</a></li>
|
||||||
|
<li><a href="lifted/providers.html">lifted.providers</a></li>
|
||||||
|
<li><a href="lifted/queue.html">lifted.queue</a></li>
|
||||||
|
<li><a href="lifted/upload.html">lifted.upload</a></li>
|
||||||
|
<li><a href="pylorax.html">pylorax</a></li>
|
||||||
|
<ul><li><a href="pylorax/api/bisect.html">pylorax.api.bisect</a></li>
|
||||||
|
<li><a href="pylorax/api/checkparams.html">pylorax.api.checkparams</a></li>
|
||||||
|
<li><a href="pylorax/api/cmdline.html">pylorax.api.cmdline</a></li>
|
||||||
|
<li><a href="pylorax/api/compose.html">pylorax.api.compose</a></li>
|
||||||
|
<li><a href="pylorax/api/config.html">pylorax.api.config</a></li>
|
||||||
|
<li><a href="pylorax/api/dnfbase.html">pylorax.api.dnfbase</a></li>
|
||||||
|
<li><a href="pylorax/api/flask_blueprint.html">pylorax.api.flask_blueprint</a></li>
|
||||||
|
<li><a href="pylorax/api/gitrpm.html">pylorax.api.gitrpm</a></li>
|
||||||
|
<li><a href="pylorax/api/projects.html">pylorax.api.projects</a></li>
|
||||||
|
<li><a href="pylorax/api/queue.html">pylorax.api.queue</a></li>
|
||||||
|
<li><a href="pylorax/api/recipes.html">pylorax.api.recipes</a></li>
|
||||||
|
<li><a href="pylorax/api/server.html">pylorax.api.server</a></li>
|
||||||
|
<li><a href="pylorax/api/timestamp.html">pylorax.api.timestamp</a></li>
|
||||||
|
<li><a href="pylorax/api/toml.html">pylorax.api.toml</a></li>
|
||||||
|
<li><a href="pylorax/api/utils.html">pylorax.api.utils</a></li>
|
||||||
|
<li><a href="pylorax/api/v0.html">pylorax.api.v0</a></li>
|
||||||
|
<li><a href="pylorax/api/v1.html">pylorax.api.v1</a></li>
|
||||||
|
<li><a href="pylorax/api/workspace.html">pylorax.api.workspace</a></li>
|
||||||
|
<li><a href="pylorax/base.html">pylorax.base</a></li>
|
||||||
<li><a href="pylorax/buildstamp.html">pylorax.buildstamp</a></li>
|
<li><a href="pylorax/buildstamp.html">pylorax.buildstamp</a></li>
|
||||||
<li><a href="pylorax/cmdline.html">pylorax.cmdline</a></li>
|
<li><a href="pylorax/cmdline.html">pylorax.cmdline</a></li>
|
||||||
<li><a href="pylorax/creator.html">pylorax.creator</a></li>
|
<li><a href="pylorax/creator.html">pylorax.creator</a></li>
|
||||||
@ -90,30 +209,42 @@
|
|||||||
</ul></ul>
|
</ul></ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
234
docs/html/_modules/lifted/config.html
Normal file
234
docs/html/_modules/lifted/config.html
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>lifted.config — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>lifted.config</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for lifted.config</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="configure"><a class="viewcode-back" href="../../lifted.html#lifted.config.configure">[docs]</a><span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="n">conf</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add lifted settings to the configuration</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param conf: configuration object</span>
|
||||||
|
<span class="sd"> :type conf: ComposerConfig</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
|
||||||
|
<span class="sd"> This uses the composer.share_dir and composer.lib_dir as the base</span>
|
||||||
|
<span class="sd"> directories for the settings.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">share_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"share_dir"</span><span class="p">)</span>
|
||||||
|
<span class="n">lib_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">)</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"providers_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">share_dir</span><span class="p">,</span> <span class="s2">"/lifted/providers/"</span><span class="p">))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"queue_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="s2">"/upload/queue/"</span><span class="p">))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"settings_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="s2">"/upload/settings/"</span><span class="p">))</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
444
docs/html/_modules/lifted/providers.html
Normal file
444
docs/html/_modules/lifted/providers.html
Normal file
@ -0,0 +1,444 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>lifted.providers — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>lifted.providers</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for lifted.providers</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">re</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">stat</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Helper to return the directory and path for a provider's profile file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the cloud provider, e.g. "azure"</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param profile: the name of the profile to save</span>
|
||||||
|
<span class="sd"> :type profile: str != ""</span>
|
||||||
|
<span class="sd"> :returns: Full path of the profile .toml file</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> :raises: ValueError when passed invalid settings or an invalid profile name</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when the provider or profile couldn't be found</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Make sure no path elements are present</span>
|
||||||
|
<span class="n">profile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">profile</span><span class="p">)</span>
|
||||||
|
<span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">profile</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Profile name cannot be empty!"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">provider_name</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Provider name cannot be empty!"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">directory</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"settings_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">)</span>
|
||||||
|
<span class="c1"># create the settings directory if it doesn't exist</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">directory</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">profile</span><span class="si">}</span><span class="s2">.toml"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">exists</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find profile "</span><span class="si">{</span><span class="n">profile</span><span class="si">}</span><span class="s1">"!'</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="resolve_provider"><a class="viewcode-back" href="../../lifted.html#lifted.providers.resolve_provider">[docs]</a><span class="k">def</span> <span class="nf">resolve_provider</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Get information about the specified provider as defined in that</span>
|
||||||
|
<span class="sd"> provider's `provider.toml`, including the provider's display name and expected</span>
|
||||||
|
<span class="sd"> settings.</span>
|
||||||
|
|
||||||
|
<span class="sd"> At a minimum, each setting has a display name (that likely differs from its</span>
|
||||||
|
<span class="sd"> snake_case name) and a type. Currently, there are two types of settings:</span>
|
||||||
|
<span class="sd"> string and boolean. String settings can optionally have a "placeholder"</span>
|
||||||
|
<span class="sd"> value for use on the front end and a "regex" for making sure that a value</span>
|
||||||
|
<span class="sd"> follows an expected pattern.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the provider to look for</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when the provider couldn't be found</span>
|
||||||
|
<span class="sd"> :returns: the provider</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Make sure no path elements are present</span>
|
||||||
|
<span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"provider.toml"</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">provider_file</span><span class="p">:</span>
|
||||||
|
<span class="n">provider</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_file</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find provider "</span><span class="si">{</span><span class="n">provider_name</span><span class="si">}</span><span class="s1">"!'</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">provider</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="load_profiles"><a class="viewcode-back" href="../../lifted.html#lifted.providers.load_profiles">[docs]</a><span class="k">def</span> <span class="nf">load_profiles</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return all settings profiles associated with a provider</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: name a provider to find profiles for</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :returns: a dict of settings dicts, keyed by profile name</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Make sure no path elements are present</span>
|
||||||
|
<span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">load_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"settings_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="n">get_name</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> <span class="n">load_path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="resolve_playbook_path"><a class="viewcode-back" href="../../lifted.html#lifted.providers.resolve_playbook_path">[docs]</a><span class="k">def</span> <span class="nf">resolve_playbook_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Given a provider's name, return the path to its playbook</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the provider to find the playbook for</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when the provider couldn't be found</span>
|
||||||
|
<span class="sd"> :returns: the path to the playbook</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Make sure no path elements are present</span>
|
||||||
|
<span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"playbook.yaml"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find playbook for "</span><span class="si">{</span><span class="n">provider_name</span><span class="si">}</span><span class="s1">"!'</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">path</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="list_providers"><a class="viewcode-back" href="../../lifted.html#lifted.providers.list_providers">[docs]</a><span class="k">def</span> <span class="nf">list_providers</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""List the names of the available upload providers</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :returns: a list of all available provider_names</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="s2">"*"</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="validate_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.validate_settings">[docs]</a><span class="k">def</span> <span class="nf">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Raise a ValueError if any settings are invalid</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the provider to validate the settings against</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param settings: the settings to validate</span>
|
||||||
|
<span class="sd"> :type settings: dict</span>
|
||||||
|
<span class="sd"> :param image_name: optionally check whether an image_name is valid</span>
|
||||||
|
<span class="sd"> :type image_name: str</span>
|
||||||
|
<span class="sd"> :raises: ValueError when the passed settings are invalid</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when provider_name can't be found</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">image_name</span> <span class="o">==</span> <span class="s2">""</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Image name cannot be empty!"</span><span class="p">)</span>
|
||||||
|
<span class="n">type_map</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"string"</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="s2">"boolean"</span><span class="p">:</span> <span class="nb">bool</span><span class="p">}</span>
|
||||||
|
<span class="n">settings_info</span> <span class="o">=</span> <span class="n">resolve_provider</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">)[</span><span class="s2">"settings-info"</span><span class="p">]</span>
|
||||||
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||||
|
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">settings_info</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Received unexpected setting: "</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s1">"!'</span><span class="p">)</span>
|
||||||
|
<span class="n">setting_type</span> <span class="o">=</span> <span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">"type"</span><span class="p">]</span>
|
||||||
|
<span class="n">correct_type</span> <span class="o">=</span> <span class="n">type_map</span><span class="p">[</span><span class="n">setting_type</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">correct_type</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
|
<span class="sa">f</span><span class="s1">'Expected a </span><span class="si">{</span><span class="n">correct_type</span><span class="si">}</span><span class="s1"> for "</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s1">", received a </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="si">}</span><span class="s1">!'</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">setting_type</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> <span class="s2">"regex"</span> <span class="ow">in</span> <span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">"regex"</span><span class="p">],</span> <span class="n">value</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Value "</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s1">" is invalid for setting "</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s1">"!'</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="save_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.save_settings">[docs]</a><span class="k">def</span> <span class="nf">save_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Save (and overwrite) settings for a given provider</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the cloud provider, e.g. "azure"</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param profile: the name of the profile to save</span>
|
||||||
|
<span class="sd"> :type profile: str != ""</span>
|
||||||
|
<span class="sd"> :param settings: settings to save for that provider</span>
|
||||||
|
<span class="sd"> :type settings: dict</span>
|
||||||
|
<span class="sd"> :raises: ValueError when passed invalid settings or an invalid profile name</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># touch the TOML file if it doesn't exist</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># make sure settings files aren't readable by others, as they will contain</span>
|
||||||
|
<span class="c1"># sensitive credentials</span>
|
||||||
|
<span class="n">current</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IMODE</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">lstat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">current</span> <span class="o">&</span> <span class="o">~</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">settings_file</span><span class="p">:</span>
|
||||||
|
<span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">settings_file</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="load_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.load_settings">[docs]</a><span class="k">def</span> <span class="nf">load_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Load settings for a provider's profile</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the cloud provider, e.g. "azure"</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param profile: the name of the profile to save</span>
|
||||||
|
<span class="sd"> :type profile: str != ""</span>
|
||||||
|
<span class="sd"> :returns: The profile settings for the selected provider</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> :raises: ValueError when passed invalid settings or an invalid profile name</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when the provider or profile couldn't be found</span>
|
||||||
|
<span class="sd"> :raises: ValueError when the passed settings are invalid</span>
|
||||||
|
|
||||||
|
<span class="sd"> This also calls validate_settings on the loaded settings, potentially</span>
|
||||||
|
<span class="sd"> raising an error if the saved settings are invalid.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
|
||||||
|
<span class="n">settings</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
||||||
|
<span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">settings</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="delete_profile"><a class="viewcode-back" href="../../lifted.html#lifted.providers.delete_profile">[docs]</a><span class="k">def</span> <span class="nf">delete_profile</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a provider's profile settings file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the cloud provider, e.g. "azure"</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param profile: the name of the profile to save</span>
|
||||||
|
<span class="sd"> :type profile: str != ""</span>
|
||||||
|
<span class="sd"> :raises: ValueError when passed invalid settings or an invalid profile name</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError when the provider or profile couldn't be found</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
468
docs/html/_modules/lifted/queue.html
Normal file
468
docs/html/_modules/lifted/queue.html
Normal file
@ -0,0 +1,468 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>lifted.queue — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>lifted.queue</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for lifted.queue</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">partial</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">multiprocessing</span>
|
||||||
|
|
||||||
|
<span class="c1"># We use a multiprocessing Pool for uploads so that we can cancel them with a</span>
|
||||||
|
<span class="c1"># simple SIGINT, which should bubble down to subprocesses.</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="kn">import</span> <span class="n">Pool</span>
|
||||||
|
|
||||||
|
<span class="c1"># multiprocessing.dummy is to threads as multiprocessing is to processes.</span>
|
||||||
|
<span class="c1"># Since daemonic processes can't have children, we use a thread to monitor the</span>
|
||||||
|
<span class="c1"># upload pool.</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">multiprocessing.dummy</span> <span class="kn">import</span> <span class="n">Process</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">attrgetter</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">stat</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">lifted.upload</span> <span class="kn">import</span> <span class="n">Upload</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">lifted.providers</span> <span class="kn">import</span> <span class="n">resolve_playbook_path</span><span class="p">,</span> <span class="n">validate_settings</span>
|
||||||
|
|
||||||
|
<span class="c1"># the maximum number of simultaneous uploads</span>
|
||||||
|
<span class="n">SIMULTANEOUS_UPLOADS</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lifted"</span><span class="p">)</span>
|
||||||
|
<span class="n">multiprocessing</span><span class="o">.</span><span class="n">log_to_stderr</span><span class="p">()</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">ucfg</span><span class="p">[</span><span class="s2">"queue_dir"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># create the upload_queue directory if it doesn't exist</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">path</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">write</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Make sure no path elements are present</span>
|
||||||
|
<span class="n">uuid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">uuid</span><span class="si">}</span><span class="s2">.toml"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">write</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||||
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
|
<span class="c1"># make sure uploads aren't readable by others, as they will contain</span>
|
||||||
|
<span class="c1"># sensitive credentials</span>
|
||||||
|
<span class="n">current</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IMODE</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">lstat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">current</span> <span class="o">&</span> <span class="o">~</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">path</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_list_upload_uuids</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span> <span class="s2">"*"</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">]</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_write_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">upload</span><span class="p">):</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">write</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">upload_file</span><span class="p">:</span>
|
||||||
|
<span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">serializable</span><span class="p">(),</span> <span class="n">upload_file</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">partial</span><span class="p">(</span><span class="n">_write_upload</span><span class="p">,</span> <span class="n">ucfg</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_upload">[docs]</a><span class="k">def</span> <span class="nf">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">ignore_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_corrupt</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Get an Upload object by UUID</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param uuid: UUID of the upload to get</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :param ignore_missing: if True, don't raise a RuntimeError when the specified upload is missing, instead just return None</span>
|
||||||
|
<span class="sd"> :type ignore_missing: bool</span>
|
||||||
|
<span class="sd"> :param ignore_corrupt: if True, don't raise a RuntimeError when the specified upload could not be deserialized, instead just return None</span>
|
||||||
|
<span class="sd"> :type ignore_corrupt: bool</span>
|
||||||
|
<span class="sd"> :returns: the upload object or None</span>
|
||||||
|
<span class="sd"> :rtype: Upload or None</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">),</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">as</span> <span class="n">upload_file</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">Upload</span><span class="p">(</span><span class="o">**</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">upload_file</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">FileNotFoundError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_missing</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not find upload </span><span class="si">{</span><span class="n">uuid</span><span class="si">}</span><span class="s2">!"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_corrupt</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not parse upload </span><span class="si">{</span><span class="n">uuid</span><span class="si">}</span><span class="s2">!"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_uploads"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_uploads">[docs]</a><span class="k">def</span> <span class="nf">get_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuids</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Gets a list of Upload objects from a list of upload UUIDs, ignoring</span>
|
||||||
|
<span class="sd"> missing or corrupt uploads</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param uuids: list of upload UUIDs to get</span>
|
||||||
|
<span class="sd"> :type uuids: list of str</span>
|
||||||
|
<span class="sd"> :returns: a list of the uploads that were successfully deserialized</span>
|
||||||
|
<span class="sd"> :rtype: list of Upload</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uploads</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
|
<span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">ignore_missing</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_corrupt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="n">uuids</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">uploads</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_all_uploads"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_all_uploads">[docs]</a><span class="k">def</span> <span class="nf">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Get a list of all stored Upload objects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :returns: a list of all stored upload objects</span>
|
||||||
|
<span class="sd"> :rtype: list of Upload</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">get_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">_list_upload_uuids</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="create_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.create_upload">[docs]</a><span class="k">def</span> <span class="nf">create_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">image_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Creates a new upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param provider_name: the name of the cloud provider to upload to, e.g. "azure"</span>
|
||||||
|
<span class="sd"> :type provider_name: str</span>
|
||||||
|
<span class="sd"> :param image_name: what to name the image in the cloud</span>
|
||||||
|
<span class="sd"> :type image_name: str</span>
|
||||||
|
<span class="sd"> :param settings: settings to pass to the upload, specific to the cloud provider</span>
|
||||||
|
<span class="sd"> :type settings: dict</span>
|
||||||
|
<span class="sd"> :returns: the created upload object</span>
|
||||||
|
<span class="sd"> :rtype: Upload</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">Upload</span><span class="p">(</span>
|
||||||
|
<span class="n">provider_name</span><span class="o">=</span><span class="n">provider_name</span><span class="p">,</span>
|
||||||
|
<span class="n">playbook_path</span><span class="o">=</span><span class="n">resolve_playbook_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">),</span>
|
||||||
|
<span class="n">image_name</span><span class="o">=</span><span class="n">image_name</span><span class="p">,</span>
|
||||||
|
<span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
|
||||||
|
<span class="n">status_callback</span><span class="o">=</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span>
|
||||||
|
<span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="ready_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.ready_upload">[docs]</a><span class="k">def</span> <span class="nf">ready_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">image_path</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Pass an image_path to an upload and mark it ready to execute</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param uuid: the UUID of the upload to mark ready</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :param image_path: the path of the image to pass to the upload</span>
|
||||||
|
<span class="sd"> :type image_path: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span><span class="o">.</span><span class="n">ready</span><span class="p">(</span><span class="n">image_path</span><span class="p">,</span> <span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="reset_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.reset_upload">[docs]</a><span class="k">def</span> <span class="nf">reset_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">new_image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">new_settings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Reset an upload so it can be attempted again</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: upload config</span>
|
||||||
|
<span class="sd"> :type ucfg: object</span>
|
||||||
|
<span class="sd"> :param uuid: the UUID of the upload to reset</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :param new_image_name: optionally update the upload's image_name</span>
|
||||||
|
<span class="sd"> :type new_image_name: str</span>
|
||||||
|
<span class="sd"> :param new_settings: optionally update the upload's settings</span>
|
||||||
|
<span class="sd"> :type new_settings: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">upload</span> <span class="o">=</span> <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">validate_settings</span><span class="p">(</span>
|
||||||
|
<span class="n">ucfg</span><span class="p">,</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">provider_name</span><span class="p">,</span>
|
||||||
|
<span class="n">new_settings</span> <span class="ow">or</span> <span class="n">upload</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span>
|
||||||
|
<span class="n">new_image_name</span> <span class="ow">or</span> <span class="n">upload</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">new_image_name</span><span class="p">:</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">image_name</span> <span class="o">=</span> <span class="n">new_image_name</span>
|
||||||
|
<span class="k">if</span> <span class="n">new_settings</span><span class="p">:</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">new_settings</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="cancel_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.cancel_upload">[docs]</a><span class="k">def</span> <span class="nf">cancel_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Cancel an upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: the compose config</span>
|
||||||
|
<span class="sd"> :type ucfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: the UUID of the upload to cancel</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="delete_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.delete_upload">[docs]</a><span class="k">def</span> <span class="nf">delete_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete an upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: the compose config</span>
|
||||||
|
<span class="sd"> :type ucfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: the UUID of the upload to delete</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">upload</span> <span class="o">=</span> <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">upload</span> <span class="ow">and</span> <span class="n">upload</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="start_upload_monitor"><a class="viewcode-back" href="../../lifted.html#lifted.queue.start_upload_monitor">[docs]</a><span class="k">def</span> <span class="nf">start_upload_monitor</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Start a thread that manages the upload queue</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param ucfg: the compose config</span>
|
||||||
|
<span class="sd"> :type ucfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">process</span> <span class="o">=</span> <span class="n">Process</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">_monitor</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,))</span>
|
||||||
|
<span class="n">process</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">process</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_monitor</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Started upload monitor."</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">upload</span> <span class="ow">in</span> <span class="n">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Set abandoned uploads to FAILED</span>
|
||||||
|
<span class="k">if</span> <span class="n">upload</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"RUNNING"</span><span class="p">:</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FAILED"</span><span class="p">,</span> <span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span>
|
||||||
|
<span class="n">pool</span> <span class="o">=</span> <span class="n">Pool</span><span class="p">(</span><span class="n">processes</span><span class="o">=</span><span class="n">SIMULTANEOUS_UPLOADS</span><span class="p">)</span>
|
||||||
|
<span class="n">pool_uuids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">remover</span><span class="p">(</span><span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="k">lambda</span> <span class="n">_</span><span class="p">:</span> <span class="n">pool_uuids</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Every second, scoop up READY uploads from the filesystem and throw</span>
|
||||||
|
<span class="c1"># them in the pool</span>
|
||||||
|
<span class="n">all_uploads</span> <span class="o">=</span> <span class="n">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">upload</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">all_uploads</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">attrgetter</span><span class="p">(</span><span class="s2">"creation_time"</span><span class="p">)):</span>
|
||||||
|
<span class="n">ready</span> <span class="o">=</span> <span class="n">upload</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"READY"</span>
|
||||||
|
<span class="k">if</span> <span class="n">ready</span> <span class="ow">and</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pool_uuids</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Starting upload </span><span class="si">%s</span><span class="s2">..."</span><span class="p">,</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">pool_uuids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">callback</span> <span class="o">=</span> <span class="n">remover</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">pool</span><span class="o">.</span><span class="n">apply_async</span><span class="p">(</span>
|
||||||
|
<span class="n">upload</span><span class="o">.</span><span class="n">execute</span><span class="p">,</span>
|
||||||
|
<span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),),</span>
|
||||||
|
<span class="n">callback</span><span class="o">=</span><span class="n">callback</span><span class="p">,</span>
|
||||||
|
<span class="n">error_callback</span><span class="o">=</span><span class="n">callback</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
411
docs/html/_modules/lifted/upload.html
Normal file
411
docs/html/_modules/lifted/upload.html
Normal file
@ -0,0 +1,411 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>lifted.upload — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../_static/jquery.js"></script>
|
||||||
|
<script src="../../_static/underscore.js"></script>
|
||||||
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li>lifted.upload</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for lifted.upload</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="kn">import</span> <span class="n">current_process</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">signal</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">uuid</span> <span class="kn">import</span> <span class="n">uuid4</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">ansible_runner.interface</span> <span class="kn">import</span> <span class="n">run</span> <span class="k">as</span> <span class="n">ansible_run</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">ansible_runner.exceptions</span> <span class="kn">import</span> <span class="n">AnsibleRunnerException</span>
|
||||||
|
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lifted"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload">[docs]</a><span class="k">class</span> <span class="nc">Upload</span><span class="p">:</span>
|
||||||
|
<span class="sd">"""Represents an upload of an image to a cloud provider. Instances of this</span>
|
||||||
|
<span class="sd"> class are serialized as TOML and stored in the upload queue directory,</span>
|
||||||
|
<span class="sd"> which is /var/lib/lorax/upload/queue/ by default"""</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="p">,</span>
|
||||||
|
<span class="n">uuid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">provider_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">playbook_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">creation_time</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">upload_log</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">upload_pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">image_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">status</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="p">):</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">uuid</span> <span class="o">=</span> <span class="n">uuid</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid4</span><span class="p">())</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">provider_name</span> <span class="o">=</span> <span class="n">provider_name</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">playbook_path</span> <span class="o">=</span> <span class="n">playbook_path</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">image_name</span> <span class="o">=</span> <span class="n">image_name</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">creation_time</span> <span class="o">=</span> <span class="n">creation_time</span> <span class="ow">or</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">upload_log</span> <span class="o">=</span> <span class="n">upload_log</span> <span class="ow">or</span> <span class="s2">""</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span> <span class="o">=</span> <span class="n">upload_pid</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">image_path</span> <span class="o">=</span> <span class="n">image_path</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"WAITING"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Logs something to the upload log with an optional callback</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param message: the object to log</span>
|
||||||
|
<span class="sd"> :type message: object</span>
|
||||||
|
<span class="sd"> :param callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">message</span><span class="p">:</span>
|
||||||
|
<span class="n">messages</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">)</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># Log multi-line messages as individual log lines</span>
|
||||||
|
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">messages</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">upload_log</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span>
|
||||||
|
<span class="k">if</span> <span class="n">callback</span><span class="p">:</span>
|
||||||
|
<span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.serializable"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.serializable">[docs]</a> <span class="k">def</span> <span class="nf">serializable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Returns a representation of the object as a dict for serialization</span>
|
||||||
|
|
||||||
|
<span class="sd"> :returns: the object's __dict__</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.summary"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.summary">[docs]</a> <span class="k">def</span> <span class="nf">summary</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a dict with useful information about the upload</span>
|
||||||
|
|
||||||
|
<span class="sd"> :returns: upload information</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"uuid"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
||||||
|
<span class="s2">"status"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">,</span>
|
||||||
|
<span class="s2">"provider_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">provider_name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"image_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"image_path"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">,</span>
|
||||||
|
<span class="s2">"creation_time"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">creation_time</span><span class="p">,</span>
|
||||||
|
<span class="s2">"settings"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span>
|
||||||
|
<span class="p">}</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.set_status"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.set_status">[docs]</a> <span class="k">def</span> <span class="nf">set_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Sets the status of the upload with an optional callback</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param status: the new status</span>
|
||||||
|
<span class="sd"> :type status: str</span>
|
||||||
|
<span class="sd"> :param status_callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type status_callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Setting status to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">status</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
|
||||||
|
<span class="k">if</span> <span class="n">status_callback</span><span class="p">:</span>
|
||||||
|
<span class="n">status_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.ready"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.ready">[docs]</a> <span class="k">def</span> <span class="nf">ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image_path</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Provide an image_path and mark the upload as ready to execute</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param image_path: path of the image to upload</span>
|
||||||
|
<span class="sd"> :type image_path: str</span>
|
||||||
|
<span class="sd"> :param status_callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type status_callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Setting image_path to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">image_path</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">image_path</span> <span class="o">=</span> <span class="n">image_path</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"WAITING"</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"READY"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.reset"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.reset">[docs]</a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Reset the upload so it can be attempted again</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param status_callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type status_callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Can't reset, status is </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="si">}</span><span class="s2">!"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Can't reset, no image supplied yet!"</span><span class="p">)</span>
|
||||||
|
<span class="c1"># self.error = None</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Resetting state"</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"READY"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.is_cancellable"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.is_cancellable">[docs]</a> <span class="k">def</span> <span class="nf">is_cancellable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Is the upload in a cancellable state?</span>
|
||||||
|
|
||||||
|
<span class="sd"> :returns: whether the upload is cancellable</span>
|
||||||
|
<span class="sd"> :rtype: bool</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"WAITING"</span><span class="p">,</span> <span class="s2">"READY"</span><span class="p">,</span> <span class="s2">"RUNNING"</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.cancel"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.cancel">[docs]</a> <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Cancel the upload. Sends a SIGINT to self.upload_pid.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param status_callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type status_callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Can't cancel, status is already </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="si">}</span><span class="s2">!"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span><span class="p">:</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span><span class="p">,</span> <span class="n">signal</span><span class="o">.</span><span class="n">SIGINT</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"CANCELLED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="Upload.execute"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Execute the upload. Meant to be called from a dedicated process so</span>
|
||||||
|
<span class="sd"> that the upload can be cancelled by sending a SIGINT to</span>
|
||||||
|
<span class="sd"> self.upload_pid.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param status_callback: a function of the form callback(self)</span>
|
||||||
|
<span class="sd"> :type status_callback: function</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">!=</span> <span class="s2">"READY"</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"This upload is not ready!"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span> <span class="o">=</span> <span class="n">current_process</span><span class="p">()</span><span class="o">.</span><span class="n">pid</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"RUNNING"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Executing playbook.yml"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># NOTE: event_handler doesn't seem to be called for playbook errors</span>
|
||||||
|
<span class="n">logger</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s2">"stdout"</span><span class="p">],</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">runner</span> <span class="o">=</span> <span class="n">ansible_run</span><span class="p">(</span>
|
||||||
|
<span class="n">playbook</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">playbook_path</span><span class="p">,</span>
|
||||||
|
<span class="n">extravars</span><span class="o">=</span><span class="p">{</span>
|
||||||
|
<span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span>
|
||||||
|
<span class="s2">"image_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"image_path"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">,</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="n">event_handler</span><span class="o">=</span><span class="n">logger</span><span class="p">,</span>
|
||||||
|
<span class="n">verbosity</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Try logging events and stats -- but they may not exist, so catch the error</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">runner</span><span class="o">.</span><span class="n">events</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">dir</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">runner</span><span class="o">.</span><span class="n">stats</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">AnsibleRunnerException</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">runner</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">runner</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"successful"</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FINISHED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FAILED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">traceback</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">(</span><span class="n">limit</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span></div></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||||||
<script src="../_static/jquery.js"></script>
|
<script src="../_static/jquery.js"></script>
|
||||||
<script src="../_static/underscore.js"></script>
|
<script src="../_static/underscore.js"></script>
|
||||||
<script src="../_static/doctools.js"></script>
|
<script src="../_static/doctools.js"></script>
|
||||||
<script src="../_static/js/theme.js"></script>
|
<script src="../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../genindex.html" />
|
<link rel="index" title="Index" href="../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../search.html" />
|
<link rel="search" title="Search" href="../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../index.html" class="icon icon-home"> Lorax
|
<a href="../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,36 +71,84 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../index.html">Lorax</a>
|
<a href="../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="index.html">Module code</a> »</li>
|
<li><a href="index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li>pylorax</li>
|
<li>pylorax</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -132,8 +218,7 @@
|
|||||||
<span class="n">DRACUT_DEFAULT</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--xz"</span><span class="p">,</span> <span class="s2">"--install"</span><span class="p">,</span> <span class="s2">"/.buildstamp"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">,</span> <span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"fips"</span><span class="p">]</span>
|
<span class="n">DRACUT_DEFAULT</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--xz"</span><span class="p">,</span> <span class="s2">"--install"</span><span class="p">,</span> <span class="s2">"/.buildstamp"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">,</span> <span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"fips"</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># Used for DNF conf.module_platform_id</span>
|
<span class="c1"># Used for DNF conf.module_platform_id</span>
|
||||||
<span class="n">DEFAULT_PLATFORM_ID</span> <span class="o">=</span> <span class="s2">"platform:f36"</span>
|
<span class="n">DEFAULT_PLATFORM_ID</span> <span class="o">=</span> <span class="s2">"platform:f32"</span>
|
||||||
<span class="n">DEFAULT_RELEASEVER</span> <span class="o">=</span> <span class="s2">"36"</span>
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="ArchData"><a class="viewcode-back" href="../pylorax.html#pylorax.ArchData">[docs]</a><span class="k">class</span> <span class="nc">ArchData</span><span class="p">(</span><span class="n">DataHolder</span><span class="p">):</span>
|
<div class="viewcode-block" id="ArchData"><a class="viewcode-back" href="../pylorax.html#pylorax.ArchData">[docs]</a><span class="k">class</span> <span class="nc">ArchData</span><span class="p">(</span><span class="n">DataHolder</span><span class="p">):</span>
|
||||||
<span class="n">lib64_arches</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"x86_64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">,</span> <span class="s2">"s390x"</span><span class="p">,</span> <span class="s2">"ia64"</span><span class="p">,</span> <span class="s2">"aarch64"</span><span class="p">)</span>
|
<span class="n">lib64_arches</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"x86_64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">,</span> <span class="s2">"s390x"</span><span class="p">,</span> <span class="s2">"ia64"</span><span class="p">,</span> <span class="s2">"aarch64"</span><span class="p">)</span>
|
||||||
@ -531,30 +616,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
250
docs/html/_modules/pylorax/api/bisect.html
Normal file
250
docs/html/_modules/pylorax/api/bisect.html
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.bisect — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.bisect</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.bisect</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<div class="viewcode-block" id="insort_left"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.bisect.insort_left">[docs]</a><span class="k">def</span> <span class="nf">insort_left</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lo</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Insert item x in list a, and keep it sorted assuming a is sorted.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param a: sorted list</span>
|
||||||
|
<span class="sd"> :type a: list</span>
|
||||||
|
<span class="sd"> :param x: item to insert into the list</span>
|
||||||
|
<span class="sd"> :type x: object</span>
|
||||||
|
<span class="sd"> :param key: Function to use to compare items in the list</span>
|
||||||
|
<span class="sd"> :type key: function</span>
|
||||||
|
<span class="sd"> :returns: index where the item was inserted</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> If x is already in a, insert it to the left of the leftmost x.</span>
|
||||||
|
<span class="sd"> Optional args lo (default 0) and hi (default len(a)) bound the</span>
|
||||||
|
<span class="sd"> slice of a to be searched.</span>
|
||||||
|
|
||||||
|
<span class="sd"> This is a modified version of bisect.insort_left that can use a</span>
|
||||||
|
<span class="sd"> function for the compare, and returns the index position where it</span>
|
||||||
|
<span class="sd"> was inserted.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">key</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">key</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">lo</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'lo must be non-negative'</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">hi</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">hi</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||||
|
<span class="k">while</span> <span class="n">lo</span> <span class="o"><</span> <span class="n">hi</span><span class="p">:</span>
|
||||||
|
<span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">lo</span><span class="o">+</span><span class="n">hi</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span>
|
||||||
|
<span class="k">if</span> <span class="n">key</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">mid</span><span class="p">])</span> <span class="o"><</span> <span class="n">key</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="n">lo</span> <span class="o">=</span> <span class="n">mid</span><span class="o">+</span><span class="mi">1</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span> <span class="n">hi</span> <span class="o">=</span> <span class="n">mid</span>
|
||||||
|
<span class="n">a</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">lo</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">lo</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
245
docs/html/_modules/pylorax/api/checkparams.html
Normal file
245
docs/html/_modules/pylorax/api/checkparams.html
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.checkparams — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.checkparams</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.checkparams</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">jsonify</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">update_wrapper</span>
|
||||||
|
|
||||||
|
<span class="c1"># A decorator for checking the parameters provided to the API route implementing</span>
|
||||||
|
<span class="c1"># functions. The tuples parameter is a list of tuples. Each tuple is the string</span>
|
||||||
|
<span class="c1"># name of a parameter ("blueprint_name", not blueprint_name), the value it's set</span>
|
||||||
|
<span class="c1"># to by flask if the caller did not provide it, and a message to be returned to</span>
|
||||||
|
<span class="c1"># the user.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># If the parameter is set to its default, the error message is returned. Otherwise,</span>
|
||||||
|
<span class="c1"># the decorated function is called and its return value is returned.</span>
|
||||||
|
<div class="viewcode-block" id="checkparams"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.checkparams.checkparams">[docs]</a><span class="k">def</span> <span class="nf">checkparams</span><span class="p">(</span><span class="n">tuples</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">wrapped_function</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||||
|
<span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">tuples</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">==</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"(</span><span class="si">%s</span><span class="s2">) </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
||||||
|
<span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="p">[</span><span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]]),</span> <span class="mi">400</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">update_wrapper</span><span class="p">(</span><span class="n">wrapped_function</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">decorator</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
264
docs/html/_modules/pylorax/api/cmdline.html
Normal file
264
docs/html/_modules/pylorax/api/cmdline.html
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.cmdline — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.cmdline</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.cmdline</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># cmdline.py</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">argparse</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">vernum</span>
|
||||||
|
|
||||||
|
<span class="n">DEFAULT_USER</span> <span class="o">=</span> <span class="s2">"root"</span>
|
||||||
|
<span class="n">DEFAULT_GROUP</span> <span class="o">=</span> <span class="s2">"weldr"</span>
|
||||||
|
|
||||||
|
<span class="n">version</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2">-</span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">vernum</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="lorax_composer_parser"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.cmdline.lorax_composer_parser">[docs]</a><span class="k">def</span> <span class="nf">lorax_composer_parser</span><span class="p">():</span>
|
||||||
|
<span class="sd">""" Return the ArgumentParser for lorax-composer"""</span>
|
||||||
|
|
||||||
|
<span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">"Lorax Composer API Server"</span><span class="p">,</span>
|
||||||
|
<span class="n">fromfile_prefix_chars</span><span class="o">=</span><span class="s2">"@"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--socket"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/run/weldr/api.socket"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"SOCKET"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to the socket file to listen on"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--user"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_USER</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"USER"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"User to use for reduced permissions"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--group"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_GROUP</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"GROUP"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Group to set ownership of the socket to"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--log"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"logfile"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/var/log/lorax-composer/composer.log"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"LOG"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to logfile (/var/log/lorax-composer/composer.log)"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--mockfiles"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/var/tmp/bdcs-mockfiles/"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"MOCKFILES"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to JSON files used for /api/mock/ paths (/var/tmp/bdcs-mockfiles/)"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--sharedir"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"SHAREDIR"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Directory containing all the templates. Overrides config file sharedir"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-V"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"showver"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"show program's version number and exit"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-c"</span><span class="p">,</span> <span class="s2">"--config"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/etc/lorax/composer.conf"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"CONFIG"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to lorax-composer configuration file."</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--releasever"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"STRING"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Release version to use for $releasever in dnf repository urls"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--tmp"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"/var/tmp"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Top level temporary directory"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--proxy"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"PROXY"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Set proxy for DNF, overrides configuration file setting."</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--no-system-repos"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Do not copy over system repos from /etc/yum.repos.d/ at startup"</span><span class="p">)</span>
|
||||||
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"BLUEPRINTS"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"BLUEPRINTS"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to the blueprints"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">parser</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1468
docs/html/_modules/pylorax/api/compose.html
Normal file
1468
docs/html/_modules/pylorax/api/compose.html
Normal file
File diff suppressed because it is too large
Load Diff
341
docs/html/_modules/pylorax/api/config.html
Normal file
341
docs/html/_modules/pylorax/api/config.html
Normal file
@ -0,0 +1,341 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.config — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.config</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.config</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">configparser</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">grp</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">pwd</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="ComposerConfig"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.ComposerConfig">[docs]</a><span class="k">class</span> <span class="nc">ComposerConfig</span><span class="p">(</span><span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">):</span>
|
||||||
|
<div class="viewcode-block" id="ComposerConfig.get_default"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.ComposerConfig.get_default">[docs]</a> <span class="k">def</span> <span class="nf">get_default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">section</span><span class="p">,</span> <span class="n">option</span><span class="p">,</span> <span class="n">default</span><span class="p">):</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">section</span><span class="p">,</span> <span class="n">option</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">configparser</span><span class="o">.</span><span class="n">Error</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">default</span></div></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="configure"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.configure">[docs]</a><span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="n">conf_file</span><span class="o">=</span><span class="s2">"/etc/lorax/composer.conf"</span><span class="p">,</span> <span class="n">root_dir</span><span class="o">=</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">test_config</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""lorax-composer configuration</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param conf_file: Path to the config file overriding the default settings</span>
|
||||||
|
<span class="sd"> :type conf_file: str</span>
|
||||||
|
<span class="sd"> :param root_dir: Directory to prepend to paths, defaults to /</span>
|
||||||
|
<span class="sd"> :type root_dir: str</span>
|
||||||
|
<span class="sd"> :param test_config: Set to True to skip reading conf_file</span>
|
||||||
|
<span class="sd"> :type test_config: bool</span>
|
||||||
|
<span class="sd"> :returns: Configuration</span>
|
||||||
|
<span class="sd"> :rtype: ComposerConfig</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">conf</span> <span class="o">=</span> <span class="n">ComposerConfig</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># set defaults</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">)</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"share_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/usr/share/lorax/"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/lib/lorax/composer/"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"repo_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/lib/lorax/composer/repos.d/"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_conf"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/dnf.conf"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_root"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/dnf/root/"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"cache_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/cache/"</span><span class="p">)))</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"tmp"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/"</span><span class="p">)))</span>
|
||||||
|
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"users"</span><span class="p">)</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"users"</span><span class="p">,</span> <span class="s2">"root"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Enable all available repo files by default</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">)</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">)</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"enabled"</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">test_config</span><span class="p">:</span>
|
||||||
|
<span class="c1"># read the config file</span>
|
||||||
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">conf_file</span><span class="p">):</span>
|
||||||
|
<span class="n">conf</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">conf_file</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">conf</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_owned_dir"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_owned_dir">[docs]</a><span class="k">def</span> <span class="nf">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Make a directory and its parents, setting owner and group</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param p_dir: path to directory to create</span>
|
||||||
|
<span class="sd"> :type p_dir: string</span>
|
||||||
|
<span class="sd"> :param uid: uid of owner</span>
|
||||||
|
<span class="sd"> :type uid: int</span>
|
||||||
|
<span class="sd"> :param gid: gid of owner</span>
|
||||||
|
<span class="sd"> :type gid: int</span>
|
||||||
|
<span class="sd"> :returns: list of errors</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
|
||||||
|
<span class="sd"> Check to make sure it does not have o+rw permissions and that it is owned by uid:gid</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Make sure no o+rw permissions are set</span>
|
||||||
|
<span class="n">orig_umask</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">umask</span><span class="p">(</span><span class="mo">0o006</span><span class="p">)</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="mo">0o771</span><span class="p">)</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">chown</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">)</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">umask</span><span class="p">(</span><span class="n">orig_umask</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">p_stat</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">p_dir</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_mode</span> <span class="o">&</span> <span class="mo">0o006</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"Incorrect permissions on </span><span class="si">%s</span><span class="s2">, no o+rw permissions are allowed."</span> <span class="o">%</span> <span class="n">p_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_gid</span> <span class="o">!=</span> <span class="n">gid</span> <span class="ow">or</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_uid</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">gr_name</span> <span class="o">=</span> <span class="n">grp</span><span class="o">.</span><span class="n">getgrgid</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span><span class="o">.</span><span class="n">gr_name</span>
|
||||||
|
<span class="n">u_name</span> <span class="o">=</span> <span class="n">pwd</span><span class="o">.</span><span class="n">getpwuid</span><span class="p">(</span><span class="n">uid</span><span class="p">)</span>
|
||||||
|
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> should be owned by </span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">u_name</span><span class="p">,</span> <span class="n">gr_name</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">errors</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_dnf_dirs"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_dnf_dirs">[docs]</a><span class="k">def</span> <span class="nf">make_dnf_dirs</span><span class="p">(</span><span class="n">conf</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Make any missing dnf directories owned by user:group</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param conf: The configuration to use</span>
|
||||||
|
<span class="sd"> :type conf: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uid: uid of owner</span>
|
||||||
|
<span class="sd"> :type uid: int</span>
|
||||||
|
<span class="sd"> :param gid: gid of owner</span>
|
||||||
|
<span class="sd"> :type gid: int</span>
|
||||||
|
<span class="sd"> :returns: list of errors</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"dnf_conf"</span><span class="p">,</span> <span class="s2">"repo_dir"</span><span class="p">,</span> <span class="s2">"cache_dir"</span><span class="p">,</span> <span class="s2">"dnf_root"</span><span class="p">]:</span>
|
||||||
|
<span class="n">p_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s2">"dnf_conf"</span><span class="p">:</span>
|
||||||
|
<span class="n">p_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">p_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_queue_dirs"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_queue_dirs">[docs]</a><span class="k">def</span> <span class="nf">make_queue_dirs</span><span class="p">(</span><span class="n">conf</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Make any missing queue directories</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param conf: The configuration to use</span>
|
||||||
|
<span class="sd"> :type conf: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param gid: Group ID that has access to the queue directories</span>
|
||||||
|
<span class="sd"> :type gid: int</span>
|
||||||
|
<span class="sd"> :returns: list of errors</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="n">lib_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"queue/run"</span><span class="p">,</span> <span class="s2">"queue/new"</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">]:</span>
|
||||||
|
<span class="n">p_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span>
|
||||||
|
<span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gid</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">errors</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
264
docs/html/_modules/pylorax/api/crossdomain.html
Normal file
264
docs/html/_modules/pylorax/api/crossdomain.html
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.crossdomain — Lorax 31.7 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script type="text/javascript" src="../../../_static/jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="../../../_static/underscore.js"></script>
|
||||||
|
<script type="text/javascript" src="../../../_static/doctools.js"></script>
|
||||||
|
<script type="text/javascript" src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
31.7
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.crossdomain</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.crossdomain</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="c1"># crossdomain decorator from - http://flask.pocoo.org/snippets/56/</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">timedelta</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">flask</span> <span class="k">import</span> <span class="n">make_response</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">current_app</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">update_wrapper</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="crossdomain"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.crossdomain.crossdomain">[docs]</a><span class="k">def</span> <span class="nf">crossdomain</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">max_age</span><span class="o">=</span><span class="mi">21600</span><span class="p">,</span> <span class="n">attach_to_all</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">automatic_options</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">methods</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">methods</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">methods</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="n">headers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">headers</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||||
|
<span class="n">headers</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
|
||||||
|
<span class="n">origin</span> <span class="o">=</span> <span class="p">[</span><span class="n">origin</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">max_age</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">):</span>
|
||||||
|
<span class="n">max_age</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">max_age</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">())</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">get_methods</span><span class="p">():</span>
|
||||||
|
<span class="k">if</span> <span class="n">methods</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">methods</span>
|
||||||
|
|
||||||
|
<span class="n">options_resp</span> <span class="o">=</span> <span class="n">current_app</span><span class="o">.</span><span class="n">make_default_options_response</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">options_resp</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">'allow'</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">wrapped_function</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">automatic_options</span> <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">'OPTIONS'</span><span class="p">:</span>
|
||||||
|
<span class="n">resp</span> <span class="o">=</span> <span class="n">current_app</span><span class="o">.</span><span class="n">make_default_options_response</span><span class="p">()</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">resp</span> <span class="o">=</span> <span class="n">make_response</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">attach_to_all</span> <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">!=</span> <span class="s1">'OPTIONS'</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">resp</span>
|
||||||
|
|
||||||
|
<span class="n">h</span> <span class="o">=</span> <span class="n">resp</span><span class="o">.</span><span class="n">headers</span>
|
||||||
|
|
||||||
|
<span class="n">h</span><span class="o">.</span><span class="n">extend</span><span class="p">([(</span><span class="s2">"Access-Control-Allow-Origin"</span><span class="p">,</span> <span class="n">orig</span><span class="p">)</span> <span class="k">for</span> <span class="n">orig</span> <span class="ow">in</span> <span class="n">origin</span><span class="p">])</span>
|
||||||
|
<span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Allow-Methods'</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_methods</span><span class="p">()</span>
|
||||||
|
<span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Max-Age'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">max_age</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">headers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Allow-Headers'</span><span class="p">]</span> <span class="o">=</span> <span class="n">headers</span>
|
||||||
|
<span class="k">return</span> <span class="n">resp</span>
|
||||||
|
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">provide_automatic_options</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">required_methods</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'OPTIONS'</span><span class="p">]</span>
|
||||||
|
<span class="k">return</span> <span class="n">update_wrapper</span><span class="p">(</span><span class="n">wrapped_function</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">decorator</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
387
docs/html/_modules/pylorax/api/dnfbase.html
Normal file
387
docs/html/_modules/pylorax/api/dnfbase.html
Normal file
@ -0,0 +1,387 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.dnfbase — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.dnfbase</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.dnfbase</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017-2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># pylint: disable=bad-preconf-access</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">dnf</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">dnf.logging</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">threading</span> <span class="kn">import</span> <span class="n">Lock</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_PLATFORM_ID</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">flatconfig</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="DNFLock"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.dnfbase.DNFLock">[docs]</a><span class="k">class</span> <span class="nc">DNFLock</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Hold the dnf.Base object and a Lock to control access to it.</span>
|
||||||
|
|
||||||
|
<span class="sd"> self.dbo is a property that returns the dnf.Base object, but it *may* change</span>
|
||||||
|
<span class="sd"> from one call to the next if the upstream repositories have changed.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conf</span><span class="p">,</span> <span class="n">expire_secs</span><span class="o">=</span><span class="mi">6</span><span class="o">*</span><span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="p">):</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_conf</span> <span class="o">=</span> <span class="n">conf</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span> <span class="o">=</span> <span class="n">get_base_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_conf</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_expire_secs</span> <span class="o">=</span> <span class="n">expire_secs</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_expire_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_expire_secs</span>
|
||||||
|
|
||||||
|
<span class="nd">@property</span>
|
||||||
|
<span class="k">def</span> <span class="nf">lock</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Check for repo updates (using expiration time) and return the lock</span>
|
||||||
|
|
||||||
|
<span class="sd"> If the repository has been updated, tear down the old dnf.Base and</span>
|
||||||
|
<span class="sd"> create a new one. This is the only way to force dnf to use the new</span>
|
||||||
|
<span class="sd"> metadata.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">_expire_time</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">lock_check</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span>
|
||||||
|
|
||||||
|
<span class="nd">@property</span>
|
||||||
|
<span class="k">def</span> <span class="nf">lock_check</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Force a check for repo updates and return the lock</span>
|
||||||
|
|
||||||
|
<span class="sd"> Use this method sparingly, it removes the repodata and downloads a new copy every time.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_expire_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_expire_secs</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">update_cache</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lock</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_base_object"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.dnfbase.get_base_object">[docs]</a><span class="k">def</span> <span class="nf">get_base_object</span><span class="p">(</span><span class="n">conf</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Get the DNF object with settings from the config file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param conf: configuration object</span>
|
||||||
|
<span class="sd"> :type conf: ComposerParser</span>
|
||||||
|
<span class="sd"> :returns: A DNF Base object</span>
|
||||||
|
<span class="sd"> :rtype: dnf.Base</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cachedir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"cache_dir"</span><span class="p">))</span>
|
||||||
|
<span class="n">dnfconf</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_conf"</span><span class="p">))</span>
|
||||||
|
<span class="n">dnfroot</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_root"</span><span class="p">))</span>
|
||||||
|
<span class="n">repodir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"repo_dir"</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Setup the config for the DNF Base object</span>
|
||||||
|
<span class="n">dbo</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">Base</span><span class="p">()</span>
|
||||||
|
<span class="n">dbc</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span>
|
||||||
|
<span class="c1"># TODO - Handle this</span>
|
||||||
|
<span class="c1"># dbc.logdir = logdir</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">installroot</span> <span class="o">=</span> <span class="n">dnfroot</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">dnfroot</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">dnfroot</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">repodir</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">repodir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">cachedir</span> <span class="o">=</span> <span class="n">cachedir</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">reposdir</span> <span class="o">=</span> <span class="p">[</span><span class="n">repodir</span><span class="p">]</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">install_weak_deps</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">prepend_installroot</span><span class="p">(</span><span class="s1">'persistdir'</span><span class="p">)</span>
|
||||||
|
<span class="c1"># this is a weird 'AppendOption' thing that, when you set it,</span>
|
||||||
|
<span class="c1"># actually appends. Doing this adds 'nodocs' to the existing list</span>
|
||||||
|
<span class="c1"># of values, over in libdnf, it does not replace the existing values.</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">tsflags</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'nodocs'</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">conf</span><span class="o">.</span><span class="n">get_default</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">,</span> <span class="s2">"proxy"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">,</span> <span class="s2">"proxy"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">conf</span><span class="o">.</span><span class="n">has_option</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">,</span> <span class="s2">"sslverify"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">conf</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">,</span> <span class="s2">"sslverify"</span><span class="p">):</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">sslverify</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="c1"># If the system repos are enabled read the dnf vars from /etc/dnf/vars/</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">conf</span><span class="o">.</span><span class="n">has_option</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">conf</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">):</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">substitutions</span><span class="o">.</span><span class="n">update_from_etc</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dnf vars: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dbc</span><span class="o">.</span><span class="n">substitutions</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">_releasever</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get_default</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"releasever"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_releasever</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Use the releasever of the host system</span>
|
||||||
|
<span class="n">_releasever</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">rpm</span><span class="o">.</span><span class="n">detect_releasever</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"releasever = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">_releasever</span><span class="p">)</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">releasever</span> <span class="o">=</span> <span class="n">_releasever</span>
|
||||||
|
|
||||||
|
<span class="c1"># DNF 3.2 needs to have module_platform_id set, otherwise depsolve won't work correctly</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/etc/os-release"</span><span class="p">):</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"/etc/os-release is missing, cannot determine platform id, falling back to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">)</span>
|
||||||
|
<span class="n">platform_id</span> <span class="o">=</span> <span class="n">DEFAULT_PLATFORM_ID</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">os_release</span> <span class="o">=</span> <span class="n">flatconfig</span><span class="p">(</span><span class="s2">"/etc/os-release"</span><span class="p">)</span>
|
||||||
|
<span class="n">platform_id</span> <span class="o">=</span> <span class="n">os_release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"PLATFORM_ID"</span><span class="p">,</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using </span><span class="si">%s</span><span class="s2"> for module_platform_id"</span><span class="p">,</span> <span class="n">platform_id</span><span class="p">)</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">module_platform_id</span> <span class="o">=</span> <span class="n">platform_id</span>
|
||||||
|
|
||||||
|
<span class="c1"># Make sure metadata is always current</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">metadata_expire</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="n">dbc</span><span class="o">.</span><span class="n">metadata_expire_filter</span> <span class="o">=</span> <span class="s2">"never"</span>
|
||||||
|
|
||||||
|
<span class="c1"># write the dnf configuration file</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">dnfconf</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">dbc</span><span class="o">.</span><span class="n">dump</span><span class="p">())</span>
|
||||||
|
|
||||||
|
<span class="c1"># dnf needs the repos all in one directory, composer uses repodir for this</span>
|
||||||
|
<span class="c1"># if system repos are supposed to be used, copy them into repodir, overwriting any previous copies</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">conf</span><span class="o">.</span><span class="n">has_option</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">conf</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">):</span>
|
||||||
|
<span class="k">for</span> <span class="n">repo_file</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="s2">"/etc/yum.repos.d/*.repo"</span><span class="p">):</span>
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">repo_file</span><span class="p">,</span> <span class="n">repodir</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">read_all_repos</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># Remove any duplicate repo entries. These can cause problems with Anaconda, which will fail</span>
|
||||||
|
<span class="c1"># with space problems.</span>
|
||||||
|
<span class="n">repos</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">()))</span>
|
||||||
|
<span class="n">seen</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"baseurl"</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">"mirrorlist"</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">"metalink"</span><span class="p">:</span> <span class="p">[]}</span>
|
||||||
|
<span class="k">for</span> <span class="n">source_name</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span>
|
||||||
|
<span class="n">remove</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="n">repo</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">source_name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"repo </span><span class="si">%s</span><span class="s2"> vanished while removing duplicates"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">)</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"baseurl"</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> baseurl=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">seen</span><span class="p">[</span><span class="s2">"baseurl"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> mirrorlist=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">)</span>
|
||||||
|
<span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">seen</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">)</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> metalink=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">)</span>
|
||||||
|
<span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">seen</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">remove</span><span class="p">:</span>
|
||||||
|
<span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Update the metadata from the enabled repos to speed up later operations</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata"</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">update_cache</span><span class="p">()</span>
|
||||||
|
<span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to update metadata: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Fetching metadata failed: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">dbo</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
255
docs/html/_modules/pylorax/api/flask_blueprint.html
Normal file
255
docs/html/_modules/pylorax/api/flask_blueprint.html
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.flask_blueprint — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.flask_blueprint</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.flask_blueprint</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="sd">""" Flask Blueprints that support skipping routes</span>
|
||||||
|
|
||||||
|
<span class="sd">When using Blueprints for API versioning you will usually want to fall back</span>
|
||||||
|
<span class="sd">to the previous version's rules for routes that have no new behavior. To do</span>
|
||||||
|
<span class="sd">this we add a 'skip_rule' list to the Blueprint's options dictionary. It lists</span>
|
||||||
|
<span class="sd">all of the routes that you do not want to register.</span>
|
||||||
|
|
||||||
|
<span class="sd">For example:</span>
|
||||||
|
<span class="sd"> from pylorax.api.v0 import v0</span>
|
||||||
|
<span class="sd"> from pylorax.api.v1 import v1</span>
|
||||||
|
|
||||||
|
<span class="sd"> server.register_blueprint(v0, url_prefix="/api/v0/")</span>
|
||||||
|
<span class="sd"> server.register_blueprint(v0, url_prefix="/api/v1/", skip_rules=["/blueprints/list"]</span>
|
||||||
|
<span class="sd"> server.register_blueprint(v1, url_prefix="/api/v1/")</span>
|
||||||
|
|
||||||
|
<span class="sd">This will register all of v0's routes under `/api/v0`, and all but `/blueprints/list` under /api/v1,</span>
|
||||||
|
<span class="sd">and then register v1's version of `/blueprints/list` under `/api/v1`</span>
|
||||||
|
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Blueprint</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">flask.blueprints</span> <span class="kn">import</span> <span class="n">BlueprintSetupState</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="BlueprintSetupStateSkip"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSetupStateSkip">[docs]</a><span class="k">class</span> <span class="nc">BlueprintSetupStateSkip</span><span class="p">(</span><span class="n">BlueprintSetupState</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">,</span> <span class="n">skip_rules</span><span class="p">):</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_skip_rules</span> <span class="o">=</span> <span class="n">skip_rules</span>
|
||||||
|
<span class="nb">super</span><span class="p">(</span><span class="n">BlueprintSetupStateSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="BlueprintSetupStateSkip.add_url_rule"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSetupStateSkip.add_url_rule">[docs]</a> <span class="k">def</span> <span class="nf">add_url_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule</span><span class="p">,</span> <span class="n">endpoint</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">view_func</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">rule</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_rules</span><span class="p">:</span>
|
||||||
|
<span class="nb">super</span><span class="p">(</span><span class="n">BlueprintSetupStateSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">add_url_rule</span><span class="p">(</span><span class="n">rule</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">view_func</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span></div></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="BlueprintSkip"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSkip">[docs]</a><span class="k">class</span> <span class="nc">BlueprintSkip</span><span class="p">(</span><span class="n">Blueprint</span><span class="p">):</span>
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||||
|
<span class="nb">super</span><span class="p">(</span><span class="n">BlueprintSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="BlueprintSkip.make_setup_state"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSkip.make_setup_state">[docs]</a> <span class="k">def</span> <span class="nf">make_setup_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="n">skip_rules</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"skip_rules"</span><span class="p">,</span> <span class="p">[])</span>
|
||||||
|
<span class="k">return</span> <span class="n">BlueprintSetupStateSkip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">,</span> <span class="n">skip_rules</span><span class="p">)</span></div></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
423
docs/html/_modules/pylorax/api/gitrpm.html
Normal file
423
docs/html/_modules/pylorax/api/gitrpm.html
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.gitrpm — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.gitrpm</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.gitrpm</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="sd">""" Clone a git repository and package it as an rpm</span>
|
||||||
|
|
||||||
|
<span class="sd">This module contains functions for cloning a git repo, creating a tar archive of</span>
|
||||||
|
<span class="sd">the selected commit, branch, or tag, and packaging the files into an rpm that will</span>
|
||||||
|
<span class="sd">be installed by anaconda when creating the image.</span>
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">rpmfluff</span> <span class="kn">import</span> <span class="n">SimpleRpmBuild</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">subprocess</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">tempfile</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_repo_description"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.get_repo_description">[docs]</a><span class="k">def</span> <span class="nf">get_repo_description</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">):</span>
|
||||||
|
<span class="sd">""" Return a description including the git repo and reference</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param gitRepo: A dict with the repository details</span>
|
||||||
|
<span class="sd"> :type gitRepo: dict</span>
|
||||||
|
<span class="sd"> :returns: A string with the git repo url and reference</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"Created from </span><span class="si">%s</span><span class="s2">, reference '</span><span class="si">%s</span><span class="s2">', on </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">gitRepo</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">],</span> <span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">())</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitArchiveTarball"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitArchiveTarball">[docs]</a><span class="k">class</span> <span class="nc">GitArchiveTarball</span><span class="p">:</span>
|
||||||
|
<span class="sd">"""Create a git archive of the selected git repo and reference"""</span>
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gitRepo</span><span class="p">):</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span> <span class="o">=</span> <span class="n">gitRepo</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">sourceName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"rpmname"</span><span class="p">]</span><span class="o">+</span><span class="s2">".tar.xz"</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitArchiveTarball.write_file"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitArchiveTarball.write_file">[docs]</a> <span class="k">def</span> <span class="nf">write_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sourcesDir</span><span class="p">):</span>
|
||||||
|
<span class="sd">""" Create the tar archive</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param sourcesDir: Path to use for creating the archive</span>
|
||||||
|
<span class="sd"> :type sourcesDir: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> This clones the git repository and creates a git archive from the specified reference.</span>
|
||||||
|
<span class="sd"> The result is in RPMNAME.tar.xz under the sourcesDir</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Clone the repository into a temporary location</span>
|
||||||
|
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"git"</span><span class="p">,</span> <span class="s2">"clone"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="s2">"gitrepo"</span><span class="p">)]</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to clone </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Failed to clone </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="n">oldcwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="s2">"gitrepo"</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Configure archive to create a .tar.xz</span>
|
||||||
|
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"git"</span><span class="p">,</span> <span class="s2">"config"</span><span class="p">,</span> <span class="s2">"tar.tar.xz.command"</span><span class="p">,</span> <span class="s2">"xz -c"</span><span class="p">]</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
|
||||||
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"git"</span><span class="p">,</span> <span class="s2">"archive"</span><span class="p">,</span> <span class="s2">"--prefix"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"rpmname"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"/"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sourceName</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]]</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to archive </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s1">'Failed to archive </span><span class="si">%s</span><span class="s1"> from ref "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]))</span>
|
||||||
|
<span class="k">finally</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Cleanup even if there was an error</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">oldcwd</span><span class="p">)</span>
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="s2">"gitrepo"</span><span class="p">))</span></div></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild">[docs]</a><span class="k">class</span> <span class="nc">GitRpmBuild</span><span class="p">(</span><span class="n">SimpleRpmBuild</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Build an rpm containing files from a git repository"""</span>
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild.check"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild.check">[docs]</a> <span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild.get_base_dir"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild.get_base_dir">[docs]</a> <span class="k">def</span> <span class="nf">get_base_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Place all the files under a temporary directory + rpmbuild/</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkdtemp</span><span class="p">(</span><span class="n">prefix</span><span class="o">=</span><span class="s2">"lorax-git-rpm."</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">joinpaths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span><span class="p">,</span> <span class="s2">"rpmbuild"</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild.cleanup_tmpdir"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild.cleanup_tmpdir">[docs]</a> <span class="k">def</span> <span class="nf">cleanup_tmpdir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Remove the temporary directory and all of its contents</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span><span class="p">)</span> <span class="o"><</span> <span class="mi">5</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Invalid base_dir: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_base_dir</span><span class="p">())</span>
|
||||||
|
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_base_dir</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild.clean"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild.clean">[docs]</a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Remove the base directory from inside the tmpdir"""</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_base_dir</span><span class="p">())</span> <span class="o"><</span> <span class="mi">5</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Invalid base_dir: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_base_dir</span><span class="p">())</span>
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_base_dir</span><span class="p">(),</span> <span class="n">ignore_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="GitRpmBuild.add_git_tarball"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild.add_git_tarball">[docs]</a> <span class="k">def</span> <span class="nf">add_git_tarball</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gitRepo</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add a tar archive of a git repository to the rpm</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param gitRepo: A dict with the repository details</span>
|
||||||
|
<span class="sd"> :type gitRepo: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> This populates the rpm with the URL of the git repository, the summary</span>
|
||||||
|
<span class="sd"> describing the repo, the description of the repository and reference used,</span>
|
||||||
|
<span class="sd"> and sets up the rpm to install the archive contents into the destination</span>
|
||||||
|
<span class="sd"> path.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">addUrl</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">])</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_summary</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"summary"</span><span class="p">])</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_description</span><span class="p">(</span><span class="n">get_repo_description</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">))</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">addLicense</span><span class="p">(</span><span class="s2">"Unknown"</span><span class="p">)</span>
|
||||||
|
<span class="n">sourceIndex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_source</span><span class="p">(</span><span class="n">GitArchiveTarball</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">))</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">section_build</span> <span class="o">+=</span> <span class="s2">"tar -xvf </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">sources</span><span class="p">[</span><span class="n">sourceIndex</span><span class="p">]</span><span class="o">.</span><span class="n">sourceName</span>
|
||||||
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"destination"</span><span class="p">])</span>
|
||||||
|
<span class="c1"># Prevent double slash root</span>
|
||||||
|
<span class="k">if</span> <span class="n">dest</span> <span class="o">==</span> <span class="s2">"/"</span><span class="p">:</span>
|
||||||
|
<span class="n">dest</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">create_parent_dirs</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">section_install</span> <span class="o">+=</span> <span class="s2">"cp -r </span><span class="si">%s</span><span class="s2">/. $RPM_BUILD_ROOT/</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"rpmname"</span><span class="p">],</span> <span class="n">dest</span><span class="p">)</span>
|
||||||
|
<span class="n">sub</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_subpackage</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">dest</span><span class="p">:</span>
|
||||||
|
<span class="c1"># / is special, we don't want to include / itself, just what's under it</span>
|
||||||
|
<span class="n">sub</span><span class="o">.</span><span class="n">section_files</span> <span class="o">+=</span> <span class="s2">"/*</span><span class="se">\n</span><span class="s2">"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">sub</span><span class="o">.</span><span class="n">section_files</span> <span class="o">+=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">/</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">dest</span></div></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_git_rpm"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.make_git_rpm">[docs]</a><span class="k">def</span> <span class="nf">make_git_rpm</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
||||||
|
<span class="sd">""" Create an rpm from the specified git repo</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param gitRepo: A dict with the repository details</span>
|
||||||
|
<span class="sd"> :type gitRepo: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> This will clone the git repository, create an archive of the selected reference,</span>
|
||||||
|
<span class="sd"> and build an rpm that will install the files from the repository under the destination</span>
|
||||||
|
<span class="sd"> directory. The gitRepo dict should have the following fields::</span>
|
||||||
|
|
||||||
|
<span class="sd"> rpmname: "server-config"</span>
|
||||||
|
<span class="sd"> rpmversion: "1.0"</span>
|
||||||
|
<span class="sd"> rpmrelease: "1"</span>
|
||||||
|
<span class="sd"> summary: "Setup files for server deployment"</span>
|
||||||
|
<span class="sd"> repo: "PATH OF GIT REPO TO CLONE"</span>
|
||||||
|
<span class="sd"> ref: "v1.0"</span>
|
||||||
|
<span class="sd"> destination: "/opt/server/"</span>
|
||||||
|
|
||||||
|
<span class="sd"> * rpmname: Name of the rpm to create, also used as the prefix name in the tar archive</span>
|
||||||
|
<span class="sd"> * rpmversion: Version of the rpm, eg. "1.0.0"</span>
|
||||||
|
<span class="sd"> * rpmrelease: Release of the rpm, eg. "1"</span>
|
||||||
|
<span class="sd"> * summary: Summary string for the rpm</span>
|
||||||
|
<span class="sd"> * repo: URL of the get repo to clone and create the archive from</span>
|
||||||
|
<span class="sd"> * ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash</span>
|
||||||
|
<span class="sd"> * destination: Path to install the / of the git repo at when installing the rpm</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">gitRpm</span> <span class="o">=</span> <span class="n">GitRpmBuild</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">[</span><span class="s2">"rpmname"</span><span class="p">],</span> <span class="n">gitRepo</span><span class="p">[</span><span class="s2">"rpmversion"</span><span class="p">],</span> <span class="n">gitRepo</span><span class="p">[</span><span class="s2">"rpmrelease"</span><span class="p">],</span> <span class="p">[</span><span class="s2">"noarch"</span><span class="p">])</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">gitRpm</span><span class="o">.</span><span class="n">add_git_tarball</span><span class="p">(</span><span class="n">gitRepo</span><span class="p">)</span>
|
||||||
|
<span class="n">gitRpm</span><span class="o">.</span><span class="n">do_make</span><span class="p">()</span>
|
||||||
|
<span class="n">rpmfile</span> <span class="o">=</span> <span class="n">gitRpm</span><span class="o">.</span><span class="n">get_built_rpm</span><span class="p">(</span><span class="s2">"noarch"</span><span class="p">)</span>
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">rpmfile</span><span class="p">,</span> <span class="n">dest</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Creating git repo rpm: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Creating git repo rpm: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
|
||||||
|
<span class="k">finally</span><span class="p">:</span>
|
||||||
|
<span class="n">gitRpm</span><span class="o">.</span><span class="n">cleanup_tmpdir</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">rpmfile</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<span class="c1"># Create the git rpms, if any, and return the path to the repo under results_dir</span>
|
||||||
|
<div class="viewcode-block" id="create_gitrpm_repo"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.create_gitrpm_repo">[docs]</a><span class="k">def</span> <span class="nf">create_gitrpm_repo</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="n">recipe</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Create a dnf repository with the rpms from the recipe</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param results_dir: Path to create the repository under</span>
|
||||||
|
<span class="sd"> :type results_dir: str</span>
|
||||||
|
<span class="sd"> :param recipe: The recipe to get the repos.git entries from</span>
|
||||||
|
<span class="sd"> :type recipe: Recipe</span>
|
||||||
|
<span class="sd"> :returns: Path to the dnf repository or ""</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> This function creates a dnf repository directory at results_dir+"repo/",</span>
|
||||||
|
<span class="sd"> creates rpms for all of the repos.git entries in the recipe, runs createrepo_c</span>
|
||||||
|
<span class="sd"> on the dnf repository so that Anaconda can use it, and returns the path to the</span>
|
||||||
|
<span class="sd"> repository to the caller.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"repos"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">recipe</span> <span class="ow">or</span> <span class="s2">"git"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">recipe</span><span class="p">[</span><span class="s2">"repos"</span><span class="p">]:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">""</span>
|
||||||
|
|
||||||
|
<span class="n">gitrepo</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"repo/"</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">gitrepo</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">gitrepo</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">recipe</span><span class="p">[</span><span class="s2">"repos"</span><span class="p">][</span><span class="s2">"git"</span><span class="p">]:</span>
|
||||||
|
<span class="n">make_git_rpm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">gitrepo</span><span class="p">)</span>
|
||||||
|
<span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"createrepo_c"</span><span class="p">,</span> <span class="n">gitrepo</span><span class="p">]</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to create repo at </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">gitrepo</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Failed to create repo at </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">gitrepo</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">gitrepo</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
898
docs/html/_modules/pylorax/api/projects.html
Normal file
898
docs/html/_modules/pylorax/api/projects.html
Normal file
@ -0,0 +1,898 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.projects — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.projects</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.projects</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">configparser</span> <span class="kn">import</span> <span class="n">ConfigParser</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">dnf</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.bisect</span> <span class="kn">import</span> <span class="n">insort_left</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S"</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="ProjectsError"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.ProjectsError">[docs]</a><span class="k">class</span> <span class="nc">ProjectsError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
||||||
|
<span class="k">pass</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="api_time"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.api_time">[docs]</a><span class="k">def</span> <span class="nf">api_time</span><span class="p">(</span><span class="n">t</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Convert time since epoch to a string</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param t: Seconds since epoch</span>
|
||||||
|
<span class="sd"> :type t: int</span>
|
||||||
|
<span class="sd"> :returns: Time string</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">t</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="api_changelog"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.api_changelog">[docs]</a><span class="k">def</span> <span class="nf">api_changelog</span><span class="p">(</span><span class="n">changelog</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Convert the changelog to a string</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param changelog: A list of time, author, string tuples.</span>
|
||||||
|
<span class="sd"> :type changelog: tuple</span>
|
||||||
|
<span class="sd"> :returns: The most recent changelog text or ""</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> This returns only the most recent changelog entry.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">entry</span> <span class="o">=</span> <span class="n">changelog</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||||
|
<span class="n">entry</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="k">return</span> <span class="n">entry</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pkg_to_project"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_project">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_project</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Extract the details from a hawkey.Package object</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkgs: hawkey.Package object with package details</span>
|
||||||
|
<span class="sd"> :type pkgs: hawkey.Package</span>
|
||||||
|
<span class="sd"> :returns: A dict with the name, summary, description, and url.</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> upstream_vcs is hard-coded to UPSTREAM_VCS</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"summary"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">summary</span><span class="p">,</span>
|
||||||
|
<span class="s2">"description"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
||||||
|
<span class="s2">"homepage"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">url</span><span class="p">,</span>
|
||||||
|
<span class="s2">"upstream_vcs"</span><span class="p">:</span> <span class="s2">"UPSTREAM_VCS"</span><span class="p">}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pkg_to_build"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_build">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_build</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Extract the build details from a hawkey.Package object</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkg: hawkey.Package object with package details</span>
|
||||||
|
<span class="sd"> :type pkg: hawkey.Package</span>
|
||||||
|
<span class="sd"> :returns: A dict with the build details, epoch, release, arch, build_time, changelog, ...</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> metadata entries are hard-coded to {}</span>
|
||||||
|
|
||||||
|
<span class="sd"> Note that this only returns the build dict, it does not include the name, description, etc.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"epoch"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">epoch</span><span class="p">,</span>
|
||||||
|
<span class="s2">"release"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">,</span>
|
||||||
|
<span class="s2">"arch"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span>
|
||||||
|
<span class="s2">"build_time"</span><span class="p">:</span> <span class="n">api_time</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">buildtime</span><span class="p">),</span>
|
||||||
|
<span class="s2">"changelog"</span><span class="p">:</span> <span class="s2">"CHANGELOG_NEEDED"</span><span class="p">,</span> <span class="c1"># XXX Not in hawkey.Package</span>
|
||||||
|
<span class="s2">"build_config_ref"</span><span class="p">:</span> <span class="s2">"BUILD_CONFIG_REF"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"build_env_ref"</span><span class="p">:</span> <span class="s2">"BUILD_ENV_REF"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"metadata"</span><span class="p">:</span> <span class="p">{},</span>
|
||||||
|
<span class="s2">"source"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"license"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">license</span><span class="p">,</span>
|
||||||
|
<span class="s2">"version"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
|
||||||
|
<span class="s2">"source_ref"</span><span class="p">:</span> <span class="s2">"SOURCE_REF"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"metadata"</span><span class="p">:</span> <span class="p">{}}}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pkg_to_project_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_project_info">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_project_info</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Extract the details from a hawkey.Package object</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkg: hawkey.Package object with package details</span>
|
||||||
|
<span class="sd"> :type pkg: hawkey.Package</span>
|
||||||
|
<span class="sd"> :returns: A dict with the project details, as well as epoch, release, arch, build_time, changelog, ...</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> metadata entries are hard-coded to {}</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"summary"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">summary</span><span class="p">,</span>
|
||||||
|
<span class="s2">"description"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
||||||
|
<span class="s2">"homepage"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">url</span><span class="p">,</span>
|
||||||
|
<span class="s2">"upstream_vcs"</span><span class="p">:</span> <span class="s2">"UPSTREAM_VCS"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"builds"</span><span class="p">:</span> <span class="p">[</span><span class="n">pkg_to_build</span><span class="p">(</span><span class="n">pkg</span><span class="p">)]}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="pkg_to_dep"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_dep">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_dep</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Extract the info from a hawkey.Package object</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkg: A hawkey.Package object</span>
|
||||||
|
<span class="sd"> :type pkg: hawkey.Package</span>
|
||||||
|
<span class="sd"> :returns: A dict with name, epoch, version, release, arch</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
||||||
|
<span class="s2">"epoch"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">epoch</span><span class="p">,</span>
|
||||||
|
<span class="s2">"version"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
|
||||||
|
<span class="s2">"release"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">,</span>
|
||||||
|
<span class="s2">"arch"</span><span class="p">:</span> <span class="n">pkg</span><span class="o">.</span><span class="n">arch</span><span class="p">}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="proj_to_module"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.proj_to_module">[docs]</a><span class="k">def</span> <span class="nf">proj_to_module</span><span class="p">(</span><span class="n">proj</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Extract the name from a project_info dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param pkg: dict with package details</span>
|
||||||
|
<span class="sd"> :type pkg: dict</span>
|
||||||
|
<span class="sd"> :returns: A dict with name, and group_type</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> group_type is hard-coded to "rpm"</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">proj</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"group_type"</span><span class="p">:</span> <span class="s2">"rpm"</span><span class="p">}</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dep_evra"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dep_evra">[docs]</a><span class="k">def</span> <span class="nf">dep_evra</span><span class="p">(</span><span class="n">dep</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the epoch:version-release.arch for the dep</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dep: dependency dict</span>
|
||||||
|
<span class="sd"> :type dep: dict</span>
|
||||||
|
<span class="sd"> :returns: epoch:version-release.arch</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"release"</span><span class="p">]</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">dep</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">])</span><span class="o">+</span><span class="s2">":"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"release"</span><span class="p">]</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dep_nevra"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dep_nevra">[docs]</a><span class="k">def</span> <span class="nf">dep_nevra</span><span class="p">(</span><span class="n">dep</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the name-epoch:version-release.arch"""</span>
|
||||||
|
<span class="k">return</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep_evra</span><span class="p">(</span><span class="n">dep</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_list"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_list">[docs]</a><span class="k">def</span> <span class="nf">projects_list</span><span class="p">(</span><span class="n">dbo</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a list of projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :returns: List of project info dicts with name, summary, description, homepage, upstream_vcs</span>
|
||||||
|
<span class="sd"> :rtype: list of dicts</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_info">[docs]</a><span class="k">def</span> <span class="nf">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">project_names</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return details about specific projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param project_names: List of names of projects to get info about</span>
|
||||||
|
<span class="sd"> :type project_names: str</span>
|
||||||
|
<span class="sd"> :returns: List of project info dicts with pkg_to_project as well as epoch, version, release, etc.</span>
|
||||||
|
<span class="sd"> :rtype: list of dicts</span>
|
||||||
|
|
||||||
|
<span class="sd"> If project_names is None it will return the full list of available packages</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">project_names</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">available</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name__glob</span><span class="o">=</span><span class="n">project_names</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">available</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># iterate over pkgs</span>
|
||||||
|
<span class="c1"># - if pkg.name isn't in the results yet, add pkg_to_project_info in sorted position</span>
|
||||||
|
<span class="c1"># - if pkg.name is already in results, get its builds. If the build for pkg is different</span>
|
||||||
|
<span class="c1"># in any way (version, arch, etc.) add it to the entry's builds list. If it is the same,</span>
|
||||||
|
<span class="c1"># skip it.</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="n">results_names</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results_names</span><span class="p">:</span>
|
||||||
|
<span class="n">idx</span> <span class="o">=</span> <span class="n">insort_left</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">pkg_to_project_info</span><span class="p">(</span><span class="n">p</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||||
|
<span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">idx</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">build</span> <span class="o">=</span> <span class="n">pkg_to_build</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">build</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]][</span><span class="s2">"builds"</span><span class="p">]:</span>
|
||||||
|
<span class="n">results</span><span class="p">[</span><span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]][</span><span class="s2">"builds"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">build</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">results</span></div>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add projects to a new transaction</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param projects: The projects and version globs to find the dependencies for</span>
|
||||||
|
<span class="sd"> :type projects: List of tuples</span>
|
||||||
|
<span class="sd"> :param groups: The groups to include in dependency solving</span>
|
||||||
|
<span class="sd"> :type groups: List of str</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> :rtype: None</span>
|
||||||
|
<span class="sd"> :raises: ProjectsError if there was a problem installing something</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># This resets the transaction and updates the cache.</span>
|
||||||
|
<span class="c1"># It is important that the cache always be synchronized because Anaconda will grab its own copy</span>
|
||||||
|
<span class="c1"># and if that is different the NEVRAs will not match and the build will fail.</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="n">goal</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||||
|
<span class="n">install_errors</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">groups</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">group_install</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s2">"mandatory"</span><span class="p">,</span> <span class="s2">"default"</span><span class="p">])</span>
|
||||||
|
<span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">MarkingError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">install_errors</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s2">"Group </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">version</span> <span class="ow">in</span> <span class="n">projects</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Find the best package matching the name + version glob</span>
|
||||||
|
<span class="c1"># dnf can return multiple packages if it is in more than 1 repository</span>
|
||||||
|
<span class="n">query</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">provides__glob</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">version</span><span class="p">:</span>
|
||||||
|
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">version__glob</span><span class="o">=</span><span class="n">version</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">query</span><span class="p">:</span>
|
||||||
|
<span class="n">install_errors</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">version</span><span class="p">),</span> <span class="s2">"No match"</span><span class="p">))</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">sltr</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">selector</span><span class="o">.</span><span class="n">Selector</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">pkg</span><span class="o">=</span><span class="n">query</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># NOTE: dnf says in near future there will be a "goal" attribute of Base class</span>
|
||||||
|
<span class="c1"># so yes, we're using a 'private' attribute here on purpose and with permission.</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">_goal</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">select</span><span class="o">=</span><span class="n">sltr</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">install_errors</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"The following package(s) had problems: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span> <span class="k">for</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">install_errors</span><span class="p">]))</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_depsolve"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_depsolve">[docs]</a><span class="k">def</span> <span class="nf">projects_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the dependencies for a list of projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param projects: The projects to find the dependencies for</span>
|
||||||
|
<span class="sd"> :type projects: List of Strings</span>
|
||||||
|
<span class="sd"> :param groups: The groups to include in dependency solving</span>
|
||||||
|
<span class="sd"> :type groups: List of str</span>
|
||||||
|
<span class="sd"> :returns: NEVRA's of the project and its dependencies</span>
|
||||||
|
<span class="sd"> :rtype: list of dicts</span>
|
||||||
|
<span class="sd"> :raises: ProjectsError if there was a problem installing something</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
|
||||||
|
<span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">DepsolveError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"There was a problem depsolving </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">projects</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">pkg_to_dep</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="estimate_size"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.estimate_size">[docs]</a><span class="k">def</span> <span class="nf">estimate_size</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">block_size</span><span class="o">=</span><span class="mi">6144</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Estimate the installed size of a package list</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param packages: The packages to be installed</span>
|
||||||
|
<span class="sd"> :type packages: list of hawkey.Package objects</span>
|
||||||
|
<span class="sd"> :param block_size: The block size to use for rounding up file sizes.</span>
|
||||||
|
<span class="sd"> :type block_size: int</span>
|
||||||
|
<span class="sd"> :returns: The estimated size of installed packages</span>
|
||||||
|
<span class="sd"> :rtype: int</span>
|
||||||
|
|
||||||
|
<span class="sd"> Estimating actual requirements is difficult without the actual file sizes, which</span>
|
||||||
|
<span class="sd"> dnf doesn't provide access to. So use the file count and block size to estimate</span>
|
||||||
|
<span class="sd"> a minimum size for each package.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">installed_size</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">packages</span><span class="p">:</span>
|
||||||
|
<span class="n">installed_size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> <span class="o">*</span> <span class="n">block_size</span>
|
||||||
|
<span class="n">installed_size</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">installsize</span>
|
||||||
|
<span class="k">return</span> <span class="n">installed_size</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="projects_depsolve_with_size"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_depsolve_with_size">[docs]</a><span class="k">def</span> <span class="nf">projects_depsolve_with_size</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">with_core</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the dependencies and installed size for a list of projects</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param project_names: The projects to find the dependencies for</span>
|
||||||
|
<span class="sd"> :type project_names: List of Strings</span>
|
||||||
|
<span class="sd"> :param groups: The groups to include in dependency solving</span>
|
||||||
|
<span class="sd"> :type groups: List of str</span>
|
||||||
|
<span class="sd"> :returns: installed size and a list of NEVRA's of the project and its dependencies</span>
|
||||||
|
<span class="sd"> :rtype: tuple of (int, list of dicts)</span>
|
||||||
|
<span class="sd"> :raises: ProjectsError if there was a problem installing something</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">with_core</span><span class="p">:</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">group_install</span><span class="p">(</span><span class="s2">"core"</span><span class="p">,</span> <span class="p">[</span><span class="s1">'mandatory'</span><span class="p">,</span> <span class="s1">'default'</span><span class="p">,</span> <span class="s1">'optional'</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
|
||||||
|
<span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">DepsolveError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"There was a problem depsolving </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">projects</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">[])</span>
|
||||||
|
|
||||||
|
<span class="n">installed_size</span> <span class="o">=</span> <span class="n">estimate_size</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">)</span>
|
||||||
|
<span class="n">deps</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">pkg_to_dep</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">installed_size</span><span class="p">,</span> <span class="n">deps</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="modules_list"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.modules_list">[docs]</a><span class="k">def</span> <span class="nf">modules_list</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a list of modules</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param offset: Number of modules to skip</span>
|
||||||
|
<span class="sd"> :type limit: int</span>
|
||||||
|
<span class="sd"> :param limit: Maximum number of modules to return</span>
|
||||||
|
<span class="sd"> :type limit: int</span>
|
||||||
|
<span class="sd"> :returns: List of module information and total count</span>
|
||||||
|
<span class="sd"> :rtype: tuple of a list of dicts and an Int</span>
|
||||||
|
|
||||||
|
<span class="sd"> Modules don't exist in RHEL7 so this only returns projects</span>
|
||||||
|
<span class="sd"> and sets the type to "rpm"</span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># TODO - Figure out what to do with this for Fedora 'modules'</span>
|
||||||
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">proj_to_module</span><span class="p">,</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">)))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="modules_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.modules_info">[docs]</a><span class="k">def</span> <span class="nf">modules_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return details about a module, including dependencies</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param module_names: Names of the modules to get info about</span>
|
||||||
|
<span class="sd"> :type module_names: str</span>
|
||||||
|
<span class="sd"> :returns: List of dicts with module details and dependencies.</span>
|
||||||
|
<span class="sd"> :rtype: list of dicts</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">modules</span> <span class="o">=</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Add the dependency info to each one</span>
|
||||||
|
<span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
|
||||||
|
<span class="n">module</span><span class="p">[</span><span class="s2">"dependencies"</span><span class="p">]</span> <span class="o">=</span> <span class="n">projects_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="p">[(</span><span class="n">module</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="s2">"*.*"</span><span class="p">)],</span> <span class="p">[])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">modules</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dnf_repo_to_file_repo"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dnf_repo_to_file_repo">[docs]</a><span class="k">def</span> <span class="nf">dnf_repo_to_file_repo</span><span class="p">(</span><span class="n">repo</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a string representation of a DNF Repo object suitable for writing to a .repo file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: DNF Repository</span>
|
||||||
|
<span class="sd"> :type repo: dnf.RepoDict</span>
|
||||||
|
<span class="sd"> :returns: A string</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> The DNF Repo.dump() function does not produce a string that can be used as a dnf .repo file,</span>
|
||||||
|
<span class="sd"> it ouputs baseurl and gpgkey as python lists which DNF cannot read. So do this manually with</span>
|
||||||
|
<span class="sd"> only the attributes we care about.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">=</span> <span class="s2">"[</span><span class="si">%s</span><span class="s2">]</span><span class="se">\n</span><span class="s2">name = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"metalink = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"mirrorlist = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"baseurl = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Repo has no baseurl, metalink, or mirrorlist"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># proxy is optional</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"proxy = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span>
|
||||||
|
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"sslverify = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">sslverify</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"gpgcheck = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgcheck</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"gpgkey = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">skip_if_unavailable</span><span class="p">:</span>
|
||||||
|
<span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"skip_if_unavailable=1</span><span class="se">\n</span><span class="s2">"</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">repo_str</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="repo_to_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.repo_to_source">[docs]</a><span class="k">def</span> <span class="nf">repo_to_source</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">system_source</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a Weldr Source dict created from the DNF Repository</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: DNF Repository</span>
|
||||||
|
<span class="sd"> :type repo: dnf.RepoDict</span>
|
||||||
|
<span class="sd"> :param system_source: True if this source is an immutable system source</span>
|
||||||
|
<span class="sd"> :type system_source: bool</span>
|
||||||
|
<span class="sd"> :param api: Select which api version of the dict to return (default 1)</span>
|
||||||
|
<span class="sd"> :type api: int</span>
|
||||||
|
<span class="sd"> :returns: A dict with Weldr Source fields filled in</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> Example::</span>
|
||||||
|
|
||||||
|
<span class="sd"> {</span>
|
||||||
|
<span class="sd"> "check_gpg": true,</span>
|
||||||
|
<span class="sd"> "check_ssl": true,</span>
|
||||||
|
<span class="sd"> "gpgkey_url": [</span>
|
||||||
|
<span class="sd"> "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"</span>
|
||||||
|
<span class="sd"> ],</span>
|
||||||
|
<span class="sd"> "id": "fedora",</span>
|
||||||
|
<span class="sd"> "name": "Fedora $releasever - $basearch",</span>
|
||||||
|
<span class="sd"> "proxy": "http://proxy.brianlane.com:8123",</span>
|
||||||
|
<span class="sd"> "system": true</span>
|
||||||
|
<span class="sd"> "type": "yum-metalink",</span>
|
||||||
|
<span class="sd"> "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"</span>
|
||||||
|
<span class="sd"> }</span>
|
||||||
|
|
||||||
|
<span class="sd"> The ``name`` field has changed in v1 of the API.</span>
|
||||||
|
<span class="sd"> In v0 of the API ``name`` is the repo.id, in v1 it is the repo.name and a new field,</span>
|
||||||
|
<span class="sd"> ``id`` has been added for the repo.id</span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">api</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="s2">"system"</span><span class="p">:</span> <span class="n">system_source</span><span class="p">}</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"system"</span><span class="p">:</span> <span class="n">system_source</span><span class="p">}</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-baseurl"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-metalink"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-mirrorlist"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Repo has no baseurl, metalink, or mirrorlist"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># proxy is optional</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">sslverify</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgcheck</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">:</span>
|
||||||
|
<span class="n">source</span><span class="p">[</span><span class="s2">"gpgkey_urls"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">source</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="source_to_repodict"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.source_to_repodict">[docs]</a><span class="k">def</span> <span class="nf">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a tuple suitable for use with dnf.add_new_repo</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param source: A Weldr source dict</span>
|
||||||
|
<span class="sd"> :type source: dict</span>
|
||||||
|
<span class="sd"> :returns: A tuple of dnf.Repo attributes</span>
|
||||||
|
<span class="sd"> :rtype: (str, list, dict)</span>
|
||||||
|
|
||||||
|
<span class="sd"> Return a tuple with (id, baseurl|(), kwargs) that can be used</span>
|
||||||
|
<span class="sd"> with dnf.repos.add_new_repo</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"id"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span>
|
||||||
|
<span class="c1"># This is an API v1 source definition</span>
|
||||||
|
<span class="n">repoid</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"id"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"name"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">repoid</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># This will allow errors to be raised so we can catch them</span>
|
||||||
|
<span class="c1"># without this they are logged, but the repo is silently disabled</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"skip_if_unavailable"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-baseurl"</span><span class="p">:</span>
|
||||||
|
<span class="n">baseurl</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]]</span>
|
||||||
|
<span class="k">elif</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-metalink"</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span>
|
||||||
|
<span class="n">baseurl</span> <span class="o">=</span> <span class="p">()</span>
|
||||||
|
<span class="k">elif</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-mirrorlist"</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span>
|
||||||
|
<span class="n">baseurl</span> <span class="o">=</span> <span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"proxy"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"sslverify"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"sslverify"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgcheck"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgcheck"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="s2">"gpgkey_urls"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span>
|
||||||
|
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgkey"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">source</span><span class="p">[</span><span class="s2">"gpgkey_urls"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="source_to_repo"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.source_to_repo">[docs]</a><span class="k">def</span> <span class="nf">source_to_repo</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dnf_conf</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a dnf Repo object created from a source dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param source: A Weldr source dict</span>
|
||||||
|
<span class="sd"> :type source: dict</span>
|
||||||
|
<span class="sd"> :param dnf_conf: The dnf Config object</span>
|
||||||
|
<span class="sd"> :type dnf_conf: dnf.conf</span>
|
||||||
|
<span class="sd"> :returns: A dnf Repo object</span>
|
||||||
|
<span class="sd"> :rtype: dnf.Repo</span>
|
||||||
|
|
||||||
|
<span class="sd"> Example::</span>
|
||||||
|
|
||||||
|
<span class="sd"> {</span>
|
||||||
|
<span class="sd"> "check_gpg": True,</span>
|
||||||
|
<span class="sd"> "check_ssl": True,</span>
|
||||||
|
<span class="sd"> "gpgkey_urls": [</span>
|
||||||
|
<span class="sd"> "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"</span>
|
||||||
|
<span class="sd"> ],</span>
|
||||||
|
<span class="sd"> "id": "fedora",</span>
|
||||||
|
<span class="sd"> "name": "Fedora $releasever - $basearch",</span>
|
||||||
|
<span class="sd"> "proxy": "http://proxy.brianlane.com:8123",</span>
|
||||||
|
<span class="sd"> "system": True</span>
|
||||||
|
<span class="sd"> "type": "yum-metalink",</span>
|
||||||
|
<span class="sd"> "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"</span>
|
||||||
|
<span class="sd"> }</span>
|
||||||
|
|
||||||
|
<span class="sd"> If the ``id`` field is included it is used for the repo id, otherwise ``name`` is used.</span>
|
||||||
|
<span class="sd"> v0 of the API only used ``name``, v1 added the distinction between ``id`` and ``name``.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
|
||||||
|
<span class="n">repo</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">repo</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">dnf_conf</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">baseurl</span><span class="p">:</span>
|
||||||
|
<span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span> <span class="o">=</span> <span class="n">baseurl</span>
|
||||||
|
|
||||||
|
<span class="c1"># Apply the rest of the kwargs to the Repo object</span>
|
||||||
|
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||||
|
<span class="nb">setattr</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">repo</span><span class="o">.</span><span class="n">enable</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">repo</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_source_ids"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.get_source_ids">[docs]</a><span class="k">def</span> <span class="nf">get_source_ids</span><span class="p">(</span><span class="n">source_path</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a list of the source ids in a file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param source_path: Full path and filename of the source (yum repo) file</span>
|
||||||
|
<span class="sd"> :type source_path: str</span>
|
||||||
|
<span class="sd"> :returns: A list of source id strings</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">source_path</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="n">cfg</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">()</span>
|
||||||
|
<span class="n">cfg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">source_path</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_repo_sources"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.get_repo_sources">[docs]</a><span class="k">def</span> <span class="nf">get_repo_sources</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a list of sources from a directory of yum repositories</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param source_glob: A glob to use to match the source files, including full path</span>
|
||||||
|
<span class="sd"> :type source_glob: str</span>
|
||||||
|
<span class="sd"> :returns: A list of the source ids in all of the matching files</span>
|
||||||
|
<span class="sd"> :rtype: list of str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">sources</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span>
|
||||||
|
<span class="n">sources</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">get_source_ids</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">sources</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="delete_repo_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.delete_repo_source">[docs]</a><span class="k">def</span> <span class="nf">delete_repo_source</span><span class="p">(</span><span class="n">source_glob</span><span class="p">,</span> <span class="n">source_id</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete a source from a repo file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param source_glob: A glob of the repo sources to search</span>
|
||||||
|
<span class="sd"> :type source_glob: str</span>
|
||||||
|
<span class="sd"> :param source_id: The repo id to delete</span>
|
||||||
|
<span class="sd"> :type source_id: str</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> :raises: ProjectsError if there was a problem</span>
|
||||||
|
|
||||||
|
<span class="sd"> A repo file may have multiple sources in it, delete only the selected source.</span>
|
||||||
|
<span class="sd"> If it is the last one in the file, delete the file.</span>
|
||||||
|
|
||||||
|
<span class="sd"> WARNING: This will delete ANY source, the caller needs to ensure that a system</span>
|
||||||
|
<span class="sd"> source_id isn't passed to it.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">found</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">cfg</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">()</span>
|
||||||
|
<span class="n">cfg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">source_id</span> <span class="ow">in</span> <span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">():</span>
|
||||||
|
<span class="n">found</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">cfg</span><span class="o">.</span><span class="n">remove_section</span><span class="p">(</span><span class="n">source_id</span><span class="p">)</span>
|
||||||
|
<span class="c1"># If there are other sections, rewrite the file without the deleted one</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">())</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">cfg_file</span><span class="p">:</span>
|
||||||
|
<span class="n">cfg</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">cfg_file</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># No sections left, just delete the file</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"Problem deleting repo source </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">source_id</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">found</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"source </span><span class="si">%s</span><span class="s2"> not found"</span> <span class="o">%</span> <span class="n">source_id</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="new_repo_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.new_repo_source">[docs]</a><span class="k">def</span> <span class="nf">new_repo_source</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">repo_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Add a new repo source from a Weldr source dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param dbo: dnf base object</span>
|
||||||
|
<span class="sd"> :type dbo: dnf.Base</span>
|
||||||
|
<span class="sd"> :param id: The repo id (API v0 uses the name, v1 uses the id)</span>
|
||||||
|
<span class="sd"> :type id: str</span>
|
||||||
|
<span class="sd"> :param source: A Weldr source dict</span>
|
||||||
|
<span class="sd"> :type source: dict</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> :raises: ...</span>
|
||||||
|
|
||||||
|
<span class="sd"> Make sure access to the dbo has been locked before calling this.</span>
|
||||||
|
<span class="sd"> The `id` parameter will the the 'name' field for API v0, and the 'id' field for API v1</span>
|
||||||
|
|
||||||
|
<span class="sd"> DNF variables will be substituted at load time, and on restart.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API)</span>
|
||||||
|
<span class="c1"># If this repo already exists, delete it and replace it with the new one</span>
|
||||||
|
<span class="n">repos</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">())</span>
|
||||||
|
<span class="k">if</span> <span class="n">repoid</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span>
|
||||||
|
<span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">repoid</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Add the repo and substitute any dnf variables</span>
|
||||||
|
<span class="n">_</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"repoid=</span><span class="si">%s</span><span class="s2">, baseurl=</span><span class="si">%s</span><span class="s2">, kwargs=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">add_new_repo</span><span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span><span class="o">.</span><span class="n">enable</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata after adding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="c1"># Remove any previous sources with this id, ignore it if it isn't found</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">delete_repo_source</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">repo_dir</span><span class="p">,</span> <span class="s2">"*.repo"</span><span class="p">),</span> <span class="n">repoid</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">ProjectsError</span><span class="p">:</span>
|
||||||
|
<span class="k">pass</span>
|
||||||
|
|
||||||
|
<span class="c1"># Make sure the source id can't contain a path traversal by taking the basename</span>
|
||||||
|
<span class="n">source_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">repo_dir</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">.repo"</span> <span class="o">%</span> <span class="n">repoid</span><span class="p">))</span>
|
||||||
|
<span class="c1"># Write the un-substituted version of the repo to disk</span>
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||||
|
<span class="n">repo</span> <span class="o">=</span> <span class="n">source_to_repo</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="p">)</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">dnf_repo_to_file_repo</span><span class="p">(</span><span class="n">repo</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"(new_repo_source) adding </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="c1"># Cleanup the mess, if loading it failed we don't want to leave it in memory</span>
|
||||||
|
<span class="n">repos</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">())</span>
|
||||||
|
<span class="k">if</span> <span class="n">repoid</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span>
|
||||||
|
<span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">repoid</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata after adding </span><span class="si">%s</span><span class="s2"> failed"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">raise</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1064
docs/html/_modules/pylorax/api/queue.html
Normal file
1064
docs/html/_modules/pylorax/api/queue.html
Normal file
File diff suppressed because it is too large
Load Diff
1477
docs/html/_modules/pylorax/api/recipes.html
Normal file
1477
docs/html/_modules/pylorax/api/recipes.html
Normal file
File diff suppressed because it is too large
Load Diff
304
docs/html/_modules/pylorax/api/server.html
Normal file
304
docs/html/_modules/pylorax/api/server.html
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.server — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.server</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.server</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017-2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Flask</span><span class="p">,</span> <span class="n">jsonify</span><span class="p">,</span> <span class="n">redirect</span><span class="p">,</span> <span class="n">send_from_directory</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">werkzeug</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">vernum</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.errors</span> <span class="kn">import</span> <span class="n">HTTP_ERROR</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.v0</span> <span class="kn">import</span> <span class="n">v0_api</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.v1</span> <span class="kn">import</span> <span class="n">v1_api</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<span class="n">GitLock</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">"GitLock"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"repo"</span><span class="p">,</span> <span class="s2">"lock"</span><span class="p">,</span> <span class="s2">"dir"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"server"</span><span class="p">,</span> <span class="s2">"GitLock"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="nd">@server</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span>
|
||||||
|
<span class="k">def</span> <span class="nf">server_root</span><span class="p">():</span>
|
||||||
|
<span class="n">redirect</span><span class="p">(</span><span class="s2">"/api/docs/"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="nd">@server</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/api/docs/"</span><span class="p">)</span>
|
||||||
|
<span class="nd">@server</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/api/docs/<path:path>"</span><span class="p">)</span>
|
||||||
|
<span class="k">def</span> <span class="nf">api_docs</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Find the html docs</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="c1"># This assumes it is running from the source tree</span>
|
||||||
|
<span class="n">docs_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">),</span> <span class="s2">"../../../docs/html"</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||||
|
<span class="n">docs_path</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="s2">"/usr/share/doc/lorax-*/html/"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">path</span><span class="p">:</span>
|
||||||
|
<span class="n">path</span><span class="o">=</span><span class="s2">"index.html"</span>
|
||||||
|
<span class="k">return</span> <span class="n">send_from_directory</span><span class="p">(</span><span class="n">docs_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="nd">@server</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">"/api/status"</span><span class="p">)</span>
|
||||||
|
<span class="k">def</span> <span class="nf">api_status</span><span class="p">():</span>
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="sd"> `/api/status`</span>
|
||||||
|
<span class="sd"> ^^^^^^^^^^^^^^^^</span>
|
||||||
|
<span class="sd"> Return the status of the API Server::</span>
|
||||||
|
|
||||||
|
<span class="sd"> { "api": "0",</span>
|
||||||
|
<span class="sd"> "build": "devel",</span>
|
||||||
|
<span class="sd"> "db_supported": true,</span>
|
||||||
|
<span class="sd"> "db_version": "0",</span>
|
||||||
|
<span class="sd"> "schema_version": "0",</span>
|
||||||
|
<span class="sd"> "backend": "lorax-composer",</span>
|
||||||
|
<span class="sd"> "msgs": []}</span>
|
||||||
|
|
||||||
|
<span class="sd"> The 'msgs' field can be a list of strings describing startup problems or status that</span>
|
||||||
|
<span class="sd"> should be displayed to the user. eg. if the compose templates are not depsolving properly</span>
|
||||||
|
<span class="sd"> the errors will be in 'msgs'.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">"lorax-composer"</span><span class="p">,</span>
|
||||||
|
<span class="n">build</span><span class="o">=</span><span class="n">vernum</span><span class="p">,</span>
|
||||||
|
<span class="n">api</span><span class="o">=</span><span class="s2">"1"</span><span class="p">,</span>
|
||||||
|
<span class="n">db_version</span><span class="o">=</span><span class="s2">"0"</span><span class="p">,</span>
|
||||||
|
<span class="n">schema_version</span><span class="o">=</span><span class="s2">"0"</span><span class="p">,</span>
|
||||||
|
<span class="n">db_supported</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">msgs</span><span class="o">=</span><span class="n">server</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"TEMPLATE_ERRORS"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="nd">@server</span><span class="o">.</span><span class="n">errorhandler</span><span class="p">(</span><span class="n">werkzeug</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPException</span><span class="p">)</span>
|
||||||
|
<span class="k">def</span> <span class="nf">bad_request</span><span class="p">(</span><span class="n">error</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="p">[{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="n">HTTP_ERROR</span><span class="p">,</span> <span class="s2">"code"</span><span class="p">:</span> <span class="n">error</span><span class="o">.</span><span class="n">code</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="n">error</span><span class="o">.</span><span class="n">name</span> <span class="p">}]),</span> <span class="n">error</span><span class="o">.</span><span class="n">code</span>
|
||||||
|
|
||||||
|
<span class="c1"># Register the v0 API on /api/v0/</span>
|
||||||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v0_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v0/"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Register the v1 API on /api/v1/</span>
|
||||||
|
<span class="c1"># Use v0 routes by default</span>
|
||||||
|
<span class="n">skip_rules</span> <span class="o">=</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"/compose"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/compose/queue"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/compose/finished"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/compose/failed"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/compose/status/<uuids>"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/compose/info/<uuid>"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/projects/source/info/<source_names>"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"/projects/source/new"</span><span class="p">,</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v0_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v1/"</span><span class="p">,</span> <span class="n">skip_rules</span><span class="o">=</span><span class="n">skip_rules</span><span class="p">)</span>
|
||||||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v1_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v1/"</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
252
docs/html/_modules/pylorax/api/timestamp.html
Normal file
252
docs/html/_modules/pylorax/api/timestamp.html
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.timestamp — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.timestamp</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.timestamp</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span>
|
||||||
|
|
||||||
|
<span class="n">TS_CREATED</span> <span class="o">=</span> <span class="s2">"created"</span>
|
||||||
|
<span class="n">TS_STARTED</span> <span class="o">=</span> <span class="s2">"started"</span>
|
||||||
|
<span class="n">TS_FINISHED</span> <span class="o">=</span> <span class="s2">"finished"</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="write_timestamp"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.timestamp.write_timestamp">[docs]</a><span class="k">def</span> <span class="nf">write_timestamp</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="n">ty</span><span class="p">):</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="s2">"times.toml"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">contents</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="n">contents</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_CREATED</span><span class="p">:</span>
|
||||||
|
<span class="n">contents</span><span class="p">[</span><span class="n">TS_CREATED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||||
|
<span class="k">elif</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_STARTED</span><span class="p">:</span>
|
||||||
|
<span class="n">contents</span><span class="p">[</span><span class="n">TS_STARTED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||||
|
<span class="k">elif</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_FINISHED</span><span class="p">:</span>
|
||||||
|
<span class="n">contents</span><span class="p">[</span><span class="n">TS_FINISHED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">contents</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="timestamp_dict"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.timestamp.timestamp_dict">[docs]</a><span class="k">def</span> <span class="nf">timestamp_dict</span><span class="p">(</span><span class="n">destdir</span><span class="p">):</span>
|
||||||
|
<span class="n">path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="s2">"times.toml"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
243
docs/html/_modules/pylorax/api/toml.html
Normal file
243
docs/html/_modules/pylorax/api/toml.html
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.toml — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.toml</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.toml</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">toml</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="TomlError"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.TomlError">[docs]</a><span class="k">class</span> <span class="nc">TomlError</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span><span class="p">):</span>
|
||||||
|
<span class="k">pass</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="loads"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.loads">[docs]</a><span class="k">def</span> <span class="nf">loads</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
|
||||||
|
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">TomlError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">pos</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dumps"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.dumps">[docs]</a><span class="k">def</span> <span class="nf">dumps</span><span class="p">(</span><span class="n">o</span><span class="p">):</span>
|
||||||
|
<span class="c1"># strip the result, because `toml.dumps` adds a lot of newlines</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">encoder</span><span class="o">=</span><span class="n">toml</span><span class="o">.</span><span class="n">TomlEncoder</span><span class="p">(</span><span class="nb">dict</span><span class="p">))</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="load"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.load">[docs]</a><span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">file</span><span class="p">):</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">TomlError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">pos</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="dump"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.dump">[docs]</a><span class="k">def</span> <span class="nf">dump</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">file</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
250
docs/html/_modules/pylorax/api/utils.html
Normal file
250
docs/html/_modules/pylorax/api/utils.html
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.utils — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.utils</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.utils</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="sd">""" API utility functions</span>
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.recipes</span> <span class="kn">import</span> <span class="n">RecipeError</span><span class="p">,</span> <span class="n">RecipeFileError</span><span class="p">,</span> <span class="n">read_recipe_commit</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="take_limits"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.utils.take_limits">[docs]</a><span class="k">def</span> <span class="nf">take_limits</span><span class="p">(</span><span class="n">iterable</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span>
|
||||||
|
<span class="sd">""" Apply offset and limit to an iterable object</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param iterable: The object to limit</span>
|
||||||
|
<span class="sd"> :type iterable: iter</span>
|
||||||
|
<span class="sd"> :param offset: The number of items to skip</span>
|
||||||
|
<span class="sd"> :type offset: int</span>
|
||||||
|
<span class="sd"> :param limit: The total number of items to return</span>
|
||||||
|
<span class="sd"> :type limit: int</span>
|
||||||
|
<span class="sd"> :returns: A subset of the iterable</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">iterable</span><span class="p">[</span><span class="n">offset</span><span class="p">:][:</span><span class="n">limit</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="blueprint_exists"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.utils.blueprint_exists">[docs]</a><span class="k">def</span> <span class="nf">blueprint_exists</span><span class="p">(</span><span class="n">api</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">blueprint_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return True if the blueprint exists</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param api: flask object</span>
|
||||||
|
<span class="sd"> :type api: Flask</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe_name: Recipe name to read</span>
|
||||||
|
<span class="sd"> :type recipe_name: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">with</span> <span class="n">api</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"GITLOCK"</span><span class="p">]</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span>
|
||||||
|
<span class="n">read_recipe_commit</span><span class="p">(</span><span class="n">api</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"GITLOCK"</span><span class="p">]</span><span class="o">.</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">blueprint_name</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="kc">True</span>
|
||||||
|
<span class="k">except</span> <span class="p">(</span><span class="n">RecipeError</span><span class="p">,</span> <span class="n">RecipeFileError</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="kc">False</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2198
docs/html/_modules/pylorax/api/v0.html
Normal file
2198
docs/html/_modules/pylorax/api/v0.html
Normal file
File diff suppressed because it is too large
Load Diff
1243
docs/html/_modules/pylorax/api/v1.html
Normal file
1243
docs/html/_modules/pylorax/api/v1.html
Normal file
File diff suppressed because it is too large
Load Diff
330
docs/html/_modules/pylorax/api/workspace.html
Normal file
330
docs/html/_modules/pylorax/api/workspace.html
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.api.workspace — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||||
|
<script src="../../../_static/jquery.js"></script>
|
||||||
|
<script src="../../../_static/underscore.js"></script>
|
||||||
|
<script src="../../../_static/doctools.js"></script>
|
||||||
|
<script src="../../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||||
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="../../../search.html" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a href="../../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="version">
|
||||||
|
33.10
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||||
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="../../../index.html">Lorax</a>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
|
<div class="rst-content">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
|
<li><a href="../../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
|
<li><a href="../../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
|
<li>pylorax.api.workspace</li>
|
||||||
|
|
||||||
|
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
|
||||||
|
<h1>Source code for pylorax.api.workspace</h1><div class="highlight"><pre>
|
||||||
|
<span></span><span class="c1">#</span>
|
||||||
|
<span class="c1"># Copyright (C) 2017 Red Hat, Inc.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is free software; you can redistribute it and/or modify</span>
|
||||||
|
<span class="c1"># it under the terms of the GNU General Public License as published by</span>
|
||||||
|
<span class="c1"># the Free Software Foundation; either version 2 of the License, or</span>
|
||||||
|
<span class="c1"># (at your option) any later version.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># This program is distributed in the hope that it will be useful,</span>
|
||||||
|
<span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
||||||
|
<span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
||||||
|
<span class="c1"># GNU General Public License for more details.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="c1"># You should have received a copy of the GNU General Public License</span>
|
||||||
|
<span class="c1"># along with this program. If not, see <http://www.gnu.org/licenses/>.</span>
|
||||||
|
<span class="c1">#</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.recipes</span> <span class="kn">import</span> <span class="n">recipe_filename</span><span class="p">,</span> <span class="n">recipe_from_toml</span><span class="p">,</span> <span class="n">RecipeFileError</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_dir"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_dir">[docs]</a><span class="k">def</span> <span class="nf">workspace_dir</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Create the workspace's path from a Repository and branch</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :returns: The path to the branch's workspace directory</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">repo_path</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">get_location</span><span class="p">()</span><span class="o">.</span><span class="n">get_path</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="s2">"workspace"</span><span class="p">,</span> <span class="n">branch</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_read"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_read">[docs]</a><span class="k">def</span> <span class="nf">workspace_read</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Read a Recipe from the branch's workspace</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe_name: The name of the recipe</span>
|
||||||
|
<span class="sd"> :type recipe_name: str</span>
|
||||||
|
<span class="sd"> :returns: The workspace copy of the recipe, or None if it doesn't exist</span>
|
||||||
|
<span class="sd"> :rtype: Recipe or None</span>
|
||||||
|
<span class="sd"> :raises: RecipeFileError</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">ws_dir</span> <span class="o">=</span> <span class="n">workspace_dir</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">,</span> <span class="n">recipe_filename</span><span class="p">(</span><span class="n">recipe_name</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span>
|
||||||
|
<span class="n">recipe</span> <span class="o">=</span> <span class="n">recipe_from_toml</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"UTF-8"</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">RecipeFileError</span>
|
||||||
|
<span class="k">return</span> <span class="n">recipe</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_write"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_write">[docs]</a><span class="k">def</span> <span class="nf">workspace_write</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Write a recipe to the workspace</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe: The recipe to write to the workspace</span>
|
||||||
|
<span class="sd"> :type recipe: Recipe</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> :raises: IO related errors</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">ws_dir</span> <span class="o">=</span> <span class="n">workspace_dir</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">,</span> <span class="n">recipe</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">recipe</span><span class="o">.</span><span class="n">toml</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"UTF-8"</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_filename"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_filename">[docs]</a><span class="k">def</span> <span class="nf">workspace_filename</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the path and filename of the workspace recipe</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe_name: The name of the recipe</span>
|
||||||
|
<span class="sd"> :type recipe_name: str</span>
|
||||||
|
<span class="sd"> :returns: workspace recipe path and filename</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">ws_dir</span> <span class="o">=</span> <span class="n">workspace_dir</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">ws_dir</span><span class="p">,</span> <span class="n">recipe_filename</span><span class="p">(</span><span class="n">recipe_name</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_exists"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_exists">[docs]</a><span class="k">def</span> <span class="nf">workspace_exists</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return true of the workspace recipe exists</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe_name: The name of the recipe</span>
|
||||||
|
<span class="sd"> :type recipe_name: str</span>
|
||||||
|
<span class="sd"> :returns: True if the file exists</span>
|
||||||
|
<span class="sd"> :rtype: bool</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">workspace_filename</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="workspace_delete"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.workspace.workspace_delete">[docs]</a><span class="k">def</span> <span class="nf">workspace_delete</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete the recipe from the workspace</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param repo: Open repository</span>
|
||||||
|
<span class="sd"> :type repo: Git.Repository</span>
|
||||||
|
<span class="sd"> :param branch: Branch name</span>
|
||||||
|
<span class="sd"> :type branch: str</span>
|
||||||
|
<span class="sd"> :param recipe_name: The name of the recipe</span>
|
||||||
|
<span class="sd"> :type recipe_name: str</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> :raises: IO related errors</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">workspace_filename</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span></div>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1,20 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="writer-html5" lang="en" >
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>pylorax.base — Lorax 35.1 documentation</title>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.base — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -23,16 +17,22 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
35.1
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +75,6 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
@ -88,6 +87,8 @@
|
|||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
@ -96,7 +97,6 @@
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
@ -131,13 +131,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
@ -233,24 +231,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>
|
<p>
|
||||||
© Copyright 2018, Red Hat, Inc..
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -259,6 +252,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
|||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.buildstamp — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.buildstamp — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.buildstamp</li>
|
<li>pylorax.buildstamp</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -139,30 +226,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.cmdline — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.cmdline — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.cmdline</li>
|
<li>pylorax.cmdline</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -94,7 +181,7 @@
|
|||||||
<span class="kn">import</span> <span class="nn">sys</span>
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
<span class="kn">import</span> <span class="nn">argparse</span>
|
<span class="kn">import</span> <span class="nn">argparse</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span> <span class="n">vernum</span>
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">vernum</span>
|
||||||
|
|
||||||
<span class="n">version</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2">-</span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">vernum</span><span class="p">)</span>
|
<span class="n">version</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{0}</span><span class="s2">-</span><span class="si">{1}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">vernum</span><span class="p">)</span>
|
||||||
|
|
||||||
@ -378,7 +465,7 @@
|
|||||||
|
|
||||||
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--project"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span>
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--project"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @PROJECT@ in bootloader config files"</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @PROJECT@ in bootloader config files"</span><span class="p">)</span>
|
||||||
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--releasever"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span>
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--releasever"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"32"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @VERSION@ in bootloader config files"</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @VERSION@ in bootloader config files"</span><span class="p">)</span>
|
||||||
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--volid"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"volume id"</span><span class="p">)</span>
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--volid"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"volume id"</span><span class="p">)</span>
|
||||||
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--squashfs-only"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--squashfs-only"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
@ -394,30 +481,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.creator — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.creator — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.creator</li>
|
<li>pylorax.creator</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -106,10 +193,10 @@
|
|||||||
<span class="kn">from</span> <span class="nn">pykickstart.version</span> <span class="kn">import</span> <span class="n">makeVersion</span>
|
<span class="kn">from</span> <span class="nn">pykickstart.version</span> <span class="kn">import</span> <span class="n">makeVersion</span>
|
||||||
|
|
||||||
<span class="c1"># Use the Lorax treebuilder branch for iso creation</span>
|
<span class="c1"># Use the Lorax treebuilder branch for iso creation</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span> <span class="n">ArchData</span>
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">ArchData</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="kn">import</span> <span class="n">DataHolder</span>
|
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="kn">import</span> <span class="n">DataHolder</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="kn">import</span> <span class="n">execWithRedirect</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="kn">import</span> <span class="n">execWithRedirect</span><span class="p">,</span> <span class="n">runcmd</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">DracutChroot</span><span class="p">,</span> <span class="n">PartitionMount</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">PartitionMount</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</span><span class="p">,</span> <span class="n">Mount</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</span><span class="p">,</span> <span class="n">Mount</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mksquashfs</span><span class="p">,</span> <span class="n">mkrootfsimg</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mksquashfs</span><span class="p">,</span> <span class="n">mkrootfsimg</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">copytree</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">copytree</span>
|
||||||
@ -221,7 +308,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="make_appliance"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.make_appliance">[docs]</a><span class="k">def</span> <span class="nf">make_appliance</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">networks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ram</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span>
|
<div class="viewcode-block" id="make_appliance"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.make_appliance">[docs]</a><span class="k">def</span> <span class="nf">make_appliance</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">networks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ram</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span>
|
||||||
<span class="n">vcpus</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">arch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> <span class="n">project</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span>
|
<span class="n">vcpus</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">arch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> <span class="n">project</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span>
|
||||||
<span class="n">releasever</span><span class="o">=</span><span class="n">DEFAULT_RELEASEVER</span><span class="p">):</span>
|
<span class="n">releasever</span><span class="o">=</span><span class="s2">"32"</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> Generate an appliance description file</span>
|
<span class="sd"> Generate an appliance description file</span>
|
||||||
|
|
||||||
@ -235,7 +322,7 @@
|
|||||||
<span class="sd"> :param str arch: CPU architecture. Default is 'x86_64'</span>
|
<span class="sd"> :param str arch: CPU architecture. Default is 'x86_64'</span>
|
||||||
<span class="sd"> :param str title: Title, passed to template. Default is 'Linux'</span>
|
<span class="sd"> :param str title: Title, passed to template. Default is 'Linux'</span>
|
||||||
<span class="sd"> :param str project: Project, passed to template. Default is 'Linux'</span>
|
<span class="sd"> :param str project: Project, passed to template. Default is 'Linux'</span>
|
||||||
<span class="sd"> :param str releasever: Release version, passed to template.</span>
|
<span class="sd"> :param str releasever: Release version, passed to template. Default is 32</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">disk_img</span> <span class="ow">and</span> <span class="n">template</span> <span class="ow">and</span> <span class="n">outfile</span><span class="p">):</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">disk_img</span> <span class="ow">and</span> <span class="n">template</span> <span class="ow">and</span> <span class="n">outfile</span><span class="p">):</span>
|
||||||
<span class="k">return</span> <span class="kc">None</span>
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
@ -290,7 +377,7 @@
|
|||||||
<span class="n">product</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span> <span class="n">release</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
<span class="n">product</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span> <span class="n">release</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
||||||
<span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">bugurl</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">isfinal</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
<span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">bugurl</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">isfinal</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">rb</span> <span class="o">=</span> <span class="n">RuntimeBuilder</span><span class="p">(</span><span class="n">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">fake_dbo</span><span class="p">,</span> <span class="n">skip_branding</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
<span class="n">rb</span> <span class="o">=</span> <span class="n">RuntimeBuilder</span><span class="p">(</span><span class="n">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">fake_dbo</span><span class="p">)</span>
|
||||||
<span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span> <span class="o">=</span> <span class="n">squashfs_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
|
<span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span> <span class="o">=</span> <span class="n">squashfs_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">squashfs_only</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">squashfs_only</span><span class="p">:</span>
|
||||||
@ -315,7 +402,7 @@
|
|||||||
<span class="c1"># cmdline dracut args override the defaults, but need to be parsed</span>
|
<span class="c1"># cmdline dracut args override the defaults, but need to be parsed</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">))</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
|
<span class="n">dracut</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"dracut"</span><span class="p">,</span> <span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">kdir</span> <span class="o">=</span> <span class="s2">"boot"</span>
|
<span class="n">kdir</span> <span class="o">=</span> <span class="s2">"boot"</span>
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">ostree</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">ostree</span><span class="p">:</span>
|
||||||
@ -344,18 +431,25 @@
|
|||||||
|
|
||||||
<span class="c1"># Write the new initramfs directly to the results directory</span>
|
<span class="c1"># Write the new initramfs directly to the results directory</span>
|
||||||
<span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span>
|
<span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span>
|
||||||
<span class="k">with</span> <span class="n">DracutChroot</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">bind</span><span class="o">=</span><span class="p">[(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"/results"</span><span class="p">)])</span> <span class="k">as</span> <span class="n">dracut</span><span class="p">:</span>
|
<span class="n">mount</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"bind"</span><span class="p">,</span> <span class="n">mnt</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span>
|
||||||
<span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="n">kernels</span><span class="p">:</span>
|
<span class="c1"># Dracut runs out of space inside the minimal rootfs image</span>
|
||||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span>
|
<span class="n">mount</span><span class="p">(</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"bind"</span><span class="p">,</span> <span class="n">mnt</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"var/tmp"</span><span class="p">))</span>
|
||||||
<span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
<span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="n">kernels</span><span class="p">:</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span>
|
||||||
<span class="c1"># Construct an initrd from the kernel name</span>
|
<span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
||||||
<span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span><span class="p">)</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
<span class="c1"># Construct an initrd from the kernel name</span>
|
||||||
|
<span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut warnings about /proc are safe to ignore"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">kver</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">version</span>
|
<span class="n">kver</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">version</span>
|
||||||
<span class="n">dracut</span><span class="o">.</span><span class="n">Run</span><span class="p">(</span><span class="n">args</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"/results/"</span><span class="o">+</span><span class="n">outfile</span><span class="p">,</span> <span class="n">kver</span><span class="p">])</span>
|
<span class="n">cmd</span> <span class="o">=</span> <span class="n">dracut</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"/results/"</span><span class="o">+</span><span class="n">outfile</span><span class="p">,</span> <span class="n">kver</span><span class="p">]</span>
|
||||||
<span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="p">),</span> <span class="n">results_dir</span><span class="p">)</span></div>
|
<span class="n">runcmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">sys_root_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="p">),</span> <span class="n">results_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">umount</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"var/tmp"</span><span class="p">),</span> <span class="n">delete</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||||
|
<span class="n">umount</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">),</span> <span class="n">delete</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="create_pxe_config"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.create_pxe_config">[docs]</a><span class="k">def</span> <span class="nf">create_pxe_config</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">images_dir</span><span class="p">,</span> <span class="n">live_image_name</span><span class="p">,</span> <span class="n">add_args</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
<div class="viewcode-block" id="create_pxe_config"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.create_pxe_config">[docs]</a><span class="k">def</span> <span class="nf">create_pxe_config</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">images_dir</span><span class="p">,</span> <span class="n">live_image_name</span><span class="p">,</span> <span class="n">add_args</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
@ -822,30 +916,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,20 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html class="writer-html5" lang="en" >
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
|
|
||||||
<title>pylorax.decorators — Lorax 35.1 documentation</title>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.decorators — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -23,16 +17,22 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
35.1
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +75,6 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
@ -88,6 +87,8 @@
|
|||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
@ -96,7 +97,6 @@
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
@ -131,13 +131,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
|
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
@ -196,24 +194,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>
|
<p>
|
||||||
© Copyright 2018, Red Hat, Inc..
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
|
|
||||||
|
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -222,6 +215,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
|||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.discinfo — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.discinfo — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.discinfo</li>
|
<li>pylorax.discinfo</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -118,30 +205,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.dnfbase — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.dnfbase — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.dnfbase</li>
|
<li>pylorax.dnfbase</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -92,12 +179,12 @@
|
|||||||
<span class="kn">import</span> <span class="nn">os</span>
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
<span class="kn">import</span> <span class="nn">shutil</span>
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">,</span> <span class="n">DEFAULT_RELEASEVER</span>
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_PLATFORM_ID</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">flatconfig</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">flatconfig</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="get_dnf_base_object"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfbase.get_dnf_base_object">[docs]</a><span class="k">def</span> <span class="nf">get_dnf_base_object</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">mirrorlists</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">repos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<div class="viewcode-block" id="get_dnf_base_object"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfbase.get_dnf_base_object">[docs]</a><span class="k">def</span> <span class="nf">get_dnf_base_object</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span> <span class="n">sources</span><span class="p">,</span> <span class="n">mirrorlists</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">repos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">enablerepos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">disablerepos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">enablerepos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">disablerepos</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">tempdir</span><span class="o">=</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">releasever</span><span class="o">=</span><span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span>
|
<span class="n">tempdir</span><span class="o">=</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="n">proxy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">releasever</span><span class="o">=</span><span class="s2">"32"</span><span class="p">,</span>
|
||||||
<span class="n">cachedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sslverify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dnfplugins</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="n">cachedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sslverify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dnfplugins</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">""" Create a dnf Base object and setup the repositories and installroot</span>
|
<span class="sd">""" Create a dnf Base object and setup the repositories and installroot</span>
|
||||||
|
|
||||||
@ -125,8 +212,6 @@
|
|||||||
<span class="k">return</span> <span class="kc">None</span>
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
|
|
||||||
<span class="n">mirrorlists</span> <span class="o">=</span> <span class="n">mirrorlists</span> <span class="ow">or</span> <span class="p">[]</span>
|
<span class="n">mirrorlists</span> <span class="o">=</span> <span class="n">mirrorlists</span> <span class="ow">or</span> <span class="p">[]</span>
|
||||||
<span class="n">enablerepos</span> <span class="o">=</span> <span class="n">enablerepos</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
||||||
<span class="n">disablerepos</span> <span class="o">=</span> <span class="n">disablerepos</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
||||||
|
|
||||||
<span class="c1"># sanitize the repositories</span>
|
<span class="c1"># sanitize the repositories</span>
|
||||||
<span class="n">sources</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sanitize_repo</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span>
|
<span class="n">sources</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sanitize_repo</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span>
|
||||||
@ -262,30 +347,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.dnfhelper — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.dnfhelper — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.dnfhelper</li>
|
<li>pylorax.dnfhelper</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -183,30 +270,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.executils — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.executils — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.executils</li>
|
<li>pylorax.executils</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -91,11 +178,9 @@
|
|||||||
<span class="c1">#</span>
|
<span class="c1">#</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">os</span>
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
<span class="kn">import</span> <span class="nn">select</span>
|
|
||||||
<span class="kn">import</span> <span class="nn">subprocess</span>
|
<span class="kn">import</span> <span class="nn">subprocess</span>
|
||||||
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">TimeoutExpired</span>
|
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">TimeoutExpired</span>
|
||||||
<span class="kn">import</span> <span class="nn">signal</span>
|
<span class="kn">import</span> <span class="nn">signal</span>
|
||||||
<span class="kn">import</span> <span class="nn">time</span>
|
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">logging</span>
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"pylorax"</span><span class="p">)</span>
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"pylorax"</span><span class="p">)</span>
|
||||||
@ -362,7 +447,6 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span> <span class="o">=</span> <span class="n">proc</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span> <span class="o">=</span> <span class="n">proc</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_argv</span> <span class="o">=</span> <span class="n">argv</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_argv</span> <span class="o">=</span> <span class="n">argv</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_callback</span> <span class="o">=</span> <span class="n">callback</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_callback</span> <span class="o">=</span> <span class="n">callback</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="s2">""</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span>
|
<span class="k">return</span> <span class="bp">self</span>
|
||||||
@ -377,43 +461,22 @@
|
|||||||
<span class="k">pass</span>
|
<span class="k">pass</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__next__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="c1"># Return lines from stdout while also calling _callback</span>
|
<span class="c1"># Read the next line, blocking if a line is not yet available</span>
|
||||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span>
|
||||||
<span class="c1"># Check for input without blocking</span>
|
<span class="k">if</span> <span class="n">line</span> <span class="o">==</span> <span class="s1">''</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="p">):</span>
|
||||||
<span class="k">if</span> <span class="n">select</span><span class="o">.</span><span class="n">select</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">stdout</span><span class="p">],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
|
<span class="c1"># Output finished, wait for the process to end</span>
|
||||||
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">peek</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
<span class="c1"># Check for successful exit</span>
|
||||||
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' was killed by signal </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span>
|
||||||
<span class="k">return</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span>
|
||||||
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' exited with status </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span>
|
||||||
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">StopIteration</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="p">):</span>
|
<span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||||
<span class="c1"># Output finished, wait 60s for the process to end</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">TimeoutExpired</span><span class="p">:</span>
|
|
||||||
<span class="c1"># Did not exit in 60s, kill it and wait 30s more</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">kill</span><span class="p">()</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">TimeoutExpired</span><span class="p">:</span>
|
|
||||||
<span class="k">pass</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' failed to be killed"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">)</span>
|
|
||||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' was killed by signal </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span>
|
|
||||||
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span>
|
|
||||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' exited with status </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span>
|
|
||||||
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">StopIteration</span>
|
|
||||||
|
|
||||||
<span class="c1"># Don't loop too fast with no input to read</span>
|
|
||||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">command</span><span class="p">]</span> <span class="o">+</span> <span class="n">argv</span>
|
<span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">command</span><span class="p">]</span> <span class="o">+</span> <span class="n">argv</span>
|
||||||
|
|
||||||
@ -446,30 +509,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.imgutils — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.imgutils — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.imgutils</li>
|
<li>pylorax.imgutils</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -149,20 +236,9 @@
|
|||||||
<span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">)</span>
|
<span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">)</span>
|
||||||
<span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
<span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fout</span><span class="p">:</span>
|
<span class="n">comp</span> <span class="o">=</span> <span class="n">Popen</span><span class="p">([</span><span class="n">compression</span><span class="p">]</span> <span class="o">+</span> <span class="n">compressargs</span><span class="p">,</span>
|
||||||
<span class="n">comp</span> <span class="o">=</span> <span class="n">Popen</span><span class="p">([</span><span class="n">compression</span><span class="p">]</span> <span class="o">+</span> <span class="n">compressargs</span><span class="p">,</span>
|
<span class="n">stdin</span><span class="o">=</span><span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">))</span>
|
||||||
<span class="n">stdin</span><span class="o">=</span><span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">fout</span><span class="p">)</span>
|
<span class="n">comp</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
|
||||||
<span class="n">comp</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
|
|
||||||
|
|
||||||
<span class="c1"># Clean up the open fds and processes</span>
|
|
||||||
<span class="k">if</span> <span class="n">find</span><span class="p">:</span>
|
|
||||||
<span class="n">find</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
|
|
||||||
<span class="n">find</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
||||||
<span class="n">archive</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
|
|
||||||
<span class="k">if</span> <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
|
|
||||||
<span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
||||||
<span class="k">if</span> <span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">:</span>
|
|
||||||
<span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
|
||||||
<span class="k">return</span> <span class="n">comp</span><span class="o">.</span><span class="n">returncode</span>
|
<span class="k">return</span> <span class="n">comp</span><span class="o">.</span><span class="n">returncode</span>
|
||||||
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||||
@ -212,8 +288,8 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="mksparse"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mksparse">[docs]</a><span class="k">def</span> <span class="nf">mksparse</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
<div class="viewcode-block" id="mksparse"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mksparse">[docs]</a><span class="k">def</span> <span class="nf">mksparse</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
||||||
<span class="sd">'''use os.ftruncate to create a sparse file of the given size.'''</span>
|
<span class="sd">'''use os.ftruncate to create a sparse file of the given size.'''</span>
|
||||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fobj</span><span class="p">:</span>
|
<span class="n">fobj</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span>
|
||||||
<span class="n">os</span><span class="o">.</span><span class="n">ftruncate</span><span class="p">(</span><span class="n">fobj</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="nb">int</span><span class="p">(</span><span class="n">size</span><span class="p">))</span></div>
|
<span class="n">os</span><span class="o">.</span><span class="n">ftruncate</span><span class="p">(</span><span class="n">fobj</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">size</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="mkqcow2"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkqcow2">[docs]</a><span class="k">def</span> <span class="nf">mkqcow2</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<div class="viewcode-block" id="mkqcow2"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkqcow2">[docs]</a><span class="k">def</span> <span class="nf">mkqcow2</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">'''use qemu-img to create a file of the given size.</span>
|
<span class="sd">'''use qemu-img to create a file of the given size.</span>
|
||||||
@ -545,42 +621,6 @@
|
|||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"kpartx"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"-s"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">disk_img</span><span class="p">])</span></div>
|
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"kpartx"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"-s"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">disk_img</span><span class="p">])</span></div>
|
||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="DracutChroot"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DracutChroot">[docs]</a><span class="k">class</span> <span class="nc">DracutChroot</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
||||||
<span class="sd">"""Setup the chroot for running dracut inside it, cleanup when done</span>
|
|
||||||
|
|
||||||
<span class="sd"> This mount /proc, /dev, and /var/tmp plus optional bind mounted directories</span>
|
|
||||||
<span class="sd"> as a list of (source, destination) tuples where destination is relative to the chroot.</span>
|
|
||||||
<span class="sd"> """</span>
|
|
||||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">bind</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">root</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">bind</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="s2">"/var/tmp"</span><span class="p">)]</span> <span class="o">+</span> <span class="p">(</span><span class="n">bind</span> <span class="k">if</span> <span class="n">bind</span> <span class="k">else</span> <span class="p">[])</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
||||||
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"/dev"</span><span class="p">]:</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">):</span>
|
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Making missing dracut chroot directory: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span>
|
|
||||||
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"proc"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"nosuid,noexec,nodev"</span><span class="p">,</span> <span class="s2">"proc"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/proc"</span> <span class="p">])</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"devtmpfs"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"mode=0755,noexec,nosuid,strictatime"</span><span class="p">,</span> <span class="s2">"devtmpfs"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/dev"</span> <span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">:</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"bind"</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="k">return</span> <span class="bp">self</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">tracebk</span><span class="p">):</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/proc"</span> <span class="p">])</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/dev"</span> <span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="c1"># cleanup bind mounts</span>
|
|
||||||
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">:</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span> <span class="p">])</span>
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="DracutChroot.Run"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DracutChroot.Run">[docs]</a> <span class="k">def</span> <span class="nf">Run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
|
|
||||||
<span class="n">runcmd</span><span class="p">([</span><span class="s2">"dracut"</span><span class="p">]</span> <span class="o">+</span> <span class="n">args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">)</span></div></div>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="c1">######## Functions for making filesystem images ##########################</span>
|
<span class="c1">######## Functions for making filesystem images ##########################</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="mkfsimage"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkfsimage">[docs]</a><span class="k">def</span> <span class="nf">mkfsimage</span><span class="p">(</span><span class="n">fstype</span><span class="p">,</span> <span class="n">rootdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mkfsargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mountargs</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">graft</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<div class="viewcode-block" id="mkfsimage"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkfsimage">[docs]</a><span class="k">def</span> <span class="nf">mkfsimage</span><span class="p">(</span><span class="n">fstype</span><span class="p">,</span> <span class="n">rootdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mkfsargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mountargs</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">graft</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
@ -674,30 +714,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.installer — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.installer — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.installer</li>
|
<li>pylorax.installer</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -280,7 +367,7 @@
|
|||||||
|
|
||||||
<span class="c1"># Setup the cmdline args</span>
|
<span class="c1"># Setup the cmdline args</span>
|
||||||
<span class="c1"># ======================</span>
|
<span class="c1"># ======================</span>
|
||||||
<span class="n">cmdline_args</span> <span class="o">=</span> <span class="s2">"inst.ks=file:/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">ks_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
<span class="n">cmdline_args</span> <span class="o">=</span> <span class="s2">"ks=file:/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">ks_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
<span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.stage2=hd:LABEL=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">udev_escape</span><span class="p">(</span><span class="n">iso</span><span class="o">.</span><span class="n">label</span><span class="p">)</span>
|
<span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.stage2=hd:LABEL=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">udev_escape</span><span class="p">(</span><span class="n">iso</span><span class="o">.</span><span class="n">label</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span>
|
||||||
<span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.proxy=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span>
|
<span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.proxy=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span>
|
||||||
@ -363,12 +450,7 @@
|
|||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">cancel_funcs</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">cancel_funcs</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">f</span><span class="p">():</span>
|
<span class="k">if</span> <span class="n">f</span><span class="p">():</span>
|
||||||
<span class="c1"># Anaconda runs from unshare, anaconda doesn't exit correctly so try to</span>
|
<span class="n">proc</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
|
||||||
<span class="c1"># send TERM to all of them directly</span>
|
|
||||||
<span class="kn">import</span> <span class="nn">psutil</span>
|
|
||||||
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">psutil</span><span class="o">.</span><span class="n">Process</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span><span class="o">.</span><span class="n">children</span><span class="p">(</span><span class="n">recursive</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
||||||
<span class="n">p</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
|
|
||||||
<span class="n">psutil</span><span class="o">.</span><span class="n">Process</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
|
|
||||||
<span class="k">return</span> <span class="kc">True</span>
|
<span class="k">return</span> <span class="kc">True</span>
|
||||||
<span class="k">return</span> <span class="kc">False</span></div>
|
<span class="k">return</span> <span class="kc">False</span></div>
|
||||||
|
|
||||||
@ -392,7 +474,7 @@
|
|||||||
<span class="c1"># Make sure the process is really finished (it should be, since it was started from a subprocess call)</span>
|
<span class="c1"># Make sure the process is really finished (it should be, since it was started from a subprocess call)</span>
|
||||||
<span class="c1"># and then remove the pid file.</span>
|
<span class="c1"># and then remove the pid file.</span>
|
||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">):</span>
|
||||||
<span class="c1"># anaconda may be started using unshare so the pid is always 1</span>
|
<span class="c1"># lorax-composer runs anaconda using unshare so the pid is always 1</span>
|
||||||
<span class="k">if</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"1"</span><span class="p">:</span>
|
<span class="k">if</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"1"</span><span class="p">:</span>
|
||||||
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span>
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span>
|
||||||
|
|
||||||
@ -432,7 +514,7 @@
|
|||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
|
||||||
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--kickstart"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">ks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">"--cmdline"</span><span class="p">]</span>
|
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--kickstart"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">ks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">"--cmdline"</span><span class="p">,</span> <span class="s2">"--loglevel"</span><span class="p">,</span> <span class="s2">"debug"</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span>
|
||||||
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span>
|
||||||
<span class="n">args</span> <span class="o">+=</span> <span class="n">arg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
<span class="n">args</span> <span class="o">+=</span> <span class="n">arg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
@ -475,12 +557,14 @@
|
|||||||
<span class="n">cancel_funcs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cancel_func</span><span class="p">)</span>
|
<span class="n">cancel_funcs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cancel_func</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Make sure anaconda has the right product and release</span>
|
<span class="c1"># Make sure anaconda has the right product and release</span>
|
||||||
|
<span class="c1"># Preload libgomp.so.1 to workaround rhbz#1722181</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Running anaconda."</span><span class="p">)</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Running anaconda."</span><span class="p">)</span>
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="n">unshare_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--pid"</span><span class="p">,</span> <span class="s2">"--kill-child"</span><span class="p">,</span> <span class="s2">"--mount"</span><span class="p">,</span> <span class="s2">"--propagation"</span><span class="p">,</span> <span class="s2">"unchanged"</span><span class="p">,</span> <span class="s2">"anaconda"</span><span class="p">]</span> <span class="o">+</span> <span class="n">args</span>
|
<span class="n">unshare_args</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">"--pid"</span><span class="p">,</span> <span class="s2">"--kill-child"</span><span class="p">,</span> <span class="s2">"--mount"</span><span class="p">,</span> <span class="s2">"--propagation"</span><span class="p">,</span> <span class="s2">"unchanged"</span><span class="p">,</span> <span class="s2">"anaconda"</span> <span class="p">]</span> <span class="o">+</span> <span class="n">args</span>
|
||||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">execReadlines</span><span class="p">(</span><span class="s2">"unshare"</span><span class="p">,</span> <span class="n">unshare_args</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">execReadlines</span><span class="p">(</span><span class="s2">"unshare"</span><span class="p">,</span> <span class="n">unshare_args</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">env_add</span><span class="o">=</span><span class="p">{</span><span class="s2">"ANACONDA_PRODUCTNAME"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span>
|
<span class="n">env_add</span><span class="o">=</span><span class="p">{</span><span class="s2">"ANACONDA_PRODUCTNAME"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span>
|
||||||
<span class="s2">"ANACONDA_PRODUCTVERSION"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">},</span>
|
<span class="s2">"ANACONDA_PRODUCTVERSION"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span>
|
||||||
|
<span class="s2">"LD_PRELOAD"</span><span class="p">:</span> <span class="s2">"libgomp.so.1"</span><span class="p">},</span>
|
||||||
<span class="n">callback</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="ow">not</span> <span class="n">novirt_cancel_check</span><span class="p">(</span><span class="n">cancel_funcs</span><span class="p">,</span> <span class="n">p</span><span class="p">)):</span>
|
<span class="n">callback</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="ow">not</span> <span class="n">novirt_cancel_check</span><span class="p">(</span><span class="n">cancel_funcs</span><span class="p">,</span> <span class="n">p</span><span class="p">)):</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
|
||||||
|
|
||||||
@ -488,17 +572,12 @@
|
|||||||
<span class="n">setfiles_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/sys"</span><span class="p">,</span>
|
<span class="n">setfiles_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/sys"</span><span class="p">,</span>
|
||||||
<span class="s2">"/etc/selinux/targeted/contexts/files/file_contexts"</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">]</span>
|
<span class="s2">"/etc/selinux/targeted/contexts/files/file_contexts"</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"sync"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-f"</span><span class="p">,</span> <span class="n">dirinstall_path</span><span class="p">])</span>
|
|
||||||
<span class="k">if</span> <span class="s2">"--dirinstall"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
|
<span class="k">if</span> <span class="s2">"--dirinstall"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
|
||||||
<span class="c1"># setfiles may not be available, warn instead of fail</span>
|
<span class="c1"># setfiles may not be available, warn instead of fail</span>
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"setfiles"</span><span class="p">,</span> <span class="n">setfiles_args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">dirinstall_path</span><span class="p">)</span>
|
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"setfiles"</span><span class="p">,</span> <span class="n">setfiles_args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">dirinstall_path</span><span class="p">)</span>
|
||||||
<span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Running setfiles on install tree failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Running setfiles on install tree failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span>
|
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-v"</span><span class="p">,</span> <span class="n">dirinstall_path</span><span class="p">])</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="k">with</span> <span class="n">PartitionMount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">)</span> <span class="k">as</span> <span class="n">img_mount</span><span class="p">:</span>
|
<span class="k">with</span> <span class="n">PartitionMount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">)</span> <span class="k">as</span> <span class="n">img_mount</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">img_mount</span> <span class="ow">and</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">img_mount</span> <span class="ow">and</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">:</span>
|
||||||
@ -509,10 +588,7 @@
|
|||||||
|
|
||||||
<span class="c1"># For image installs, run fstrim to discard unused blocks. This way</span>
|
<span class="c1"># For image installs, run fstrim to discard unused blocks. This way</span>
|
||||||
<span class="c1"># unused blocks do not need to be allocated for sparse image types</span>
|
<span class="c1"># unused blocks do not need to be allocated for sparse image types</span>
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">])</span>
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-v"</span><span class="p">,</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">])</span>
|
|
||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span>
|
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Running anaconda failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Running anaconda failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
|
||||||
@ -604,10 +680,8 @@
|
|||||||
<span class="k">if</span> <span class="n">rc</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">rc</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="n">InstallError</span><span class="p">(</span><span class="s2">"novirt_install mktar failed: rc=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="n">InstallError</span><span class="p">(</span><span class="s2">"novirt_install mktar failed: rc=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="c1"># Examine the image for sections that can be made sparse</span>
|
<span class="c1"># For raw disk images, use fallocate to deallocate unused space</span>
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fallocate"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"--dig-holes"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">],</span> <span class="n">raise_err</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fallocate"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"--dig-holes"</span><span class="p">,</span> <span class="s2">"-v"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">],</span> <span class="n">raise_err</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
||||||
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="c1"># For make_tar_disk, wrap the result in a tar file, and remove the original disk image.</span>
|
<span class="c1"># For make_tar_disk, wrap the result in a tar file, and remove the original disk image.</span>
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">make_tar_disk</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">make_tar_disk</span><span class="p">:</span>
|
||||||
@ -764,30 +838,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.ltmpl — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.ltmpl — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.ltmpl</li>
|
<li>pylorax.ltmpl</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -257,149 +344,8 @@
|
|||||||
<span class="k">raise</span></div>
|
<span class="k">raise</span></div>
|
||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="InstallpkgMixin"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.InstallpkgMixin">[docs]</a><span class="k">class</span> <span class="nc">InstallpkgMixin</span><span class="p">:</span>
|
|
||||||
<span class="sd">"""Helper class used with *Runner classes"""</span>
|
|
||||||
<span class="k">def</span> <span class="nf">_pkgver</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pkg_spec</span><span class="p">):</span>
|
|
||||||
<span class="sd">"""</span>
|
|
||||||
<span class="sd"> Helper to parse package version compare operators</span>
|
|
||||||
|
|
||||||
<span class="sd"> Returns a list of matching package objects or an empty list</span>
|
|
||||||
|
|
||||||
<span class="sd"> Examples:</span>
|
|
||||||
<span class="sd"> "bash>4.01"</span>
|
|
||||||
<span class="sd"> "tmux>=3.1.4-5"</span>
|
|
||||||
<span class="sd"> "grub2<2.06"</span>
|
|
||||||
<span class="sd"> """</span>
|
|
||||||
<span class="c1"># Always return the highest of the filtered results</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'!'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">pkg_spec</span><span class="p">):</span>
|
|
||||||
<span class="n">query</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">pkg_spec</span><span class="p">)</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">pcv</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">'([!<>=]+)'</span><span class="p">,</span> <span class="n">pkg_spec</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing package name"</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">pcv</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing version"</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pcv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Too many comparisons"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">query</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">pcv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Parse the comparison operators</span>
|
|
||||||
<span class="k">if</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=="</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__eq</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"!="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<>"</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__neq</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">">"</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__gt</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">">="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=>"</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__gte</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<"</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__lt</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=<"</span><span class="p">:</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__lte</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="c1"># MUST be added last. Otherwise it will only return the latest, not the latest of the</span>
|
|
||||||
<span class="c1"># filtered results.</span>
|
|
||||||
<span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
||||||
<span class="k">return</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">apply</span><span class="p">()]</span>
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="InstallpkgMixin.installpkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.InstallpkgMixin.installpkg">[docs]</a> <span class="k">def</span> <span class="nf">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span>
|
|
||||||
<span class="sd">'''</span>
|
|
||||||
<span class="sd"> installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]</span>
|
|
||||||
<span class="sd"> Request installation of all packages matching the given globs.</span>
|
|
||||||
<span class="sd"> Note that this is just a *request* - nothing is *actually* installed</span>
|
|
||||||
<span class="sd"> until the 'run_pkg_transaction' command is given.</span>
|
|
||||||
|
|
||||||
<span class="sd"> The non-except PKGGLOB can contain a version comparison. This should</span>
|
|
||||||
<span class="sd"> not be used as a substitute for package dependencies, it should be</span>
|
|
||||||
<span class="sd"> used to enforce installation of tools required by the templates. eg.</span>
|
|
||||||
<span class="sd"> grub2 changed the font location in 2.06-2 so the current templates</span>
|
|
||||||
<span class="sd"> require grub2 to be 2.06-2 or later.</span>
|
|
||||||
|
|
||||||
<span class="sd"> installpkg tmux>=2.8 bash=5.0.0-1</span>
|
|
||||||
|
|
||||||
<span class="sd"> It supports the =,!=,>,>=,<,<= operators. == is an alias for =, and</span>
|
|
||||||
<span class="sd"> <> is an alias for !=</span>
|
|
||||||
|
|
||||||
<span class="sd"> There should be no spaces between the package name, the compare</span>
|
|
||||||
<span class="sd"> operator, and the version.</span>
|
|
||||||
|
|
||||||
<span class="sd"> NOTE: When testing for equality you must include the version AND</span>
|
|
||||||
<span class="sd"> release, otherwise it won't match anything.</span>
|
|
||||||
|
|
||||||
<span class="sd"> --required is now the default. If the PKGGLOB can be missing pass --optional</span>
|
|
||||||
<span class="sd"> '''</span>
|
|
||||||
<span class="k">if</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--optional'</span><span class="p">:</span>
|
|
||||||
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
||||||
<span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
|
|
||||||
<span class="k">elif</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--required'</span><span class="p">:</span>
|
|
||||||
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
||||||
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
|
||||||
|
|
||||||
<span class="n">excludes</span> <span class="o">=</span> <span class="p">[]</span>
|
|
||||||
<span class="k">while</span> <span class="s1">'--except'</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
|
||||||
<span class="n">idx</span> <span class="o">=</span> <span class="n">pkgs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'--except'</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pkgs</span><span class="p">)</span> <span class="o">==</span> <span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"installpkg needs an argument after --except"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># TODO: Check for bare version compare operators</span>
|
|
||||||
<span class="n">excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
|
|
||||||
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span> <span class="o">+</span> <span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span>
|
|
||||||
|
|
||||||
<span class="n">errors</span> <span class="o">=</span> <span class="kc">False</span>
|
|
||||||
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
|
||||||
<span class="c1"># Did a version compare operatore end up in the list?</span>
|
|
||||||
<span class="k">if</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'!'</span><span class="p">]:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Version compare operators cannot be surrounded by spaces"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="c1"># Start by using Subject to generate a package query, which will</span>
|
|
||||||
<span class="c1"># give us a query object similar to what dbo.install would select,</span>
|
|
||||||
<span class="c1"># minus the handling for multilib. This query may contain</span>
|
|
||||||
<span class="c1"># multiple arches. Pull the package names out of that, filter any</span>
|
|
||||||
<span class="c1"># that match the excludes patterns, and pass those names back to</span>
|
|
||||||
<span class="c1"># dbo.install to do the actual, arch and version and multilib</span>
|
|
||||||
<span class="c1"># aware, package selction.</span>
|
|
||||||
|
|
||||||
<span class="c1"># dnf queries don't have a concept of negative globs which is why</span>
|
|
||||||
<span class="c1"># the filtering is done the hard way.</span>
|
|
||||||
|
|
||||||
<span class="c1"># Get the latest package, or package matching the selected version</span>
|
|
||||||
<span class="n">pkgnames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pkgver</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">pkgnames</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">PackageNotFoundError</span><span class="p">(</span><span class="s2">"no package matched"</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># Apply excludes to the name only</span>
|
|
||||||
<span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span>
|
|
||||||
<span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)]</span>
|
|
||||||
|
|
||||||
<span class="c1"># Convert to a sorted NVR list for installation</span>
|
|
||||||
<span class="n">pkgnvrs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="s2">"</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="c1"># If the request is a glob, expand it in the log</span>
|
|
||||||
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">,</span><span class="s1">'?'</span><span class="p">,</span><span class="s1">'.'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">p</span><span class="p">):</span>
|
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"installpkg: </span><span class="si">%s</span><span class="s2"> expands to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">))</span>
|
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">pkgnvr</span> <span class="ow">in</span> <span class="n">pkgnvrs</span><span class="p">:</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">pkgnvr</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
|
||||||
<span class="k">if</span> <span class="n">required</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span>
|
|
||||||
<span class="c1"># Not required, log it and continue processing pkgs</span>
|
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgnvr</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
||||||
<span class="n">errors</span> <span class="o">=</span> <span class="kc">True</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">errors</span> <span class="ow">and</span> <span class="n">required</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Required installpkg failed."</span><span class="p">)</span></div></div>
|
|
||||||
|
|
||||||
|
|
||||||
<span class="c1"># TODO: operate inside an actual chroot for safety? Not that RPM bothers..</span>
|
<span class="c1"># TODO: operate inside an actual chroot for safety? Not that RPM bothers..</span>
|
||||||
<div class="viewcode-block" id="LoraxTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">,</span> <span class="n">InstallpkgMixin</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">):</span>
|
||||||
<span class="sd">'''</span>
|
<span class="sd">'''</span>
|
||||||
<span class="sd"> This class parses and executes Lorax templates. Sample usage:</span>
|
<span class="sd"> This class parses and executes Lorax templates. Sample usage:</span>
|
||||||
|
|
||||||
@ -744,6 +690,77 @@
|
|||||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'command returned failure (</span><span class="si">%d</span><span class="s1">)'</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'command returned failure (</span><span class="si">%d</span><span class="s1">)'</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">)</span>
|
||||||
<span class="k">raise</span></div>
|
<span class="k">raise</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="LoraxTemplateRunner.installpkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.installpkg">[docs]</a> <span class="k">def</span> <span class="nf">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span>
|
||||||
|
<span class="sd">'''</span>
|
||||||
|
<span class="sd"> installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]</span>
|
||||||
|
<span class="sd"> Request installation of all packages matching the given globs.</span>
|
||||||
|
<span class="sd"> Note that this is just a *request* - nothing is *actually* installed</span>
|
||||||
|
<span class="sd"> until the 'run_pkg_transaction' command is given.</span>
|
||||||
|
|
||||||
|
<span class="sd"> --required is now the default. If the PKGGLOB can be missing pass --optional</span>
|
||||||
|
<span class="sd"> '''</span>
|
||||||
|
<span class="k">if</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--optional'</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">elif</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--required'</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="n">excludes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">while</span> <span class="s1">'--except'</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
|
<span class="n">idx</span> <span class="o">=</span> <span class="n">pkgs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'--except'</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pkgs</span><span class="p">)</span> <span class="o">==</span> <span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"installpkg needs an argument after --except"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span> <span class="o">+</span> <span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span>
|
||||||
|
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Start by using Subject to generate a package query, which will</span>
|
||||||
|
<span class="c1"># give us a query object similar to what dbo.install would select,</span>
|
||||||
|
<span class="c1"># minus the handling for multilib. This query may contain</span>
|
||||||
|
<span class="c1"># multiple arches. Pull the package names out of that, filter any</span>
|
||||||
|
<span class="c1"># that match the excludes patterns, and pass those names back to</span>
|
||||||
|
<span class="c1"># dbo.install to do the actual, arch and version and multilib</span>
|
||||||
|
<span class="c1"># aware, package selction.</span>
|
||||||
|
|
||||||
|
<span class="c1"># dnf queries don't have a concept of negative globs which is why</span>
|
||||||
|
<span class="c1"># the filtering is done the hard way.</span>
|
||||||
|
|
||||||
|
<span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">p</span><span class="p">)</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pkgnames</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">PackageNotFoundError</span><span class="p">(</span><span class="s2">"no package matched"</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Apply excludes to the name only</span>
|
||||||
|
<span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Convert to a sorted NVR list for installation</span>
|
||||||
|
<span class="n">pkgnvrs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="s2">"</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># If the request is a glob, expand it in the log</span>
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">,</span><span class="s1">'?'</span><span class="p">,</span><span class="s1">'.'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">p</span><span class="p">):</span>
|
||||||
|
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"installpkg: </span><span class="si">%s</span><span class="s2"> expands to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">pkgnvr</span> <span class="ow">in</span> <span class="n">pkgnvrs</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">pkgnvr</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
||||||
|
<span class="k">if</span> <span class="n">required</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span>
|
||||||
|
<span class="c1"># Not required, log it and continue processing pkgs</span>
|
||||||
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgnvr</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
||||||
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">errors</span> <span class="ow">and</span> <span class="n">required</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Required installpkg failed."</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoraxTemplateRunner.removepkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removepkg">[docs]</a> <span class="k">def</span> <span class="nf">removepkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxTemplateRunner.removepkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removepkg">[docs]</a> <span class="k">def</span> <span class="nf">removepkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span>
|
||||||
<span class="sd">'''</span>
|
<span class="sd">'''</span>
|
||||||
<span class="sd"> removepkg PKGGLOB [PKGGLOB...]</span>
|
<span class="sd"> removepkg PKGGLOB [PKGGLOB...]</span>
|
||||||
@ -859,7 +876,7 @@
|
|||||||
<span class="sd"> to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB*</span>
|
<span class="sd"> to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB*</span>
|
||||||
<span class="sd"> so that it will match anywhere in the path.</span>
|
<span class="sd"> so that it will match anywhere in the path.</span>
|
||||||
|
|
||||||
<span class="sd"> This only removes files from under /lib/modules/\\*/kernel/</span>
|
<span class="sd"> This only removes files from under /lib/modules/\*/kernel/</span>
|
||||||
|
|
||||||
<span class="sd"> Examples:</span>
|
<span class="sd"> Examples:</span>
|
||||||
<span class="sd"> removekmod sound drivers/media drivers/hwmon drivers/video</span>
|
<span class="sd"> removekmod sound drivers/media drivers/hwmon drivers/video</span>
|
||||||
@ -942,7 +959,7 @@
|
|||||||
<span class="k">except</span> <span class="n">CalledProcessError</span><span class="p">:</span>
|
<span class="k">except</span> <span class="n">CalledProcessError</span><span class="p">:</span>
|
||||||
<span class="k">pass</span></div></div>
|
<span class="k">pass</span></div></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="LiveTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LiveTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LiveTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">,</span> <span class="n">InstallpkgMixin</span><span class="p">):</span>
|
<div class="viewcode-block" id="LiveTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LiveTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LiveTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> This class parses and executes a limited Lorax template. Sample usage:</span>
|
<span class="sd"> This class parses and executes a limited Lorax template. Sample usage:</span>
|
||||||
|
|
||||||
@ -958,34 +975,111 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">pkgs</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">pkgs</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
<span class="nb">super</span><span class="p">(</span><span class="n">LiveTemplateRunner</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">fatalerrors</span><span class="p">,</span> <span class="n">templatedir</span><span class="p">,</span> <span class="n">defaults</span><span class="p">)</span></div>
|
<span class="nb">super</span><span class="p">(</span><span class="n">LiveTemplateRunner</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">fatalerrors</span><span class="p">,</span> <span class="n">templatedir</span><span class="p">,</span> <span class="n">defaults</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="LiveTemplateRunner.installpkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LiveTemplateRunner.installpkg">[docs]</a> <span class="k">def</span> <span class="nf">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span>
|
||||||
|
<span class="sd">'''</span>
|
||||||
|
<span class="sd"> installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]</span>
|
||||||
|
<span class="sd"> Request installation of all packages matching the given globs.</span>
|
||||||
|
<span class="sd"> Note that this is just a *request* - nothing is *actually* installed</span>
|
||||||
|
<span class="sd"> until the 'run_pkg_transaction' command is given.</span>
|
||||||
|
|
||||||
|
<span class="sd"> --required is now the default. If the PKGGLOB can be missing pass --optional</span>
|
||||||
|
<span class="sd"> '''</span>
|
||||||
|
<span class="k">if</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--optional'</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">elif</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--required'</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">required</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="n">excludes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">while</span> <span class="s1">'--except'</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
|
<span class="n">idx</span> <span class="o">=</span> <span class="n">pkgs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'--except'</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pkgs</span><span class="p">)</span> <span class="o">==</span> <span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"installpkg needs an argument after --except"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
<span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span> <span class="o">+</span> <span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span>
|
||||||
|
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Start by using Subject to generate a package query, which will</span>
|
||||||
|
<span class="c1"># give us a query object similar to what dbo.install would select,</span>
|
||||||
|
<span class="c1"># minus the handling for multilib. This query may contain</span>
|
||||||
|
<span class="c1"># multiple arches. Pull the package names out of that, filter any</span>
|
||||||
|
<span class="c1"># that match the excludes patterns, and pass those names back to</span>
|
||||||
|
<span class="c1"># dbo.install to do the actual, arch and version and multilib</span>
|
||||||
|
<span class="c1"># aware, package selction.</span>
|
||||||
|
|
||||||
|
<span class="c1"># dnf queries don't have a concept of negative globs which is why</span>
|
||||||
|
<span class="c1"># the filtering is done the hard way.</span>
|
||||||
|
|
||||||
|
<span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">p</span><span class="p">)</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pkgnames</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">PackageNotFoundError</span><span class="p">(</span><span class="s2">"no package matched"</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Apply excludes to the name only</span>
|
||||||
|
<span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span>
|
||||||
|
<span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)]</span>
|
||||||
|
|
||||||
|
<span class="c1"># Convert to a sorted NVR list for installation</span>
|
||||||
|
<span class="n">pkgnvrs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="s2">"</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># If the request is a glob, expand it in the log</span>
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">,</span><span class="s1">'?'</span><span class="p">,</span><span class="s1">'.'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">p</span><span class="p">):</span>
|
||||||
|
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"installpkg: </span><span class="si">%s</span><span class="s2"> expands to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">pkgs</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">pkgnames</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
||||||
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||||||
|
<span class="n">errors</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">errors</span> <span class="ow">and</span> <span class="n">required</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Required installpkg failed."</span><span class="p">)</span></div></div>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.monitor — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.monitor — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.monitor</li>
|
<li>pylorax.monitor</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -118,8 +205,7 @@
|
|||||||
<span class="s2">"crashed on signal"</span><span class="p">,</span>
|
<span class="s2">"crashed on signal"</span><span class="p">,</span>
|
||||||
<span class="s2">"packaging: Missed: NoSuchPackage"</span><span class="p">,</span>
|
<span class="s2">"packaging: Missed: NoSuchPackage"</span><span class="p">,</span>
|
||||||
<span class="s2">"packaging: Installation failed"</span><span class="p">,</span>
|
<span class="s2">"packaging: Installation failed"</span><span class="p">,</span>
|
||||||
<span class="s2">"The following error occurred while installing. This is a fatal error"</span><span class="p">,</span>
|
<span class="s2">"The following error occurred while installing. This is a fatal error"</span>
|
||||||
<span class="s2">"Error in POSTIN scriptlet in rpm package"</span>
|
|
||||||
<span class="p">]</span>
|
<span class="p">]</span>
|
||||||
|
|
||||||
<span class="n">re_tests</span> <span class="o">=</span> <span class="p">[</span>
|
<span class="n">re_tests</span> <span class="o">=</span> <span class="p">[</span>
|
||||||
@ -146,25 +232,30 @@
|
|||||||
<span class="sd"> Loops until self.server.kill is True</span>
|
<span class="sd"> Loops until self.server.kill is True</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Processing logs from </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_address</span><span class="p">)</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Processing logs from </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_address</span><span class="p">)</span>
|
||||||
<span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span>
|
<span class="n">line</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span><span class="p">:</span>
|
||||||
<span class="k">break</span>
|
<span class="k">break</span>
|
||||||
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="n">data</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4096</span><span class="p">)</span>
|
<span class="n">data</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4096</span><span class="p">),</span> <span class="s2">"utf8"</span><span class="p">)</span>
|
||||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">(</span><span class="n">keepends</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">):</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||||
<span class="c1"># Ignore invalid UTF8 inside lines</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">iserror</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">line</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="s2">"utf8"</span><span class="p">,</span> <span class="s2">"ignore"</span><span class="p">))</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span>
|
<span class="c1"># check the data for errors and set error flag</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="s2">"utf8"</span><span class="p">,</span> <span class="s2">"ignore"</span><span class="p">))</span>
|
<span class="c1"># need to assemble it into lines so we can test for the error</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
|
<span class="c1"># string.</span>
|
||||||
<span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span>
|
<span class="k">while</span> <span class="n">data</span><span class="p">:</span>
|
||||||
|
<span class="n">more</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
|
<span class="n">line</span> <span class="o">+=</span> <span class="n">more</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">more</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">iserror</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
|
||||||
|
<span class="n">line</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">data</span> <span class="o">=</span> <span class="n">more</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="c1"># Not the end of the line, keep for later</span>
|
<span class="n">data</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="n">data</span> <span class="o">=</span> <span class="n">line</span>
|
|
||||||
<span class="k">break</span>
|
|
||||||
<span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">:</span>
|
<span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">:</span>
|
||||||
<span class="k">pass</span>
|
<span class="k">pass</span>
|
||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
||||||
@ -173,6 +264,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="LogRequestHandler.finish"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogRequestHandler.finish">[docs]</a> <span class="k">def</span> <span class="nf">finish</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="LogRequestHandler.finish"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogRequestHandler.finish">[docs]</a> <span class="k">def</span> <span class="nf">finish</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Shutting down log processing"</span><span class="p">)</span>
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Shutting down log processing"</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
|
||||||
|
|
||||||
@ -267,35 +359,46 @@
|
|||||||
<div class="viewcode-block" id="LogMonitor.shutdown"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogMonitor.shutdown">[docs]</a> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="LogMonitor.shutdown"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogMonitor.shutdown">[docs]</a> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""Force shutdown of the monitoring thread"""</span>
|
<span class="sd">"""Force shutdown of the monitoring thread"""</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span> <span class="o">=</span> <span class="kc">True</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">server_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">server_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div></div>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">server_close</span><span class="p">()</span></div></div>
|
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.mount — Lorax 36.4 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.mount — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.4
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.mount</li>
|
<li>pylorax.mount</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -93,7 +180,8 @@
|
|||||||
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"livemedia-creator"</span><span class="p">)</span>
|
<span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"livemedia-creator"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">os</span>
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
<span class="kn">import</span> <span class="nn">iso9660</span>
|
<span class="kn">import</span> <span class="nn">pycdlib</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pycdlib.pycdlibexception</span> <span class="kn">import</span> <span class="n">PyCdlibException</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</span>
|
||||||
|
|
||||||
@ -131,8 +219,7 @@
|
|||||||
|
|
||||||
<span class="n">kernel_list</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/isolinux/vmlinuz"</span><span class="p">,</span> <span class="s2">"/isolinux/initrd.img"</span><span class="p">),</span>
|
<span class="n">kernel_list</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/isolinux/vmlinuz"</span><span class="p">,</span> <span class="s2">"/isolinux/initrd.img"</span><span class="p">),</span>
|
||||||
<span class="p">(</span><span class="s2">"/ppc/ppc64/vmlinuz"</span><span class="p">,</span> <span class="s2">"/ppc/ppc64/initrd.img"</span><span class="p">),</span>
|
<span class="p">(</span><span class="s2">"/ppc/ppc64/vmlinuz"</span><span class="p">,</span> <span class="s2">"/ppc/ppc64/initrd.img"</span><span class="p">),</span>
|
||||||
<span class="p">(</span><span class="s2">"/images/pxeboot/vmlinuz"</span><span class="p">,</span> <span class="s2">"/images/pxeboot/initrd.img"</span><span class="p">),</span>
|
<span class="p">(</span><span class="s2">"/images/pxeboot/vmlinuz"</span><span class="p">,</span> <span class="s2">"/images/pxeboot/initrd.img"</span><span class="p">)]</span>
|
||||||
<span class="p">(</span><span class="s2">"/images/kernel.img"</span><span class="p">,</span> <span class="s2">"/images/initrd.img"</span><span class="p">)]</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span><span class="o">+</span><span class="s2">"/repodata"</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span><span class="o">+</span><span class="s2">"/repodata"</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span>
|
||||||
@ -164,48 +251,55 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="IsoMountpoint.get_iso_label"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint.get_iso_label">[docs]</a> <span class="k">def</span> <span class="nf">get_iso_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="IsoMountpoint.get_iso_label"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint.get_iso_label">[docs]</a> <span class="k">def</span> <span class="nf">get_iso_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> Get the iso's label using pycdio</span>
|
<span class="sd"> Get the iso's label using isoinfo</span>
|
||||||
|
|
||||||
<span class="sd"> Sets self.label if one is found</span>
|
<span class="sd"> Sets self.label if one is found</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="n">iso</span> <span class="o">=</span> <span class="n">iso9660</span><span class="o">.</span><span class="n">ISO9660</span><span class="o">.</span><span class="n">IFS</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">)</span>
|
<span class="n">iso</span> <span class="o">=</span> <span class="n">pycdlib</span><span class="o">.</span><span class="n">PyCdlib</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">iso</span><span class="o">.</span><span class="n">is_open</span><span class="p">():</span>
|
<span class="n">iso</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">)</span>
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"error opening file"</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">iso</span><span class="o">.</span><span class="n">pvd</span><span class="o">.</span><span class="n">volume_identifier</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"UTF-8"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||||
|
<span class="k">except</span> <span class="n">PyCdlibException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">iso</span><span class="o">.</span><span class="n">get_volume_id</span><span class="p">()</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="s2">""</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"error reading volume id"</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Problem reading label from </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span></div></div>
|
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Problem reading label from </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span></div></div>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.sysutils — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.sysutils — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.sysutils</li>
|
<li>pylorax.sysutils</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -117,8 +204,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="touch"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.touch">[docs]</a><span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
|
<div class="viewcode-block" id="touch"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.touch">[docs]</a><span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
|
||||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
<span class="c1"># python closes the file when it goes out of scope</span>
|
||||||
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div>
|
<span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="replace"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.replace">[docs]</a><span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">find</span><span class="p">,</span> <span class="n">sub</span><span class="p">):</span>
|
<div class="viewcode-block" id="replace"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.replace">[docs]</a><span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">find</span><span class="p">,</span> <span class="n">sub</span><span class="p">):</span>
|
||||||
@ -233,30 +320,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.treebuilder — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.treebuilder — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.treebuilder</li>
|
<li>pylorax.treebuilder</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -103,7 +190,6 @@
|
|||||||
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="kn">import</span> <span class="n">DataHolder</span>
|
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="kn">import</span> <span class="n">DataHolder</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.ltmpl</span> <span class="kn">import</span> <span class="n">LoraxTemplateRunner</span>
|
<span class="kn">from</span> <span class="nn">pylorax.ltmpl</span> <span class="kn">import</span> <span class="n">LoraxTemplateRunner</span>
|
||||||
<span class="kn">import</span> <span class="nn">pylorax.imgutils</span> <span class="k">as</span> <span class="nn">imgutils</span>
|
<span class="kn">import</span> <span class="nn">pylorax.imgutils</span> <span class="k">as</span> <span class="nn">imgutils</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">DracutChroot</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="kn">import</span> <span class="n">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span><span class="p">,</span> <span class="n">execWithCapture</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="kn">import</span> <span class="n">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span><span class="p">,</span> <span class="n">execWithCapture</span>
|
||||||
|
|
||||||
<span class="n">templatemap</span> <span class="o">=</span> <span class="p">{</span>
|
<span class="n">templatemap</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
@ -147,6 +233,11 @@
|
|||||||
<span class="n">add_template_vars</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">add_template_vars</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">skip_branding</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
<span class="n">skip_branding</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
<span class="n">root</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="o">.</span><span class="n">installroot</span>
|
<span class="n">root</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="o">.</span><span class="n">installroot</span>
|
||||||
|
<span class="c1"># use a copy of product so we can modify it locally</span>
|
||||||
|
<span class="n">product</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||||
|
<span class="n">product</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">vars</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">arch</span><span class="o">=</span><span class="n">arch</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="n">product</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">root</span><span class="p">,</span>
|
||||||
|
<span class="n">basearch</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">,</span> <span class="n">libdir</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">libdir</span><span class="p">)</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span> <span class="o">=</span> <span class="n">dbo</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span> <span class="o">=</span> <span class="n">dbo</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="n">LoraxTemplateRunner</span><span class="p">(</span><span class="n">inroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> <span class="n">outroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="n">LoraxTemplateRunner</span><span class="p">(</span><span class="n">inroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> <span class="n">outroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span>
|
||||||
<span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="n">templatedir</span><span class="p">)</span>
|
<span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="n">templatedir</span><span class="p">)</span>
|
||||||
@ -154,29 +245,20 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span> <span class="o">=</span> <span class="n">add_template_vars</span> <span class="ow">or</span> <span class="p">{}</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span> <span class="o">=</span> <span class="n">add_template_vars</span> <span class="ow">or</span> <span class="p">{}</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span> <span class="o">=</span> <span class="n">installpkgs</span> <span class="ow">or</span> <span class="p">[]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span> <span class="o">=</span> <span class="n">installpkgs</span> <span class="ow">or</span> <span class="p">[]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span> <span class="o">=</span> <span class="n">excludepkgs</span> <span class="ow">or</span> <span class="p">[]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span> <span class="o">=</span> <span class="n">excludepkgs</span> <span class="ow">or</span> <span class="p">[]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
|
|
||||||
|
|
||||||
<span class="c1"># use a copy of product so we can modify it locally</span>
|
|
||||||
<span class="n">product</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
||||||
<span class="n">product</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_branding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_branding</span><span class="p">(</span><span class="n">skip_branding</span><span class="p">,</span> <span class="n">product</span><span class="p">)</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">vars</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">arch</span><span class="o">=</span><span class="n">arch</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="n">product</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">root</span><span class="p">,</span>
|
|
||||||
<span class="n">basearch</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">,</span> <span class="n">libdir</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">libdir</span><span class="p">,</span>
|
|
||||||
<span class="n">branding</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="p">)</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_skip_branding</span> <span class="o">=</span> <span class="n">skip_branding</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="RuntimeBuilder.get_branding"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.get_branding">[docs]</a> <span class="k">def</span> <span class="nf">get_branding</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip</span><span class="p">,</span> <span class="n">product</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_install_branding</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""Select the branding from the available 'system-release' packages</span>
|
<span class="sd">"""Select the branding from the available 'system-release' packages</span>
|
||||||
<span class="sd"> The *best* way to control this is to have a single package in the repo provide 'system-release'</span>
|
<span class="sd"> The *best* way to control this is to have a single package in the repo provide 'system-release'</span>
|
||||||
<span class="sd"> When there are more than 1 package it will:</span>
|
<span class="sd"> When there are more than 1 package it will:</span>
|
||||||
<span class="sd"> - Make a list of the available packages</span>
|
<span class="sd"> - Make a list of the available packages</span>
|
||||||
<span class="sd"> - If variant is set look for a package ending with lower(variant) and use that</span>
|
<span class="sd"> - If variant is set look for a package ending with lower(variant) and use that</span>
|
||||||
<span class="sd"> - If there are one or more non-generic packages, use the first one after sorting</span>
|
<span class="sd"> - If there are one or more non-generic packages, use the first one after sorting</span>
|
||||||
|
|
||||||
<span class="sd"> Returns the package names of the system-release and release logos package</span>
|
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">if</span> <span class="n">skip</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_branding</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
<span class="k">return</span>
|
||||||
|
|
||||||
<span class="n">release</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="n">release</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="n">q</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span>
|
<span class="n">q</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span>
|
||||||
@ -185,11 +267,11 @@
|
|||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"generic"</span><span class="p">)])</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"generic"</span><span class="p">)])</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">pkgs</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pkgs</span><span class="p">:</span>
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"No system-release packages found, could not get the release"</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"No system-release packages found, could not get the release"</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
<span class="k">return</span>
|
||||||
|
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"system-release packages: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgs</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"system-release packages: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgs</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="p">:</span>
|
||||||
<span class="n">variant</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"-"</span><span class="o">+</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="o">.</span><span class="n">lower</span><span class="p">())]</span>
|
<span class="n">variant</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"-"</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="o">.</span><span class="n">lower</span><span class="p">())]</span>
|
||||||
<span class="k">if</span> <span class="n">variant</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">variant</span><span class="p">:</span>
|
||||||
<span class="n">release</span> <span class="o">=</span> <span class="n">variant</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="n">release</span> <span class="o">=</span> <span class="n">variant</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">release</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">release</span><span class="p">:</span>
|
||||||
@ -197,25 +279,20 @@
|
|||||||
|
|
||||||
<span class="c1"># release</span>
|
<span class="c1"># release</span>
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'got release: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">release</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'got release: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">release</span><span class="p">)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="n">release</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># logos uses the basename from release (fedora, redhat, centos, ...)</span>
|
<span class="c1"># logos</span>
|
||||||
<span class="n">logos</span><span class="p">,</span> <span class="n">_suffix</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
<span class="n">release</span><span class="p">,</span> <span class="n">_suffix</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="n">release</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="n">logos</span><span class="o">+</span><span class="s2">"-logos"</span><span class="p">)</span></div>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">-logos'</span> <span class="o">%</span> <span class="n">release</span><span class="p">)</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="RuntimeBuilder.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.install">[docs]</a> <span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="RuntimeBuilder.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.install">[docs]</a> <span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">'''Install packages and do initial setup with runtime-install.tmpl'''</span>
|
<span class="sd">'''Install packages and do initial setup with runtime-install.tmpl'''</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">release</span><span class="p">:</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_install_branding</span><span class="p">()</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">release</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">logos</span><span class="p">:</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">logos</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">removepkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">removepkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"runtime-install.tmpl"</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"runtime-install.tmpl"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">tmpl</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_templates</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">tmpl</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_templates</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span><span class="p">)</span></div>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span><span class="p">)</span></div>
|
||||||
|
|
||||||
@ -383,31 +460,32 @@
|
|||||||
<span class="sd"> name of the kernel.</span>
|
<span class="sd"> name of the kernel.</span>
|
||||||
<span class="sd"> '''</span>
|
<span class="sd"> '''</span>
|
||||||
<span class="n">add_args</span> <span class="o">=</span> <span class="n">add_args</span> <span class="ow">or</span> <span class="p">[]</span>
|
<span class="n">add_args</span> <span class="o">=</span> <span class="n">add_args</span> <span class="ow">or</span> <span class="p">[]</span>
|
||||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">add_args</span>
|
<span class="n">dracut</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"dracut"</span><span class="p">,</span> <span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">add_args</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">backup</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">backup</span><span class="p">:</span>
|
||||||
<span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"--force"</span><span class="p">)</span>
|
<span class="n">dracut</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"--force"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernels</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernels</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"No kernels found, cannot rebuild_initrds"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"No kernels found, cannot rebuild_initrds"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">with</span> <span class="n">DracutChroot</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">inroot</span><span class="p">)</span> <span class="k">as</span> <span class="n">dracut</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernels</span><span class="p">:</span>
|
||||||
<span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kernels</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
|
<span class="n">idir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
||||||
<span class="n">idir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
<span class="n">outfile</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">idir</span><span class="p">,</span> <span class="n">prefix</span><span class="o">+</span><span class="s1">'-'</span><span class="o">+</span><span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="o">+</span><span class="s1">'.img'</span><span class="p">)</span>
|
||||||
<span class="n">outfile</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">idir</span><span class="p">,</span> <span class="n">prefix</span><span class="o">+</span><span class="s1">'-'</span><span class="o">+</span><span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="o">+</span><span class="s1">'.img'</span><span class="p">)</span>
|
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span>
|
||||||
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span>
|
<span class="c1"># If there is an existing initrd, use that</span>
|
||||||
<span class="c1"># If there is an existing initrd, use that</span>
|
<span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span>
|
||||||
<span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="c1"># Construct an initrd from the kernel name</span>
|
||||||
<span class="c1"># Construct an initrd from the kernel name</span>
|
<span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span>
|
||||||
<span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut warnings about /proc are safe to ignore"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">backup</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">backup</span><span class="p">:</span>
|
||||||
<span class="n">initrd</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">inroot</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
<span class="n">initrd</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">inroot</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">initrd</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">initrd</span><span class="p">):</span>
|
||||||
<span class="n">os</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">initrd</span><span class="p">,</span> <span class="n">initrd</span> <span class="o">+</span> <span class="n">backup</span><span class="p">)</span>
|
<span class="n">os</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">initrd</span><span class="p">,</span> <span class="n">initrd</span> <span class="o">+</span> <span class="n">backup</span><span class="p">)</span>
|
||||||
<span class="n">dracut</span><span class="o">.</span><span class="n">Run</span><span class="p">(</span><span class="n">args</span> <span class="o">+</span> <span class="p">[</span><span class="n">outfile</span><span class="p">,</span> <span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="p">])</span></div>
|
<span class="n">cmd</span> <span class="o">=</span> <span class="n">dracut</span> <span class="o">+</span> <span class="p">[</span><span class="n">outfile</span><span class="p">,</span> <span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="p">]</span>
|
||||||
|
<span class="n">runcmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">inroot</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="TreeBuilder.build"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder.build">[docs]</a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="TreeBuilder.build"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder.build">[docs]</a> <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="n">templatefile</span> <span class="o">=</span> <span class="n">templatemap</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">]</span>
|
<span class="n">templatefile</span> <span class="o">=</span> <span class="n">templatemap</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">]</span>
|
||||||
@ -505,30 +583,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -1,31 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html class="writer-html5" lang="en" >
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>pylorax.treeinfo — Lorax 36.0 documentation</title>
|
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
||||||
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
|
||||||
|
|
||||||
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.treeinfo — Lorax 33.10 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
||||||
<script src="../../_static/jquery.js"></script>
|
<script src="../../_static/jquery.js"></script>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<script src="../../_static/underscore.js"></script>
|
||||||
<script src="../../_static/doctools.js"></script>
|
<script src="../../_static/doctools.js"></script>
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<script src="../../_static/language_data.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../_static/js/theme.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
<link rel="index" title="Index" href="../../genindex.html" />
|
<link rel="index" title="Index" href="../../genindex.html" />
|
||||||
<link rel="search" title="Search" href="../../search.html" />
|
<link rel="search" title="Search" href="../../search.html" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
||||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
<div class="wy-side-scroll">
|
<div class="wy-side-scroll">
|
||||||
<div class="wy-side-nav-search" >
|
<div class="wy-side-nav-search" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a href="../../index.html" class="icon icon-home"> Lorax
|
<a href="../../index.html" class="icon icon-home"> Lorax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
36.0
|
33.10
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div role="search">
|
<div role="search">
|
||||||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||||||
<input type="text" name="q" placeholder="Search docs" />
|
<input type="text" name="q" placeholder="Search docs" />
|
||||||
@ -33,37 +71,86 @@
|
|||||||
<input type="hidden" name="area" value="default" />
|
<input type="hidden" name="area" value="default" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
|
||||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
<a href="../../index.html">Lorax</a>
|
<a href="../../index.html">Lorax</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
<div class="wy-nav-content">
|
<div class="wy-nav-content">
|
||||||
|
|
||||||
<div class="rst-content">
|
<div class="rst-content">
|
||||||
<div role="navigation" aria-label="Page navigation">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
<ul class="wy-breadcrumbs">
|
<ul class="wy-breadcrumbs">
|
||||||
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
|
|
||||||
|
<li><a href="../../index.html">Docs</a> »</li>
|
||||||
|
|
||||||
<li><a href="../index.html">Module code</a> »</li>
|
<li><a href="../index.html">Module code</a> »</li>
|
||||||
|
|
||||||
<li><a href="../pylorax.html">pylorax</a> »</li>
|
<li><a href="../pylorax.html">pylorax</a> »</li>
|
||||||
|
|
||||||
<li>pylorax.treeinfo</li>
|
<li>pylorax.treeinfo</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="wy-breadcrumbs-aside">
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
</div>
|
</div>
|
||||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
@ -136,30 +223,42 @@
|
|||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div role="contentinfo">
|
<div role="contentinfo">
|
||||||
<p>© Copyright 2018, Red Hat, Inc..</p>
|
<p>
|
||||||
|
© Copyright 2018, Red Hat, Inc.
|
||||||
|
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
||||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
||||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
||||||
|
|
||||||
|
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
203
docs/html/_sources/composer-cli.rst.txt
Normal file
203
docs/html/_sources/composer-cli.rst.txt
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
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.
|
||||||
|
`lorax-composer <lorax-composer.html>` and `osbuild-composer
|
||||||
|
<https://osbuild.org>` both implement compatible servers.
|
||||||
|
|
||||||
|
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. They do not need to be
|
||||||
|
root, but all of the `security precautions <lorax-composer.html#security>`_
|
||||||
|
apply.
|
||||||
|
|
||||||
|
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``. If there are no blueprints available you can
|
||||||
|
copy one of the examples `from the test suite
|
||||||
|
<https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_.
|
||||||
|
|
||||||
|
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``.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
``lorax-composer`` and ``osbuild-composer`` handle this differently, with
|
||||||
|
``osbuild-composer`` you can currently 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.
|
||||||
101
docs/html/_sources/composer.cli.rst.txt
Normal file
101
docs/html/_sources/composer.cli.rst.txt
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
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:
|
||||||
37
docs/html/_sources/composer.rst.txt
Normal file
37
docs/html/_sources/composer.rst.txt
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
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:
|
||||||
@ -1,99 +0,0 @@
|
|||||||
image-minimizer
|
|
||||||
===============
|
|
||||||
|
|
||||||
:Authors:
|
|
||||||
Brian C. Lane <bcl@redhat.com>
|
|
||||||
|
|
||||||
`image-minimizer` is a script used as an interpreter for kickstart `%post`
|
|
||||||
sections. It is used to remove rpm packages and individual files from the
|
|
||||||
system that Anaconda has just installed.
|
|
||||||
|
|
||||||
It processes a list of commands that tell it which files or rpms to remove, and
|
|
||||||
which to keep.
|
|
||||||
|
|
||||||
|
|
||||||
image-minimizer cmdline arguments
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
`usage: image-minimizer [-h] [-i STRING] [--dryrun] [-v] STRING`
|
|
||||||
|
|
||||||
Optional arguments
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-i STRING, --installroot STRING
|
|
||||||
Root path to prepend to all file patterns and
|
|
||||||
installation root for RPM operations. Defaults to
|
|
||||||
INSTALL_ROOT or /mnt/sysimage/
|
|
||||||
--dryrun If set, no filesystem changes are made.
|
|
||||||
-v, --verbose Display every action as it is performed.
|
|
||||||
|
|
||||||
Positional arguments
|
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
:STRING: Filename to process
|
|
||||||
|
|
||||||
|
|
||||||
NOTES
|
|
||||||
-----
|
|
||||||
|
|
||||||
You cannot pass any arguments to `image-minimizer` when using it from the
|
|
||||||
kickstart `%post`.
|
|
||||||
|
|
||||||
When using this from a kickstart the image-minimizer package needs to be available.
|
|
||||||
It is not included on the standard boot.iso, so you will need to include `lorax` in
|
|
||||||
the `%package` section. You can use `image-minimizer` to remove lorax from the install.
|
|
||||||
|
|
||||||
If you are using this with `livemedia-creator` it can be installed on the host
|
|
||||||
system so that `lorax` isn't needed in the `%package` list, and it doesn't need
|
|
||||||
to be removed.
|
|
||||||
|
|
||||||
|
|
||||||
commands
|
|
||||||
--------
|
|
||||||
|
|
||||||
Commands are listed one per line, followed by a space, and then by the
|
|
||||||
package, file, or glob. The globs used are Unix style pathname patterns using
|
|
||||||
`*`, `?`, and `[]` character ranges. globbing is implemented using the python
|
|
||||||
glob module.
|
|
||||||
|
|
||||||
|
|
||||||
* drop <PATTERN>
|
|
||||||
This will remove files from the installation.
|
|
||||||
|
|
||||||
* keep <PATTERN>
|
|
||||||
This will keep files, and should follow any `drop` commands including globs.
|
|
||||||
|
|
||||||
* droprpm <PATTERN>
|
|
||||||
Remove matching rpm packages. Dependencies are not remove, just individual
|
|
||||||
packages matching the glob.
|
|
||||||
|
|
||||||
* keeprpm <PATTERN>
|
|
||||||
Do not remove matching rpm packages, it should follow any `droprpm` commands
|
|
||||||
that include globs.
|
|
||||||
|
|
||||||
|
|
||||||
example
|
|
||||||
-------
|
|
||||||
|
|
||||||
Example Anaconda `%post` usage::
|
|
||||||
|
|
||||||
%post --interpreter=image-minimizer --nochroot
|
|
||||||
|
|
||||||
drop /lib/modules/*/kernel/fs
|
|
||||||
keep /lib/modules/*/kernel/fs/ext*
|
|
||||||
keep /lib/modules/*/kernel/fs/mbcache*
|
|
||||||
keep /lib/modules/*/kernel/fs/squashfs
|
|
||||||
|
|
||||||
droprpm make
|
|
||||||
droprpm mtools
|
|
||||||
droprpm mysql-libs
|
|
||||||
droprpm perl
|
|
||||||
droprpm perl-Pod-*
|
|
||||||
droprpm syslinux
|
|
||||||
keeprpm perl-Pod-Simple
|
|
||||||
|
|
||||||
# Not needed after image-minimizer is done
|
|
||||||
droprpm lorax
|
|
||||||
|
|
||||||
%end
|
|
||||||
@ -14,17 +14,20 @@ Contents:
|
|||||||
intro
|
intro
|
||||||
lorax
|
lorax
|
||||||
livemedia-creator
|
livemedia-creator
|
||||||
|
lorax-composer
|
||||||
|
composer-cli
|
||||||
mkksiso
|
mkksiso
|
||||||
product-images
|
product-images
|
||||||
image-minimizer
|
|
||||||
modules
|
modules
|
||||||
|
|
||||||
Documentation for other Lorax Branches
|
Documentation for other Lorax Branches
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
* `Fedora 35 <f35-branch/>`_
|
* `Fedora 32 <f32-branch/>`_
|
||||||
* `Fedora 34 <f34-branch/>`_
|
* `Fedora 31 <f31-branch/>`_
|
||||||
* `Fedora 33 <f33-branch/>`_
|
* `Fedora 30 <f30-branch/>`_
|
||||||
|
* `Fedora 29 <f29-branch/>`_
|
||||||
|
* `Fedora 28 <f28-branch/>`_
|
||||||
* `RHEL8 lorax-composer <rhel8-branch/>`_
|
* `RHEL8 lorax-composer <rhel8-branch/>`_
|
||||||
* `RHEL7 lorax-composer <lorax-composer/>`_
|
* `RHEL7 lorax-composer <lorax-composer/>`_
|
||||||
|
|
||||||
|
|||||||
46
docs/html/_sources/lifted.rst.txt
Normal file
46
docs/html/_sources/lifted.rst.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
lifted package
|
||||||
|
==============
|
||||||
|
|
||||||
|
Submodules
|
||||||
|
----------
|
||||||
|
|
||||||
|
lifted.config module
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. automodule:: lifted.config
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
lifted.providers module
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
.. automodule:: lifted.providers
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
lifted.queue module
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. automodule:: lifted.queue
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
lifted.upload module
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. automodule:: lifted.upload
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
|
Module contents
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: lifted
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
@ -171,6 +171,7 @@ changes. Here are the steps I used to convert the Fedora XFCE spin.
|
|||||||
dracut-live
|
dracut-live
|
||||||
-dracut-config-rescue
|
-dracut-config-rescue
|
||||||
grub2-efi
|
grub2-efi
|
||||||
|
memtest86+
|
||||||
syslinux
|
syslinux
|
||||||
|
|
||||||
User created repositories
|
User created repositories
|
||||||
|
|||||||
535
docs/html/_sources/lorax-composer.rst.txt
Normal file
535
docs/html/_sources/lorax-composer.rst.txt
Normal file
@ -0,0 +1,535 @@
|
|||||||
|
lorax-composer
|
||||||
|
==============
|
||||||
|
|
||||||
|
:Authors:
|
||||||
|
Brian C. Lane <bcl@redhat.com>
|
||||||
|
|
||||||
|
``lorax-composer`` is a WELDR API server that allows you to build disk images using
|
||||||
|
`Blueprints`_ to describe the package versions to be installed into the image.
|
||||||
|
It is compatible with the Weldr project's bdcs-api REST protocol. More
|
||||||
|
information on Weldr can be found `on the Weldr blog <http://www.weldr.io>`_.
|
||||||
|
|
||||||
|
Behind the scenes it uses `livemedia-creator <livemedia-creator.html>`_ and
|
||||||
|
`Anaconda <https://anaconda-installer.readthedocs.io/en/latest/>`_ to handle the
|
||||||
|
installation and configuration of the images.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
``lorax-composer`` is now deprecated. It is being 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 <https://www.osbuild.org/>`_ for more information.
|
||||||
|
|
||||||
|
|
||||||
|
Important Things To Note
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
* As of version 30.7 SELinux can be set to Enforcing. The current state is
|
||||||
|
logged for debugging purposes and if there are SELinux denials they should
|
||||||
|
be reported as a bug.
|
||||||
|
|
||||||
|
* All image types lock the root account, except for live-iso. You will need to either
|
||||||
|
use one of the `Customizations`_ methods for setting a ssh key/password, install a
|
||||||
|
package that creates a user, or use something like `cloud-init` to setup access at
|
||||||
|
boot time.
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
The best way to install ``lorax-composer`` is to use ``sudo dnf install
|
||||||
|
lorax-composer composer-cli``, this will setup the weldr user and install the
|
||||||
|
systemd socket activation service. You will then need to enable it with ``sudo
|
||||||
|
systemctl enable lorax-composer.socket && sudo systemctl start
|
||||||
|
lorax-composer.socket``. This will leave the server off until the first request
|
||||||
|
is made. Systemd will then launch the server and it will remain running until
|
||||||
|
the system is rebooted. This will cause some delay in responding to the first
|
||||||
|
request from the UI or `composer-cli`.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you want lorax-composer to respond immediately to the first request you can
|
||||||
|
start and enable `lorax-composer.service` instead of `lorax-composer.socket`
|
||||||
|
|
||||||
|
Quickstart
|
||||||
|
----------
|
||||||
|
|
||||||
|
1. Create a ``weldr`` user and group by running ``useradd weldr``
|
||||||
|
2. Remove any pre-existing socket directory with ``rm -rf /run/weldr/``
|
||||||
|
A new directory with correct permissions will be created the first time the server runs.
|
||||||
|
3. Enable the socket activation with ``systemctl enable lorax-composer.socket
|
||||||
|
&& sudo systemctl start lorax-composer.socket``.
|
||||||
|
|
||||||
|
NOTE: You can also run it directly with ``lorax-composer /path/to/blueprints``. However,
|
||||||
|
``lorax-composer`` does not react well to being started both on the command line and via
|
||||||
|
socket activation at the same time. It is therefore recommended that you run it directly
|
||||||
|
on the command line only for testing or development purposes. For real use or development
|
||||||
|
of other projects that simply use the API, you should stick to socket activation only.
|
||||||
|
|
||||||
|
The ``/path/to/blueprints/`` directory is where the blueprints' git repo will
|
||||||
|
be created, and all the blueprints created with the ``/api/v0/blueprints/new``
|
||||||
|
route will be stored. If there are blueprint ``.toml`` files in the top level
|
||||||
|
of the directory they will be imported into the blueprint git storage when
|
||||||
|
``lorax-composer`` starts.
|
||||||
|
|
||||||
|
Logs
|
||||||
|
----
|
||||||
|
|
||||||
|
Logs are stored under ``/var/log/lorax-composer/`` and include all console
|
||||||
|
messages as well as extra debugging info and API requests.
|
||||||
|
|
||||||
|
Security
|
||||||
|
--------
|
||||||
|
|
||||||
|
Some security related issues that you should be aware of before running ``lorax-composer``:
|
||||||
|
|
||||||
|
* One of the API server threads needs to retain root privileges in order to run Anaconda.
|
||||||
|
* Only allow authorized users access to the ``weldr`` group and socket.
|
||||||
|
|
||||||
|
Since Anaconda kickstarts are used there is the possibility that a user could
|
||||||
|
inject commands into a blueprint that would result in the kickstart executing
|
||||||
|
arbitrary code on the host. Only authorized users should be allowed to build
|
||||||
|
images using ``lorax-composer``.
|
||||||
|
|
||||||
|
lorax-composer cmdline arguments
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
.. argparse::
|
||||||
|
:ref: pylorax.api.cmdline.lorax_composer_parser
|
||||||
|
:prog: lorax-composer
|
||||||
|
|
||||||
|
|
||||||
|
How it Works
|
||||||
|
------------
|
||||||
|
|
||||||
|
The server runs as root, and as ``weldr``. Communication with it is via a unix
|
||||||
|
domain socket (``/run/weldr/api.socket`` by default). The directory and socket
|
||||||
|
are owned by ``root:weldr`` so that any user in the ``weldr`` group can use the API
|
||||||
|
to control ``lorax-composer``.
|
||||||
|
|
||||||
|
At startup the server will check for the correct permissions and
|
||||||
|
ownership of a pre-existing directory, or it will create a new one if it
|
||||||
|
doesn't exist. The socket path and group owner's name can be changed from the
|
||||||
|
cmdline by passing it the ``--socket`` and ``--group`` arguments.
|
||||||
|
|
||||||
|
It will then drop root privileges for the API thread and run as the ``weldr``
|
||||||
|
user. The queue and compose thread still runs as root because it needs to be
|
||||||
|
able to mount/umount files and run Anaconda.
|
||||||
|
|
||||||
|
Composing Images
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The `welder-web <https://github.com/weldr/welder-web/>`_ GUI project can be used to construct
|
||||||
|
blueprints and create composes using a web browser.
|
||||||
|
|
||||||
|
Or use the command line with `composer-cli <composer-cli.html>`_.
|
||||||
|
|
||||||
|
Blueprints
|
||||||
|
----------
|
||||||
|
|
||||||
|
Blueprints are simple text files in `TOML <https://github.com/toml-lang/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.
|
||||||
|
|
||||||
|
Example blueprints can be found in the ``lorax-composer`` `test suite
|
||||||
|
<https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_, with a simple one
|
||||||
|
looking 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 <https://semver.org/>`_ 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 ``lorax-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]]
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The ``[[repos.git]]`` entries are used to add files from a `git repository <https://git-scm.com/>`_
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
Adding Output Types
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
``livemedia-creator`` supports a large number of output types, and only some of
|
||||||
|
these are currently available via ``lorax-composer``. To add a new output type to
|
||||||
|
lorax-composer a kickstart file needs to be added to ``./share/composer/``. The
|
||||||
|
name of the kickstart is what will be used by the ``/compose/types`` route, and the
|
||||||
|
``compose_type`` field of the POST to start a compose. It also needs to have
|
||||||
|
code added to the :py:func:`pylorax.api.compose.compose_args` function. The
|
||||||
|
``_MAP`` entry in this function defines what lorax-composer will pass to
|
||||||
|
:py:func:`pylorax.installer.novirt_install` when it runs the compose. When the
|
||||||
|
compose is finished the output files need to be copied out of the build
|
||||||
|
directory (``/var/lib/lorax/composer/results/<UUID>/compose/``),
|
||||||
|
:py:func:`pylorax.api.compose.move_compose_results` handles this for each type.
|
||||||
|
You should move them instead of copying to save space.
|
||||||
|
|
||||||
|
If the new output type does not have support in livemedia-creator it should be
|
||||||
|
added there first. This will make the output available to the widest number of
|
||||||
|
users.
|
||||||
|
|
||||||
|
Example: Add partitioned disk support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Partitioned disk support is something that livemedia-creator already supports
|
||||||
|
via the ``--make-disk`` cmdline argument. To add this to lorax-composer it
|
||||||
|
needs 3 things:
|
||||||
|
|
||||||
|
* A ``partitioned-disk.ks`` file in ``./share/composer/``
|
||||||
|
* A new entry in the _MAP in :py:func:`pylorax.api.compose.compose_args`
|
||||||
|
* Add a bit of code to :py:func:`pylorax.api.compose.move_compose_results` to move the disk image from
|
||||||
|
the compose directory to the results directory.
|
||||||
|
|
||||||
|
The ``partitioned-disk.ks`` is pretty similar to the example minimal kickstart
|
||||||
|
in ``./docs/fedora-minimal.ks``. You should remove the ``url`` and ``repo``
|
||||||
|
commands, they will be added by the compose process. Make sure the bootloader
|
||||||
|
packages are included in the ``%packages`` section at the end of the kickstart,
|
||||||
|
and you will want to leave off the ``%end`` so that the compose can append the
|
||||||
|
list of packages from the blueprint.
|
||||||
|
|
||||||
|
The new ``_MAP`` entry should be a copy of one of the existing entries, but with ``make_disk`` set
|
||||||
|
to ``True``. Make sure that none of the other ``make_*`` options are ``True``. The ``image_name`` is
|
||||||
|
what the name of the final image will be.
|
||||||
|
|
||||||
|
``move_compose_results()`` can be as simple as moving the output file into
|
||||||
|
the results directory, or it could do some post-processing on it. The end of
|
||||||
|
the function should always clean up the ``./compose/`` directory, removing any
|
||||||
|
unneeded extra files. This is especially true for the ``live-iso`` since it produces
|
||||||
|
the contents of the iso as well as the boot.iso itself.
|
||||||
|
|
||||||
|
Package Sources
|
||||||
|
---------------
|
||||||
|
|
||||||
|
By default lorax-composer uses the host's configured repositories. It copies
|
||||||
|
the ``*.repo`` files from ``/etc/yum.repos.d/`` into
|
||||||
|
``/var/lib/lorax/composer/repos.d/`` at startup, these are immutable system
|
||||||
|
repositories and cannot be deleted or changed. If you want to add additional
|
||||||
|
repos you can put them into ``/var/lib/lorax/composer/repos.d/`` or use the
|
||||||
|
``/api/v0/projects/source/*`` API routes to create them.
|
||||||
|
|
||||||
|
The new source can be added by doing a POST to the ``/api/v0/projects/source/new``
|
||||||
|
route using JSON (with `Content-Type` header set to `application/json`) or TOML
|
||||||
|
(with it set to `text/x-toml`). The format of the source looks like this (in
|
||||||
|
TOML)::
|
||||||
|
|
||||||
|
name = "custom-source-1"
|
||||||
|
url = "https://url/path/to/repository/"
|
||||||
|
type = "yum-baseurl"
|
||||||
|
proxy = "https://proxy-url/"
|
||||||
|
check_ssl = true
|
||||||
|
check_gpg = true
|
||||||
|
gpgkey_urls = ["https://url/path/to/gpg-key"]
|
||||||
|
|
||||||
|
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 to the ``new`` route
|
||||||
|
with the new version of the source. It will overwrite the previous one.
|
||||||
|
|
||||||
|
A list of existing sources is available from ``/api/v0/projects/source/list``, and detailed info
|
||||||
|
on a source can be retrieved with the ``/api/v0/projects/source/info/<source-name>`` route. By default
|
||||||
|
it returns JSON but it can also return TOML if ``?format=toml`` is added to the request.
|
||||||
|
|
||||||
|
Non-system sources can be deleted by doing a ``DELETE`` request to the
|
||||||
|
``/api/v0/projects/source/delete/<source-name>`` route.
|
||||||
|
|
||||||
|
The documentation for the source API routes can be `found here <pylorax.api.html#api-v0-projects-source-list>`_
|
||||||
|
|
||||||
|
The configured sources are used for all blueprint depsolve operations, and for composing images.
|
||||||
|
When adding additional sources you must make sure that the packages in the source do not
|
||||||
|
conflict with any other package sources, otherwise depsolving will fail.
|
||||||
|
|
||||||
|
DVD ISO Package Source
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In some situations the system may want to *only* use a DVD iso as the package
|
||||||
|
source, not the repos from the network. ``lorax-composer`` and ``anaconda``
|
||||||
|
understand ``file://`` URLs so you can mount an iso on the host, and replace the
|
||||||
|
system repo files with a configuration file pointing to the DVD.
|
||||||
|
|
||||||
|
* Stop the ``lorax-composer.service`` if it is running
|
||||||
|
* Move the repo files in ``/etc/yum.repos.d/`` someplace safe
|
||||||
|
* Create a new ``iso.repo`` file in ``/etc/yum.repos.d/``::
|
||||||
|
|
||||||
|
[iso]
|
||||||
|
name=iso
|
||||||
|
baseurl=file:///mnt/iso/
|
||||||
|
enabled=1
|
||||||
|
gpgcheck=1
|
||||||
|
gpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-release
|
||||||
|
|
||||||
|
* Remove all the cached repo files from ``/var/lib/lorax/composer/repos/``
|
||||||
|
* Restart the ``lorax-composer.service``
|
||||||
|
* Check the output of ``composer-cli status show`` for any output specific depsolve errors.
|
||||||
|
For example, the DVD usually does not include ``grub2-efi-*-cdboot-*`` so the live-iso image
|
||||||
|
type will not be available.
|
||||||
|
|
||||||
|
If you want to *add* the DVD source to the existing sources you can do that by
|
||||||
|
mounting the iso and creating a source file to point to it as described in the
|
||||||
|
`Package Sources`_ documentation. In that case there is no need to remove the other
|
||||||
|
sources from ``/etc/yum.repos.d/`` or clear the cached repos.
|
||||||
@ -51,7 +51,7 @@ You can add your own repos with ``-s`` and packages with higher NVRs will
|
|||||||
override the ones in the distribution repositories.
|
override the ones in the distribution repositories.
|
||||||
|
|
||||||
Under ``./results/`` will be the release tree files: .discinfo, .treeinfo, everything that
|
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 ``./results/images/``.
|
goes onto the boot.iso, the pxeboot directory, and the boot.iso under ``./images/``.
|
||||||
|
|
||||||
|
|
||||||
Branding
|
Branding
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user