Compare commits
254 Commits
master
...
f29-branch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ee567c1778 | ||
|
|
2779565820 | ||
|
|
ac6d408115 | ||
|
|
2a4d2f3a9b | ||
|
|
d7fe470183 | ||
|
|
89c590dc13 | ||
|
|
46e5c3717f | ||
|
|
48ba83b67b | ||
|
|
4b87dc09d0 | ||
|
|
36ba09345b | ||
|
|
0945c9b81f | ||
|
|
f39e965fb2 | ||
|
|
725a0437c7 | ||
|
|
acad424005 | ||
|
|
6368b0e83b | ||
|
|
2c03c49149 | ||
|
|
25bac2fe65 | ||
|
|
a91dfee3a5 | ||
|
|
e001c6aaa4 | ||
|
|
5230b8d30e | ||
|
|
b94fdddc7c | ||
|
|
cc2c3bbbd2 | ||
|
|
6e3eeed1da | ||
|
|
33451f0a60 | ||
|
|
56699c4818 | ||
|
|
fa1aeec58e | ||
|
|
0314b6125f | ||
|
|
712ae7a721 | ||
|
|
9a4a45f05a | ||
|
|
0220077242 | ||
|
|
c1628bd171 | ||
|
|
69caef3c2d | ||
|
|
4e144e15b7 | ||
|
|
b52877b63c | ||
|
|
c74e50d99d | ||
|
|
ce879af719 | ||
|
|
4fa08eb8e1 | ||
|
|
e84bf3a64c | ||
|
|
c9f076c86d | ||
|
|
7a86aa1d17 | ||
|
|
156e0ba7c9 | ||
|
|
4c313acc64 | ||
|
|
3339048a66 | ||
|
|
c5108bce9f | ||
|
|
5042867d19 | ||
|
|
b25995d9d4 | ||
|
|
7a6ebb0ad3 | ||
|
|
8696f197d4 | ||
|
|
0169422746 | ||
|
|
21b03c2108 | ||
|
|
d9b55b78cb | ||
|
|
7a1e443aff | ||
|
|
530279c44a | ||
|
|
d0ac25d022 | ||
|
|
2dd3dd54c5 | ||
|
|
d0458750df | ||
|
|
21975b44da | ||
|
|
35faa61f7e | ||
|
|
78ccea2231 | ||
|
|
6aa0a3fdf6 | ||
|
|
afa68df873 | ||
|
|
935f66662b | ||
|
|
53c4daa529 | ||
|
|
850c35a613 | ||
|
|
0dd9ffab92 | ||
|
|
208941afd8 | ||
|
|
1fd73cde52 | ||
|
|
85708340eb | ||
|
|
4f07db73a5 | ||
|
|
54fe00d16e | ||
|
|
883bc07fc8 | ||
|
|
19375b9d4e | ||
|
|
ab74164d83 | ||
|
|
f02eab78a3 | ||
|
|
3d2c085cf0 | ||
|
|
30098a52e3 | ||
|
|
b537d653c4 | ||
|
|
36b0985265 | ||
|
|
ce361d6f48 | ||
|
|
b7b8731c03 | ||
|
|
a08dd1585c | ||
|
|
1a76c4816f | ||
|
|
8814231a09 | ||
|
|
5ed5690fb6 | ||
|
|
ea63fbcc5b | ||
|
|
f7e71768fa | ||
|
|
2ad44f3a46 | ||
|
|
45710e435a | ||
|
|
c6bff67549 | ||
|
|
0d38224f12 | ||
|
|
f6bf2cf460 | ||
|
|
6debc2252c | ||
|
|
43a79746fc | ||
|
|
d23ec308d4 | ||
|
|
fe091060b8 | ||
|
|
12cd27375a | ||
|
|
a839824f7a | ||
|
|
34c24117fe | ||
|
|
8885d7eaca | ||
|
|
2fd6c6b549 | ||
|
|
a038f7d904 | ||
|
|
963c7d8f89 | ||
|
|
3daede741c | ||
|
|
4f3b81e4e7 | ||
|
|
7b306e2e84 | ||
|
|
9584cbd96f | ||
|
|
c4f3ceb0ec | ||
|
|
41aa84ba04 | ||
|
|
a8ff02113b | ||
|
|
80c18a6e63 | ||
|
|
efa9974609 | ||
|
|
a907a3757d | ||
|
|
eda242623b | ||
|
|
8c409c8263 | ||
|
|
9c17c0cc6c | ||
|
|
178eb927d6 | ||
|
|
2184cff59c | ||
|
|
63e35921fa | ||
|
|
9b31c3cad9 | ||
|
|
a0a76a800a | ||
|
|
3fd9699e6d | ||
|
|
51a9c28bc6 | ||
|
|
faad43ced8 | ||
|
|
e7310c7260 | ||
|
|
0aa206f661 | ||
|
|
5fa5b8e142 | ||
|
|
ef45d169b0 | ||
|
|
c63b2e3881 | ||
|
|
c6b9a72778 | ||
|
|
c34a0fb535 | ||
|
|
c5e839838f | ||
|
|
4c71adadd5 | ||
|
|
a2797e8f1b | ||
|
|
cbebbce0d5 | ||
|
|
71ccb55985 | ||
|
|
4c41780856 | ||
|
|
c0d51e9e99 | ||
|
|
019aa20d9f | ||
|
|
7c38d74c00 | ||
|
|
a8d8a4a2ef | ||
|
|
ccb11427d0 | ||
|
|
e2366fd0c0 | ||
|
|
df5f67e690 | ||
|
|
d04d176cb4 | ||
|
|
376eda543c | ||
|
|
ab1effb98d | ||
|
|
7248355756 | ||
|
|
1c5b0d1237 | ||
|
|
03a2c09301 | ||
|
|
47a909209f | ||
|
|
80e35d8d0e | ||
|
|
97fa245e0c | ||
|
|
36aeffc337 | ||
|
|
e57ec6a566 | ||
|
|
635c4adefd | ||
|
|
76071db226 | ||
|
|
486dd3f629 | ||
|
|
06db78c9c4 | ||
|
|
efcfdbff4f | ||
|
|
eb9a591fbc | ||
|
|
cfff807df8 | ||
|
|
9af706dbe3 | ||
|
|
6be0ca9bb0 | ||
|
|
bef4d9f4a8 | ||
|
|
251306e1ab | ||
|
|
1607e33227 | ||
|
|
42addfc2b5 | ||
|
|
850ad9845a | ||
|
|
df6d7654bd | ||
|
|
5bf223c21a | ||
|
|
8721ce765d | ||
|
|
40cfaa515c | ||
|
|
3f034a981d | ||
|
|
574360f7d0 | ||
|
|
1d21957036 | ||
|
|
0c042afd34 | ||
|
|
99d867db65 | ||
|
|
4a4a415f88 | ||
|
|
080705e8e6 | ||
|
|
43ff505804 | ||
|
|
a357c42f2d | ||
|
|
5cf54c6f29 | ||
|
|
1006af4232 | ||
|
|
8a53d5e310 | ||
|
|
d9b282150e | ||
|
|
bdbd8258f0 | ||
|
|
88a0b475e9 | ||
|
|
af28b25e50 | ||
|
|
4192dfc709 | ||
|
|
49db5403b8 | ||
|
|
eafc2796a1 | ||
|
|
f3cbeb8808 | ||
|
|
6fb5910acd | ||
|
|
708cadee82 | ||
|
|
3499426b2d | ||
|
|
5efce31772 | ||
|
|
ce6fa9c05f | ||
|
|
a76aad36f6 | ||
|
|
e116a5f4be | ||
|
|
f86aaa5d37 | ||
|
|
d03e6e8c7e | ||
|
|
e63da65ad1 | ||
|
|
16dccde87f | ||
|
|
f24f84282d | ||
|
|
8f1bc6e882 | ||
|
|
29fe174b6b | ||
|
|
d65a502861 | ||
|
|
ec47fe12a9 | ||
|
|
c7b4dce2b6 | ||
|
|
b35fe9d32a | ||
|
|
75523f7a49 | ||
|
|
1f514a3e55 | ||
|
|
8bc6282083 | ||
|
|
6e86328865 | ||
|
|
5184ccef9f | ||
|
|
1c0705f4e0 | ||
|
|
891729528f | ||
|
|
8963c33e16 | ||
|
|
3ad5a5cccf | ||
|
|
bd8fdb8c0e | ||
|
|
ecd4327a01 | ||
|
|
d6274ec413 | ||
|
|
af3cab0dfe | ||
|
|
0e629f3d2a | ||
|
|
3cd4a3cb49 | ||
|
|
e559418ec4 | ||
|
|
79422eb78b | ||
|
|
e2e73973dc | ||
|
|
d540ba3a23 | ||
|
|
490f7f6cf1 | ||
|
|
0ec66e3ef2 | ||
|
|
f32ef25fd1 | ||
|
|
c37b9f57e5 | ||
|
|
a148f8edde | ||
|
|
d329ebd519 | ||
|
|
41a91d031f | ||
|
|
9ee2d46a32 | ||
|
|
bb73d93663 | ||
|
|
9de0948511 | ||
|
|
576888bd31 | ||
|
|
5204e3c6f4 | ||
|
|
38e03dad63 | ||
|
|
bc4c230128 | ||
|
|
3e4bed4df3 | ||
|
|
77ba534832 | ||
|
|
75400f6a7f | ||
|
|
fa1ba96a73 | ||
|
|
cbf3599636 | ||
|
|
ed9fc1885a | ||
|
|
f41ca1e0fb | ||
|
|
9a83a5cb3f | ||
|
|
b0872c8f17 | ||
|
|
c7ba2e6231 | ||
|
|
7ac3e20234 |
@ -1,5 +1,3 @@
|
|||||||
[paths]
|
[paths]
|
||||||
source = .
|
source = .
|
||||||
/lorax/
|
/lorax/
|
||||||
[run]
|
|
||||||
relative_files = True
|
|
||||||
|
|||||||
21
.github/pull_request_template.md
vendored
Normal file
21
.github/pull_request_template.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
--- Description of proposed changes ---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Merge policy ---
|
||||||
|
|
||||||
|
- [ ] Travis CI PASS
|
||||||
|
- [ ] `*-aws-runtest` PASS
|
||||||
|
- [ ] `*-azure-runtest` PASS
|
||||||
|
- [ ] `*-images-runtest` PASS
|
||||||
|
- [ ] `*-openstack-runtest` PASS
|
||||||
|
- [ ] `*-vmware-runtest` PASS
|
||||||
|
- [ ] For `rhel8-*` and `rhel7-*` branches commit log references an approved
|
||||||
|
bug in Bugzilla. Do not merge if the bug doesn't have the 3 ACKs set to `+`!
|
||||||
|
|
||||||
|
--- Jenkins commands ---
|
||||||
|
|
||||||
|
- `ok to test` to accept this pull request for testing
|
||||||
|
- `test this please` for a one time test run
|
||||||
|
- `retest this please` to start a new build
|
||||||
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 }}
|
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,5 +1,4 @@
|
|||||||
*.pyc
|
*.pyc
|
||||||
*.rpm
|
|
||||||
src/pylorax/version.py*
|
src/pylorax/version.py*
|
||||||
_build/
|
_build/
|
||||||
tests/pylint/.pylint.d/
|
tests/pylint/.pylint.d/
|
||||||
@ -8,7 +7,3 @@ __pycache__/
|
|||||||
pylint-log
|
pylint-log
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
.test-results/
|
.test-results/
|
||||||
/lorax-*.tar.gz
|
|
||||||
/bots
|
|
||||||
/test/images
|
|
||||||
/tmp
|
|
||||||
|
|||||||
21
.travis.yml
Normal file
21
.travis.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
sudo: required
|
||||||
|
language: python
|
||||||
|
services:
|
||||||
|
- 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,6 +1,40 @@
|
|||||||
FROM registry.fedoraproject.org/fedora:rawhide
|
FROM registry.fedoraproject.org/fedora:29
|
||||||
COPY test-packages .
|
RUN dnf -y install \
|
||||||
RUN dnf -y install $(cat test-packages) && touch /.in-container
|
anaconda-tui \
|
||||||
|
libgit2-glib \
|
||||||
|
libselinux-python3 \
|
||||||
|
make \
|
||||||
|
pykickstart \
|
||||||
|
python3-coverage \
|
||||||
|
python3-coveralls \
|
||||||
|
python3-flask \
|
||||||
|
python3-gevent \
|
||||||
|
python3-magic \
|
||||||
|
python3-mako \
|
||||||
|
python3-mock \
|
||||||
|
python3-nose \
|
||||||
|
python3-pocketlint \
|
||||||
|
python3-pylint \
|
||||||
|
python3-pyparted \
|
||||||
|
python3-pytoml \
|
||||||
|
python3-semantic_version \
|
||||||
|
python3-sphinx \
|
||||||
|
python3-sphinx-argparse \
|
||||||
|
python3-sphinx_rtd_theme \
|
||||||
|
python3-rpmfluff \
|
||||||
|
python3-librepo \
|
||||||
|
python3-pyvmomi \
|
||||||
|
beakerlib \
|
||||||
|
sudo \
|
||||||
|
tito \
|
||||||
|
rsync \
|
||||||
|
e2fsprogs \
|
||||||
|
xz-lzma-compat \
|
||||||
|
pbzip2 \
|
||||||
|
squashfs-tools \
|
||||||
|
qemu-img \
|
||||||
|
which && \
|
||||||
|
touch /.in-container
|
||||||
RUN useradd weldr
|
RUN useradd weldr
|
||||||
VOLUME /lorax-ro
|
VOLUME /lorax-ro
|
||||||
VOLUME /test-results
|
VOLUME /test-results
|
||||||
|
|||||||
@ -14,7 +14,7 @@ How to build it:
|
|||||||
To run the tests you need the following dependencies installed:
|
To run the tests you need the following dependencies installed:
|
||||||
|
|
||||||
$ yum install python3-nose python3-pytest-mock python3-pocketlint \
|
$ yum install python3-nose python3-pytest-mock python3-pocketlint \
|
||||||
python3-mock python3-magic
|
python3-mock
|
||||||
|
|
||||||
Run the basic linting tests like this:
|
Run the basic linting tests like this:
|
||||||
|
|
||||||
@ -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
|
|
||||||
|
|||||||
140
Makefile
140
Makefile
@ -2,10 +2,8 @@ PYTHON ?= /usr/bin/python3
|
|||||||
DESTDIR ?= /
|
DESTDIR ?= /
|
||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
mandir ?= $(PREFIX)/share/man
|
mandir ?= $(PREFIX)/share/man
|
||||||
DOCKER ?= podman
|
DOCKER ?= docker
|
||||||
PODMAN ?= $(DOCKER)
|
|
||||||
DOCS_VERSION ?= next
|
DOCS_VERSION ?= next
|
||||||
RUN_TESTS ?= ci
|
|
||||||
|
|
||||||
PKGNAME = lorax
|
PKGNAME = lorax
|
||||||
VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec)
|
VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec)
|
||||||
@ -14,31 +12,26 @@ TAG = lorax-$(VERSION)-$(RELEASE)
|
|||||||
|
|
||||||
IMAGE_RELEASE = $(shell awk -F: '/FROM/ { print $$2}' Dockerfile.test)
|
IMAGE_RELEASE = $(shell awk -F: '/FROM/ { print $$2}' Dockerfile.test)
|
||||||
|
|
||||||
ifeq ($(TEST_OS),)
|
|
||||||
OS_ID = $(shell awk -F= '/^ID/ {print $$2}' /etc/os-release)
|
|
||||||
OS_VERSION = $(shell awk -F= '/^VERSION_ID/ {print $$2}' /etc/os-release)
|
|
||||||
TEST_OS = $(OS_ID)-$(OS_VERSION)
|
|
||||||
endif
|
|
||||||
export TEST_OS
|
|
||||||
VM_IMAGE=$(CURDIR)/test/images/$(TEST_OS)
|
|
||||||
|
|
||||||
ifeq ($(REPOS_DIR),)
|
|
||||||
REPOS_DIR = /etc/yum.repos.d
|
|
||||||
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
|
||||||
$(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PREFIX)
|
$(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PREFIX)
|
||||||
mkdir -p $(DESTDIR)/$(mandir)/man1
|
mkdir -p $(DESTDIR)/$(mandir)/man1
|
||||||
install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1
|
install -m 644 docs/man/lorax.1 $(DESTDIR)/$(mandir)/man1
|
||||||
|
install -m 644 docs/man/livemedia-creator.1 $(DESTDIR)/$(mandir)/man1
|
||||||
|
install -m 644 docs/man/lorax-composer.1 $(DESTDIR)/$(mandir)/man1
|
||||||
|
install -m 644 docs/man/composer-cli.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 ***"
|
||||||
@ -46,17 +39,35 @@ check:
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
@echo "*** Running tests ***"
|
@echo "*** Running tests ***"
|
||||||
PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -X dev -m pytest -v --cov-branch \
|
PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -m nose -v --with-coverage --cover-erase --cover-branches \
|
||||||
--cov=pylorax ./tests/pylorax/ ./tests/image-minimizer/
|
--cover-package=pylorax --cover-inclusive \
|
||||||
|
./tests/pylorax/ ./tests/composer/
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
test_cli:
|
./tests/test_cli.sh
|
||||||
sudo -E ./tests/test_cli.sh
|
|
||||||
|
|
||||||
test_mkksiso:
|
# need `losetup`, which needs Docker to be in privileged mode (--privileged)
|
||||||
sudo -E ./tests/mkksiso/test_mkksiso.sh
|
# 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_qcow2.sh \
|
||||||
|
tests/cli/test_compose_live-iso.sh
|
||||||
|
|
||||||
|
test_aws:
|
||||||
|
sudo -E ./tests/test_cli.sh tests/cli/test_build_and_deploy_aws.sh
|
||||||
|
|
||||||
|
test_azure:
|
||||||
|
sudo -E ./tests/test_cli.sh tests/cli/test_build_and_deploy_azure.sh
|
||||||
|
|
||||||
|
test_openstack:
|
||||||
|
sudo -E ./tests/test_cli.sh tests/cli/test_build_and_deploy_openstack.sh
|
||||||
|
|
||||||
|
test_vmware:
|
||||||
|
sudo -E ./tests/test_cli.sh tests/cli/test_build_and_deploy_vmware.sh
|
||||||
|
|
||||||
clean_cloud_envs:
|
clean_cloud_envs:
|
||||||
# clean beakerlib logs from previous executions
|
# clean beakerlib logs from previous executions
|
||||||
@ -70,6 +81,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,22 +91,16 @@ 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
|
||||||
@gzip -f $(PKGNAME)-$(VERSION).tar
|
@gzip $(PKGNAME)-$(VERSION).tar
|
||||||
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz"
|
||||||
|
|
||||||
dist: tag archive
|
dist: tag archive
|
||||||
scp $(PKGNAME)-$(VERSION).tar.gz fedorahosted.org:lorax
|
scp $(PKGNAME)-$(VERSION).tar.gz fedorahosted.org:lorax
|
||||||
|
|
||||||
srpm: archive $(PKGNAME).spec
|
|
||||||
rpmbuild -bs \
|
|
||||||
--define "_sourcedir $(CURDIR)" \
|
|
||||||
--define "_srcrpmdir $(CURDIR)" \
|
|
||||||
lorax.spec
|
|
||||||
|
|
||||||
local:
|
local:
|
||||||
@rm -rf $(PKGNAME)-$(VERSION).tar.gz
|
@rm -rf $(PKGNAME)-$(VERSION).tar.gz
|
||||||
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
@rm -rf /var/tmp/$(PKGNAME)-$(VERSION)
|
||||||
@ -104,81 +110,27 @@ 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/ ci
|
||||||
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 welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy
|
||||||
-v `pwd`:/lorax-ro:ro --security-opt label=disable \
|
|
||||||
--env RUN_TESTS="$(RUN_TESTS)" \
|
|
||||||
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
|
||||||
|
|
||||||
$(VM_IMAGE): TAG=HEAD
|
|
||||||
$(VM_IMAGE): srpm bots
|
|
||||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
|
||||||
srpm=$(shell rpm --qf '%{Name}-%{Version}-%{Release}.src.rpm\n' -q --specfile lorax.spec | head -n1) ; \
|
|
||||||
bots/image-customize -v \
|
|
||||||
--resize 20G \
|
|
||||||
--upload $$srpm:/var/tmp \
|
|
||||||
--upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \
|
|
||||||
--upload $(realpath tests):/ \
|
|
||||||
--run-command "chmod +x /var/tmp/vm.install" \
|
|
||||||
--run-command "cd /var/tmp; /var/tmp/vm.install $$srpm" \
|
|
||||||
$(TEST_OS)
|
|
||||||
[ -f ~/.config/lorax-test-env ] && bots/image-customize \
|
|
||||||
--upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \
|
|
||||||
$(TEST_OS) || echo
|
|
||||||
|
|
||||||
|
|
||||||
# convenience target for the above
|
|
||||||
vm: $(VM_IMAGE)
|
|
||||||
echo $(VM_IMAGE)
|
|
||||||
|
|
||||||
# grab all repositories from the host system, overwriting what's inside the VM
|
|
||||||
# and update the image. Mostly used when testing downstream snapshots to make
|
|
||||||
# sure VM_IMAGE is as close as possible to the host!
|
|
||||||
vm-local-repos: vm
|
|
||||||
|
|
||||||
vm-reset:
|
|
||||||
rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2
|
|
||||||
|
|
||||||
# checkout Cockpit's bots for standard test VM images and API to launch them
|
|
||||||
# must be from master, as only that has current and existing images; but testvm.py API is stable
|
|
||||||
# support CI testing against a bots change
|
|
||||||
bots:
|
|
||||||
git clone --quiet --reference-if-able $${XDG_CACHE_HOME:-$$HOME/.cache}/cockpit-project/bots https://github.com/cockpit-project/bots.git
|
|
||||||
if [ -n "$$COCKPIT_BOTS_REF" ]; then git -C bots fetch --quiet --depth=1 origin "$$COCKPIT_BOTS_REF"; git -C bots checkout --quiet FETCH_HEAD; fi
|
|
||||||
@echo "checked out bots/ ref $$(git -C bots rev-parse HEAD)"
|
|
||||||
|
|
||||||
.PHONY: ci_after_success
|
.PHONY: ci_after_success
|
||||||
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
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
135
RELEASE.md
135
RELEASE.md
@ -1,135 +0,0 @@
|
|||||||
How to release a new version of Lorax for Fedora
|
|
||||||
================================================
|
|
||||||
|
|
||||||
Install `tito` and `podman` on your system.
|
|
||||||
|
|
||||||
Optionally patch `tito` to support signing the tags with your gpg key. If you
|
|
||||||
do this your key should be available on the public gpg keyservers so that
|
|
||||||
people can verify your signature.
|
|
||||||
|
|
||||||
The upstream `tito` PR can be found [here](https://github.com/dgoodwin/tito/pull/328).
|
|
||||||
|
|
||||||
You will need to have permission to push to the lorax repository, and to the
|
|
||||||
Fedora dist-git repository. If your FAS name isn't listed on the [lorax package
|
|
||||||
page](https://src.fedoraproject.org/rpms/lorax/) members list then you need to
|
|
||||||
contact one of the project admins and ask to be added.
|
|
||||||
|
|
||||||
|
|
||||||
Run the tests
|
|
||||||
-------------
|
|
||||||
You can run the tests using `podman` instead of `docker` by running this from the
|
|
||||||
top level of the checked-out lorax repo:
|
|
||||||
|
|
||||||
DOCKER=podman RUN_TESTS="ci test_cli" make test-in-docker
|
|
||||||
|
|
||||||
If they fail, fix them and submit a PR :)
|
|
||||||
|
|
||||||
You can also run the cockpit CI tests locally:
|
|
||||||
|
|
||||||
make vm
|
|
||||||
./test/check-cli
|
|
||||||
|
|
||||||
See the `./test/README.md` documentation for more details about the cockpit CI
|
|
||||||
tests.
|
|
||||||
|
|
||||||
|
|
||||||
Update the documentation
|
|
||||||
------------------------
|
|
||||||
If there are changes to the code that would effect the documentation you should
|
|
||||||
rebuild the `sphinx` based documents:
|
|
||||||
|
|
||||||
DOCKER=podman make docs-in-docker
|
|
||||||
git add docs/
|
|
||||||
git commit -m "New lorax documentation - x.y"
|
|
||||||
|
|
||||||
The documentation is accessible [from here](https://weldr.io/lorax), and the
|
|
||||||
source for those pages is stored in the `gh-pages` branch of lorax. I have a
|
|
||||||
second `lorax` repository checked out that I use for updating the `gh-pages`
|
|
||||||
branch:
|
|
||||||
|
|
||||||
git clone git@github.com:weldr/lorax.git lorax-gh-pages
|
|
||||||
cd lorax-gh-pages
|
|
||||||
git checkout gh-pages
|
|
||||||
git pull
|
|
||||||
|
|
||||||
And then I rsync the new documentation over from the current lorax build
|
|
||||||
directory:
|
|
||||||
|
|
||||||
rsync -aP --exclude .git --exclude .nojekyll ../lorax/docs/html/ ./
|
|
||||||
git add .
|
|
||||||
git commit -m "Add lorax x.y documentation"
|
|
||||||
git push
|
|
||||||
|
|
||||||
After a few minutes the online version of the documentation should appear.
|
|
||||||
|
|
||||||
Tag and build the release tar.gz
|
|
||||||
--------------------------------
|
|
||||||
We use the `tito` tool to handle incrementing the version number and updating
|
|
||||||
the `lorax.spec` file changelog section using the git commits since the last
|
|
||||||
tag. `tito tag` will open an editor, allowing you to edit the changelog. Make
|
|
||||||
sure it looks clean, entries starting with '- ' and no wrapped lines:
|
|
||||||
|
|
||||||
tito tag
|
|
||||||
git push --follow-tags origin
|
|
||||||
|
|
||||||
Build the release tarball:
|
|
||||||
|
|
||||||
tito build --tgz
|
|
||||||
|
|
||||||
The release tarball will be placed into /tmp/tito/lorax-x.y.z.tar.gz
|
|
||||||
|
|
||||||
|
|
||||||
Build the Fedora lorax package
|
|
||||||
------------------------------
|
|
||||||
The first time you do this you need to clone the Fedora dist-git repository
|
|
||||||
[from here](https://src.fedoraproject.org/rpms/lorax/) using your ssh key:
|
|
||||||
|
|
||||||
git clone URL lorax-fedora
|
|
||||||
|
|
||||||
After that the steps are the same each time, make sure your `lorax-fedora` repo
|
|
||||||
is up to date:
|
|
||||||
|
|
||||||
git co master
|
|
||||||
git pull
|
|
||||||
|
|
||||||
Copy the `lorax.spec` that tito modified from your `lorax` project repo:
|
|
||||||
|
|
||||||
cp /path/to/lorax/repo/lorax.spec .
|
|
||||||
|
|
||||||
Make sure you have a current fedoraproject kerberos ticket, you can use
|
|
||||||
`kswitch -p FEDORAPROJECT.ORG` to switch to it if you need to, or `kinit` to
|
|
||||||
get one. See [the Fedora
|
|
||||||
wiki](https://fedoraproject.org/wiki/Infrastructure/Kerberos) for more details
|
|
||||||
and debugging tips.
|
|
||||||
|
|
||||||
Upload the new release's tar to build system, making sure you pick the right
|
|
||||||
one. The `/tmp/tito/` directory is only cleared out when you reboot, so it may
|
|
||||||
have several versions in there:
|
|
||||||
|
|
||||||
fedpkg new-sources /tmp/tito/lorax-x.y.tar.gz
|
|
||||||
|
|
||||||
Update the changelog. Yes, fedpkg changes the formatting and it is annoying.
|
|
||||||
Make sure the lines start with '- ' and that any wrapped lines are un-wrapped.
|
|
||||||
Usually the committer email address is what will get bumped to the next line:
|
|
||||||
|
|
||||||
fedpkg clog
|
|
||||||
vim clog
|
|
||||||
|
|
||||||
Add all the updated files, make sure nothing has been forgotten (lorax.spec, sources, .gitignore):
|
|
||||||
|
|
||||||
git add -u
|
|
||||||
git status (just to be sure you have all the files added )
|
|
||||||
git commit -F clog
|
|
||||||
git show
|
|
||||||
|
|
||||||
Examine the commit with care. Make sure the sources have changed, that the NVR
|
|
||||||
is correct, and that it contains the %changelog
|
|
||||||
|
|
||||||
At this point anything can be changed, either reset the checkout to the last
|
|
||||||
commit and start over, or fix the problems and squash the changes together into
|
|
||||||
the commit you just made. There should be one commit per-release.
|
|
||||||
|
|
||||||
fedpkg push && fedpkg build
|
|
||||||
|
|
||||||
If there are errors in the build, check the logs in koji at the link provided by fedpkg.
|
|
||||||
|
|
||||||
63
docs/composer-cli.rst
Normal file
63
docs/composer-cli.rst
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
composer-cli
|
||||||
|
============
|
||||||
|
|
||||||
|
:Authors:
|
||||||
|
Brian C. Lane <bcl@redhat.com>
|
||||||
|
|
||||||
|
``composer-cli`` is used to interact with the ``lorax-composer`` API server, managing blueprints, exploring available packages, and building new images.
|
||||||
|
|
||||||
|
It requires `lorax-composer <lorax-composer.html>`_ 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.
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
86
docs/composer.cli.rst
Normal file
86
docs/composer.cli.rst
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
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.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.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::
|
||||||
|
|
||||||
|
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,8 @@ 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),
|
||||||
('mkksiso', 'mkksiso', u'Make Kickstart ISO Utility Documentation', [u'Weldr Team'], 1),
|
('lorax-composer', 'lorax-composer', u'Lorax Composer Documentation', [u'Weldr Team'], 1),
|
||||||
('image-minimizer', 'image-minimizer', u'Utility script to remove files and packages', [u'Weldr Team'], 1),
|
('composer-cli', 'composer-cli', u'Composer Cmdline Utility Documentation', [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
|
||||||
@ -29,7 +29,7 @@ clearpart --all --initlabel
|
|||||||
rootpw rootme
|
rootpw rootme
|
||||||
# Disk partitioning information
|
# Disk partitioning information
|
||||||
reqpart
|
reqpart
|
||||||
part / --size=6656
|
part / --size=7000
|
||||||
|
|
||||||
%post
|
%post
|
||||||
# FIXME: it'd be better to get this installed from a package
|
# FIXME: it'd be better to get this installed from a package
|
||||||
@ -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
|
||||||
@ -167,10 +175,6 @@ systemctl --no-reload disable atd.service 2> /dev/null || :
|
|||||||
systemctl stop crond.service 2> /dev/null || :
|
systemctl stop crond.service 2> /dev/null || :
|
||||||
systemctl stop atd.service 2> /dev/null || :
|
systemctl stop atd.service 2> /dev/null || :
|
||||||
|
|
||||||
# turn off abrtd on a live image
|
|
||||||
systemctl --no-reload disable abrtd.service 2> /dev/null || :
|
|
||||||
systemctl stop abrtd.service 2> /dev/null || :
|
|
||||||
|
|
||||||
# Don't sync the system clock when running live (RHBZ #1018162)
|
# Don't sync the system clock when running live (RHBZ #1018162)
|
||||||
sed -i 's/rtcsync//' /etc/chrony.conf
|
sed -i 's/rtcsync//' /etc/chrony.conf
|
||||||
|
|
||||||
@ -178,7 +182,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 +267,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 +277,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
|
||||||
@ -301,30 +302,10 @@ cat >> /usr/share/glib-2.0/schemas/org.gnome.software.gschema.override << FOE
|
|||||||
download-updates=false
|
download-updates=false
|
||||||
FOE
|
FOE
|
||||||
|
|
||||||
# don't autostart gnome-software session service
|
|
||||||
rm -f /etc/xdg/autostart/gnome-software-service.desktop
|
|
||||||
|
|
||||||
# disable the gnome-software shell search provider
|
|
||||||
cat >> /usr/share/gnome-shell/search-providers/org.gnome.Software-search-provider.ini << FOE
|
|
||||||
DefaultDisabled=true
|
|
||||||
FOE
|
|
||||||
|
|
||||||
# don't run gnome-initial-setup
|
# don't run gnome-initial-setup
|
||||||
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 +315,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 +325,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,12 +355,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
|
|
||||||
dracut-config-generic
|
dracut-config-generic
|
||||||
dracut-live
|
dracut-live
|
||||||
glibc-all-langpacks
|
glibc-all-langpacks
|
||||||
@ -392,12 +377,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
|
||||||
@ -408,8 +394,4 @@ grub2-efi-*-cdboot
|
|||||||
grub2-efi-ia32
|
grub2-efi-ia32
|
||||||
efibootmgr
|
efibootmgr
|
||||||
|
|
||||||
# no longer in @core since 2018-10, but needed for livesys script
|
|
||||||
initscripts
|
|
||||||
chkconfig
|
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|||||||
@ -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: 1bf42a3192ec6a62d96115c18e727069
|
||||||
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.
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'.
|
||||||
271
docs/html/_modules/composer/cli.html
Normal file
271
docs/html/_modules/composer/cli.html
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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>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="k">import</span> <span class="n">blueprints_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.modules</span> <span class="k">import</span> <span class="n">modules_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.projects</span> <span class="k">import</span> <span class="n">projects_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.compose</span> <span class="k">import</span> <span class="n">compose_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.sources</span> <span class="k">import</span> <span class="n">sources_cmd</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.status</span> <span class="k">import</span> <span class="n">status_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>
|
||||||
|
|
||||||
|
|
||||||
|
<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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
728
docs/html/_modules/composer/cli/blueprints.html
Normal file
728
docs/html/_modules/composer/cli/blueprints.html
Normal file
@ -0,0 +1,728 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">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="k">import</span> <span class="n">blueprints_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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="k">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">prettyDiffEntry</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="prettyDiffEntry"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.prettyDiffEntry">[docs]</a><span class="k">def</span> <span class="nf">prettyDiffEntry</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">def</span> <span class="nf">change</span><span class="p">(</span><span class="n">diff</span><span class="p">):</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="k">return</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="k">return</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="k">return</span> <span class="s2">"Removed"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="s2">"Unknown"</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="n">diff</span><span class="p">):</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="k">return</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="k">return</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="k">return</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="p">(</span><span class="n">diff</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"Changed"</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">name</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"Description"</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="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="n">diff</span><span class="p">)])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">name</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"Version"</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="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="n">diff</span><span class="p">)])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">name</span><span class="p">(</span><span class="n">diff</span><span class="p">)</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="n">diff</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="n">diff</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="n">diff</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="k">return</span> <span class="s2">"Unknown"</span>
|
||||||
|
<span class="k">elif</span> <span class="n">change</span><span class="p">(</span><span class="n">diff</span><span class="p">)</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="p">(</span><span class="n">diff</span><span class="p">)</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="n">diff</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="n">diff</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="p">(</span><span class="n">diff</span><span class="p">)</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="n">diff</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="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">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]])</span>
|
||||||
|
<span class="k">elif</span> <span class="n">change</span><span class="p">(</span><span class="n">diff</span><span class="p">)</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="p">(</span><span class="n">diff</span><span class="p">)</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="n">diff</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="n">diff</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="p">(</span><span class="n">diff</span><span class="p">)</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="n">diff</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="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">k</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</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="k">return</span> <span class="n">change</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">name</span><span class="p">(</span><span class="n">diff</span><span class="p">)</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
267
docs/html/_modules/composer/cli/cmdline.html
Normal file
267
docs/html/_modules/composer/cli/cmdline.html
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">import</span> <span class="n">vernum</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.help</span> <span class="k">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">"0"</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
731
docs/html/_modules/composer/cli/compose.html
Normal file
731
docs/html/_modules/composer/cli/compose.html
Normal file
@ -0,0 +1,731 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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 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="k">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">from</span> <span class="nn">composer</span> <span class="k">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="k">import</span> <span class="n">compose_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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>
|
||||||
|
|
||||||
|
<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"> """</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="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></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="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="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="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></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="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"> compose start <blueprint-name> <compose-type></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 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="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">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">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="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="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="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="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="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="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="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="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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
265
docs/html/_modules/composer/cli/modules.html
Normal file
265
docs/html/_modules/composer/cli/modules.html
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">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="k">import</span> <span class="n">modules_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
327
docs/html/_modules/composer/cli/projects.html
Normal file
327
docs/html/_modules/composer/cli/projects.html
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">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="k">import</span> <span class="n">projects_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
369
docs/html/_modules/composer/cli/sources.html
Normal file
369
docs/html/_modules/composer/cli/sources.html
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">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="k">import</span> <span class="n">sources_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
273
docs/html/_modules/composer/cli/status.html
Normal file
273
docs/html/_modules/composer/cli/status.html
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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="k">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="k">import</span> <span class="n">status_help</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">composer.cli.utilities</span> <span class="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
312
docs/html/_modules/composer/cli/utilities.html
Normal file
312
docs/html/_modules/composer/cli/utilities.html
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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="../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">bool</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">bool</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>
|
||||||
|
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
475
docs/html/_modules/composer/http_client.html
Normal file
475
docs/html/_modules/composer/http_client.html
Normal file
@ -0,0 +1,475 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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>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="k">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="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
276
docs/html/_modules/composer/unix_socket.html
Normal file
276
docs/html/_modules/composer/unix_socket.html
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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>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="nf">__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="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="nf">__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="nf">__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="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"> """</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="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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>Overview: module code — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,115 @@
|
|||||||
<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="../mkksiso.html">mkksiso</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="../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/sources.html">composer.cli.sources</a></li>
|
||||||
|
<li><a href="composer/cli/status.html">composer.cli.status</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="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/crossdomain.html">pylorax.api.crossdomain</a></li>
|
||||||
|
<li><a href="pylorax/api/dnfbase.html">pylorax.api.dnfbase</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/v0.html">pylorax.api.v0</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,26 +197,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,83 @@
|
|||||||
<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="../mkksiso.html">mkksiso</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="../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">
|
||||||
@ -103,22 +186,22 @@
|
|||||||
<span class="kn">import</span> <span class="nn">configparser</span>
|
<span class="kn">import</span> <span class="nn">configparser</span>
|
||||||
<span class="kn">import</span> <span class="nn">tempfile</span>
|
<span class="kn">import</span> <span class="nn">tempfile</span>
|
||||||
<span class="kn">import</span> <span class="nn">locale</span>
|
<span class="kn">import</span> <span class="nn">locale</span>
|
||||||
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">CalledProcessError</span>
|
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="k">import</span> <span class="n">CalledProcessError</span>
|
||||||
<span class="kn">import</span> <span class="nn">selinux</span>
|
<span class="kn">import</span> <span class="nn">selinux</span>
|
||||||
<span class="kn">from</span> <span class="nn">glob</span> <span class="kn">import</span> <span class="n">glob</span>
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="kn">import</span> <span class="n">BaseLoraxClass</span><span class="p">,</span> <span class="n">DataHolder</span>
|
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="k">import</span> <span class="n">BaseLoraxClass</span><span class="p">,</span> <span class="n">DataHolder</span>
|
||||||
<span class="kn">import</span> <span class="nn">pylorax.output</span> <span class="k">as</span> <span class="nn">output</span>
|
<span class="kn">import</span> <span class="nn">pylorax.output</span> <span class="k">as</span> <span class="nn">output</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">dnf</span>
|
<span class="kn">import</span> <span class="nn">dnf</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</span><span class="p">,</span> <span class="n">linktree</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</span><span class="p">,</span> <span class="n">linktree</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="kn">import</span> <span class="n">RuntimeBuilder</span><span class="p">,</span> <span class="n">TreeBuilder</span>
|
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="k">import</span> <span class="n">RuntimeBuilder</span><span class="p">,</span> <span class="n">TreeBuilder</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.buildstamp</span> <span class="kn">import</span> <span class="n">BuildStamp</span>
|
<span class="kn">from</span> <span class="nn">pylorax.buildstamp</span> <span class="k">import</span> <span class="n">BuildStamp</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.treeinfo</span> <span class="kn">import</span> <span class="n">TreeInfo</span>
|
<span class="kn">from</span> <span class="nn">pylorax.treeinfo</span> <span class="k">import</span> <span class="n">TreeInfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.discinfo</span> <span class="kn">import</span> <span class="n">DiscInfo</span>
|
<span class="kn">from</span> <span class="nn">pylorax.discinfo</span> <span class="k">import</span> <span class="n">DiscInfo</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="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="c1"># get lorax version</span>
|
<span class="c1"># get lorax version</span>
|
||||||
@ -131,17 +214,20 @@
|
|||||||
|
|
||||||
<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"># List of drivers to remove on ppc64 arch to keep initrd < 32MiB</span>
|
||||||
|
<span class="n">REMOVE_PPC64_DRIVERS</span> <span class="o">=</span> <span class="s2">"floppy scsi_debug nouveau radeon cirrus mgag200"</span>
|
||||||
|
<span class="n">REMOVE_PPC64_MODULES</span> <span class="o">=</span> <span class="s2">"drm plymouth"</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:f29"</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">"ppc64"</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">bcj_arch</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">i386</span><span class="o">=</span><span class="s2">"x86"</span><span class="p">,</span> <span class="n">x86_64</span><span class="o">=</span><span class="s2">"x86"</span><span class="p">,</span>
|
<span class="n">bcj_arch</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">i386</span><span class="o">=</span><span class="s2">"x86"</span><span class="p">,</span> <span class="n">x86_64</span><span class="o">=</span><span class="s2">"x86"</span><span class="p">,</span>
|
||||||
<span class="n">ppc64le</span><span class="o">=</span><span class="s2">"powerpc"</span><span class="p">,</span>
|
<span class="n">ppc</span><span class="o">=</span><span class="s2">"powerpc"</span><span class="p">,</span> <span class="n">ppc64</span><span class="o">=</span><span class="s2">"powerpc"</span><span class="p">,</span> <span class="n">ppc64le</span><span class="o">=</span><span class="s2">"powerpc"</span><span class="p">,</span>
|
||||||
<span class="n">arm</span><span class="o">=</span><span class="s2">"arm"</span><span class="p">,</span> <span class="n">armhfp</span><span class="o">=</span><span class="s2">"arm"</span><span class="p">)</span>
|
<span class="n">arm</span><span class="o">=</span><span class="s2">"arm"</span><span class="p">,</span> <span class="n">armhfp</span><span class="o">=</span><span class="s2">"arm"</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">buildarch</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buildarch</span><span class="p">):</span>
|
||||||
<span class="nb">super</span><span class="p">(</span><span class="n">ArchData</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="nb">super</span><span class="p">(</span><span class="n">ArchData</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="bp">self</span><span class="o">.</span><span class="n">buildarch</span> <span class="o">=</span> <span class="n">buildarch</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">buildarch</span> <span class="o">=</span> <span class="n">buildarch</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">basearch</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">basearch</span><span class="p">(</span><span class="n">buildarch</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">basearch</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">basearch</span><span class="p">(</span><span class="n">buildarch</span><span class="p">)</span>
|
||||||
@ -150,7 +236,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="Lorax"><a class="viewcode-back" href="../pylorax.html#pylorax.Lorax">[docs]</a><span class="k">class</span> <span class="nc">Lorax</span><span class="p">(</span><span class="n">BaseLoraxClass</span><span class="p">):</span>
|
<div class="viewcode-block" id="Lorax"><a class="viewcode-back" href="../pylorax.html#pylorax.Lorax">[docs]</a><span class="k">class</span> <span class="nc">Lorax</span><span class="p">(</span><span class="n">BaseLoraxClass</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="n">BaseLoraxClass</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
<span class="n">BaseLoraxClass</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="kc">False</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_configured</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
@ -255,8 +341,7 @@
|
|||||||
<span class="n">add_arch_template_vars</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">add_arch_template_vars</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">verify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
<span class="n">verify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="n">user_dracut_args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">user_dracut_args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">squashfs_only</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">squashfs_only</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="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span>
|
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">_configured</span>
|
||||||
|
|
||||||
@ -336,8 +421,7 @@
|
|||||||
<span class="n">installpkgs</span><span class="o">=</span><span class="n">installpkgs</span><span class="p">,</span>
|
<span class="n">installpkgs</span><span class="o">=</span><span class="n">installpkgs</span><span class="p">,</span>
|
||||||
<span class="n">excludepkgs</span><span class="o">=</span><span class="n">excludepkgs</span><span class="p">,</span>
|
<span class="n">excludepkgs</span><span class="o">=</span><span class="n">excludepkgs</span><span class="p">,</span>
|
||||||
<span class="n">add_templates</span><span class="o">=</span><span class="n">add_templates</span><span class="p">,</span>
|
<span class="n">add_templates</span><span class="o">=</span><span class="n">add_templates</span><span class="p">,</span>
|
||||||
<span class="n">add_template_vars</span><span class="o">=</span><span class="n">add_template_vars</span><span class="p">,</span>
|
<span class="n">add_template_vars</span><span class="o">=</span><span class="n">add_template_vars</span><span class="p">)</span>
|
||||||
<span class="n">skip_branding</span><span class="o">=</span><span class="n">skip_branding</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">"installing runtime packages"</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">"installing runtime packages"</span><span class="p">)</span>
|
||||||
<span class="n">rb</span><span class="o">.</span><span class="n">install</span><span class="p">()</span>
|
<span class="n">rb</span><span class="o">.</span><span class="n">install</span><span class="p">()</span>
|
||||||
@ -391,18 +475,14 @@
|
|||||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"no BCJ filter for arch </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">arch</span><span class="o">.</span><span class="n">basearch</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">"no BCJ filter for arch </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">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">squashfs_only</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">squashfs_only</span><span class="p">:</span>
|
||||||
<span class="c1"># Create an ext4 rootfs.img and compress it with squashfs</span>
|
<span class="c1"># Create an ext4 rootfs.img and compress it with squashfs</span>
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">rb</span><span class="o">.</span><span class="n">create_squashfs_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span><span class="n">runtime</span><span class="p">),</span>
|
<span class="n">rb</span><span class="o">.</span><span class="n">create_squashfs_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span><span class="n">runtime</span><span class="p">),</span>
|
||||||
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">,</span>
|
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">,</span>
|
||||||
<span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
<span class="n">size</span><span class="o">=</span><span class="n">size</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"># Create an ext4 rootfs.img and compress it with squashfs</span>
|
<span class="c1"># Create an ext4 rootfs.img and compress it with squashfs</span>
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">rb</span><span class="o">.</span><span class="n">create_ext4_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span><span class="n">runtime</span><span class="p">),</span>
|
<span class="n">rb</span><span class="o">.</span><span class="n">create_ext4_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">installroot</span><span class="p">,</span><span class="n">runtime</span><span class="p">),</span>
|
||||||
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">,</span>
|
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">,</span>
|
||||||
<span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
<span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">rc</span> <span class="o">!=</span> <span class="mi">0</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">"rootfs.img creation failed. See program.log"</span><span class="p">)</span>
|
|
||||||
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="n">rb</span><span class="o">.</span><span class="n">finished</span><span class="p">()</span>
|
<span class="n">rb</span><span class="o">.</span><span class="n">finished</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">"preparing to build output tree and boot images"</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">"preparing to build output tree and boot images"</span><span class="p">)</span>
|
||||||
@ -425,6 +505,14 @@
|
|||||||
|
|
||||||
<span class="n">anaconda_args</span> <span class="o">=</span> <span class="n">dracut_args</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"anaconda pollcdrom qemu qemu-net"</span><span class="p">]</span>
|
<span class="n">anaconda_args</span> <span class="o">=</span> <span class="n">dracut_args</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"anaconda pollcdrom qemu qemu-net"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># ppc64 cannot boot an initrd > 32MiB so remove some drivers</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"ppc64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">):</span>
|
||||||
|
<span class="n">dracut_args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">"--omit-drivers"</span><span class="p">,</span> <span class="n">REMOVE_PPC64_DRIVERS</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># Only omit dracut modules from the initrd so that they're kept for</span>
|
||||||
|
<span class="c1"># upgrade.img</span>
|
||||||
|
<span class="n">anaconda_args</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">"--omit"</span><span class="p">,</span> <span class="n">REMOVE_PPC64_MODULES</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 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">logger</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">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"anaconda args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">anaconda_args</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">"anaconda args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">anaconda_args</span><span class="p">)</span>
|
||||||
<span class="n">treebuilder</span><span class="o">.</span><span class="n">rebuild_initrds</span><span class="p">(</span><span class="n">add_args</span><span class="o">=</span><span class="n">anaconda_args</span><span class="p">)</span>
|
<span class="n">treebuilder</span><span class="o">.</span><span class="n">rebuild_initrds</span><span class="p">(</span><span class="n">add_args</span><span class="o">=</span><span class="n">anaconda_args</span><span class="p">)</span>
|
||||||
@ -531,26 +619,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
266
docs/html/_modules/pylorax/api/bisect.html
Normal file
266
docs/html/_modules/pylorax/api/bisect.html
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
261
docs/html/_modules/pylorax/api/checkparams.html
Normal file
261
docs/html/_modules/pylorax/api/checkparams.html
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">import</span> <span class="n">jsonify</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">functools</span> <span class="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
280
docs/html/_modules/pylorax/api/cmdline.html
Normal file
280
docs/html/_modules/pylorax/api/cmdline.html
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1422
docs/html/_modules/pylorax/api/compose.html
Normal file
1422
docs/html/_modules/pylorax/api/compose.html
Normal file
File diff suppressed because it is too large
Load Diff
355
docs/html/_modules/pylorax/api/config.html
Normal file
355
docs/html/_modules/pylorax/api/config.html
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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"> """</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
281
docs/html/_modules/pylorax/api/crossdomain.html
Normal file
281
docs/html/_modules/pylorax/api/crossdomain.html
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
398
docs/html/_modules/pylorax/api/dnfbase.html
Normal file
398
docs/html/_modules/pylorax/api/dnfbase.html
Normal file
@ -0,0 +1,398 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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="k">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="k">import</span> <span class="n">DEFAULT_PLATFORM_ID</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">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="nf">__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="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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
438
docs/html/_modules/pylorax/api/gitrpm.html
Normal file
438
docs/html/_modules/pylorax/api/gitrpm.html
Normal file
@ -0,0 +1,438 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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="k">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="nf">__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="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="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="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="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="nf">__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="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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
800
docs/html/_modules/pylorax/api/projects.html
Normal file
800
docs/html/_modules/pylorax/api/projects.html
Normal file
@ -0,0 +1,800 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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="k">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="k">import</span> <span class="n">insort_left</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">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="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"> :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"> "name": "fedora",</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"> """</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">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_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"> :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"> "name": "fedora",</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"> """</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">source</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">dnf_conf</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">repo</span><span class="o">.</span><span class="n">skip_if_unavailable</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">repo</span><span class="o">.</span><span class="n">baseurl</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="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">repo</span><span class="o">.</span><span class="n">metalink</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="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">repo</span><span class="o">.</span><span class="n">mirrorlist</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="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">repo</span><span class="o">.</span><span class="n">proxy</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">repo</span><span class="o">.</span><span class="n">sslverify</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">repo</span><span class="o">.</span><span class="n">sslverify</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">repo</span><span class="o">.</span><span class="n">gpgcheck</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">repo</span><span class="o">.</span><span class="n">gpgcheck</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">repo</span><span class="o">.</span><span class="n">gpgkey</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="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_name</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"> :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_name 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_name</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_name</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_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">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_name</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
892
docs/html/_modules/pylorax/api/queue.html
Normal file
892
docs/html/_modules/pylorax/api/queue.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>pylorax.api.queue — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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 pylorax.api.queue</h1><div class="highlight"><pre>
|
||||||
|
<span></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="sd">""" Functions to monitor compose queue and run anaconda"""</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="kn">import</span> <span class="nn">os</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">grp</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">glob</span> <span class="k">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">multiprocessing</span> <span class="k">as</span> <span class="nn">mp</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">pytoml</span> <span class="k">as</span> <span class="nn">toml</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">pwd</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">subprocess</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="k">import</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">PIPE</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="k">import</span> <span class="n">find_templates</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.compose</span> <span class="k">import</span> <span class="n">move_compose_results</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.recipes</span> <span class="k">import</span> <span class="n">recipe_from_file</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.timestamp</span> <span class="k">import</span> <span class="n">TS_CREATED</span><span class="p">,</span> <span class="n">TS_STARTED</span><span class="p">,</span> <span class="n">TS_FINISHED</span><span class="p">,</span> <span class="n">write_timestamp</span><span class="p">,</span> <span class="n">timestamp_dict</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.base</span> <span class="k">import</span> <span class="n">DataHolder</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.creator</span> <span class="k">import</span> <span class="n">run_creator</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="check_queues"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.check_queues">[docs]</a><span class="k">def</span> <span class="nf">check_queues</span><span class="p">(</span><span class="n">cfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Check to make sure the new and run queue symlinks are correct</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: DataHolder</span>
|
||||||
|
|
||||||
|
<span class="sd"> Also check all of the existing results and make sure any with WAITING</span>
|
||||||
|
<span class="sd"> set in STATUS have a symlink in queue/new/</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Remove broken symlinks from the new and run queues</span>
|
||||||
|
<span class="n">queue_symlinks</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new/*"</span><span class="p">))</span> <span class="o">+</span> \
|
||||||
|
<span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/run/*"</span><span class="p">))</span>
|
||||||
|
<span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">queue_symlinks</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">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">link</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 broken symlink </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">link</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">link</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Write FAILED to the STATUS of any run queue symlinks and remove them</span>
|
||||||
|
<span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/run/*"</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">"Setting build </span><span class="si">%s</span><span class="s2"> to FAILED, and removing symlink from queue/run/"</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">link</span><span class="p">))</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">"STATUS"</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">"FAILED</span><span class="se">\n</span><span class="s2">"</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">link</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Check results STATUS messages</span>
|
||||||
|
<span class="c1"># - If STATUS is missing, set it to FAILED</span>
|
||||||
|
<span class="c1"># - RUNNING should be changed to FAILED</span>
|
||||||
|
<span class="c1"># - WAITING should have a symlink in the new queue</span>
|
||||||
|
<span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"results/*"</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">joinpaths</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">"STATUS"</span><span class="p">)):</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">"STATUS"</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">"FAILED</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">"STATUS"</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="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="s2">"RUNNING"</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">"Setting build </span><span class="si">%s</span><span class="s2"> to FAILED"</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">link</span><span class="p">))</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">"STATUS"</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">"FAILED</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
<span class="k">elif</span> <span class="n">status</span> <span class="o">==</span> <span class="s2">"WAITING"</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">islink</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new/"</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">link</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">"Creating missing symlink to new build </span><span class="si">%s</span><span class="s2">"</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">link</span><span class="p">))</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">symlink</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new/"</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">link</span><span class="p">)))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="start_queue_monitor"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.start_queue_monitor">[docs]</a><span class="k">def</span> <span class="nf">start_queue_monitor</span><span class="p">(</span><span class="n">cfg</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">"""Start the queue monitor as a mp process</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uid: User ID that owns the queue</span>
|
||||||
|
<span class="sd"> :type uid: int</span>
|
||||||
|
<span class="sd"> :param gid: Group ID that owns the queue</span>
|
||||||
|
<span class="sd"> :type gid: int</span>
|
||||||
|
<span class="sd"> :returns: None</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">lib_dir</span> <span class="o">=</span> <span class="n">cfg</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">share_dir</span> <span class="o">=</span> <span class="n">cfg</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">tmp</span> <span class="o">=</span> <span class="n">cfg</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">"tmp"</span><span class="p">)</span>
|
||||||
|
<span class="n">monitor_cfg</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">composer_dir</span><span class="o">=</span><span class="n">lib_dir</span><span class="p">,</span> <span class="n">share_dir</span><span class="o">=</span><span class="n">share_dir</span><span class="p">,</span> <span class="n">uid</span><span class="o">=</span><span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="o">=</span><span class="n">gid</span><span class="p">,</span> <span class="n">tmp</span><span class="o">=</span><span class="n">tmp</span><span class="p">)</span>
|
||||||
|
<span class="n">p</span> <span class="o">=</span> <span class="n">mp</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">monitor_cfg</span><span class="p">,))</span>
|
||||||
|
<span class="n">p</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">p</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="monitor"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.monitor">[docs]</a><span class="k">def</span> <span class="nf">monitor</span><span class="p">(</span><span class="n">cfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Monitor the queue for new compose requests</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: DataHolder</span>
|
||||||
|
<span class="sd"> :returns: Does not return</span>
|
||||||
|
|
||||||
|
<span class="sd"> The queue has 2 subdirectories, new and run. When a compose is ready to be run</span>
|
||||||
|
<span class="sd"> a symlink to the uniquely named results directory should be placed in ./queue/new/</span>
|
||||||
|
|
||||||
|
<span class="sd"> When the it is ready to be run (it is checked every 30 seconds or after a previous</span>
|
||||||
|
<span class="sd"> compose is finished) the symlink will be moved into ./queue/run/ and a STATUS file</span>
|
||||||
|
<span class="sd"> will be created in the results directory.</span>
|
||||||
|
|
||||||
|
<span class="sd"> STATUS can contain one of: WAITING, RUNNING, FINISHED, FAILED</span>
|
||||||
|
|
||||||
|
<span class="sd"> If the system is restarted while a compose is running it will move any old symlinks</span>
|
||||||
|
<span class="sd"> from ./queue/run/ to ./queue/new/ and rerun them.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">def</span> <span class="nf">queue_sort</span><span class="p">(</span><span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Sort the queue entries by their mtime, not their names"""</span>
|
||||||
|
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">))</span><span class="o">.</span><span class="n">st_mtime</span>
|
||||||
|
|
||||||
|
<span class="n">check_queues</span><span class="p">(</span><span class="n">cfg</span><span class="p">)</span>
|
||||||
|
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||||
|
<span class="n">uuids</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new"</span><span class="p">)),</span> <span class="n">key</span><span class="o">=</span><span class="n">queue_sort</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Pick the oldest and move it into ./run/</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">uuids</span><span class="p">:</span>
|
||||||
|
<span class="c1"># No composes left to process, sleep for a bit</span>
|
||||||
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">src</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/new"</span><span class="p">,</span> <span class="n">uuids</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="n">dst</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">composer_dir</span><span class="p">,</span> <span class="s2">"queue/run"</span><span class="p">,</span> <span class="n">uuids</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">os</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
|
||||||
|
<span class="c1"># The symlink may vanish if uuid_cancel() has been called</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Starting new compose: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dst</span><span class="p">)</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="s2">"STATUS"</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">"RUNNING</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">make_compose</span><span class="p">(</span><span class="n">cfg</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">dst</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">"Finished building </span><span class="si">%s</span><span class="s2">, results are in </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dst</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">dst</span><span class="p">))</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="s2">"STATUS"</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">"FINISHED</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
<span class="n">write_timestamp</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">TS_FINISHED</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="s2">"traceback: </span><span class="si">%s</span><span class="s2">"</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="c1"># TODO - Write the error message to an ERROR-LOG file to include with the status</span>
|
||||||
|
<span class="c1"># log.error("Error running compose: %s", e)</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="s2">"STATUS"</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">"FAILED</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
<span class="n">write_timestamp</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">TS_FINISHED</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">dst</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_compose"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.make_compose">[docs]</a><span class="k">def</span> <span class="nf">make_compose</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">results_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Run anaconda with the final-kickstart.ks from results_dir</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: DataHolder</span>
|
||||||
|
<span class="sd"> :param results_dir: The directory containing the metadata and results for the build</span>
|
||||||
|
<span class="sd"> :type results_dir: str</span>
|
||||||
|
<span class="sd"> :returns: Nothing</span>
|
||||||
|
<span class="sd"> :raises: May raise various exceptions</span>
|
||||||
|
|
||||||
|
<span class="sd"> This takes the final-kickstart.ks, and the settings in config.toml and runs Anaconda</span>
|
||||||
|
<span class="sd"> in no-virt mode (directly on the host operating system). Exceptions should be caught</span>
|
||||||
|
<span class="sd"> at the higer level.</span>
|
||||||
|
|
||||||
|
<span class="sd"> If there is a failure, the build artifacts will be cleaned up, and any logs will be</span>
|
||||||
|
<span class="sd"> moved into logs/anaconda/ and their ownership will be set to the user from the cfg</span>
|
||||||
|
<span class="sd"> object.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="c1"># Check on the ks's presence</span>
|
||||||
|
<span class="n">ks_path</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">"final-kickstart.ks"</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">ks_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing kickstart file at </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">ks_path</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># The anaconda logs are copied into ./anaconda/ in this directory</span>
|
||||||
|
<span class="n">log_dir</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">"logs/"</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">log_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">log_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Load the compose configuration</span>
|
||||||
|
<span class="n">cfg_path</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">"config.toml"</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">cfg_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing config.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">results_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">cfg_dict</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">cfg_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="c1"># The keys in cfg_dict correspond to the arguments setup in livemedia-creator</span>
|
||||||
|
<span class="c1"># keys that define what to build should be setup in compose_args, and keys with</span>
|
||||||
|
<span class="c1"># defaults should be setup here.</span>
|
||||||
|
|
||||||
|
<span class="c1"># Make sure that image_name contains no path components</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"image_name"</span><span class="p">]</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">cfg_dict</span><span class="p">[</span><span class="s2">"image_name"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># Only support novirt installation, set some other defaults</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"no_virt"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"disk_image"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"fs_image"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"keep_image"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"domacboot"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"anaconda_args"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"armplatform"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"squashfs_args"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"lorax_templates"</span><span class="p">]</span> <span class="o">=</span> <span class="n">find_templates</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">share_dir</span><span class="p">)</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"tmp"</span><span class="p">]</span> <span class="o">=</span> <span class="n">cfg</span><span class="o">.</span><span class="n">tmp</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"dracut_args"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># Use default args for dracut</span>
|
||||||
|
|
||||||
|
<span class="c1"># TODO How to support other arches?</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="c1"># Compose things in a temporary directory inside the results directory</span>
|
||||||
|
<span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"result_dir"</span><span class="p">]</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">"compose"</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">cfg_dict</span><span class="p">[</span><span class="s2">"result_dir"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="n">install_cfg</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="o">**</span><span class="n">cfg_dict</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Some kludges for the 99-copy-logs %post, failure in it will crash the build</span>
|
||||||
|
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"/tmp/NOSAVE_INPUT_KS"</span><span class="p">,</span> <span class="s2">"/tmp/NOSAVE_LOGS"</span><span class="p">]:</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="c1"># Placing a CANCEL file in the results directory will make execWithRedirect send anaconda a SIGTERM</span>
|
||||||
|
<span class="k">def</span> <span class="nf">cancel_build</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">exists</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"CANCEL"</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">"cfg = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">install_cfg</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">test_path</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">"TEST"</span><span class="p">)</span>
|
||||||
|
<span class="n">write_timestamp</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="n">TS_STARTED</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">test_path</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Pretend to run the compose</span>
|
||||||
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">test_mode</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">test_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">Exception</span><span class="p">:</span>
|
||||||
|
<span class="n">test_mode</span> <span class="o">=</span> <span class="mi">1</span>
|
||||||
|
<span class="k">if</span> <span class="n">test_mode</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">"TESTING FAILED compose"</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="n">install_cfg</span><span class="o">.</span><span class="n">image_name</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">"TEST IMAGE"</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">run_creator</span><span class="p">(</span><span class="n">install_cfg</span><span class="p">,</span> <span class="n">cancel_func</span><span class="o">=</span><span class="n">cancel_build</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Extract the results of the compose into results_dir and cleanup the compose directory</span>
|
||||||
|
<span class="n">move_compose_results</span><span class="p">(</span><span class="n">install_cfg</span><span class="p">,</span> <span class="n">results_dir</span><span class="p">)</span>
|
||||||
|
<span class="k">finally</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Make sure any remaining temporary directories are removed (eg. if there was an exception)</span>
|
||||||
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">tmp</span><span class="p">,</span> <span class="s2">"lmc-*"</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">d</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">d</span><span class="p">)</span>
|
||||||
|
<span class="k">elif</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">d</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">d</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Make sure that everything under the results directory is owned by the user</span>
|
||||||
|
<span class="n">user</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">cfg</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span><span class="o">.</span><span class="n">pw_name</span>
|
||||||
|
<span class="n">group</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">cfg</span><span class="o">.</span><span class="n">gid</span><span class="p">)</span><span class="o">.</span><span class="n">gr_name</span>
|
||||||
|
<span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Install finished, chowning results to </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">user</span><span class="p">,</span> <span class="n">group</span><span class="p">)</span>
|
||||||
|
<span class="n">subprocess</span><span class="o">.</span><span class="n">call</span><span class="p">([</span><span class="s2">"chown"</span><span class="p">,</span> <span class="s2">"-R"</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">user</span><span class="p">,</span> <span class="n">group</span><span class="p">),</span> <span class="n">results_dir</span><span class="p">])</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_compose_type"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.get_compose_type">[docs]</a><span class="k">def</span> <span class="nf">get_compose_type</span><span class="p">(</span><span class="n">results_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the type of composition.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param results_dir: The directory containing the metadata and results for the build</span>
|
||||||
|
<span class="sd"> :type results_dir: str</span>
|
||||||
|
<span class="sd"> :returns: The type of compose (eg. 'tar')</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if no kickstart template can be found.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Should only be 2 kickstarts, the final-kickstart.ks and the template</span>
|
||||||
|
<span class="n">t</span> <span class="o">=</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">ks</span><span class="p">)[:</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="k">for</span> <span class="n">ks</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"*.ks"</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="s2">"final-kickstart"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ks</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t</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">"Cannot find ks template for build </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">results_dir</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="compose_detail"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.compose_detail">[docs]</a><span class="k">def</span> <span class="nf">compose_detail</span><span class="p">(</span><span class="n">results_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return details about the build.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param results_dir: The directory containing the metadata and results for the build</span>
|
||||||
|
<span class="sd"> :type results_dir: str</span>
|
||||||
|
<span class="sd"> :returns: A dictionary with details about the compose</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> :raises: IOError if it cannot read the directory, STATUS, or blueprint file.</span>
|
||||||
|
|
||||||
|
<span class="sd"> The following details are included in the dict:</span>
|
||||||
|
|
||||||
|
<span class="sd"> * id - The uuid of the comoposition</span>
|
||||||
|
<span class="sd"> * queue_status - The final status of the composition (FINISHED or FAILED)</span>
|
||||||
|
<span class="sd"> * compose_type - The type of output generated (tar, iso, etc.)</span>
|
||||||
|
<span class="sd"> * blueprint - Blueprint name</span>
|
||||||
|
<span class="sd"> * version - Blueprint version</span>
|
||||||
|
<span class="sd"> * image_size - Size of the image, if finished. 0 otherwise.</span>
|
||||||
|
|
||||||
|
<span class="sd"> Various timestamps are also included in the dict. These are all Unix UTC timestamps.</span>
|
||||||
|
<span class="sd"> It is possible for these timestamps to not always exist, in which case they will be</span>
|
||||||
|
<span class="sd"> None in Python (or null in JSON). The following timestamps are included:</span>
|
||||||
|
|
||||||
|
<span class="sd"> * job_created - When the user submitted the compose</span>
|
||||||
|
<span class="sd"> * job_started - Anaconda started running</span>
|
||||||
|
<span class="sd"> * job_finished - Job entered FINISHED or FAILED state</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">build_id</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">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">results_dir</span><span class="p">))</span>
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"STATUS"</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="n">blueprint</span> <span class="o">=</span> <span class="n">recipe_from_file</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"blueprint.toml"</span><span class="p">))</span>
|
||||||
|
|
||||||
|
<span class="n">compose_type</span> <span class="o">=</span> <span class="n">get_compose_type</span><span class="p">(</span><span class="n">results_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">image_path</span> <span class="o">=</span> <span class="n">get_image_name</span><span class="p">(</span><span class="n">results_dir</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="s2">"FINISHED"</span> <span class="ow">and</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">image_path</span><span class="p">):</span>
|
||||||
|
<span class="n">image_size</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">image_path</span><span class="p">)</span><span class="o">.</span><span class="n">st_size</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">image_size</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
|
||||||
|
<span class="n">times</span> <span class="o">=</span> <span class="n">timestamp_dict</span><span class="p">(</span><span class="n">results_dir</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">build_id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"queue_status"</span><span class="p">:</span> <span class="n">status</span><span class="p">,</span>
|
||||||
|
<span class="s2">"job_created"</span><span class="p">:</span> <span class="n">times</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">TS_CREATED</span><span class="p">),</span>
|
||||||
|
<span class="s2">"job_started"</span><span class="p">:</span> <span class="n">times</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">TS_STARTED</span><span class="p">),</span>
|
||||||
|
<span class="s2">"job_finished"</span><span class="p">:</span> <span class="n">times</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">TS_FINISHED</span><span class="p">),</span>
|
||||||
|
<span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">compose_type</span><span class="p">,</span>
|
||||||
|
<span class="s2">"blueprint"</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="s2">"version"</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="s2">"image_size"</span><span class="p">:</span> <span class="n">image_size</span>
|
||||||
|
<span class="p">}</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="queue_status"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.queue_status">[docs]</a><span class="k">def</span> <span class="nf">queue_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return details about what is in the queue.</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :returns: A list of the new composes, and a list of the running composes</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
|
||||||
|
<span class="sd"> This returns a dict with 2 lists. "new" is the list of uuids that are waiting to be built,</span>
|
||||||
|
<span class="sd"> and "run" has the uuids that are being built (currently limited to 1 at a time).</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">queue_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"queue"</span><span class="p">)</span>
|
||||||
|
<span class="n">new_queue</span> <span class="o">=</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">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">queue_dir</span><span class="p">,</span> <span class="s2">"new/*"</span><span class="p">))]</span>
|
||||||
|
<span class="n">run_queue</span> <span class="o">=</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">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">queue_dir</span><span class="p">,</span> <span class="s2">"run/*"</span><span class="p">))]</span>
|
||||||
|
|
||||||
|
<span class="n">new_details</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">new_queue</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">d</span> <span class="o">=</span> <span class="n">compose_detail</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">new_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">run_details</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">run_queue</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">d</span> <span class="o">=</span> <span class="n">compose_detail</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="k">continue</span>
|
||||||
|
<span class="n">run_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">{</span>
|
||||||
|
<span class="s2">"new"</span><span class="p">:</span> <span class="n">new_details</span><span class="p">,</span>
|
||||||
|
<span class="s2">"run"</span><span class="p">:</span> <span class="n">run_details</span>
|
||||||
|
<span class="p">}</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_status"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_status">[docs]</a><span class="k">def</span> <span class="nf">uuid_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the details of a specific UUID compose</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: Details about the build</span>
|
||||||
|
<span class="sd"> :rtype: dict or None</span>
|
||||||
|
|
||||||
|
<span class="sd"> Returns the same dict as `compose_details()`</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">compose_detail</span><span class="p">(</span><span class="n">uuid_dir</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="kc">None</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="build_status"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.build_status">[docs]</a><span class="k">def</span> <span class="nf">build_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">status_filter</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the details of finished or failed builds</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param status_filter: What builds to return. None == all, "FINISHED", or "FAILED"</span>
|
||||||
|
<span class="sd"> :type status_filter: str</span>
|
||||||
|
<span class="sd"> :returns: A list of the build details (from compose_details)</span>
|
||||||
|
<span class="sd"> :rtype: list of dicts</span>
|
||||||
|
|
||||||
|
<span class="sd"> This returns a list of build details for each of the matching builds on the</span>
|
||||||
|
<span class="sd"> system. It does not return the status of builds that have not been finished.</span>
|
||||||
|
<span class="sd"> Use queue_status() for those.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="n">status_filter</span><span class="p">:</span>
|
||||||
|
<span class="n">status_filter</span> <span class="o">=</span> <span class="p">[</span><span class="n">status_filter</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">status_filter</span> <span class="o">=</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">results</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="n">result_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">build</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">result_dir</span> <span class="o">+</span> <span class="s2">"/*"</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">"Checking status of build </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">build</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">build</span><span class="p">,</span> <span class="s2">"STATUS"</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="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span> <span class="ow">in</span> <span class="n">status_filter</span><span class="p">:</span>
|
||||||
|
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">compose_detail</span><span class="p">(</span><span class="n">build</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
|
||||||
|
<span class="k">pass</span>
|
||||||
|
<span class="k">return</span> <span class="n">results</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_cancel"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_cancel">[docs]</a><span class="k">def</span> <span class="nf">uuid_cancel</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Cancel a build and delete its results</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: True if it was canceled and deleted</span>
|
||||||
|
<span class="sd"> :rtype: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> Only call this if the build status is WAITING or RUNNING</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">cancel_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="s2">"CANCEL"</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">cancel_path</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">"Cancel has already been requested for </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="c1"># This status can change (and probably will) while it is in the middle of doing this:</span>
|
||||||
|
<span class="c1"># It can move from WAITING -> RUNNING or it can move from RUNNING -> FINISHED|FAILED</span>
|
||||||
|
|
||||||
|
<span class="c1"># If it is in WAITING remove the symlink and then check to make sure it didn't show up</span>
|
||||||
|
<span class="c1"># in the run queue</span>
|
||||||
|
<span class="n">queue_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"queue"</span><span class="p">)</span>
|
||||||
|
<span class="n">uuid_new</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">queue_dir</span><span class="p">,</span> <span class="s2">"new"</span><span class="p">,</span> <span class="n">uuid</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">uuid_new</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">unlink</span><span class="p">(</span><span class="n">uuid_new</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
|
||||||
|
<span class="c1"># The symlink may vanish if the queue monitor started the build</span>
|
||||||
|
<span class="k">pass</span>
|
||||||
|
<span class="n">uuid_run</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">queue_dir</span><span class="p">,</span> <span class="s2">"run"</span><span class="p">,</span> <span class="n">uuid</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">uuid_run</span><span class="p">):</span>
|
||||||
|
<span class="c1"># Make sure the build is still in the waiting state</span>
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="n">uuid_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">status</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"WAITING"</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Successfully removed it before the build started</span>
|
||||||
|
<span class="k">return</span> <span class="n">uuid_delete</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># At this point the build has probably started. Write to the CANCEL file.</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</span><span class="n">cancel_path</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="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Wait for status to move to FAILED or FINISHED</span>
|
||||||
|
<span class="n">started</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">while</span> <span class="kc">True</span><span class="p">:</span>
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="n">uuid_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">status</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"FAILED"</span><span class="p">:</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
<span class="k">elif</span> <span class="n">status</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">status</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"FINISHED"</span><span class="p">:</span>
|
||||||
|
<span class="c1"># The build finished successfully, no point in deleting it now</span>
|
||||||
|
<span class="k">return</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="c1"># Is this taking too long? Exit anyway and try to cleanup.</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="n">started</span> <span class="o">+</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="mi">60</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 cancel the build of </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
|
||||||
|
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Remove the partial results</span>
|
||||||
|
<span class="n">uuid_delete</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_delete"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_delete">[docs]</a><span class="k">def</span> <span class="nf">uuid_delete</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Delete all of the results from a compose</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: True if it was deleted</span>
|
||||||
|
<span class="sd"> :rtype: bool</span>
|
||||||
|
<span class="sd"> :raises: This will raise an error if the delete failed</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">uuid_dir</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">)</span> <span class="o"><</span> <span class="mi">10</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Directory length is too short: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid_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="n">uuid_dir</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="kc">True</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_info">[docs]</a><span class="k">def</span> <span class="nf">uuid_info</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return information about the composition</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: dictionary of information about the composition or None</span>
|
||||||
|
<span class="sd"> :rtype: dict</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if there was a problem</span>
|
||||||
|
|
||||||
|
<span class="sd"> This will return a dict with the following fields populated:</span>
|
||||||
|
|
||||||
|
<span class="sd"> * id - The uuid of the comoposition</span>
|
||||||
|
<span class="sd"> * config - containing the configuration settings used to run Anaconda</span>
|
||||||
|
<span class="sd"> * blueprint - The depsolved blueprint used to generate the kickstart</span>
|
||||||
|
<span class="sd"> * commit - The (local) git commit hash for the blueprint used</span>
|
||||||
|
<span class="sd"> * deps - The NEVRA of all of the dependencies used in the composition</span>
|
||||||
|
<span class="sd"> * compose_type - The type of output generated (tar, iso, etc.)</span>
|
||||||
|
<span class="sd"> * queue_status - The final status of the composition (FINISHED or FAILED)</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</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">uuid_dir</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="c1"># Load the compose configuration</span>
|
||||||
|
<span class="n">cfg_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"config.toml"</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">cfg_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing config.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">cfg_dict</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">cfg_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="n">frozen_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"frozen.toml"</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">frozen_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing frozen.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">frozen_dict</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">frozen_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="n">deps_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"deps.toml"</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">deps_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing deps.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">deps_dict</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">deps_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="n">details</span> <span class="o">=</span> <span class="n">compose_detail</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">commit_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"COMMIT"</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">commit_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing commit hash for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">commit_id</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">commit_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="o">.</span><span class="n">strip</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">uuid</span><span class="p">,</span>
|
||||||
|
<span class="s2">"config"</span><span class="p">:</span> <span class="n">cfg_dict</span><span class="p">,</span>
|
||||||
|
<span class="s2">"blueprint"</span><span class="p">:</span> <span class="n">frozen_dict</span><span class="p">,</span>
|
||||||
|
<span class="s2">"commit"</span><span class="p">:</span> <span class="n">commit_id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"deps"</span><span class="p">:</span> <span class="n">deps_dict</span><span class="p">,</span>
|
||||||
|
<span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">details</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"queue_status"</span><span class="p">:</span> <span class="n">details</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">],</span>
|
||||||
|
<span class="s2">"image_size"</span><span class="p">:</span> <span class="n">details</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">]</span>
|
||||||
|
<span class="p">}</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_tar"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_tar">[docs]</a><span class="k">def</span> <span class="nf">uuid_tar</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">image</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">logs</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return a tar of the build data</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :param metadata: Set to true to include all the metadata needed to reproduce the build</span>
|
||||||
|
<span class="sd"> :type metadata: bool</span>
|
||||||
|
<span class="sd"> :param image: Set to true to include the output image</span>
|
||||||
|
<span class="sd"> :type image: bool</span>
|
||||||
|
<span class="sd"> :param logs: Set to true to include the logs from the build</span>
|
||||||
|
<span class="sd"> :type logs: bool</span>
|
||||||
|
<span class="sd"> :returns: A stream of bytes from tar</span>
|
||||||
|
<span class="sd"> :rtype: A generator</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if there was a problem (eg. missing config file)</span>
|
||||||
|
|
||||||
|
<span class="sd"> This yields an uncompressed tar's data to the caller. It includes</span>
|
||||||
|
<span class="sd"> the selected data to the caller by returning the Popen stdout from the tar process.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</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">uuid_dir</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="si">%s</span><span class="s2"> is not a valid build_id"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Load the compose configuration</span>
|
||||||
|
<span class="n">cfg_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"config.toml"</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">cfg_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing config.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">cfg_dict</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">cfg_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="n">image_name</span> <span class="o">=</span> <span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"image_name"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">include_file</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"/logs"</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">logs</span>
|
||||||
|
<span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">image_name</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="n">image</span>
|
||||||
|
<span class="k">return</span> <span class="n">metadata</span>
|
||||||
|
<span class="n">filenames</span> <span class="o">=</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">f</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">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span> <span class="k">if</span> <span class="n">include_file</span><span class="p">(</span><span class="n">f</span><span class="p">)]</span>
|
||||||
|
|
||||||
|
<span class="n">tar</span> <span class="o">=</span> <span class="n">Popen</span><span class="p">([</span><span class="s2">"tar"</span><span class="p">,</span> <span class="s2">"-C"</span><span class="p">,</span> <span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"-cf-"</span><span class="p">]</span> <span class="o">+</span> <span class="n">filenames</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">PIPE</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">tar</span><span class="o">.</span><span class="n">stdout</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_image"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_image">[docs]</a><span class="k">def</span> <span class="nf">uuid_image</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the filename and full path of the build's image file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: The image filename and full path</span>
|
||||||
|
<span class="sd"> :rtype: tuple of strings</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if there was a problem (eg. invalid uuid, missing config file)</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">get_image_name</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="get_image_name"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.get_image_name">[docs]</a><span class="k">def</span> <span class="nf">get_image_name</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return the filename and full path of the build's image file</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :returns: The image filename and full path</span>
|
||||||
|
<span class="sd"> :rtype: tuple of strings</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if there was a problem (eg. invalid uuid, missing config file)</span>
|
||||||
|
<span class="sd"> """</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">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">uuid_dir</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">uuid_dir</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="si">%s</span><span class="s2"> is not a valid build_id"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Load the compose configuration</span>
|
||||||
|
<span class="n">cfg_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"config.toml"</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">cfg_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing config.toml for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">cfg_dict</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">cfg_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="n">image_name</span> <span class="o">=</span> <span class="n">cfg_dict</span><span class="p">[</span><span class="s2">"image_name"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">(</span><span class="n">image_name</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="n">image_name</span><span class="p">))</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="uuid_log"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.queue.uuid_log">[docs]</a><span class="k">def</span> <span class="nf">uuid_log</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">1024</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return `size` kbytes from the end of the anaconda.log</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param cfg: Configuration settings</span>
|
||||||
|
<span class="sd"> :type cfg: ComposerConfig</span>
|
||||||
|
<span class="sd"> :param uuid: The UUID of the build</span>
|
||||||
|
<span class="sd"> :type uuid: str</span>
|
||||||
|
<span class="sd"> :param size: Number of kbytes to read. Default is 1024</span>
|
||||||
|
<span class="sd"> :type size: int</span>
|
||||||
|
<span class="sd"> :returns: Up to `size` kbytes from the end of the log</span>
|
||||||
|
<span class="sd"> :rtype: str</span>
|
||||||
|
<span class="sd"> :raises: RuntimeError if there was a problem (eg. no log file available)</span>
|
||||||
|
|
||||||
|
<span class="sd"> This function tries to return lines from the end of the log, it will</span>
|
||||||
|
<span class="sd"> attempt to start on a line boundry, and may return less than `size` kbytes.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">uuid_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">cfg</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="s2">"results"</span><span class="p">,</span> <span class="n">uuid</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">uuid_dir</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="si">%s</span><span class="s2"> is not a valid build_id"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># While a build is running the logs will be in /tmp/anaconda.log and when it</span>
|
||||||
|
<span class="c1"># has finished they will be in the results directory</span>
|
||||||
|
<span class="n">status</span> <span class="o">=</span> <span class="n">uuid_status</span><span class="p">(</span><span class="n">cfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">status</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Status is missing for </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">uuid</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">status</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"RUNNING"</span><span class="p">:</span>
|
||||||
|
<span class="n">log_path</span> <span class="o">=</span> <span class="s2">"/tmp/anaconda.log"</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">log_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">uuid_dir</span><span class="p">,</span> <span class="s2">"logs"</span><span class="p">,</span> <span class="s2">"anaconda"</span><span class="p">,</span> <span class="s2">"anaconda.log"</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">log_path</span><span class="p">):</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"No anaconda.log available."</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">log_path</span><span class="p">,</span> <span class="s2">"r"</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">seek</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="n">end</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">end</span> <span class="o"><</span> <span class="mi">1024</span> <span class="o">*</span> <span class="n">size</span><span class="p">:</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</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="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">end</span> <span class="o">-</span> <span class="p">(</span><span class="mi">1024</span> <span class="o">*</span> <span class="n">size</span><span class="p">))</span>
|
||||||
|
<span class="c1"># Find the start of the next line and return the rest</span>
|
||||||
|
<span class="n">f</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">f</span><span class="o">.</span><span class="n">read</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1236
docs/html/_modules/pylorax/api/recipes.html
Normal file
1236
docs/html/_modules/pylorax/api/recipes.html
Normal file
File diff suppressed because it is too large
Load Diff
299
docs/html/_modules/pylorax/api/server.html
Normal file
299
docs/html/_modules/pylorax/api/server.html
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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 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="k">import</span> <span class="n">namedtuple</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">flask</span> <span class="k">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="k">import</span> <span class="n">glob</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">os</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax</span> <span class="k">import</span> <span class="n">vernum</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.crossdomain</span> <span class="k">import</span> <span class="n">crossdomain</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.api.v0</span> <span class="k">import</span> <span class="n">v0_api</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">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="nd">@crossdomain</span><span class="p">(</span><span class="n">origin</span><span class="o">=</span><span class="s2">"*"</span><span class="p">)</span>
|
||||||
|
<span class="k">def</span> <span class="nf">v0_status</span><span class="p">():</span>
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="sd"> `/api/v0/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">"0"</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="n">v0_api</span><span class="p">(</span><span class="n">server</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
268
docs/html/_modules/pylorax/api/timestamp.html
Normal file
268
docs/html/_modules/pylorax/api/timestamp.html
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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">pytoml</span> <span class="k">as</span> <span class="nn">toml</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
|
|
||||||
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
2303
docs/html/_modules/pylorax/api/v0.html
Normal file
2303
docs/html/_modules/pylorax/api/v0.html
Normal file
File diff suppressed because it is too large
Load Diff
316
docs/html/_modules/pylorax/api/workspace.html
Normal file
316
docs/html/_modules/pylorax/api/workspace.html
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
|
</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">
|
||||||
|
29.28
|
||||||
|
</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.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="k">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="k">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_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">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="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="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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1,40 +1,37 @@
|
|||||||
|
|
||||||
|
|
||||||
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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/css/theme.css" type="text/css" />
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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 type="text/javascript" src="../../_static/js/theme.js"></script>
|
|
||||||
|
|
||||||
|
|
||||||
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
@ -42,9 +39,10 @@
|
|||||||
|
|
||||||
<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">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -58,7 +56,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
35.1
|
29.28
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +73,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,7 +85,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="../../mkksiso.html">mkksiso</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="../../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>
|
||||||
@ -96,7 +94,6 @@
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
@ -131,13 +128,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>
|
||||||
|
|
||||||
@ -180,7 +175,7 @@
|
|||||||
<span class="c1"># Red Hat Author(s): Martin Gracik <mgracik@redhat.com></span>
|
<span class="c1"># Red Hat Author(s): Martin Gracik <mgracik@redhat.com></span>
|
||||||
<span class="c1">#</span>
|
<span class="c1">#</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">ABCMeta</span><span class="p">,</span> <span class="n">abstractmethod</span>
|
<span class="kn">from</span> <span class="nn">abc</span> <span class="k">import</span> <span class="n">ABCMeta</span><span class="p">,</span> <span class="n">abstractmethod</span>
|
||||||
<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">pylorax.output</span> <span class="k">as</span> <span class="nn">output</span>
|
<span class="kn">import</span> <span class="nn">pylorax.output</span> <span class="k">as</span> <span class="nn">output</span>
|
||||||
@ -188,7 +183,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="BaseLoraxClass"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.BaseLoraxClass">[docs]</a><span class="k">class</span> <span class="nc">BaseLoraxClass</span><span class="p">(</span><span class="nb">object</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
|
<div class="viewcode-block" id="BaseLoraxClass"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.BaseLoraxClass">[docs]</a><span class="k">class</span> <span class="nc">BaseLoraxClass</span><span class="p">(</span><span class="nb">object</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
|
||||||
<span class="nd">@abstractmethod</span>
|
<span class="nd">@abstractmethod</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">output</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">LoraxOutput</span><span class="p">()</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">output</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">LoraxOutput</span><span class="p">()</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="BaseLoraxClass.pcritical"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.BaseLoraxClass.pcritical">[docs]</a> <span class="k">def</span> <span class="nf">pcritical</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">fobj</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">):</span>
|
<div class="viewcode-block" id="BaseLoraxClass.pcritical"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.BaseLoraxClass.pcritical">[docs]</a> <span class="k">def</span> <span class="nf">pcritical</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">fobj</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="p">):</span>
|
||||||
@ -209,19 +204,19 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="DataHolder"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.DataHolder">[docs]</a><span class="k">class</span> <span class="nc">DataHolder</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
|
<div class="viewcode-block" id="DataHolder"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.DataHolder">[docs]</a><span class="k">class</span> <span class="nc">DataHolder</span><span class="p">(</span><span class="nb">dict</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">kwargs</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||||
<span class="nb">dict</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
<span class="nb">dict</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</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="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</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="bp">self</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
<span class="bp">self</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
||||||
<span class="k">if</span> <span class="n">attr</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">attr</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="p">[</span><span class="n">attr</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">raise</span> <span class="ne">AttributeError</span>
|
<span class="k">raise</span> <span class="ne">AttributeError</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
<span class="bp">self</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="DataHolder.copy"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.DataHolder.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="DataHolder.copy"><a class="viewcode-back" href="../../pylorax.html#pylorax.base.DataHolder.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
@ -233,24 +228,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,16 +249,36 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<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,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.buildstamp — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -100,7 +184,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="BuildStamp"><a class="viewcode-back" href="../../pylorax.html#pylorax.buildstamp.BuildStamp">[docs]</a><span class="k">class</span> <span class="nc">BuildStamp</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="BuildStamp"><a class="viewcode-back" href="../../pylorax.html#pylorax.buildstamp.BuildStamp">[docs]</a><span class="k">class</span> <span class="nc">BuildStamp</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">product</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">bugurl</span><span class="p">,</span> <span class="n">isfinal</span><span class="p">,</span> <span class="n">buildarch</span><span class="p">,</span> <span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">bugurl</span><span class="p">,</span> <span class="n">isfinal</span><span class="p">,</span> <span class="n">buildarch</span><span class="p">,</span> <span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="n">product</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="n">product</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="n">version</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="n">version</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">bugurl</span> <span class="o">=</span> <span class="n">bugurl</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">bugurl</span> <span class="o">=</span> <span class="n">bugurl</span>
|
||||||
@ -139,26 +223,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.cmdline — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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 +178,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="k">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>
|
||||||
|
|
||||||
@ -183,19 +267,14 @@
|
|||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Enable a DNF plugin by name/glob, or * to enable all of them."</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Enable a DNF plugin by name/glob, or * to enable all of them."</span><span class="p">)</span>
|
||||||
<span class="n">optional</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">optional</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">help</span><span class="o">=</span><span class="s2">"Use a plain squashfs filesystem for the runtime."</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Use a plain squashfs filesystem for the runtime."</span><span class="p">)</span>
|
||||||
<span class="n">optional</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--skip-branding"</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">"Disable automatic branding package selection. Use --installpkgs to add custom branding."</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># dracut arguments</span>
|
<span class="c1"># dracut arguments</span>
|
||||||
<span class="n">dracut_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"dracut arguments: (default: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">dracut_default</span><span class="p">)</span>
|
<span class="n">dracut_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"dracut arguments"</span><span class="p">)</span>
|
||||||
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-conf"</span><span class="p">,</span>
|
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to a dracut.conf file to use instead of the "</span>
|
|
||||||
<span class="s2">"default arguments. See the dracut.conf(5) manpage."</span><span class="p">)</span>
|
|
||||||
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-arg"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"append"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"dracut_args"</span><span class="p">,</span>
|
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-arg"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"append"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"dracut_args"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Argument to pass to dracut when "</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Argument to pass to dracut when "</span>
|
||||||
<span class="s2">"rebuilding the initramfs. Pass this "</span>
|
<span class="s2">"rebuilding the initramfs. Pass this "</span>
|
||||||
<span class="s2">"once for each argument. NOTE: this "</span>
|
<span class="s2">"once for each argument. NOTE: this "</span>
|
||||||
<span class="s2">"overrides the defaults."</span><span class="p">)</span>
|
<span class="s2">"overrides the default. (default: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">dracut_default</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># add the show version option</span>
|
<span class="c1"># add the show version option</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">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">"-V"</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>
|
||||||
@ -345,15 +424,12 @@
|
|||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"RNG device for QEMU (none for no RNG)"</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"RNG device for QEMU (none for no RNG)"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># dracut arguments</span>
|
<span class="c1"># dracut arguments</span>
|
||||||
<span class="n">dracut_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"dracut arguments: (default: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">dracut_default</span><span class="p">)</span>
|
<span class="n">dracut_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"dracut arguments"</span><span class="p">)</span>
|
||||||
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-conf"</span><span class="p">,</span>
|
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Path to a dracut.conf file to use instead of the "</span>
|
|
||||||
<span class="s2">"default arguments. See the dracut.conf(5) manpage."</span><span class="p">)</span>
|
|
||||||
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-arg"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"append"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"dracut_args"</span><span class="p">,</span>
|
<span class="n">dracut_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--dracut-arg"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"append"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"dracut_args"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Argument to pass to dracut when "</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Argument to pass to dracut when "</span>
|
||||||
<span class="s2">"rebuilding the initramfs. Pass this "</span>
|
<span class="s2">"rebuilding the initramfs. Pass this "</span>
|
||||||
<span class="s2">"once for each argument. NOTE: this "</span>
|
<span class="s2">"once for each argument. NOTE: this "</span>
|
||||||
<span class="s2">"overrides the defaults."</span><span class="p">)</span>
|
<span class="s2">"overrides the default. (default: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">dracut_default</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># pxe to live arguments</span>
|
<span class="c1"># pxe to live arguments</span>
|
||||||
<span class="n">pxelive_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"pxe to live arguments"</span><span class="p">)</span>
|
<span class="n">pxelive_group</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_argument_group</span><span class="p">(</span><span class="s2">"pxe to live arguments"</span><span class="p">)</span>
|
||||||
@ -376,13 +452,15 @@
|
|||||||
<span class="n">vagrant_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--vagrantfile"</span><span class="p">,</span>
|
<span class="n">vagrant_group</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--vagrantfile"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"optional vagrantfile"</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"optional vagrantfile"</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">"--title"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"Linux Live Media"</span><span class="p">,</span>
|
||||||
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Substituted for @TITLE@ 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">"--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">"29"</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_args"</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Use a plain squashfs filesystem for the runtime."</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"additional squashfs args"</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">"--timeout"</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="nb">type</span><span class="o">=</span><span class="nb">int</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">"--timeout"</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="nb">type</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span>
|
||||||
<span class="n">help</span><span class="o">=</span><span class="s2">"Cancel installer after X minutes"</span><span class="p">)</span>
|
<span class="n">help</span><span class="o">=</span><span class="s2">"Cancel installer after X minutes"</span><span class="p">)</span>
|
||||||
|
|
||||||
@ -394,26 +472,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.creator — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -97,30 +181,30 @@
|
|||||||
<span class="kn">import</span> <span class="nn">glob</span>
|
<span class="kn">import</span> <span class="nn">glob</span>
|
||||||
|
|
||||||
<span class="c1"># Use Mako templates for appliance builder descriptions</span>
|
<span class="c1"># Use Mako templates for appliance builder descriptions</span>
|
||||||
<span class="kn">from</span> <span class="nn">mako.template</span> <span class="kn">import</span> <span class="n">Template</span>
|
<span class="kn">from</span> <span class="nn">mako.template</span> <span class="k">import</span> <span class="n">Template</span>
|
||||||
<span class="kn">from</span> <span class="nn">mako.exceptions</span> <span class="kn">import</span> <span class="n">text_error_template</span>
|
<span class="kn">from</span> <span class="nn">mako.exceptions</span> <span class="k">import</span> <span class="n">text_error_template</span>
|
||||||
|
|
||||||
<span class="c1"># Use pykickstart to calculate disk image size</span>
|
<span class="c1"># Use pykickstart to calculate disk image size</span>
|
||||||
<span class="kn">from</span> <span class="nn">pykickstart.parser</span> <span class="kn">import</span> <span class="n">KickstartParser</span>
|
<span class="kn">from</span> <span class="nn">pykickstart.parser</span> <span class="k">import</span> <span class="n">KickstartParser</span>
|
||||||
<span class="kn">from</span> <span class="nn">pykickstart.constants</span> <span class="kn">import</span> <span class="n">KS_SHUTDOWN</span>
|
<span class="kn">from</span> <span class="nn">pykickstart.constants</span> <span class="k">import</span> <span class="n">KS_SHUTDOWN</span>
|
||||||
<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="k">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="k">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="k">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="k">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="k">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="k">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="k">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="k">import</span> <span class="n">copytree</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.installer</span> <span class="kn">import</span> <span class="n">novirt_install</span><span class="p">,</span> <span class="n">virt_install</span><span class="p">,</span> <span class="n">InstallError</span>
|
<span class="kn">from</span> <span class="nn">pylorax.installer</span> <span class="k">import</span> <span class="n">novirt_install</span><span class="p">,</span> <span class="n">virt_install</span><span class="p">,</span> <span class="n">InstallError</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="kn">import</span> <span class="n">TreeBuilder</span><span class="p">,</span> <span class="n">RuntimeBuilder</span>
|
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="k">import</span> <span class="n">TreeBuilder</span><span class="p">,</span> <span class="n">RuntimeBuilder</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="kn">import</span> <span class="n">findkernels</span>
|
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="k">import</span> <span class="n">findkernels</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="c1"># Default parameters for rebuilding initramfs, override with --dracut-arg or --dracut-conf</span>
|
<span class="c1"># Default parameters for rebuilding initramfs, override with --dracut-args</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">"--add"</span><span class="p">,</span> <span class="s2">"livenet dmsquash-live dmsquash-live-ntfs convertfs pollcdrom qemu qemu-net"</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">"--add"</span><span class="p">,</span> <span class="s2">"livenet dmsquash-live convertfs pollcdrom qemu qemu-net"</span><span class="p">,</span>
|
||||||
<span class="s2">"--omit"</span><span class="p">,</span> <span class="s2">"plymouth"</span><span class="p">,</span> <span class="s2">"--no-hostonly"</span><span class="p">,</span> <span class="s2">"--debug"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">]</span>
|
<span class="s2">"--omit"</span><span class="p">,</span> <span class="s2">"plymouth"</span><span class="p">,</span> <span class="s2">"--no-hostonly"</span><span class="p">,</span> <span class="s2">"--debug"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="n">RUNTIME</span> <span class="o">=</span> <span class="s2">"images/install.img"</span>
|
<span class="n">RUNTIME</span> <span class="o">=</span> <span class="s2">"images/install.img"</span>
|
||||||
@ -133,7 +217,7 @@
|
|||||||
<span class="sd"> templates, so the the installroot config value is the important part of</span>
|
<span class="sd"> templates, so the the installroot config value is the important part of</span>
|
||||||
<span class="sd"> this. Everything else should be a nop.</span>
|
<span class="sd"> this. Everything else should be a nop.</span>
|
||||||
<span class="sd"> """</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="k">def</span> <span class="nf">__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="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">conf</span> <span class="o">=</span> <span class="n">conf</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="FakeDNF.reset"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.FakeDNF.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>
|
<div class="viewcode-block" id="FakeDNF.reset"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.FakeDNF.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>
|
||||||
@ -192,36 +276,16 @@
|
|||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="n">compression</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">compression</span> <span class="ow">or</span> <span class="s2">"xz"</span>
|
<span class="n">compression</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">compression</span> <span class="ow">or</span> <span class="s2">"xz"</span>
|
||||||
<span class="n">arch</span> <span class="o">=</span> <span class="n">ArchData</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">arch</span> <span class="ow">or</span> <span class="n">os</span><span class="o">.</span><span class="n">uname</span><span class="p">()</span><span class="o">.</span><span class="n">machine</span><span class="p">)</span>
|
<span class="n">arch</span> <span class="o">=</span> <span class="n">ArchData</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">arch</span> <span class="ow">or</span> <span class="n">os</span><span class="o">.</span><span class="n">uname</span><span class="p">()</span><span class="o">.</span><span class="n">machine</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">compression</span> <span class="o">==</span> <span class="s2">"xz"</span> <span class="ow">and</span> <span class="n">arch</span><span class="o">.</span><span class="n">bcj</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">compress_args</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">compression</span> <span class="o">==</span> <span class="s2">"xz"</span> <span class="ow">and</span> <span class="n">arch</span><span class="o">.</span><span class="n">bcj</span><span class="p">:</span>
|
||||||
<span class="c1"># default to bcj when using xz</span>
|
|
||||||
<span class="n">compressargs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-Xbcj"</span><span class="p">,</span> <span class="n">arch</span><span class="o">.</span><span class="n">bcj</span><span class="p">]</span>
|
<span class="n">compressargs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-Xbcj"</span><span class="p">,</span> <span class="n">arch</span><span class="o">.</span><span class="n">bcj</span><span class="p">]</span>
|
||||||
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">compress_args</span><span class="p">:</span>
|
|
||||||
<span class="n">compressargs</span> <span class="o">=</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">compress_args</span><span class="p">:</span>
|
|
||||||
<span class="n">compressargs</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="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="n">compressargs</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">compressargs</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">return</span> <span class="p">(</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span></div>
|
<span class="k">return</span> <span class="p">(</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="dracut_args"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.dracut_args">[docs]</a><span class="k">def</span> <span class="nf">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span>
|
|
||||||
<span class="sd">"""Return a list of the args to pass to dracut</span>
|
|
||||||
|
|
||||||
<span class="sd"> Return the default argument list unless one of the dracut cmdline arguments</span>
|
|
||||||
<span class="sd"> has been used.</span>
|
|
||||||
<span class="sd"> """</span>
|
|
||||||
<span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">dracut_conf</span><span class="p">:</span>
|
|
||||||
<span class="k">return</span> <span class="p">[</span><span class="s2">"--conf"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">dracut_conf</span><span class="p">]</span>
|
|
||||||
<span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">dracut_args</span><span class="p">:</span>
|
|
||||||
<span class="n">args</span> <span class="o">=</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">dracut_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="k">return</span> <span class="n">args</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">return</span> <span class="n">DRACUT_DEFAULT</span></div>
|
|
||||||
|
|
||||||
<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">"29"</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 +299,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 29</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>
|
||||||
@ -277,8 +341,6 @@
|
|||||||
<span class="sd"> :param str mount_dir: Directory tree to compress</span>
|
<span class="sd"> :param str mount_dir: Directory tree to compress</span>
|
||||||
<span class="sd"> :param str work_dir: Output compressed image to work_dir+images/install.img</span>
|
<span class="sd"> :param str work_dir: Output compressed image to work_dir+images/install.img</span>
|
||||||
<span class="sd"> :param int size: Size of disk image, in GiB</span>
|
<span class="sd"> :param int size: Size of disk image, in GiB</span>
|
||||||
<span class="sd"> :returns: rc of squashfs creation</span>
|
|
||||||
<span class="sd"> :rtype: int</span>
|
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="n">kernel_arch</span> <span class="o">=</span> <span class="n">get_arch</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">)</span>
|
<span class="n">kernel_arch</span> <span class="o">=</span> <span class="n">get_arch</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
@ -290,16 +352,14 @@
|
|||||||
<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="c1"># This is a mounted image partition, cannot hardlink to it, so just use it</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="c1"># symlink mount_dir/images to work_dir/images so we don't run out of space</span>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"images"</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="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">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Creating a squashfs only runtime"</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">return</span> <span class="n">rb</span><span class="o">.</span><span class="n">create_squashfs_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">RUNTIME</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">size</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">"Creating runtime"</span><span class="p">)</span>
|
||||||
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">)</span>
|
<span class="n">rb</span><span class="o">.</span><span class="n">create_ext4_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">RUNTIME</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">size</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">"Creating a squashfs+ext4 runtime"</span><span class="p">)</span>
|
|
||||||
<span class="k">return</span> <span class="n">rb</span><span class="o">.</span><span class="n">create_ext4_runtime</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">RUNTIME</span><span class="p">),</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
|
|
||||||
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">)</span></div>
|
<span class="n">compression</span><span class="o">=</span><span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="n">compressargs</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
@ -312,10 +372,15 @@
|
|||||||
<span class="sd"> :param str sys_root_dir: Path to root of the system</span>
|
<span class="sd"> :param str sys_root_dir: Path to root of the system</span>
|
||||||
<span class="sd"> :param str results_dir: Path of directory for storing results</span>
|
<span class="sd"> :param str results_dir: Path of directory for storing results</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="c1"># cmdline dracut args override the defaults, but need to be parsed</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">dracut_args</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">dracut_args</span> <span class="o">=</span> <span class="n">DRACUT_DEFAULT</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">dracut_args</span> <span class="o">=</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">dracut_args</span><span class="p">:</span>
|
||||||
|
<span class="n">dracut_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">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">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="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>
|
||||||
@ -327,6 +392,9 @@
|
|||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">kernels</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</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 initrds 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 initrds found, cannot rebuild_initrds"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># Hush some dracut warnings. TODO: bind-mount proc in place?</span>
|
||||||
|
<span class="nb">open</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">"/proc/modules"</span><span class="p">),</span><span class="s2">"w"</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>
|
<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="c1"># Dracut assumes to have some dirs in disk image</span>
|
<span class="c1"># Dracut assumes to have some dirs in disk image</span>
|
||||||
<span class="c1"># /var/tmp for temp files</span>
|
<span class="c1"># /var/tmp for temp files</span>
|
||||||
@ -344,7 +412,9 @@
|
|||||||
|
|
||||||
<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="c1"># Dracut runs out of space inside the minimal rootfs image</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="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">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="n">kernels</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="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">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">initrd</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
||||||
@ -354,8 +424,14 @@
|
|||||||
<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">"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">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">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">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">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>
|
||||||
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</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">"/proc/modules"</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>
|
||||||
@ -415,10 +491,8 @@
|
|||||||
<span class="c1"># Link /images to work_dir/images to make the templates happy</span>
|
<span class="c1"># Link /images to work_dir/images to make the templates happy</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">islink</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</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">islink</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</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">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</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">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</span><span class="p">))</span>
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"/bin/ln"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-s"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"images"</span><span class="p">),</span>
|
<span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"/bin/ln"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-s"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"images"</span><span class="p">),</span>
|
||||||
<span class="n">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</span><span class="p">)])</span>
|
<span class="n">joinpaths</span><span class="p">(</span><span class="n">mount_dir</span><span class="p">,</span> <span class="s2">"images"</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="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Failed to symlink images from mount_dir to work_dir"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># The templates expect the config files to be in /tmp/config_files</span>
|
<span class="c1"># The templates expect the config files to be in /tmp/config_files</span>
|
||||||
<span class="c1"># I think these should be release specific, not from lorax, but for now</span>
|
<span class="c1"># I think these should be release specific, not from lorax, but for now</span>
|
||||||
@ -440,8 +514,14 @@
|
|||||||
<span class="n">templatedir</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">lorax_templates</span><span class="p">,</span><span class="s2">"live/"</span><span class="p">),</span>
|
<span class="n">templatedir</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">lorax_templates</span><span class="p">,</span><span class="s2">"live/"</span><span class="p">),</span>
|
||||||
<span class="n">extra_boot_args</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">extra_boot_args</span><span class="p">)</span>
|
<span class="n">extra_boot_args</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">extra_boot_args</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 initrds"</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 initrds"</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="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">dracut_args</span><span class="p">:</span>
|
||||||
<span class="n">tb</span><span class="o">.</span><span class="n">rebuild_initrds</span><span class="p">(</span><span class="n">add_args</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_args</span> <span class="o">=</span> <span class="n">DRACUT_DEFAULT</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">dracut_args</span> <span class="o">=</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">dracut_args</span><span class="p">:</span>
|
||||||
|
<span class="n">dracut_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">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">tb</span><span class="o">.</span><span class="n">rebuild_initrds</span><span class="p">(</span><span class="n">add_args</span><span class="o">=</span><span class="n">dracut_args</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">"Building boot.iso"</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">"Building boot.iso"</span><span class="p">)</span>
|
||||||
<span class="n">tb</span><span class="o">.</span><span class="n">build</span><span class="p">()</span>
|
<span class="n">tb</span><span class="o">.</span><span class="n">build</span><span class="p">()</span>
|
||||||
|
|
||||||
@ -477,6 +557,43 @@
|
|||||||
<span class="n">remove</span><span class="p">(</span><span class="n">tmp_mount_dir</span><span class="p">)</span>
|
<span class="n">remove</span><span class="p">(</span><span class="n">tmp_mount_dir</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="n">sysroot_boot_dir</span></div>
|
<span class="k">return</span> <span class="n">sysroot_boot_dir</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="make_squashfs"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.make_squashfs">[docs]</a><span class="k">def</span> <span class="nf">make_squashfs</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""</span>
|
||||||
|
<span class="sd"> Create a squashfs image of an unpartitioned filesystem disk image</span>
|
||||||
|
|
||||||
|
<span class="sd"> :param str disk_img: Path to the unpartitioned filesystem disk image</span>
|
||||||
|
<span class="sd"> :param str work_dir: Output compressed image to work_dir+images/install.img</span>
|
||||||
|
<span class="sd"> :param str compression: Compression type to use</span>
|
||||||
|
<span class="sd"> :returns: True if squashfs creation was successful. False if there was an error.</span>
|
||||||
|
<span class="sd"> :rtype: bool</span>
|
||||||
|
|
||||||
|
<span class="sd"> Take disk_img and put it into LiveOS/rootfs.img and squashfs this</span>
|
||||||
|
<span class="sd"> tree into work_dir+images/install.img</span>
|
||||||
|
|
||||||
|
<span class="sd"> fsck.ext4 is run on the disk image to make sure there are no errors and to zero</span>
|
||||||
|
<span class="sd"> out any deleted blocks to make it compress better. If this fails for any reason</span>
|
||||||
|
<span class="sd"> it will return False and log the error.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="c1"># Make sure free blocks are actually zeroed so it will compress</span>
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"/usr/sbin/fsck.ext4"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-y"</span><span class="p">,</span> <span class="s2">"-f"</span><span class="p">,</span> <span class="s2">"-E"</span><span class="p">,</span> <span class="s2">"discard"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span>
|
||||||
|
<span class="k">if</span> <span class="n">rc</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">"Problem zeroing free blocks of </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="kc">False</span>
|
||||||
|
|
||||||
|
<span class="n">liveos_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"runtime/LiveOS"</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">liveos_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">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">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">RUNTIME</span><span class="p">)))</span>
|
||||||
|
|
||||||
|
<span class="n">rc</span> <span class="o">=</span> <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"/bin/ln"</span><span class="p">,</span> <span class="p">[</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">liveos_dir</span><span class="p">,</span> <span class="s2">"rootfs.img"</span><span class="p">)])</span>
|
||||||
|
<span class="k">if</span> <span class="n">rc</span> <span class="o">!=</span> <span class="mi">0</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">disk_img</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">liveos_dir</span><span class="p">,</span> <span class="s2">"rootfs.img"</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">mksquashfs</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"runtime"</span><span class="p">),</span>
|
||||||
|
<span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">RUNTIME</span><span class="p">),</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span>
|
||||||
|
<span class="n">remove</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="s2">"runtime"</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="kc">True</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="calculate_disk_size"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.calculate_disk_size">[docs]</a><span class="k">def</span> <span class="nf">calculate_disk_size</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">ks</span><span class="p">):</span>
|
<div class="viewcode-block" id="calculate_disk_size"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.calculate_disk_size">[docs]</a><span class="k">def</span> <span class="nf">calculate_disk_size</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">ks</span><span class="p">):</span>
|
||||||
<span class="sd">""" Calculate the disk size from the kickstart</span>
|
<span class="sd">""" Calculate the disk size from the kickstart</span>
|
||||||
|
|
||||||
@ -636,10 +753,7 @@
|
|||||||
<span class="n">add_pxe_args</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">add_pxe_args</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="n">live_image_name</span> <span class="o">=</span> <span class="s2">"live-rootfs.squashfs.img"</span>
|
<span class="n">live_image_name</span> <span class="o">=</span> <span class="s2">"live-rootfs.squashfs.img"</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="n">rc</span> <span class="o">=</span> <span class="n">mksquashfs</span><span class="p">(</span><span class="n">squashfs_root_dir</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">live_image_name</span><span class="p">),</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span>
|
<span class="n">mksquashfs</span><span class="p">(</span><span class="n">squashfs_root_dir</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">work_dir</span><span class="p">,</span> <span class="n">live_image_name</span><span class="p">),</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">rc</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">"mksquashfs failed to create </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">live_image_name</span><span class="p">)</span>
|
|
||||||
<span class="k">return</span> <span class="kc">None</span>
|
|
||||||
|
|
||||||
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Rebuilding initramfs for live"</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 initramfs for live"</span><span class="p">)</span>
|
||||||
<span class="k">with</span> <span class="n">Mount</span><span class="p">(</span><span class="n">rootfs_img</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"loop"</span><span class="p">)</span> <span class="k">as</span> <span class="n">mnt_dir</span><span class="p">:</span>
|
<span class="k">with</span> <span class="n">Mount</span><span class="p">(</span><span class="n">rootfs_img</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"loop"</span><span class="p">)</span> <span class="k">as</span> <span class="n">mnt_dir</span><span class="p">:</span>
|
||||||
@ -756,24 +870,22 @@
|
|||||||
<span class="k">if</span> <span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">fs_image</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">no_virt</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">disk_image</span><span class="p">:</span>
|
<span class="k">if</span> <span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">fs_image</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">no_virt</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">disk_image</span><span class="p">:</span>
|
||||||
<span class="c1"># Create iso from a filesystem image</span>
|
<span class="c1"># Create iso from a filesystem image</span>
|
||||||
<span class="n">disk_img</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">fs_image</span> <span class="ow">or</span> <span class="n">disk_img</span>
|
<span class="n">disk_img</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">fs_image</span> <span class="ow">or</span> <span class="n">disk_img</span>
|
||||||
<span class="k">with</span> <span class="n">Mount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"loop"</span><span class="p">)</span> <span class="k">as</span> <span class="n">mount_dir</span><span class="p">:</span>
|
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">make_runtime</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">mount_dir</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">,</span> <span class="n">calculate_disk_size</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">ks</span><span class="p">)</span><span class="o">/</span><span class="mf">1024.0</span><span class="p">)</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">make_squashfs</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">):</span>
|
||||||
<span class="k">if</span> <span class="n">rc</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">"squashfs.img creation failed"</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">"make_runtime failed with rc = </span><span class="si">%d</span><span class="s2">. See program.log"</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"squashfs.img creation failed"</span><span class="p">)</span>
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"make_runtime failed with rc = </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">cancel_func</span> <span class="ow">and</span> <span class="n">cancel_func</span><span class="p">():</span>
|
<span class="k">if</span> <span class="n">cancel_func</span> <span class="ow">and</span> <span class="n">cancel_func</span><span class="p">():</span>
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"ISO creation canceled"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"ISO creation canceled"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">with</span> <span class="n">Mount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"loop"</span><span class="p">)</span> <span class="k">as</span> <span class="n">mount_dir</span><span class="p">:</span>
|
||||||
<span class="n">result_dir</span> <span class="o">=</span> <span class="n">make_livecd</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">mount_dir</span><span class="p">,</span> <span class="n">work_dir</span><span class="p">)</span>
|
<span class="n">result_dir</span> <span class="o">=</span> <span class="n">make_livecd</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">mount_dir</span><span class="p">,</span> <span class="n">work_dir</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"># Create iso from a partitioned disk image</span>
|
<span class="c1"># Create iso from a partitioned disk image</span>
|
||||||
<span class="n">disk_img</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">disk_image</span> <span class="ow">or</span> <span class="n">disk_img</span>
|
<span class="n">disk_img</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">disk_image</span> <span class="ow">or</span> <span class="n">disk_img</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>
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">make_runtime</span><span class="p">(</span><span class="n">opts</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">work_dir</span><span class="p">,</span> <span class="n">calculate_disk_size</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">ks</span><span class="p">)</span><span class="o">/</span><span class="mf">1024.0</span><span class="p">)</span>
|
<span class="n">make_runtime</span><span class="p">(</span><span class="n">opts</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">work_dir</span><span class="p">,</span> <span class="n">calculate_disk_size</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">ks</span><span class="p">)</span><span class="o">/</span><span class="mf">1024.0</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">rc</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">"make_runtime failed with rc = </span><span class="si">%d</span><span class="s2">. See program.log"</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"make_runtime failed with rc = </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span>
|
|
||||||
<span class="n">result_dir</span> <span class="o">=</span> <span class="n">make_livecd</span><span class="p">(</span><span class="n">opts</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">work_dir</span><span class="p">)</span>
|
<span class="n">result_dir</span> <span class="o">=</span> <span class="n">make_livecd</span><span class="p">(</span><span class="n">opts</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">work_dir</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># --iso-only removes the extra build artifacts, keeping only the boot.iso</span>
|
<span class="c1"># --iso-only removes the extra build artifacts, keeping only the boot.iso</span>
|
||||||
@ -822,26 +934,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,40 +1,37 @@
|
|||||||
|
|
||||||
|
|
||||||
<!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 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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/css/theme.css" type="text/css" />
|
||||||
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<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 type="text/javascript" src="../../_static/js/theme.js"></script>
|
|
||||||
|
|
||||||
|
|
||||||
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="wy-body-for-nav">
|
<body class="wy-body-for-nav">
|
||||||
@ -42,9 +39,10 @@
|
|||||||
|
|
||||||
<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">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -58,7 +56,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="version">
|
<div class="version">
|
||||||
35.1
|
29.28
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +73,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,7 +85,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="../../mkksiso.html">mkksiso</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="../../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>
|
||||||
@ -96,7 +94,6 @@
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
@ -131,13 +128,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 +191,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,16 +212,36 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<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,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.discinfo — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -100,7 +184,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="DiscInfo"><a class="viewcode-back" href="../../pylorax.html#pylorax.discinfo.DiscInfo">[docs]</a><span class="k">class</span> <span class="nc">DiscInfo</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="DiscInfo"><a class="viewcode-back" href="../../pylorax.html#pylorax.discinfo.DiscInfo">[docs]</a><span class="k">class</span> <span class="nc">DiscInfo</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">release</span><span class="p">,</span> <span class="n">basearch</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">release</span><span class="p">,</span> <span class="n">basearch</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">release</span> <span class="o">=</span> <span class="n">release</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">release</span> <span class="o">=</span> <span class="n">release</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">basearch</span> <span class="o">=</span> <span class="n">basearch</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">basearch</span> <span class="o">=</span> <span class="n">basearch</span>
|
||||||
|
|
||||||
@ -118,26 +202,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.dnfbase — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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 +176,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="k">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="k">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">"29"</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 +209,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>
|
||||||
@ -168,8 +250,6 @@
|
|||||||
<span class="c1"># actually appends. Doing this adds 'nodocs' to the existing list</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="c1"># of values, over in libdnf, it does not replace the existing values.</span>
|
||||||
<span class="n">conf</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="n">conf</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="c1"># Log details about the solver</span>
|
|
||||||
<span class="n">conf</span><span class="o">.</span><span class="n">debug_solver</span> <span class="o">=</span> <span class="kc">True</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">proxy</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">proxy</span><span class="p">:</span>
|
||||||
<span class="n">conf</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span>
|
<span class="n">conf</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span>
|
||||||
@ -262,26 +342,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.dnfhelper — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -114,7 +198,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoraxDownloadCallback"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfhelper.LoraxDownloadCallback">[docs]</a><span class="k">class</span> <span class="nc">LoraxDownloadCallback</span><span class="p">(</span><span class="n">dnf</span><span class="o">.</span><span class="n">callback</span><span class="o">.</span><span class="n">DownloadProgress</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxDownloadCallback"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfhelper.LoraxDownloadCallback">[docs]</a><span class="k">class</span> <span class="nc">LoraxDownloadCallback</span><span class="p">(</span><span class="n">dnf</span><span class="o">.</span><span class="n">callback</span><span class="o">.</span><span class="n">DownloadProgress</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">downloads</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">downloads</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">last_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="bp">self</span><span class="o">.</span><span class="n">last_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="bp">self</span><span class="o">.</span><span class="n">total_files</span> <span class="o">=</span> <span class="mi">0</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">total_files</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
@ -161,7 +245,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoraxRpmCallback"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfhelper.LoraxRpmCallback">[docs]</a><span class="k">class</span> <span class="nc">LoraxRpmCallback</span><span class="p">(</span><span class="n">dnf</span><span class="o">.</span><span class="n">callback</span><span class="o">.</span><span class="n">TransactionProgress</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxRpmCallback"><a class="viewcode-back" href="../../pylorax.html#pylorax.dnfhelper.LoraxRpmCallback">[docs]</a><span class="k">class</span> <span class="nc">LoraxRpmCallback</span><span class="p">(</span><span class="n">dnf</span><span class="o">.</span><span class="n">callback</span><span class="o">.</span><span class="n">TransactionProgress</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="nb">super</span><span class="p">(</span><span class="n">LoraxRpmCallback</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="nb">super</span><span class="p">(</span><span class="n">LoraxRpmCallback</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="bp">self</span><span class="o">.</span><span class="n">_last_ts</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_last_ts</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
@ -183,26 +267,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.executils — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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,18 +175,16 @@
|
|||||||
<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="k">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>
|
||||||
<span class="n">program_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">"program"</span><span class="p">)</span>
|
<span class="n">program_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">"program"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># pylint: disable=not-context-manager</span>
|
<span class="c1"># pylint: disable=not-context-manager</span>
|
||||||
<span class="kn">from</span> <span class="nn">threading</span> <span class="kn">import</span> <span class="n">Lock</span>
|
<span class="kn">from</span> <span class="nn">threading</span> <span class="k">import</span> <span class="n">Lock</span>
|
||||||
<span class="n">program_log_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
|
<span class="n">program_log_lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="n">_child_env</span> <span class="o">=</span> <span class="p">{}</span>
|
<span class="n">_child_env</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
@ -126,7 +208,7 @@
|
|||||||
<span class="k">return</span> <span class="n">env</span></div>
|
<span class="k">return</span> <span class="n">env</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="ExecProduct"><a class="viewcode-back" href="../../pylorax.html#pylorax.executils.ExecProduct">[docs]</a><span class="k">class</span> <span class="nc">ExecProduct</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="ExecProduct"><a class="viewcode-back" href="../../pylorax.html#pylorax.executils.ExecProduct">[docs]</a><span class="k">class</span> <span class="nc">ExecProduct</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">rc</span><span class="p">,</span> <span class="n">stdout</span><span class="p">,</span> <span class="n">stderr</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rc</span><span class="p">,</span> <span class="n">stdout</span><span class="p">,</span> <span class="n">stderr</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">rc</span> <span class="o">=</span> <span class="n">rc</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">rc</span> <span class="o">=</span> <span class="n">rc</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">stdout</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span></div>
|
<span class="bp">self</span><span class="o">.</span><span class="n">stderr</span> <span class="o">=</span> <span class="n">stderr</span></div>
|
||||||
@ -358,16 +440,15 @@
|
|||||||
<span class="sd"> up the process when the output is no longer needed.</span>
|
<span class="sd"> up the process when the output is no longer needed.</span>
|
||||||
<span class="sd"> """</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">proc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="n">callback</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</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="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="nf">__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>
|
||||||
|
|
||||||
<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="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="c1"># See if the process is still running</span>
|
<span class="c1"># See if the process is still running</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="kc">None</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">poll</span><span class="p">()</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="c1"># Stop the process and ignore any problems that might arise</span>
|
<span class="c1"># Stop the process and ignore any problems that might arise</span>
|
||||||
@ -376,35 +457,15 @@
|
|||||||
<span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
|
<span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
|
||||||
<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="nf">__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">return</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</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">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="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="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="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">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>
|
||||||
@ -412,8 +473,7 @@
|
|||||||
<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="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">raise</span> <span class="ne">StopIteration</span>
|
||||||
|
|
||||||
<span class="c1"># Don't loop too fast with no input to read</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="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>
|
||||||
|
|
||||||
@ -423,7 +483,7 @@
|
|||||||
<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="n">stderr</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span>
|
||||||
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="n">proc</span> <span class="o">=</span> <span class="n">startProgram</span><span class="p">(</span><span class="n">argv</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">stdin</span><span class="o">=</span><span class="n">stdin</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">stderr</span><span class="p">,</span>
|
<span class="n">proc</span> <span class="o">=</span> <span class="n">startProgram</span><span class="p">(</span><span class="n">argv</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">stdin</span><span class="o">=</span><span class="n">stdin</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">stderr</span><span class="p">,</span> <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
|
||||||
<span class="n">env_prune</span><span class="o">=</span><span class="n">env_prune</span><span class="p">,</span> <span class="n">env_add</span><span class="o">=</span><span class="n">env_add</span><span class="p">,</span> <span class="n">reset_handlers</span><span class="o">=</span><span class="n">reset_handlers</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="n">reset_lang</span><span class="p">)</span>
|
<span class="n">env_prune</span><span class="o">=</span><span class="n">env_prune</span><span class="p">,</span> <span class="n">env_add</span><span class="o">=</span><span class="n">env_add</span><span class="p">,</span> <span class="n">reset_handlers</span><span class="o">=</span><span class="n">reset_handlers</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="n">reset_lang</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="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">with</span> <span class="n">program_log_lock</span><span class="p">:</span>
|
<span class="k">with</span> <span class="n">program_log_lock</span><span class="p">:</span>
|
||||||
@ -446,26 +506,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.imgutils — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -93,18 +177,18 @@
|
|||||||
<span class="n">logger</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.imgutils"</span><span class="p">)</span>
|
<span class="n">logger</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.imgutils"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">tempfile</span>
|
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">tempfile</span>
|
||||||
<span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">join</span><span class="p">,</span> <span class="n">dirname</span>
|
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">join</span><span class="p">,</span> <span class="n">dirname</span>
|
||||||
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">PIPE</span><span class="p">,</span> <span class="n">CalledProcessError</span>
|
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="k">import</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">PIPE</span><span class="p">,</span> <span class="n">CalledProcessError</span>
|
||||||
<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">time</span>
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
<span class="kn">import</span> <span class="nn">traceback</span>
|
<span class="kn">import</span> <span class="nn">traceback</span>
|
||||||
<span class="kn">import</span> <span class="nn">multiprocessing</span>
|
<span class="kn">import</span> <span class="nn">multiprocessing</span>
|
||||||
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>
|
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">sleep</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.sysutils</span> <span class="kn">import</span> <span class="n">cpfile</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">cpfile</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">execWithCapture</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">execWithRedirect</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="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span>
|
||||||
|
|
||||||
<span class="c1">######## Functions for making container images (cpio, tar, squashfs) ##########</span>
|
<span class="c1">######## Functions for making container images (cpio, tar, squashfs) ##########</span>
|
||||||
|
|
||||||
@ -149,20 +233,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="n">fout</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">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 +285,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>
|
||||||
@ -420,34 +493,34 @@
|
|||||||
<span class="c1">######## Execution contexts - use with the 'with' statement ##############</span>
|
<span class="c1">######## Execution contexts - use with the 'with' statement ##############</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoopDev"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.LoopDev">[docs]</a><span class="k">class</span> <span class="nc">LoopDev</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoopDev"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.LoopDev">[docs]</a><span class="k">class</span> <span class="nc">LoopDev</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">filename</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</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="bp">self</span><span class="o">.</span><span class="n">loopdev</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">filename</span> <span class="o">=</span> <span class="n">filename</span>
|
||||||
<span class="k">if</span> <span class="n">size</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">size</span><span class="p">:</span>
|
||||||
<span class="n">mksparse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
<span class="n">mksparse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="n">size</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">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span> <span class="o">=</span> <span class="n">loop_attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span> <span class="o">=</span> <span class="n">loop_attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">loopdev</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="k">def</span> <span class="nf">__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">loop_detach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span><span class="p">)</span></div>
|
<span class="n">loop_detach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">loopdev</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="DMDev"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DMDev">[docs]</a><span class="k">class</span> <span class="nc">DMDev</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="DMDev"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DMDev">[docs]</a><span class="k">class</span> <span class="nc">DMDev</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">dev</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dev</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">name</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">mapperdev</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</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">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">=</span> <span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">=</span> <span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">name</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">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</span> <span class="o">=</span> <span class="n">dm_attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</span> <span class="o">=</span> <span class="n">dm_attach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</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="k">def</span> <span class="nf">__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">dm_detach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</span><span class="p">)</span></div>
|
<span class="n">dm_detach</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapperdev</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="Mount"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.Mount">[docs]</a><span class="k">class</span> <span class="nc">Mount</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="Mount"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.Mount">[docs]</a><span class="k">class</span> <span class="nc">Mount</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">dev</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">mnt</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dev</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">mnt</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">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">opts</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span> <span class="o">=</span> <span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">mnt</span><span class="p">)</span>
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">opts</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span> <span class="o">=</span> <span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">mnt</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">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">mnt</span> <span class="o">=</span> <span class="n">mount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">opts</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">mnt</span> <span class="o">=</span> <span class="n">mount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dev</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">opts</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mnt</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="k">def</span> <span class="nf">__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">umount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span></div>
|
<span class="n">umount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mnt</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="kpartx_disk_img"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.kpartx_disk_img">[docs]</a><span class="k">def</span> <span class="nf">kpartx_disk_img</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span>
|
<div class="viewcode-block" id="kpartx_disk_img"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.kpartx_disk_img">[docs]</a><span class="k">def</span> <span class="nf">kpartx_disk_img</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span>
|
||||||
@ -477,7 +550,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="PartitionMount"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.PartitionMount">[docs]</a><span class="k">class</span> <span class="nc">PartitionMount</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="PartitionMount"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.PartitionMount">[docs]</a><span class="k">class</span> <span class="nc">PartitionMount</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||||
<span class="sd">""" Mount a partitioned image file using kpartx """</span>
|
<span class="sd">""" Mount a partitioned image file using kpartx """</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">disk_img</span><span class="p">,</span> <span class="n">mount_ok</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">submount</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">,</span> <span class="n">mount_ok</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">submount</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> :param str disk_img: The full path to a partitioned disk image</span>
|
<span class="sd"> :param str disk_img: The full path to a partitioned disk image</span>
|
||||||
<span class="sd"> :param mount_ok: A function that is passed the mount point and</span>
|
<span class="sd"> :param mount_ok: A function that is passed the mount point and</span>
|
||||||
@ -509,7 +582,7 @@
|
|||||||
<span class="c1"># list of (deviceName, sizeInBytes)</span>
|
<span class="c1"># list of (deviceName, sizeInBytes)</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">loop_devices</span> <span class="o">=</span> <span class="n">kpartx_disk_img</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">disk_img</span><span class="p">)</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">loop_devices</span> <span class="o">=</span> <span class="n">kpartx_disk_img</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">disk_img</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">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="c1"># Mount the device selected by mount_ok, if possible</span>
|
<span class="c1"># Mount the device selected by mount_ok, if possible</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">temp_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="bp">self</span><span class="o">.</span><span class="n">temp_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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">submount</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">submount</span><span class="p">:</span>
|
||||||
@ -536,7 +609,7 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">temp_dir</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">temp_dir</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="k">return</span> <span class="bp">self</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="k">def</span> <span class="nf">__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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">temp_dir</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">temp_dir</span><span class="p">:</span>
|
||||||
<span class="n">umount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">)</span>
|
<span class="n">umount</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_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">temp_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">temp_dir</span><span class="p">)</span>
|
||||||
@ -545,42 +618,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,26 +711,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.installer — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -91,7 +175,7 @@
|
|||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">glob</span>
|
<span class="kn">import</span> <span class="nn">glob</span>
|
||||||
<span class="kn">import</span> <span class="nn">json</span>
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">ceil</span>
|
<span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">ceil</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">subprocess</span>
|
<span class="kn">import</span> <span class="nn">subprocess</span>
|
||||||
<span class="kn">import</span> <span class="nn">shutil</span>
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
@ -99,14 +183,14 @@
|
|||||||
<span class="kn">import</span> <span class="nn">tempfile</span>
|
<span class="kn">import</span> <span class="nn">tempfile</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.executils</span> <span class="kn">import</span> <span class="n">execWithRedirect</span><span class="p">,</span> <span class="n">execReadlines</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">execWithRedirect</span><span class="p">,</span> <span class="n">execReadlines</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">PartitionMount</span><span class="p">,</span> <span class="n">mksparse</span><span class="p">,</span> <span class="n">mkext4img</span><span class="p">,</span> <span class="n">loop_detach</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="k">import</span> <span class="n">PartitionMount</span><span class="p">,</span> <span class="n">mksparse</span><span class="p">,</span> <span class="n">mkext4img</span><span class="p">,</span> <span class="n">loop_detach</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">get_loop_name</span><span class="p">,</span> <span class="n">dm_detach</span><span class="p">,</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="k">import</span> <span class="n">get_loop_name</span><span class="p">,</span> <span class="n">dm_detach</span><span class="p">,</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">mkqemu_img</span><span class="p">,</span> <span class="n">mktar</span><span class="p">,</span> <span class="n">mkcpio</span><span class="p">,</span> <span class="n">mkfsimage_from_disk</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="k">import</span> <span class="n">mkqemu_img</span><span class="p">,</span> <span class="n">mktar</span><span class="p">,</span> <span class="n">mkcpio</span><span class="p">,</span> <span class="n">mkfsimage_from_disk</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.monitor</span> <span class="kn">import</span> <span class="n">LogMonitor</span>
|
<span class="kn">from</span> <span class="nn">pylorax.monitor</span> <span class="k">import</span> <span class="n">LogMonitor</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.mount</span> <span class="kn">import</span> <span class="n">IsoMountpoint</span>
|
<span class="kn">from</span> <span class="nn">pylorax.mount</span> <span class="k">import</span> <span class="n">IsoMountpoint</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">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="kn">import</span> <span class="n">udev_escape</span>
|
<span class="kn">from</span> <span class="nn">pylorax.treebuilder</span> <span class="k">import</span> <span class="n">udev_escape</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="n">ROOT_PATH</span> <span class="o">=</span> <span class="s2">"/mnt/sysimage/"</span>
|
<span class="n">ROOT_PATH</span> <span class="o">=</span> <span class="s2">"/mnt/sysimage/"</span>
|
||||||
@ -212,10 +296,11 @@
|
|||||||
<span class="s2">"i386"</span><span class="p">:</span> <span class="s2">"qemu-system-i386"</span><span class="p">,</span>
|
<span class="s2">"i386"</span><span class="p">:</span> <span class="s2">"qemu-system-i386"</span><span class="p">,</span>
|
||||||
<span class="s2">"arm"</span><span class="p">:</span> <span class="s2">"qemu-system-arm"</span><span class="p">,</span>
|
<span class="s2">"arm"</span><span class="p">:</span> <span class="s2">"qemu-system-arm"</span><span class="p">,</span>
|
||||||
<span class="s2">"aarch64"</span><span class="p">:</span> <span class="s2">"qemu-system-aarch64"</span><span class="p">,</span>
|
<span class="s2">"aarch64"</span><span class="p">:</span> <span class="s2">"qemu-system-aarch64"</span><span class="p">,</span>
|
||||||
<span class="s2">"ppc64le"</span><span class="p">:</span> <span class="s2">"qemu-system-ppc64"</span>
|
<span class="s2">"ppc"</span><span class="p">:</span> <span class="s2">"qemu-system-ppc"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"ppc64"</span><span class="p">:</span> <span class="s2">"qemu-system-ppc64"</span>
|
||||||
<span class="p">}</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">opts</span><span class="p">,</span> <span class="n">iso</span><span class="p">,</span> <span class="n">ks_paths</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">,</span> <span class="n">img_size</span><span class="o">=</span><span class="mi">2048</span><span class="p">,</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">iso</span><span class="p">,</span> <span class="n">ks_paths</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">,</span> <span class="n">img_size</span><span class="o">=</span><span class="mi">2048</span><span class="p">,</span>
|
||||||
<span class="n">kernel_args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">memory</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="kc">None</span><span class="p">,</span> <span class="n">vnc</span><span class="o">=</span><span class="kc">None</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">kernel_args</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">memory</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="kc">None</span><span class="p">,</span> <span class="n">vnc</span><span class="o">=</span><span class="kc">None</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">cancel_func</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">virtio_host</span><span class="o">=</span><span class="s2">"127.0.0.1"</span><span class="p">,</span> <span class="n">virtio_port</span><span class="o">=</span><span class="mi">6080</span><span class="p">,</span>
|
<span class="n">cancel_func</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">virtio_host</span><span class="o">=</span><span class="s2">"127.0.0.1"</span><span class="p">,</span> <span class="n">virtio_port</span><span class="o">=</span><span class="mi">6080</span><span class="p">,</span>
|
||||||
<span class="n">image_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">boot_uefi</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ovmf_path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="n">image_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">boot_uefi</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ovmf_path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
@ -280,7 +365,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 +448,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>
|
||||||
|
|
||||||
@ -385,17 +465,7 @@
|
|||||||
|
|
||||||
<span class="sd"> Attempts to cleanup may also fail. Catch these and continue trying the</span>
|
<span class="sd"> Attempts to cleanup may also fail. Catch these and continue trying the</span>
|
||||||
<span class="sd"> other mountpoints.</span>
|
<span class="sd"> other mountpoints.</span>
|
||||||
|
|
||||||
<span class="sd"> Anaconda may also leave /run/anaconda.pid behind, clean that up as well.</span>
|
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="c1"># Anaconda may not clean up its /var/run/anaconda.pid file</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="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="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">rc</span> <span class="o">=</span> <span class="kc">True</span>
|
<span class="n">rc</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
<span class="n">dirinstall_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">dirinstall_path</span><span class="p">)</span>
|
<span class="n">dirinstall_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">dirinstall_path</span><span class="p">)</span>
|
||||||
<span class="c1"># unmount filesystems</span>
|
<span class="c1"># unmount filesystems</span>
|
||||||
@ -432,7 +502,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>
|
||||||
@ -477,8 +547,7 @@
|
|||||||
<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="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="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">"anaconda"</span><span class="p">,</span> <span class="n">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="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>
|
||||||
@ -488,17 +557,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 +573,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 +665,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,26 +823,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.ltmpl — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -96,25 +180,25 @@
|
|||||||
<span class="n">logger</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.ltmpl"</span><span class="p">)</span>
|
<span class="n">logger</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.ltmpl"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">glob</span><span class="o">,</span> <span class="nn">shlex</span><span class="o">,</span> <span class="nn">fnmatch</span>
|
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">re</span><span class="o">,</span> <span class="nn">glob</span><span class="o">,</span> <span class="nn">shlex</span><span class="o">,</span> <span class="nn">fnmatch</span>
|
||||||
<span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">basename</span><span class="p">,</span> <span class="n">isdir</span>
|
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">basename</span><span class="p">,</span> <span class="n">isdir</span>
|
||||||
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">CalledProcessError</span>
|
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="k">import</span> <span class="n">CalledProcessError</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.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">cpfile</span><span class="p">,</span> <span class="n">mvfile</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">remove</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">cpfile</span><span class="p">,</span> <span class="n">mvfile</span><span class="p">,</span> <span class="n">replace</span><span class="p">,</span> <span class="n">remove</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.dnfhelper</span> <span class="kn">import</span> <span class="n">LoraxDownloadCallback</span><span class="p">,</span> <span class="n">LoraxRpmCallback</span>
|
<span class="kn">from</span> <span class="nn">pylorax.dnfhelper</span> <span class="k">import</span> <span class="n">LoraxDownloadCallback</span><span class="p">,</span> <span class="n">LoraxRpmCallback</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="k">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">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">runcmd</span><span class="p">,</span> <span class="n">runcmd_output</span>
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mkcpio</span>
|
<span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="k">import</span> <span class="n">mkcpio</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">mako.lookup</span> <span class="kn">import</span> <span class="n">TemplateLookup</span>
|
<span class="kn">from</span> <span class="nn">mako.lookup</span> <span class="k">import</span> <span class="n">TemplateLookup</span>
|
||||||
<span class="kn">from</span> <span class="nn">mako.exceptions</span> <span class="kn">import</span> <span class="n">text_error_template</span>
|
<span class="kn">from</span> <span class="nn">mako.exceptions</span> <span class="k">import</span> <span class="n">text_error_template</span>
|
||||||
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">traceback</span>
|
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">traceback</span>
|
||||||
<span class="kn">import</span> <span class="nn">struct</span>
|
<span class="kn">import</span> <span class="nn">struct</span>
|
||||||
<span class="kn">import</span> <span class="nn">dnf</span>
|
<span class="kn">import</span> <span class="nn">dnf</span>
|
||||||
<span class="kn">import</span> <span class="nn">collections.abc</span>
|
<span class="kn">import</span> <span class="nn">collections</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoraxTemplate"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplate">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplate</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxTemplate"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplate">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplate</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">directories</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">directories</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="n">directories</span> <span class="o">=</span> <span class="n">directories</span> <span class="ow">or</span> <span class="p">[</span><span class="s2">"/usr/share/lorax"</span><span class="p">]</span>
|
<span class="n">directories</span> <span class="o">=</span> <span class="n">directories</span> <span class="ow">or</span> <span class="p">[</span><span class="s2">"/usr/share/lorax"</span><span class="p">]</span>
|
||||||
<span class="c1"># we have to add ["/"] to the template lookup directories or the</span>
|
<span class="c1"># we have to add ["/"] to the template lookup directories or the</span>
|
||||||
<span class="c1"># file includes won't work properly for absolute paths</span>
|
<span class="c1"># file includes won't work properly for absolute paths</span>
|
||||||
@ -188,7 +272,6 @@
|
|||||||
<span class="sd"> # install a bunch of packages</span>
|
<span class="sd"> # install a bunch of packages</span>
|
||||||
<span class="sd"> runner = LoraxTemplateRunner(inroot=rundir, outroot=rundir, dbo=dnf_obj)</span>
|
<span class="sd"> runner = LoraxTemplateRunner(inroot=rundir, outroot=rundir, dbo=dnf_obj)</span>
|
||||||
<span class="sd"> runner.run("install-packages.ltmpl")</span>
|
<span class="sd"> runner.run("install-packages.ltmpl")</span>
|
||||||
|
|
||||||
<span class="sd"> NOTES:</span>
|
<span class="sd"> NOTES:</span>
|
||||||
|
|
||||||
<span class="sd"> * Parsing procedure is roughly:</span>
|
<span class="sd"> * Parsing procedure is roughly:</span>
|
||||||
@ -203,7 +286,7 @@
|
|||||||
<span class="sd"> * Parsing and execution are *separate* passes - so you can't use the result</span>
|
<span class="sd"> * Parsing and execution are *separate* passes - so you can't use the result</span>
|
||||||
<span class="sd"> of a command in an %if statement (or any other control statements)!</span>
|
<span class="sd"> of a command in an %if statement (or any other control statements)!</span>
|
||||||
<span class="sd"> '''</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">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">builtins</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">builtins</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">fatalerrors</span> <span class="o">=</span> <span class="n">fatalerrors</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">fatalerrors</span> <span class="o">=</span> <span class="n">fatalerrors</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">templatedir</span> <span class="o">=</span> <span class="n">templatedir</span> <span class="ow">or</span> <span class="s2">"/usr/share/lorax"</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">templatedir</span> <span class="o">=</span> <span class="n">templatedir</span> <span class="ow">or</span> <span class="s2">"/usr/share/lorax"</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">templatefile</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">templatefile</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
@ -235,7 +318,7 @@
|
|||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
<span class="c1"># grab the method named in cmd and pass it the given arguments</span>
|
<span class="c1"># grab the method named in cmd and pass it the given arguments</span>
|
||||||
<span class="n">f</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
<span class="n">f</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">cmd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'_'</span> <span class="ow">or</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s1">'run'</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">abc</span><span class="o">.</span><span class="n">Callable</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">cmd</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'_'</span> <span class="ow">or</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s1">'run'</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">Callable</span><span class="p">):</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"unknown command </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">cmd</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"unknown command </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">cmd</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="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||||
<span class="k">except</span> <span class="ne">Exception</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="p">:</span> <span class="c1"># pylint: disable=broad-except</span>
|
||||||
@ -257,149 +340,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>
|
||||||
|
|
||||||
@ -430,7 +372,7 @@
|
|||||||
|
|
||||||
<span class="sd"> * Commands should raise exceptions for errors - don't use sys.exit()</span>
|
<span class="sd"> * Commands should raise exceptions for errors - don't use sys.exit()</span>
|
||||||
<span class="sd"> '''</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">inroot</span><span class="p">,</span> <span class="n">outroot</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inroot</span><span class="p">,</span> <span class="n">outroot</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</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">inroot</span> <span class="o">=</span> <span class="n">inroot</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">inroot</span> <span class="o">=</span> <span class="n">inroot</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">outroot</span> <span class="o">=</span> <span class="n">outroot</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">outroot</span> <span class="o">=</span> <span class="n">outroot</span>
|
||||||
@ -460,31 +402,35 @@
|
|||||||
<span class="k">def</span> <span class="nf">_getsize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">files</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_getsize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">files</span><span class="p">):</span>
|
||||||
<span class="k">return</span> <span class="nb">sum</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">getsize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</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="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="n">f</span><span class="p">)))</span>
|
<span class="k">return</span> <span class="nb">sum</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">getsize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</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="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="n">f</span><span class="p">)))</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_write_package_log</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_write_debuginfo_log</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"> Write the list of installed packages to /root/ on the boot.iso</span>
|
<span class="sd"> Write a list of debuginfo packages to /root/debug-pkgs.log</span>
|
||||||
|
|
||||||
<span class="sd"> If lorax is called with a debug repo find the corresponding debuginfo package</span>
|
<span class="sd"> If lorax is called with a debug repo find the corresponding debuginfo package</span>
|
||||||
<span class="sd"> names and write them to /root/debubg-pkgs.log on the boot.iso</span>
|
<span class="sd"> names and write them to /root/debubg-pkgs.log on the boot.iso</span>
|
||||||
<span class="sd"> The non-debuginfo packages are written to /root/lorax-packages.log</span>
|
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</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">_out</span><span class="p">(</span><span class="s2">"root/"</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">for</span> <span class="n">repo</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">:</span>
|
||||||
|
<span class="n">repo</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">repos</span><span class="p">[</span><span class="n">repo</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="kc">True</span> <span class="k">for</span> <span class="n">url</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span> <span class="k">if</span> <span class="s2">"debug"</span> <span class="ow">in</span> <span class="n">url</span><span class="p">):</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span> <span class="ow">and</span> <span class="s2">"debug"</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
<span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span> <span class="ow">and</span> <span class="s2">"debug"</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span>
|
||||||
|
<span class="k">break</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># No debug repos</span>
|
||||||
|
<span class="k">return</span>
|
||||||
|
|
||||||
<span class="n">available</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="o">.</span><span class="n">available</span><span class="p">()</span>
|
<span class="n">available</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="o">.</span><span class="n">available</span><span class="p">()</span>
|
||||||
<span class="n">pkgs</span> <span class="o">=</span> <span class="p">[]</span>
|
|
||||||
<span class="n">debug_pkgs</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">debug_pkgs</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="nb">list</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">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">):</span>
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="nb">list</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">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">):</span>
|
||||||
<span class="n">pkgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">version</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">release</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">arch</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">available</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">+</span><span class="s2">"-debuginfo"</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">available</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">+</span><span class="s2">"-debuginfo"</span><span class="p">):</span>
|
||||||
<span class="n">debug_pkgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">-debuginfo-</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">epoch</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">version</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">p</span><span class="o">.</span><span class="n">release</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
<span class="n">debug_pkgs</span> <span class="o">+=</span> <span class="p">[</span><span class="s2">"</span><span class="si">{0.name}</span><span class="s2">-debuginfo-</span><span class="si">{0.epoch}</span><span class="s2">:</span><span class="si">{0.version}</span><span class="s2">-</span><span class="si">{0.release}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">p</span><span class="p">)]</span>
|
||||||
|
|
||||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="s2">"root/lorax-packages.log"</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">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">_out</span><span class="p">(</span><span class="s2">"root/"</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">f</span><span class="o">.</span><span class="n">write</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">pkgs</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="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">debug_pkgs</span><span class="p">:</span>
|
|
||||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="s2">"root/debug-pkgs.log"</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="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_out</span><span class="p">(</span><span class="s2">"root/debug-pkgs.log"</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="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">debug_pkgs</span><span class="p">)))</span>
|
<span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">debug_pkgs</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="s2">"</span><span class="se">\n</span><span class="s2">"</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="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">pkg</span><span class="p">)</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="LoraxTemplateRunner.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.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="n">srcglob</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
<div class="viewcode-block" id="LoraxTemplateRunner.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.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="n">srcglob</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
||||||
<span class="sd">'''</span>
|
<span class="sd">'''</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>
|
||||||
@ -778,8 +795,8 @@
|
|||||||
<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">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">if</span> <span class="nb">len</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">transaction</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"No packages in transaction"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"No packages in transaction"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Write out the packages installed, including debuginfo packages</span>
|
<span class="c1"># If a debug repo has been included, write out a list of debuginfo packages</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_write_package_log</span><span class="p">()</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write_debuginfo_log</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="n">pkgs_to_download</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">transaction</span><span class="o">.</span><span class="n">install_set</span>
|
<span class="n">pkgs_to_download</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">transaction</span><span class="o">.</span><span class="n">install_set</span>
|
||||||
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Downloading packages"</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">"Downloading packages"</span><span class="p">)</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>
|
||||||
|
|
||||||
@ -953,35 +970,131 @@
|
|||||||
<span class="sd"> It is meant to be used with the live-install.tmpl which lists the per-arch</span>
|
<span class="sd"> It is meant to be used with the live-install.tmpl which lists the per-arch</span>
|
||||||
<span class="sd"> pacages needed to build the live-iso output.</span>
|
<span class="sd"> pacages needed to build the live-iso output.</span>
|
||||||
<span class="sd"> """</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">dbo</span><span class="p">,</span> <span class="n">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbo</span><span class="p">,</span> <span class="n">fatalerrors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defaults</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">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">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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.monitor — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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 +202,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 +229,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="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="c1"># Ignore invalid UTF8 inside lines</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="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">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="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="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">fp</span><span class="o">.</span><span class="n">flush</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="c1"># check the data for errors and set error flag</span>
|
||||||
|
<span class="c1"># need to assemble it into lines so we can test for the error</span>
|
||||||
|
<span class="c1"># string.</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 +261,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>
|
||||||
|
|
||||||
@ -205,7 +294,7 @@
|
|||||||
<span class="c1"># Number of seconds to wait for a connection after startup</span>
|
<span class="c1"># Number of seconds to wait for a connection after startup</span>
|
||||||
<span class="n">timeout</span> <span class="o">=</span> <span class="mi">60</span>
|
<span class="n">timeout</span> <span class="o">=</span> <span class="mi">60</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">log_path</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">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log_path</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="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> Setup the log server</span>
|
<span class="sd"> Setup the log server</span>
|
||||||
|
|
||||||
@ -243,7 +332,7 @@
|
|||||||
<span class="sd"> This needs to be running before the virt-install runs, it expects</span>
|
<span class="sd"> This needs to be running before the virt-install runs, it expects</span>
|
||||||
<span class="sd"> there to be a listener on the port used for the virtio log port.</span>
|
<span class="sd"> there to be a listener on the port used for the virtio log port.</span>
|
||||||
<span class="sd"> """</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">log_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">log_request_handler_class</span><span class="o">=</span><span class="n">LogRequestHandler</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">log_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">log_request_handler_class</span><span class="o">=</span><span class="n">LogRequestHandler</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> Start a thread to monitor the logs.</span>
|
<span class="sd"> Start a thread to monitor the logs.</span>
|
||||||
|
|
||||||
@ -267,31 +356,61 @@
|
|||||||
<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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.mount — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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,9 +177,9 @@
|
|||||||
<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">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="k">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.executils</span> <span class="k">import</span> <span class="n">execWithCapture</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="IsoMountpoint"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint">[docs]</a><span class="k">class</span> <span class="nc">IsoMountpoint</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="IsoMountpoint"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint">[docs]</a><span class="k">class</span> <span class="nc">IsoMountpoint</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
@ -106,7 +190,7 @@
|
|||||||
|
|
||||||
<span class="sd"> stage2 can be either LiveOS/squashfs.img or images/install.img</span>
|
<span class="sd"> stage2 can be either LiveOS/squashfs.img or images/install.img</span>
|
||||||
<span class="sd"> """</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">iso_path</span><span class="p">,</span> <span class="n">initrd_path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iso_path</span><span class="p">,</span> <span class="n">initrd_path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
<span class="sd"> Mount the iso</span>
|
<span class="sd"> Mount the iso</span>
|
||||||
|
|
||||||
@ -130,9 +214,7 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initrd_path</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">initrd_path</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="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/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,44 +246,70 @@
|
|||||||
|
|
||||||
<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="n">isoinfo_output</span> <span class="o">=</span> <span class="n">execWithCapture</span><span class="p">(</span><span class="s2">"isoinfo"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"-i"</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">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">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">isoinfo_output</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="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">isoinfo_output</span><span class="o">.</span><span class="n">splitlines</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="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"Volume id: "</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">line</span><span class="p">[</span><span class="mi">11</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">return</span></div></div>
|
||||||
<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>
|
|
||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.sysutils — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -73,7 +157,7 @@
|
|||||||
<span></span><span class="c1">#</span>
|
<span></span><span class="c1">#</span>
|
||||||
<span class="c1"># sysutils.py</span>
|
<span class="c1"># sysutils.py</span>
|
||||||
<span class="c1">#</span>
|
<span class="c1">#</span>
|
||||||
<span class="c1"># Copyright (C) 2009-2019 Red Hat, Inc.</span>
|
<span class="c1"># Copyright (C) 2009-2015 Red Hat, Inc.</span>
|
||||||
<span class="c1">#</span>
|
<span class="c1">#</span>
|
||||||
<span class="c1"># This program is free software; you can redistribute it and/or modify</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"># it under the terms of the GNU General Public License as published by</span>
|
||||||
@ -103,9 +187,9 @@
|
|||||||
<span class="kn">import</span> <span class="nn">glob</span>
|
<span class="kn">import</span> <span class="nn">glob</span>
|
||||||
<span class="kn">import</span> <span class="nn">shutil</span>
|
<span class="kn">import</span> <span class="nn">shutil</span>
|
||||||
<span class="kn">import</span> <span class="nn">shlex</span>
|
<span class="kn">import</span> <span class="nn">shlex</span>
|
||||||
<span class="kn">from</span> <span class="nn">configparser</span> <span class="kn">import</span> <span class="n">ConfigParser</span>
|
<span class="kn">from</span> <span class="nn">configparser</span> <span class="k">import</span> <span class="n">ConfigParser</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="kn">import</span> <span class="n">runcmd</span>
|
<span class="kn">from</span> <span class="nn">pylorax.executils</span> <span class="k">import</span> <span class="n">runcmd</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="joinpaths"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.joinpaths">[docs]</a><span class="k">def</span> <span class="nf">joinpaths</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="joinpaths"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.joinpaths">[docs]</a><span class="k">def</span> <span class="nf">joinpaths</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="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">sep</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">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">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||||
@ -117,8 +201,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>
|
||||||
@ -202,57 +286,60 @@
|
|||||||
<span class="n">config</span> <span class="o">=</span> <span class="n">UnquotingConfigParser</span><span class="p">()</span>
|
<span class="n">config</span> <span class="o">=</span> <span class="n">UnquotingConfigParser</span><span class="p">()</span>
|
||||||
<span class="n">config</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">conftext</span><span class="p">)</span>
|
<span class="n">config</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">conftext</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="n">config</span><span class="p">[</span><span class="s1">'main'</span><span class="p">]</span>
|
<span class="k">return</span> <span class="n">config</span><span class="p">[</span><span class="s1">'main'</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">read_tail</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
|
||||||
<span class="sd">"""Read up to `size` kibibytes from the end of a file"""</span>
|
|
||||||
|
|
||||||
<span class="c1"># NOTE: In py3 text files are unicode, not bytes so we have to open it as bytes</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">"rb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
||||||
<span class="k">return</span> <span class="n">_read_file_end</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_read_file_end</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
|
|
||||||
<span class="sd">"""Read the end of a file</span>
|
|
||||||
|
|
||||||
<span class="sd"> This skips to the next line to avoid starting in the middle of a unicode character.</span>
|
|
||||||
<span class="sd"> And returns "" in the case of a UnicodeDecodeError</span>
|
|
||||||
<span class="sd"> """</span>
|
|
||||||
<span class="n">f</span><span class="o">.</span><span class="n">seek</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="n">end</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">end</span> <span class="o"><</span> <span class="mi">1024</span> <span class="o">*</span> <span class="n">size</span><span class="p">:</span>
|
|
||||||
<span class="n">f</span><span class="o">.</span><span class="n">seek</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="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">end</span> <span class="o">-</span> <span class="p">(</span><span class="mi">1024</span> <span class="o">*</span> <span class="n">size</span><span class="p">))</span>
|
|
||||||
<span class="n">data</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="c1"># Find the first newline in the block</span>
|
|
||||||
<span class="n">newline</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="mi">1</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="sa">b</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
|
||||||
<span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">newline</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">UnicodeDecodeError</span><span class="p">:</span>
|
|
||||||
<span class="k">return</span> <span class="s2">""</span>
|
|
||||||
<span class="k">return</span> <span class="n">text</span>
|
|
||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.treebuilder — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -93,22 +177,22 @@
|
|||||||
<span class="n">logger</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.treebuilder"</span><span class="p">)</span>
|
<span class="n">logger</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.treebuilder"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">re</span>
|
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">re</span>
|
||||||
<span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">basename</span>
|
<span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">basename</span>
|
||||||
<span class="kn">from</span> <span class="nn">shutil</span> <span class="kn">import</span> <span class="n">copytree</span><span class="p">,</span> <span class="n">copy2</span>
|
<span class="kn">from</span> <span class="nn">shutil</span> <span class="k">import</span> <span class="n">copytree</span><span class="p">,</span> <span class="n">copy2</span>
|
||||||
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">CalledProcessError</span>
|
<span class="kn">from</span> <span class="nn">pathlib</span> <span class="k">import</span> <span class="n">Path</span>
|
||||||
<span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
|
|
||||||
<span class="kn">import</span> <span class="nn">itertools</span>
|
<span class="kn">import</span> <span class="nn">itertools</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="kn">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</span>
|
<span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span><span class="p">,</span> <span class="n">remove</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="k">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="k">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="k">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>
|
||||||
<span class="s1">'i386'</span><span class="p">:</span> <span class="s1">'x86.tmpl'</span><span class="p">,</span>
|
<span class="s1">'i386'</span><span class="p">:</span> <span class="s1">'x86.tmpl'</span><span class="p">,</span>
|
||||||
<span class="s1">'x86_64'</span><span class="p">:</span> <span class="s1">'x86.tmpl'</span><span class="p">,</span>
|
<span class="s1">'x86_64'</span><span class="p">:</span> <span class="s1">'x86.tmpl'</span><span class="p">,</span>
|
||||||
|
<span class="s1">'ppc'</span><span class="p">:</span> <span class="s1">'ppc.tmpl'</span><span class="p">,</span>
|
||||||
|
<span class="s1">'ppc64'</span><span class="p">:</span> <span class="s1">'ppc.tmpl'</span><span class="p">,</span>
|
||||||
<span class="s1">'ppc64le'</span><span class="p">:</span> <span class="s1">'ppc64le.tmpl'</span><span class="p">,</span>
|
<span class="s1">'ppc64le'</span><span class="p">:</span> <span class="s1">'ppc64le.tmpl'</span><span class="p">,</span>
|
||||||
<span class="s1">'s390'</span><span class="p">:</span> <span class="s1">'s390.tmpl'</span><span class="p">,</span>
|
<span class="s1">'s390'</span><span class="p">:</span> <span class="s1">'s390.tmpl'</span><span class="p">,</span>
|
||||||
<span class="s1">'s390x'</span><span class="p">:</span> <span class="s1">'s390.tmpl'</span><span class="p">,</span>
|
<span class="s1">'s390x'</span><span class="p">:</span> <span class="s1">'s390.tmpl'</span><span class="p">,</span>
|
||||||
@ -141,12 +225,16 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="RuntimeBuilder"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder">[docs]</a><span class="k">class</span> <span class="nc">RuntimeBuilder</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="RuntimeBuilder"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder">[docs]</a><span class="k">class</span> <span class="nc">RuntimeBuilder</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||||
<span class="sd">'''Builds the anaconda runtime image.'''</span>
|
<span class="sd">'''Builds the anaconda runtime image.'''</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">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">installpkgs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">excludepkgs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">installpkgs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">excludepkgs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">add_templates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">add_templates</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">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">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,68 +242,41 @@
|
|||||||
<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">_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">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="k">def</span> <span class="nf">_install_branding</span><span class="p">(</span><span class="bp">self</span><span class="p">):</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>
|
|
||||||
|
|
||||||
<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="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"> When there are more than 1 package it will:</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 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="k">if</span> <span class="n">skip</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="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>
|
||||||
<span class="n">a</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">available</span><span class="p">()</span>
|
<span class="n">a</span> <span class="o">=</span> <span class="n">q</span><span class="o">.</span><span class="n">available</span><span class="p">()</span>
|
||||||
<span class="n">pkgs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">p</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">a</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">provides</span><span class="o">=</span><span class="s1">'system-release'</span><span class="p">)</span>
|
<span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">a</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">provides</span><span class="o">=</span><span class="s1">'system-release'</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="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"Found release package </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkg</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="n">pkg</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="s1">'generic'</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">continue</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">else</span><span class="p">:</span>
|
||||||
|
<span class="n">release</span> <span class="o">=</span> <span class="n">pkg</span><span class="o">.</span><span class="n">name</span>
|
||||||
|
<span class="k">break</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="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="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="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>
|
||||||
<span class="n">release</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</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">'could not get the release'</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span>
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
@ -316,7 +377,7 @@
|
|||||||
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</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="n">outfile</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">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">outfile</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="c1"># squash the rootfs</span>
|
<span class="c1"># squash the rootfs</span>
|
||||||
<span class="k">return</span> <span class="n">imgutils</span><span class="o">.</span><span class="n">mksquashfs</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">root</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span></div>
|
<span class="n">imgutils</span><span class="o">.</span><span class="n">mksquashfs</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">root</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="RuntimeBuilder.create_ext4_runtime"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.create_ext4_runtime">[docs]</a> <span class="k">def</span> <span class="nf">create_ext4_runtime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outfile</span><span class="o">=</span><span class="s2">"/var/tmp/squashfs.img"</span><span class="p">,</span> <span class="n">compression</span><span class="o">=</span><span class="s2">"xz"</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
|
<div class="viewcode-block" id="RuntimeBuilder.create_ext4_runtime"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.create_ext4_runtime">[docs]</a> <span class="k">def</span> <span class="nf">create_ext4_runtime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outfile</span><span class="o">=</span><span class="s2">"/var/tmp/squashfs.img"</span><span class="p">,</span> <span class="n">compression</span><span class="o">=</span><span class="s2">"xz"</span><span class="p">,</span> <span class="n">compressargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
|
||||||
<span class="sd">"""Create a squashfs compressed ext4 runtime"""</span>
|
<span class="sd">"""Create a squashfs compressed ext4 runtime"""</span>
|
||||||
@ -325,19 +386,12 @@
|
|||||||
<span class="n">workdir</span> <span class="o">=</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="n">outfile</span><span class="p">),</span> <span class="s2">"runtime-workdir"</span><span class="p">)</span>
|
<span class="n">workdir</span> <span class="o">=</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="n">outfile</span><span class="p">),</span> <span class="s2">"runtime-workdir"</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">joinpaths</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="s2">"LiveOS"</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">joinpaths</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="s2">"LiveOS"</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="c1"># Catch problems with the rootfs being too small and clearly log them</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">imgutils</span><span class="o">.</span><span class="n">mkrootfsimg</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">root</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="s2">"LiveOS/rootfs.img"</span><span class="p">),</span>
|
<span class="n">imgutils</span><span class="o">.</span><span class="n">mkrootfsimg</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">root</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="s2">"LiveOS/rootfs.img"</span><span class="p">),</span>
|
||||||
<span class="s2">"Anaconda"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
<span class="s2">"Anaconda"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">)</span>
|
||||||
<span class="k">except</span> <span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">stdout</span> <span class="ow">and</span> <span class="s2">"No space left on device"</span> <span class="ow">in</span> <span class="n">e</span><span class="o">.</span><span class="n">stdout</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">"The rootfs ran out of space with size=</span><span class="si">%d</span><span class="s2">"</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
|
|
||||||
<span class="k">raise</span>
|
|
||||||
|
|
||||||
<span class="c1"># squash the live rootfs and clean up workdir</span>
|
<span class="c1"># squash the live rootfs and clean up workdir</span>
|
||||||
<span class="n">rc</span> <span class="o">=</span> <span class="n">imgutils</span><span class="o">.</span><span class="n">mksquashfs</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span>
|
<span class="n">imgutils</span><span class="o">.</span><span class="n">mksquashfs</span><span class="p">(</span><span class="n">workdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span><span class="p">)</span>
|
||||||
<span class="n">remove</span><span class="p">(</span><span class="n">workdir</span><span class="p">)</span>
|
<span class="n">remove</span><span class="p">(</span><span class="n">workdir</span><span class="p">)</span></div>
|
||||||
<span class="k">return</span> <span class="n">rc</span></div>
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="RuntimeBuilder.finished"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.finished">[docs]</a> <span class="k">def</span> <span class="nf">finished</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="RuntimeBuilder.finished"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.finished">[docs]</a> <span class="k">def</span> <span class="nf">finished</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">""" Done using RuntimeBuilder</span>
|
<span class="sd">""" Done using RuntimeBuilder</span>
|
||||||
@ -349,7 +403,7 @@
|
|||||||
<div class="viewcode-block" id="TreeBuilder"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder">[docs]</a><span class="k">class</span> <span class="nc">TreeBuilder</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="TreeBuilder"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder">[docs]</a><span class="k">class</span> <span class="nc">TreeBuilder</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||||
<span class="sd">'''Builds the arch-specific boot images.</span>
|
<span class="sd">'''Builds the arch-specific boot images.</span>
|
||||||
<span class="sd"> inroot should be the installtree root (the newly-built runtime dir)'''</span>
|
<span class="sd"> inroot should be the installtree root (the newly-built runtime dir)'''</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">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">inroot</span><span class="p">,</span> <span class="n">outroot</span><span class="p">,</span> <span class="n">runtime</span><span class="p">,</span> <span class="n">isolabel</span><span class="p">,</span> <span class="n">domacboot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">doupgrade</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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">inroot</span><span class="p">,</span> <span class="n">outroot</span><span class="p">,</span> <span class="n">runtime</span><span class="p">,</span> <span class="n">isolabel</span><span class="p">,</span> <span class="n">domacboot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">doupgrade</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">add_templates</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">workdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">extra_boot_args</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
<span class="n">templatedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">add_templates</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">workdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">extra_boot_args</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
|
||||||
<span class="c1"># NOTE: if you pass an arg named "runtime" to a mako template it'll</span>
|
<span class="c1"># NOTE: if you pass an arg named "runtime" to a mako template it'll</span>
|
||||||
@ -383,14 +437,15 @@
|
|||||||
<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="c1"># Hush some dracut warnings. TODO: bind-mount proc in place?</span>
|
||||||
|
<span class="nb">open</span><span class="p">(</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="s2">"/proc/modules"</span><span class="p">),</span><span class="s2">"w"</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>
|
||||||
@ -402,12 +457,20 @@
|
|||||||
<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="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>
|
||||||
|
|
||||||
|
<span class="c1"># ppc64 cannot boot images > 32MiB, check size and warn</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">arch</span><span class="o">.</span><span class="n">basearch</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"ppc64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">)</span> <span class="ow">and</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">outfile</span><span class="p">):</span>
|
||||||
|
<span class="n">st</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">outfile</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">st</span><span class="o">.</span><span class="n">st_size</span> <span class="o">></span> <span class="mi">32</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">:</span>
|
||||||
|
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"ppc64 initrd </span><span class="si">%s</span><span class="s2"> is > 32MiB"</span><span class="p">,</span> <span class="n">outfile</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">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="s2">"/proc/modules"</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,26 +568,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,31 +1,67 @@
|
|||||||
<!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>
|
|
||||||
<script src="../../_static/jquery.js"></script>
|
<!DOCTYPE html>
|
||||||
<script src="../../_static/underscore.js"></script>
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||||
<script src="../../_static/doctools.js"></script>
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||||
<script src="../../_static/js/theme.js"></script>
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>pylorax.treeinfo — Lorax 29.28 documentation</title>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../../_static/js/modernizr.min.js"></script>
|
||||||
|
|
||||||
</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
|
29.28
|
||||||
</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 +69,85 @@
|
|||||||
<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="../../mkksiso.html">mkksiso</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="../../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">
|
||||||
@ -101,7 +185,7 @@
|
|||||||
|
|
||||||
<div class="viewcode-block" id="TreeInfo"><a class="viewcode-back" href="../../pylorax.html#pylorax.treeinfo.TreeInfo">[docs]</a><span class="k">class</span> <span class="nc">TreeInfo</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
<div class="viewcode-block" id="TreeInfo"><a class="viewcode-back" href="../../pylorax.html#pylorax.treeinfo.TreeInfo">[docs]</a><span class="k">class</span> <span class="nc">TreeInfo</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">product</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">variant</span><span class="p">,</span> <span class="n">basearch</span><span class="p">,</span>
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">variant</span><span class="p">,</span> <span class="n">basearch</span><span class="p">,</span>
|
||||||
<span class="n">packagedir</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
<span class="n">packagedir</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
||||||
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||||||
@ -136,26 +220,57 @@
|
|||||||
</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">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'../../',
|
||||||
|
VERSION:'29.28',
|
||||||
|
LANGUAGE:'None',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt'
|
||||||
|
};
|
||||||
|
</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/js/theme.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
SphinxRtdTheme.Navigation.enable(true);
|
SphinxRtdTheme.Navigation.enable(true);
|
||||||
});
|
});
|
||||||
|
|||||||
63
docs/html/_sources/composer-cli.rst.txt
Normal file
63
docs/html/_sources/composer-cli.rst.txt
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
composer-cli
|
||||||
|
============
|
||||||
|
|
||||||
|
:Authors:
|
||||||
|
Brian C. Lane <bcl@redhat.com>
|
||||||
|
|
||||||
|
``composer-cli`` is used to interact with the ``lorax-composer`` API server, managing blueprints, exploring available packages, and building new images.
|
||||||
|
|
||||||
|
It requires `lorax-composer <lorax-composer.html>`_ 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.
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
86
docs/html/_sources/composer.cli.rst.txt
Normal file
86
docs/html/_sources/composer.cli.rst.txt
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
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.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.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::
|
||||||
|
|
||||||
|
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,18 +14,15 @@ Contents:
|
|||||||
intro
|
intro
|
||||||
lorax
|
lorax
|
||||||
livemedia-creator
|
livemedia-creator
|
||||||
mkksiso
|
lorax-composer
|
||||||
|
composer-cli
|
||||||
product-images
|
product-images
|
||||||
image-minimizer
|
|
||||||
modules
|
modules
|
||||||
|
|
||||||
Documentation for other Lorax Branches
|
Documentation for other Lorax Branches
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
* `Fedora 35 <f35-branch/>`_
|
* `Fedora 28 <f28-branch/>`_
|
||||||
* `Fedora 34 <f34-branch/>`_
|
|
||||||
* `Fedora 33 <f33-branch/>`_
|
|
||||||
* `RHEL8 lorax-composer <rhel8-branch/>`_
|
|
||||||
* `RHEL7 lorax-composer <lorax-composer/>`_
|
* `RHEL7 lorax-composer <lorax-composer/>`_
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
|
|||||||
@ -46,16 +46,6 @@ livemedia-creator cmdline arguments
|
|||||||
:ref: pylorax.cmdline.lmc_parser
|
:ref: pylorax.cmdline.lmc_parser
|
||||||
:prog: livemedia-creator
|
:prog: livemedia-creator
|
||||||
|
|
||||||
--macboot : @replace
|
|
||||||
Make the iso bootable on UEFI based Mac systems
|
|
||||||
|
|
||||||
Default: True
|
|
||||||
|
|
||||||
--nomacboot : @replace
|
|
||||||
Do not create a Mac bootable iso
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
|
|
||||||
Quickstart
|
Quickstart
|
||||||
----------
|
----------
|
||||||
@ -171,6 +161,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
|
||||||
@ -307,6 +298,9 @@ The following variables are passed to the template:
|
|||||||
``networks``
|
``networks``
|
||||||
list of networks from the kickstart or []
|
list of networks from the kickstart or []
|
||||||
|
|
||||||
|
``title``
|
||||||
|
from ``--title``
|
||||||
|
|
||||||
``project``
|
``project``
|
||||||
from ``--project``
|
from ``--project``
|
||||||
|
|
||||||
@ -382,15 +376,9 @@ As of lorax version 22.2 you can use livemedia-creator and anaconda version
|
|||||||
22.15 inside of a mock chroot with --make-iso and --make-fsimage.
|
22.15 inside of a mock chroot with --make-iso and --make-fsimage.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
As of mock version 2.0 you no longer need to pass ``--old-chroot``. You will,
|
As of mock 1.3.4 you need to use ``--old-chroot`` with mock. Mock now defaults to using systemd-nspawn
|
||||||
however, need to pass ``--enable-network`` so that the mock container can download
|
which cannot create the needed loop device nodes. Passing ``--old-chroot`` will use the old system
|
||||||
packages.
|
where ``/dev/loop*`` is setup for you.
|
||||||
|
|
||||||
Older versions of mock, between 1.3.4 and 2.0, will need to pass
|
|
||||||
``--old-chroot`` with mock. These versions of mock now default to using
|
|
||||||
systemd-nspawn which cannot create the needed loop device nodes. Passing
|
|
||||||
``--old-chroot`` will use the old system where ``/dev/loop*`` is setup for
|
|
||||||
you.
|
|
||||||
|
|
||||||
On the host system:
|
On the host system:
|
||||||
|
|
||||||
@ -422,14 +410,14 @@ group.
|
|||||||
``url points to the correct repo``
|
``url points to the correct repo``
|
||||||
|
|
||||||
7. Init the mock
|
7. Init the mock
|
||||||
``mock -r fedora-rawhide-x86_64 --init``
|
``mock -r fedora-rawhide-x86_64 --old-chroot --init``
|
||||||
|
|
||||||
8. Copy the kickstart inside the mock
|
8. Copy the kickstart inside the mock
|
||||||
``mock -r fedora-rawhide-x86_64 --copyin ./fedora-minimal.ks /root/``
|
``mock -r fedora-rawhide-x86_64 --old-chroot --copyin ./fedora-minimal.ks /root/``
|
||||||
|
|
||||||
9. Make a minimal iso::
|
9. Make a minimal iso::
|
||||||
|
|
||||||
mock -r fedora-rawhide-x86_64 --enable-network --chroot -- livemedia-creator --no-virt \
|
mock -r fedora-rawhide-x86_64 --old-chroot --chroot -- livemedia-creator --no-virt \
|
||||||
--resultdir=/results/try-1 --logfile=/results/logs/try-1/try-1.log \
|
--resultdir=/results/try-1 --logfile=/results/logs/try-1/try-1.log \
|
||||||
--make-iso --ks /root/fedora-minimal.ks
|
--make-iso --ks /root/fedora-minimal.ks
|
||||||
|
|
||||||
@ -476,17 +464,17 @@ group.
|
|||||||
``url points to the correct repo``
|
``url points to the correct repo``
|
||||||
|
|
||||||
7. Init the mock
|
7. Init the mock
|
||||||
``mock -r fedora-rawhide-x86_64 --init``
|
``mock -r fedora-rawhide-x86_64 --old-chroot --init``
|
||||||
|
|
||||||
8. Copy the kickstart inside the mock
|
8. Copy the kickstart inside the mock
|
||||||
``mock -r fedora-rawhide-x86_64 --copyin ./fedora-minimal.ks /root/``
|
``mock -r fedora-rawhide-x86_64 --old-chroot --copyin ./fedora-minimal.ks /root/``
|
||||||
|
|
||||||
9. Copy the Anaconda boot.iso inside the mock
|
9. Copy the Anaconda boot.iso inside the mock
|
||||||
``mock -r fedora-rawhide-x86_64 --copyin ./boot.iso /root/``
|
``mock -r fedora-rawhide-x86_64 --old-chroot --copyin ./boot.iso /root/``
|
||||||
|
|
||||||
10. Make a minimal iso::
|
10. Make a minimal iso::
|
||||||
|
|
||||||
mock -r fedora-rawhide-x86_64 --enable-network --chroot -- livemedia-creator \
|
mock -r fedora-rawhide-x86_64 --old-chroot --chroot -- livemedia-creator \
|
||||||
--resultdir=/results/try-1 --logfile=/results/logs/try-1/try-1.log \
|
--resultdir=/results/try-1 --logfile=/results/logs/try-1/try-1.log \
|
||||||
--make-iso --ks /root/fedora-minimal.ks --iso /root/boot.iso
|
--make-iso --ks /root/fedora-minimal.ks --iso /root/boot.iso
|
||||||
|
|
||||||
|
|||||||
504
docs/html/_sources/lorax-composer.rst.txt
Normal file
504
docs/html/_sources/lorax-composer.rst.txt
Normal file
@ -0,0 +1,504 @@
|
|||||||
|
lorax-composer
|
||||||
|
==============
|
||||||
|
|
||||||
|
:Authors:
|
||||||
|
Brian C. Lane <bcl@redhat.com>
|
||||||
|
|
||||||
|
``lorax-composer`` is an 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.
|
||||||
|
|
||||||
|
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: As of lorax-composer-29.2-1 the versions are not used for depsolving,
|
||||||
|
that is planned for a future release. And currently there are no differences
|
||||||
|
between ``packages`` and ``modules`` in ``lorax-composer``.
|
||||||
|
|
||||||
|
[[groups]]
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
These 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.
|
||||||
|
|
||||||
|
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.
|
||||||
@ -23,16 +23,6 @@ lorax cmdline arguments
|
|||||||
:ref: pylorax.cmdline.lorax_parser
|
:ref: pylorax.cmdline.lorax_parser
|
||||||
:prog: lorax
|
:prog: lorax
|
||||||
|
|
||||||
--macboot : @replace
|
|
||||||
Make the iso bootable on UEFI based Mac systems
|
|
||||||
|
|
||||||
Default: True
|
|
||||||
|
|
||||||
--nomacboot : @replace
|
|
||||||
Do not create a Mac bootable iso
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
|
|
||||||
Quickstart
|
Quickstart
|
||||||
----------
|
----------
|
||||||
@ -51,52 +41,14 @@ 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
|
|
||||||
--------
|
|
||||||
|
|
||||||
By default lorax will search for the first package that provides ``system-release``
|
|
||||||
that doesn't start with ``generic-`` and will install it. It then selects a
|
|
||||||
corresponding logo package by using the first part of the system-release package and
|
|
||||||
appending ``-logos`` to it. eg. fedora-release and fedora-logos.
|
|
||||||
|
|
||||||
Variants
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
If a ``variant`` is passed to lorax it will select a ``system-release`` package that
|
|
||||||
ends with the variant name. eg. Passing ``--variant workstation`` will select the
|
|
||||||
``fedora-release-workstation`` package if it exists. It will select a logo package
|
|
||||||
the same way it does for non-variants. eg. ``fedora-logos``.
|
|
||||||
|
|
||||||
If there is no package ending with the variant name it will fall back to using the
|
|
||||||
first non-generic package providing ``system-release``.
|
|
||||||
|
|
||||||
Custom Branding
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If ``--skip-branding`` is passed to lorax it will skip selecting the
|
|
||||||
``system-release``, and logos packages and leave it up to the user to pass any
|
|
||||||
branding related packages to lorax using ``--installpkgs``. When using
|
|
||||||
``skip-branding`` you must make sure that you provide all of the expected files,
|
|
||||||
otherwise Anaconda may not work as expected. See the contents of ``fedora-release``
|
|
||||||
and ``fedora-logos`` for examples of what to include.
|
|
||||||
|
|
||||||
Note that this does not prevent something else in the dependency tree from
|
|
||||||
causing these packages to be included. Using ``--excludepkgs`` may help if they
|
|
||||||
are unexpectedly included.
|
|
||||||
|
|
||||||
|
|
||||||
Running inside of mock
|
Running inside of mock
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
As of mock version 2.0 you no longer need to pass ``--old-chroot``. You will,
|
If you are using lorax with mock v1.3.4 or later you will need to pass
|
||||||
however, need to pass ``--enable-network`` so that the mock container can download
|
``--old-chroot`` to mock. Mock now defaults to using systemd-nspawn which cannot
|
||||||
packages.
|
|
||||||
|
|
||||||
Older versions of mock, between 1.3.4 and 2.0, will need to pass ``--old-chroot``
|
|
||||||
to mock. These versions of mock default to using systemd-nspawn which cannot
|
|
||||||
create the needed loop device nodes. Passing ``--old-chroot`` will use the old
|
create the needed loop device nodes. Passing ``--old-chroot`` will use the old
|
||||||
system where ``/dev/loop*`` is setup for you.
|
system where ``/dev/loop*`` is setup for you.
|
||||||
|
|
||||||
@ -185,7 +137,7 @@ on the architecture that the iso is being created for. They are also stored in
|
|||||||
configuration template files, configuration variable substitution, treeinfo
|
configuration template files, configuration variable substitution, treeinfo
|
||||||
metadata (via the :func:`treeinfo <pylorax.ltmpl.LoraxTemplateRunner.treeinfo>`
|
metadata (via the :func:`treeinfo <pylorax.ltmpl.LoraxTemplateRunner.treeinfo>`
|
||||||
template command). Kernel and initrd are copied from the installroot to their
|
template command). Kernel and initrd are copied from the installroot to their
|
||||||
final locations and then xorrisofs is run to create the boot.iso
|
final locations and then mkisofs is run to create the boot.iso
|
||||||
|
|
||||||
|
|
||||||
Custom Templates
|
Custom Templates
|
||||||
|
|||||||
@ -1,131 +0,0 @@
|
|||||||
mkksiso
|
|
||||||
=======
|
|
||||||
|
|
||||||
:Authors:
|
|
||||||
Brian C. Lane <bcl@redhat.com>
|
|
||||||
|
|
||||||
``mkksiso`` is a tool for creating kickstart boot isos. In it's simplest form
|
|
||||||
you can add a kickstart to a boot.iso and the kickstart will be executed when
|
|
||||||
the iso is booted. If the original iso was created with EFI and Mac support the
|
|
||||||
kickstart boot.iso will include this support as well.
|
|
||||||
|
|
||||||
``mkksiso`` needs to be run as root, it depends on mounting the original iso
|
|
||||||
and you need to be root to be able to do that. The host system architecture
|
|
||||||
needs to match that of the iso. ``mkksiso`` will raise an error if it finds a
|
|
||||||
.discinfo on the iso with a mismatched arch.
|
|
||||||
|
|
||||||
|
|
||||||
mkksiso cmdline arguments
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Add a kickstart and files to an iso
|
|
||||||
|
|
||||||
``usage: mkksiso [-h] [-a ADD_PATHS] [-c CMDLINE] [--debug] ks input_iso output_iso``
|
|
||||||
|
|
||||||
Optional arguments
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
-h, --help show this help message and exit
|
|
||||||
-a ADD_PATHS, --add ADD_PATHS
|
|
||||||
File or directory to add to ISO (may be used multiple
|
|
||||||
times)
|
|
||||||
-c CMDLINE, --cmdline CMDLINE
|
|
||||||
Arguments to add to kernel cmdline
|
|
||||||
--debug print debugging info
|
|
||||||
-V VOLID, --volid VOLID
|
|
||||||
Set the ISO volume id, defaults to input's
|
|
||||||
|
|
||||||
Positional arguments
|
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
:ks: Kickstart to add to the ISO
|
|
||||||
|
|
||||||
:input_iso: ISO to modify
|
|
||||||
|
|
||||||
:output_iso: Full pathname of iso to be created
|
|
||||||
|
|
||||||
|
|
||||||
Create a kickstart boot.iso or DVD
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Create a kickstart like you normally would, kickstart documentation can be
|
|
||||||
`found here <https://pykickstart.readthedocs.io/en/latest/>`_, including the
|
|
||||||
``url`` and ``repo`` commands. If you are creating a DVD and only need the
|
|
||||||
content on the DVD you can use the ``cdrom`` command to install without a
|
|
||||||
network connection. Then run ``mkksiso`` like this::
|
|
||||||
|
|
||||||
mkksiso /PATH/TO/KICKSTART /PATH/TO/ISO /PATH/TO/NEW-ISO
|
|
||||||
|
|
||||||
This will create a new iso with the kickstart in the root directory, and the
|
|
||||||
kernel cmdline will have ``inst.ks=...`` added to it so that it will be
|
|
||||||
executed when the iso is booted (be careful not to boot on a system you don't
|
|
||||||
want to wipe out! There will be no prompting).
|
|
||||||
|
|
||||||
By default the volume id of the iso is preserved. You can set a custom volid
|
|
||||||
by passing ``-V`` and the string to set. The kernel cmdline will be changes, and the iso will have th custom volume id.
|
|
||||||
eg.::
|
|
||||||
|
|
||||||
mkksiso -V "Test Only" /PATH/TO/KICKSTART /PATH/TO/ISO /PATH/TO/NEW-ISO
|
|
||||||
|
|
||||||
|
|
||||||
Adding package repos to a boot.iso
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
You can add repo directories to the iso using ``--add /PATH/TO/REPO/``, make
|
|
||||||
sure it contains the ``repodata`` directory by running ``createrepo_c`` on it
|
|
||||||
first. In the kickstart you can refer to the directories (and files) on the iso
|
|
||||||
using ``file:///run/install/repo/DIRECTORY/``. You can then use these repos in
|
|
||||||
the kickstart like this::
|
|
||||||
|
|
||||||
repo --name=extra-repo --baseurl=file:///run/install/repo/extra-repo/
|
|
||||||
|
|
||||||
Run ``mkksiso`` like so::
|
|
||||||
|
|
||||||
mkksiso --add /PATH/TO/REPO/ /PATH/TO/KICKSTART /PATH/TO/ISO /PATH/TO/NEW-ISO
|
|
||||||
|
|
||||||
|
|
||||||
Create a liveimg boot.iso
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
You can use the kickstart `liveimg command
|
|
||||||
<https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#liveimg>`_,
|
|
||||||
to install a pre-generated disk image or tar to the system the iso is booting
|
|
||||||
on.
|
|
||||||
|
|
||||||
Create a disk image or tar with ``osbuild-composer`` or ``livemedia-creator``,
|
|
||||||
make sure the image includes tools expected by ``anaconda``, as well as the
|
|
||||||
kernel and bootloader support. In ``osbuild-composer`` use the ``tar`` image
|
|
||||||
type and make sure to include the ``kernel``, ``grub2``, and ``grub2-tools``
|
|
||||||
packages. If you plan to install it to a UEFI machine make sure to include
|
|
||||||
``grub2-efi`` and ``efibootmgr`` in the blueprint.
|
|
||||||
|
|
||||||
Add the ``root.tar.xz`` file to the iso using ``--add /PATH/TO/ROOT.TAR.XZ``,
|
|
||||||
and in the kickstart reference it with the ``liveimg`` command like this::
|
|
||||||
|
|
||||||
liveimg --url=file:///run/install/repo/root.tar.xz
|
|
||||||
|
|
||||||
It is also a good idea to use the ``--checksum`` argument to ``liveimg`` to be
|
|
||||||
sure the file hasn't been corrupted::
|
|
||||||
|
|
||||||
mkksiso --add /PATH/TO/root.tar.xz /PATH/TO/KICKSTART /PATH/TO/ISO /PATH/TO/NEW-ISO
|
|
||||||
|
|
||||||
When this iso is booted it will execute the kickstart and install the liveimg
|
|
||||||
contents to the system without any prompting.
|
|
||||||
|
|
||||||
|
|
||||||
How it works
|
|
||||||
------------
|
|
||||||
|
|
||||||
``mkksiso`` first examines the system to make sure the tools it needs are installed,
|
|
||||||
it will work with ``xorrisofs`` or ``mkisofs`` installed. It mounts the source iso,
|
|
||||||
and copies the directories that need to be modified to a temporary directory.
|
|
||||||
|
|
||||||
It then modifies the boot configuration files to include the ``inst.ks`` command,
|
|
||||||
and checks to see if the original iso supports EFI. If it does it regenerates the
|
|
||||||
EFI boot images with the new configuration, and then runs the available iso creation
|
|
||||||
tool to add the new files and directories to the new iso. If the architecture is
|
|
||||||
``x86_64`` it will also make sure the iso can be booted as an iso or from a USB
|
|
||||||
stick (hybridiso).
|
|
||||||
|
|
||||||
The last step is to update the iso checksums so that booting with test enabled
|
|
||||||
will pass.
|
|
||||||
@ -4,4 +4,5 @@ src
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 4
|
:maxdepth: 4
|
||||||
|
|
||||||
|
composer
|
||||||
pylorax
|
pylorax
|
||||||
|
|||||||
150
docs/html/_sources/pylorax.api.rst.txt
Normal file
150
docs/html/_sources/pylorax.api.rst.txt
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
pylorax.api package
|
||||||
|
===================
|
||||||
|
|
||||||
|
Submodules
|
||||||
|
----------
|
||||||
|
|
||||||
|
pylorax.api.bisect module
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.bisect
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.checkparams module
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.checkparams
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.cmdline module
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.cmdline
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.compose module
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.compose
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.config module
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.config
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.crossdomain module
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.crossdomain
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.dnfbase module
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.dnfbase
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.errors module
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.errors
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.gitrpm module
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.gitrpm
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.projects module
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.projects
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.queue module
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.queue
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.recipes module
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.recipes
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.regexes module
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.regexes
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.server module
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.server
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.timestamp module
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.timestamp
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.v0 module
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.v0
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
pylorax.api.workspace module
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api.workspace
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
|
Module contents
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. automodule:: pylorax.api
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
@ -1,6 +1,13 @@
|
|||||||
pylorax package
|
pylorax package
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
Subpackages
|
||||||
|
-----------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
pylorax.api
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@ -148,6 +155,7 @@ pylorax.treeinfo module
|
|||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
Module contents
|
Module contents
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|||||||
BIN
docs/html/_static/ajax-loader.gif
Normal file
BIN
docs/html/_static/ajax-loader.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 673 B |
@ -4,7 +4,7 @@
|
|||||||
*
|
*
|
||||||
* Sphinx stylesheet -- basic theme.
|
* Sphinx stylesheet -- basic theme.
|
||||||
*
|
*
|
||||||
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
|
* :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
||||||
* :license: BSD, see LICENSE for details.
|
* :license: BSD, see LICENSE for details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -15,12 +15,6 @@ div.clearer {
|
|||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.section::after {
|
|
||||||
display: block;
|
|
||||||
content: '';
|
|
||||||
clear: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- relbar ---------------------------------------------------------------- */
|
/* -- relbar ---------------------------------------------------------------- */
|
||||||
|
|
||||||
div.related {
|
div.related {
|
||||||
@ -87,10 +81,6 @@ div.sphinxsidebar input {
|
|||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.sphinxsidebar #searchbox form.search {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar #searchbox input[type="text"] {
|
div.sphinxsidebar #searchbox input[type="text"] {
|
||||||
float: left;
|
float: left;
|
||||||
width: 80%;
|
width: 80%;
|
||||||
@ -130,7 +120,7 @@ ul.search li a {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.search li p.context {
|
ul.search li div.context {
|
||||||
color: #888;
|
color: #888;
|
||||||
margin: 2px 0 0 30px;
|
margin: 2px 0 0 30px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@ -237,16 +227,6 @@ a.headerlink {
|
|||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.brackets:before,
|
|
||||||
span.brackets > a:before{
|
|
||||||
content: "[";
|
|
||||||
}
|
|
||||||
|
|
||||||
a.brackets:after,
|
|
||||||
span.brackets > a:after {
|
|
||||||
content: "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
h1:hover > a.headerlink,
|
h1:hover > a.headerlink,
|
||||||
h2:hover > a.headerlink,
|
h2:hover > a.headerlink,
|
||||||
h3:hover > a.headerlink,
|
h3:hover > a.headerlink,
|
||||||
@ -277,25 +257,19 @@ p.rubric {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
img.align-left, .figure.align-left, object.align-left {
|
||||||
clear: left;
|
clear: left;
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
img.align-right, .figure.align-right, object.align-right {
|
||||||
clear: right;
|
clear: right;
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
img.align-center, .figure.align-center, object.align-center {
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.align-default, figure.align-default, .figure.align-default {
|
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
@ -309,41 +283,30 @@ img.align-default, figure.align-default, .figure.align-default {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.align-default {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.align-right {
|
.align-right {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- sidebars -------------------------------------------------------------- */
|
/* -- sidebars -------------------------------------------------------------- */
|
||||||
|
|
||||||
div.sidebar,
|
div.sidebar {
|
||||||
aside.sidebar {
|
|
||||||
margin: 0 0 0.5em 1em;
|
margin: 0 0 0.5em 1em;
|
||||||
border: 1px solid #ddb;
|
border: 1px solid #ddb;
|
||||||
padding: 7px;
|
padding: 7px 7px 0 7px;
|
||||||
background-color: #ffe;
|
background-color: #ffe;
|
||||||
width: 40%;
|
width: 40%;
|
||||||
float: right;
|
float: right;
|
||||||
clear: right;
|
|
||||||
overflow-x: auto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p.sidebar-title {
|
p.sidebar-title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.admonition, div.topic, blockquote {
|
|
||||||
clear: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- topics ---------------------------------------------------------------- */
|
/* -- topics ---------------------------------------------------------------- */
|
||||||
|
|
||||||
div.topic {
|
div.topic {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
padding: 7px;
|
padding: 7px 7px 0 7px;
|
||||||
margin: 10px 0 10px 0;
|
margin: 10px 0 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,6 +328,10 @@ div.admonition dt {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.admonition dl {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
p.admonition-title {
|
p.admonition-title {
|
||||||
margin: 0px 10px 5px 0px;
|
margin: 0px 10px 5px 0px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -375,30 +342,9 @@ div.body p.centered {
|
|||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
|
||||||
|
|
||||||
div.sidebar > :last-child,
|
|
||||||
aside.sidebar > :last-child,
|
|
||||||
div.topic > :last-child,
|
|
||||||
div.admonition > :last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sidebar::after,
|
|
||||||
aside.sidebar::after,
|
|
||||||
div.topic::after,
|
|
||||||
div.admonition::after,
|
|
||||||
blockquote::after {
|
|
||||||
display: block;
|
|
||||||
content: '';
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- tables ---------------------------------------------------------------- */
|
/* -- tables ---------------------------------------------------------------- */
|
||||||
|
|
||||||
table.docutils {
|
table.docutils {
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
border: 0;
|
border: 0;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
@ -408,11 +354,6 @@ table.align-center {
|
|||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.align-default {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table caption span.caption-number {
|
table caption span.caption-number {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@ -446,34 +387,22 @@ table.citation td {
|
|||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
th > :first-child,
|
|
||||||
td > :first-child {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
th > :last-child,
|
|
||||||
td > :last-child {
|
|
||||||
margin-bottom: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- figures --------------------------------------------------------------- */
|
/* -- figures --------------------------------------------------------------- */
|
||||||
|
|
||||||
div.figure, figure {
|
div.figure {
|
||||||
margin: 0.5em;
|
margin: 0.5em;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption, figcaption {
|
div.figure p.caption {
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-number,
|
div.figure p.caption span.caption-number {
|
||||||
figcaption span.caption-number {
|
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-text,
|
div.figure p.caption span.caption-text {
|
||||||
figcaption span.caption-text {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- field list styles ----------------------------------------------------- */
|
/* -- field list styles ----------------------------------------------------- */
|
||||||
@ -498,74 +427,6 @@ table.field-list td, table.field-list th {
|
|||||||
hyphens: manual;
|
hyphens: manual;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- hlist styles ---------------------------------------------------------- */
|
|
||||||
|
|
||||||
table.hlist {
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.hlist td {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- object description styles --------------------------------------------- */
|
|
||||||
|
|
||||||
.sig {
|
|
||||||
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-name, code.descname {
|
|
||||||
background-color: transparent;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-name {
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.descname {
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-prename, code.descclassname {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.optional {
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-paren {
|
|
||||||
font-size: larger;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-param.n {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* C++ specific styling */
|
|
||||||
|
|
||||||
.sig-inline.c-texpr,
|
|
||||||
.sig-inline.cpp-texpr {
|
|
||||||
font-family: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig.c .k, .sig.c .kt,
|
|
||||||
.sig.cpp .k, .sig.cpp .kt {
|
|
||||||
color: #0033B3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig.c .m,
|
|
||||||
.sig.cpp .m {
|
|
||||||
color: #1750EB;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig.c .s, .sig.c .sc,
|
|
||||||
.sig.cpp .s, .sig.cpp .sc {
|
|
||||||
color: #067D17;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- other body styles ----------------------------------------------------- */
|
/* -- other body styles ----------------------------------------------------- */
|
||||||
|
|
||||||
ol.arabic {
|
ol.arabic {
|
||||||
@ -588,78 +449,11 @@ ol.upperroman {
|
|||||||
list-style: upper-roman;
|
list-style: upper-roman;
|
||||||
}
|
}
|
||||||
|
|
||||||
:not(li) > ol > li:first-child > :first-child,
|
|
||||||
:not(li) > ul > li:first-child > :first-child {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
:not(li) > ol > li:last-child > :last-child,
|
|
||||||
:not(li) > ul > li:last-child > :last-child {
|
|
||||||
margin-bottom: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.simple ol p,
|
|
||||||
ol.simple ul p,
|
|
||||||
ul.simple ol p,
|
|
||||||
ul.simple ul p {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.simple > li:not(:first-child) > p,
|
|
||||||
ul.simple > li:not(:first-child) > p {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ol.simple p,
|
|
||||||
ul.simple p {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.footnote > dt,
|
|
||||||
dl.citation > dt {
|
|
||||||
float: left;
|
|
||||||
margin-right: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.footnote > dd,
|
|
||||||
dl.citation > dd {
|
|
||||||
margin-bottom: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.footnote > dd:after,
|
|
||||||
dl.citation > dd:after {
|
|
||||||
content: "";
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.field-list {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: fit-content(30%) auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.field-list > dt {
|
|
||||||
font-weight: bold;
|
|
||||||
word-break: break-word;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.field-list > dt:after {
|
|
||||||
content: ":";
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.field-list > dd {
|
|
||||||
padding-left: 0.5em;
|
|
||||||
margin-top: 0em;
|
|
||||||
margin-left: 0em;
|
|
||||||
margin-bottom: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl {
|
dl {
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dd > :first-child {
|
dd p {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -673,11 +467,6 @@ dd {
|
|||||||
margin-left: 30px;
|
margin-left: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl > dd:last-child,
|
|
||||||
dl > dd:last-child > :last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt:target, span.highlighted {
|
dt:target, span.highlighted {
|
||||||
background-color: #fbe54e;
|
background-color: #fbe54e;
|
||||||
}
|
}
|
||||||
@ -691,6 +480,14 @@ dl.glossary dt {
|
|||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.optional {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-paren {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
.versionmodified {
|
.versionmodified {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@ -729,12 +526,6 @@ dl.glossary dt {
|
|||||||
font-style: oblique;
|
font-style: oblique;
|
||||||
}
|
}
|
||||||
|
|
||||||
.classifier:before {
|
|
||||||
font-style: normal;
|
|
||||||
margin: 0.5em;
|
|
||||||
content: ":";
|
|
||||||
}
|
|
||||||
|
|
||||||
abbr, acronym {
|
abbr, acronym {
|
||||||
border-bottom: dotted 1px;
|
border-bottom: dotted 1px;
|
||||||
cursor: help;
|
cursor: help;
|
||||||
@ -747,10 +538,6 @@ pre {
|
|||||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||||
}
|
}
|
||||||
|
|
||||||
pre, div[class*="highlight-"] {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.pre {
|
span.pre {
|
||||||
-moz-hyphens: none;
|
-moz-hyphens: none;
|
||||||
-ms-hyphens: none;
|
-ms-hyphens: none;
|
||||||
@ -758,57 +545,22 @@ span.pre {
|
|||||||
hyphens: none;
|
hyphens: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[class*="highlight-"] {
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.linenos pre {
|
td.linenos pre {
|
||||||
|
padding: 5px 0px;
|
||||||
border: 0;
|
border: 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.highlighttable {
|
table.highlighttable {
|
||||||
display: block;
|
margin-left: 0.5em;
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable tbody {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable tr {
|
|
||||||
display: flex;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table.highlighttable td {
|
table.highlighttable td {
|
||||||
margin: 0;
|
padding: 0 0.5em 0 0.5em;
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable td.linenos {
|
|
||||||
padding-right: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.highlighttable td.code {
|
|
||||||
flex: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.highlight .hll {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.highlight pre,
|
|
||||||
table.highlighttable pre {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.code-block-caption + div {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.code-block-caption {
|
div.code-block-caption {
|
||||||
margin-top: 1em;
|
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
@ -817,14 +569,8 @@ div.code-block-caption code {
|
|||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.highlighttable td.linenos,
|
div.code-block-caption + div > div.highlight > pre {
|
||||||
span.linenos,
|
margin-top: 0;
|
||||||
div.highlight span.gp { /* gp: Generic.Prompt */
|
|
||||||
user-select: none;
|
|
||||||
-webkit-user-select: text; /* Safari fallback only */
|
|
||||||
-webkit-user-select: none; /* Chrome/Safari */
|
|
||||||
-moz-user-select: none; /* Firefox */
|
|
||||||
-ms-user-select: none; /* IE10+ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.code-block-caption span.caption-number {
|
div.code-block-caption span.caption-number {
|
||||||
@ -836,7 +582,21 @@ div.code-block-caption span.caption-text {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.literal-block-wrapper {
|
div.literal-block-wrapper {
|
||||||
margin: 1em 0;
|
padding: 1em 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.literal-block-wrapper div.highlight {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.descname {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.descclassname {
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
code.xref, a code {
|
code.xref, a code {
|
||||||
@ -877,7 +637,8 @@ span.eqno {
|
|||||||
}
|
}
|
||||||
|
|
||||||
span.eqno a.headerlink {
|
span.eqno a.headerlink {
|
||||||
position: absolute;
|
position: relative;
|
||||||
|
left: 0px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
docs/html/_static/comment-bright.png
Normal file
BIN
docs/html/_static/comment-bright.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 756 B |
BIN
docs/html/_static/comment-close.png
Normal file
BIN
docs/html/_static/comment-close.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 829 B |
BIN
docs/html/_static/comment.png
Normal file
BIN
docs/html/_static/comment.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 641 B |
@ -1 +1 @@
|
|||||||
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:local("fontawesome/FontAwesome") format("truetype")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user